From d31d71e484fbe647f7bdf9067567ff5f84ddc642 Mon Sep 17 00:00:00 2001 From: Liam Monninger Date: Thu, 6 Mar 2025 13:26:52 -0800 Subject: [PATCH 01/25] doc: post-confirmations. --- protocol-units/post-confirmations/README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/protocol-units/post-confirmations/README.md b/protocol-units/post-confirmations/README.md index e69de29b..861c743a 100644 --- a/protocol-units/post-confirmations/README.md +++ b/protocol-units/post-confirmations/README.md @@ -0,0 +1,2 @@ +# Post-confirmations +Post-confirmations were originally proposed in [MIP-37](https://github.com/movementlabsxyz/MIP/pull/37) as a sub-protocol of FFS, [MIP-34](https://github.com/movementlabsxyz/MIP/pull/34). It is a protocol for committing on the "base-chain" in a side-chain system. \ No newline at end of file From 0d2a374ab69051cbadadb00f3acedf520176a229 Mon Sep 17 00:00:00 2001 From: Liam Monninger Date: Thu, 6 Mar 2025 21:25:02 -0800 Subject: [PATCH 02/25] feat: post-confirmations migration. --- protocol-units/post-confirmations/.gitmodules | 15 + .../post-confirmations/README copy.md | 15 + .../post-confirmations/client/Cargo.toml | 67 + .../post-confirmations/client/abis/MCR.json | 1 + .../client/abis/MOVEToken.json | 2983 ++++++++++++ .../client/abis/MovementStaking.json | 1 + .../src/bin/e2e/test_client_settlement.rs | 340 ++ .../client/src/eth_client.rs | 403 ++ .../post-confirmations/client/src/lib.rs | 57 + .../post-confirmations/client/src/mock.rs | 247 + .../client/src/send_eth_transaction.rs | 148 + .../post-confirmations/config/Cargo.toml | 22 + .../config/src/common/deploy.rs | 60 + .../config/src/common/eth_connection.rs | 106 + .../config/src/common/mod.rs | 6 + .../config/src/common/settlement.rs | 55 + .../config/src/common/staking.rs | 14 + .../config/src/common/testing.rs | 47 + .../config/src/common/transactions.rs | 29 + .../post-confirmations/config/src/lib.rs | 67 + .../post-confirmations/contracts/.DS_Store | Bin 0 -> 6148 bytes .../contracts/.github/workflows/test.yml | 34 + .../post-confirmations/contracts/.gitignore | 24 + .../post-confirmations/contracts/.prettierrc | 16 + .../post-confirmations/contracts/README.md | 37 + .../contracts/deployments/local.json | 15 + .../post-confirmations/contracts/foundry.toml | 17 + .../contracts/hardhat.config.ts | 31 + .../contracts/kurtosis_instructions.md | 242 + .../post-confirmations/contracts/package.json | 34 + .../contracts/remappings.txt | 15 + .../contracts/script/CoreDeployer.s.sol | 65 + .../contracts/script/DeployMCR.s.sol | 55 + .../contracts/script/DeployMCRDev.s.sol | 160 + .../contracts/script/DeployMOVETokenDev.s.sol | 29 + .../contracts/script/MCRDeployer.s.sol | 80 + .../contracts/script/MOVETokenDeployer.s.sol | 95 + .../script/MovementStakingDeployer.s.sol | 76 + .../script/MultisigMOVETokenDeployer.s.sol | 158 + .../contracts/script/StlMoveDeployer.s.sol | 74 + .../contracts/script/VerifyMCRDev.s.sol | 49 + .../contracts/script/deploy-safe.sh | 72 + .../script/helpers/Create3/CREATE3Factory.sol | 37 + .../helpers/Create3/ICREATE3Factory.sol | 28 + .../contracts/script/helpers/Helper.sol | 382 ++ .../contracts/script/helpers/config.json | 9 + .../contracts/script/helpers/configOLD.json | 24 + .../contracts/script/helpers/deployments.json | 77 + .../script/helpers/deploymentsOLD.json | 62 + .../script/helpers/safe-deployments.json | 5 + .../script/helpers/upgrade/deploymove.json | 8 + .../contracts/script/helpers/upgrade/mcr.json | 8 + .../script/helpers/upgrade/staking.json | 1 + .../script/helpers/upgrade/stlmove.json | 1 + .../contracts/script/install-deps.sh | 20 + .../contracts/script/verify-mcr.sh | 53 + .../contracts/scripts/README.md | 3 + .../contracts/scripts/deploy.ts | 154 + .../contracts/scripts/tasks/utils.ts | 44 + .../contracts/scripts/test-deployment.ts | 283 ++ .../contracts/src/proxy/ERC1967Proxy.sol | 10 + .../contracts/src/proxy/ProxyAdmin.sol | 4 + .../src/proxy/TransparentUpgradeableProxy.sol | 4 + .../contracts/src/settlement/MCR.sol | 681 +++ .../contracts/src/settlement/MCRStorage.sol | 103 + .../src/settlement/interfaces/IMCR.sol | 56 + .../settlement/settlement/BaseSettlement.sol | 36 + .../contracts/src/staking/MovementStaking.sol | 716 +++ .../src/staking/MovementStakingStorage.sol | 50 + .../src/staking/base/BaseStaking.sol | 32 + .../staking/interfaces/IMovementStaking.sol | 110 + .../contracts/src/token/MOVEToken.sol | 38 + .../contracts/src/token/MOVETokenDev.sol | 27 + .../contracts/src/token/MOVETokenV1.sol | 38 + .../contracts/src/token/base/BaseToken.sol | 36 + .../src/token/base/MintableToken.sol | 98 + .../contracts/src/token/base/WrappedToken.sol | 61 + .../src/token/base/WrappedTokenStorage.sol | 15 + .../src/token/custodian/CustodianToken.sol | 177 + .../contracts/src/token/faucet/MOVEFaucet.sol | 46 + .../src/token/locked/LockedToken.sol | 128 + .../src/token/locked/LockedTokenStorage.sol | 19 + .../contracts/src/token/stlMoveToken.sol | 69 + .../contracts/test/Deployer.t.sol | 12 + .../contracts/test/settlement/MCR.t.sol | 1084 +++++ .../test/staking/MovementStaking.t.sol | 441 ++ .../test/staking/base/BaseStaking.t.sol | 26 + .../contracts/test/token/Faucet.t.sol | 58 + .../contracts/test/token/MOVEToken.t.sol | 319 ++ .../contracts/test/token/MOVETokenV2.t.sol | 166 + .../contracts/test/token/base/BaseToken.t.sol | 29 + .../test/token/base/MintableToken.t.sol | 32 + .../test/token/base/WrappedToken.t.sol | 64 + .../test/token/custodian/CustodianToken.t.sol | 221 + .../test/token/locked/LockedToken.t.sol | 340 ++ .../contracts/test/token/stlMoveToken.t.sol | 245 + .../contracts/tsconfig.json | 12 + .../contracts/upgrader/README.md | 117 + .../contracts/upgrader/accept.sh | 42 + .../contracts/upgrader/accept.ts | 86 + .../contracts/upgrader/acceptKms.sh | 52 + .../contracts/upgrader/acceptKms.ts | 71 + .../contracts/upgrader/kmsSign.ts | 181 + .../contracts/upgrader/package-lock.json | 4057 +++++++++++++++++ .../contracts/upgrader/package.json | 26 + .../contracts/upgrader/propose.sh | 88 + .../contracts/upgrader/propose.ts | 92 + .../contracts/upgrader/safeDeploy.sh | 85 + .../contracts/upgrader/safeDeploy.ts | 92 + .../post-confirmations/contracts/yarn.lock | 3988 ++++++++++++++++ .../eth-network-params.yaml | 23 + .../post-confirmations/manager/Cargo.toml | 35 + .../post-confirmations/manager/src/lib.rs | 18 + .../post-confirmations/manager/src/manager.rs | 282 ++ .../post-confirmations/runner/Cargo.toml | 32 + .../post-confirmations/runner/src/main.rs | 41 + 116 files changed, 22271 insertions(+) create mode 100644 protocol-units/post-confirmations/.gitmodules create mode 100644 protocol-units/post-confirmations/README copy.md create mode 100644 protocol-units/post-confirmations/client/Cargo.toml create mode 100644 protocol-units/post-confirmations/client/abis/MCR.json create mode 100644 protocol-units/post-confirmations/client/abis/MOVEToken.json create mode 100644 protocol-units/post-confirmations/client/abis/MovementStaking.json create mode 100644 protocol-units/post-confirmations/client/src/bin/e2e/test_client_settlement.rs create mode 100644 protocol-units/post-confirmations/client/src/eth_client.rs create mode 100644 protocol-units/post-confirmations/client/src/lib.rs create mode 100644 protocol-units/post-confirmations/client/src/mock.rs create mode 100644 protocol-units/post-confirmations/client/src/send_eth_transaction.rs create mode 100644 protocol-units/post-confirmations/config/Cargo.toml create mode 100644 protocol-units/post-confirmations/config/src/common/deploy.rs create mode 100644 protocol-units/post-confirmations/config/src/common/eth_connection.rs create mode 100644 protocol-units/post-confirmations/config/src/common/mod.rs create mode 100644 protocol-units/post-confirmations/config/src/common/settlement.rs create mode 100644 protocol-units/post-confirmations/config/src/common/staking.rs create mode 100644 protocol-units/post-confirmations/config/src/common/testing.rs create mode 100644 protocol-units/post-confirmations/config/src/common/transactions.rs create mode 100644 protocol-units/post-confirmations/config/src/lib.rs create mode 100644 protocol-units/post-confirmations/contracts/.DS_Store create mode 100644 protocol-units/post-confirmations/contracts/.github/workflows/test.yml create mode 100644 protocol-units/post-confirmations/contracts/.gitignore create mode 100644 protocol-units/post-confirmations/contracts/.prettierrc create mode 100644 protocol-units/post-confirmations/contracts/README.md create mode 100644 protocol-units/post-confirmations/contracts/deployments/local.json create mode 100644 protocol-units/post-confirmations/contracts/foundry.toml create mode 100644 protocol-units/post-confirmations/contracts/hardhat.config.ts create mode 100644 protocol-units/post-confirmations/contracts/kurtosis_instructions.md create mode 100644 protocol-units/post-confirmations/contracts/package.json create mode 100644 protocol-units/post-confirmations/contracts/remappings.txt create mode 100644 protocol-units/post-confirmations/contracts/script/CoreDeployer.s.sol create mode 100644 protocol-units/post-confirmations/contracts/script/DeployMCR.s.sol create mode 100644 protocol-units/post-confirmations/contracts/script/DeployMCRDev.s.sol create mode 100644 protocol-units/post-confirmations/contracts/script/DeployMOVETokenDev.s.sol create mode 100644 protocol-units/post-confirmations/contracts/script/MCRDeployer.s.sol create mode 100644 protocol-units/post-confirmations/contracts/script/MOVETokenDeployer.s.sol create mode 100644 protocol-units/post-confirmations/contracts/script/MovementStakingDeployer.s.sol create mode 100644 protocol-units/post-confirmations/contracts/script/MultisigMOVETokenDeployer.s.sol create mode 100644 protocol-units/post-confirmations/contracts/script/StlMoveDeployer.s.sol create mode 100644 protocol-units/post-confirmations/contracts/script/VerifyMCRDev.s.sol create mode 100755 protocol-units/post-confirmations/contracts/script/deploy-safe.sh create mode 100644 protocol-units/post-confirmations/contracts/script/helpers/Create3/CREATE3Factory.sol create mode 100644 protocol-units/post-confirmations/contracts/script/helpers/Create3/ICREATE3Factory.sol create mode 100644 protocol-units/post-confirmations/contracts/script/helpers/Helper.sol create mode 100644 protocol-units/post-confirmations/contracts/script/helpers/config.json create mode 100644 protocol-units/post-confirmations/contracts/script/helpers/configOLD.json create mode 100644 protocol-units/post-confirmations/contracts/script/helpers/deployments.json create mode 100644 protocol-units/post-confirmations/contracts/script/helpers/deploymentsOLD.json create mode 100644 protocol-units/post-confirmations/contracts/script/helpers/safe-deployments.json create mode 100644 protocol-units/post-confirmations/contracts/script/helpers/upgrade/deploymove.json create mode 100644 protocol-units/post-confirmations/contracts/script/helpers/upgrade/mcr.json create mode 100644 protocol-units/post-confirmations/contracts/script/helpers/upgrade/staking.json create mode 100644 protocol-units/post-confirmations/contracts/script/helpers/upgrade/stlmove.json create mode 100755 protocol-units/post-confirmations/contracts/script/install-deps.sh create mode 100755 protocol-units/post-confirmations/contracts/script/verify-mcr.sh create mode 100644 protocol-units/post-confirmations/contracts/scripts/README.md create mode 100644 protocol-units/post-confirmations/contracts/scripts/deploy.ts create mode 100644 protocol-units/post-confirmations/contracts/scripts/tasks/utils.ts create mode 100644 protocol-units/post-confirmations/contracts/scripts/test-deployment.ts create mode 100644 protocol-units/post-confirmations/contracts/src/proxy/ERC1967Proxy.sol create mode 100644 protocol-units/post-confirmations/contracts/src/proxy/ProxyAdmin.sol create mode 100644 protocol-units/post-confirmations/contracts/src/proxy/TransparentUpgradeableProxy.sol create mode 100644 protocol-units/post-confirmations/contracts/src/settlement/MCR.sol create mode 100644 protocol-units/post-confirmations/contracts/src/settlement/MCRStorage.sol create mode 100644 protocol-units/post-confirmations/contracts/src/settlement/interfaces/IMCR.sol create mode 100644 protocol-units/post-confirmations/contracts/src/settlement/settlement/BaseSettlement.sol create mode 100644 protocol-units/post-confirmations/contracts/src/staking/MovementStaking.sol create mode 100644 protocol-units/post-confirmations/contracts/src/staking/MovementStakingStorage.sol create mode 100644 protocol-units/post-confirmations/contracts/src/staking/base/BaseStaking.sol create mode 100644 protocol-units/post-confirmations/contracts/src/staking/interfaces/IMovementStaking.sol create mode 100644 protocol-units/post-confirmations/contracts/src/token/MOVEToken.sol create mode 100644 protocol-units/post-confirmations/contracts/src/token/MOVETokenDev.sol create mode 100644 protocol-units/post-confirmations/contracts/src/token/MOVETokenV1.sol create mode 100644 protocol-units/post-confirmations/contracts/src/token/base/BaseToken.sol create mode 100644 protocol-units/post-confirmations/contracts/src/token/base/MintableToken.sol create mode 100644 protocol-units/post-confirmations/contracts/src/token/base/WrappedToken.sol create mode 100644 protocol-units/post-confirmations/contracts/src/token/base/WrappedTokenStorage.sol create mode 100644 protocol-units/post-confirmations/contracts/src/token/custodian/CustodianToken.sol create mode 100644 protocol-units/post-confirmations/contracts/src/token/faucet/MOVEFaucet.sol create mode 100644 protocol-units/post-confirmations/contracts/src/token/locked/LockedToken.sol create mode 100644 protocol-units/post-confirmations/contracts/src/token/locked/LockedTokenStorage.sol create mode 100644 protocol-units/post-confirmations/contracts/src/token/stlMoveToken.sol create mode 100644 protocol-units/post-confirmations/contracts/test/Deployer.t.sol create mode 100644 protocol-units/post-confirmations/contracts/test/settlement/MCR.t.sol create mode 100644 protocol-units/post-confirmations/contracts/test/staking/MovementStaking.t.sol create mode 100644 protocol-units/post-confirmations/contracts/test/staking/base/BaseStaking.t.sol create mode 100644 protocol-units/post-confirmations/contracts/test/token/Faucet.t.sol create mode 100644 protocol-units/post-confirmations/contracts/test/token/MOVEToken.t.sol create mode 100644 protocol-units/post-confirmations/contracts/test/token/MOVETokenV2.t.sol create mode 100644 protocol-units/post-confirmations/contracts/test/token/base/BaseToken.t.sol create mode 100644 protocol-units/post-confirmations/contracts/test/token/base/MintableToken.t.sol create mode 100644 protocol-units/post-confirmations/contracts/test/token/base/WrappedToken.t.sol create mode 100644 protocol-units/post-confirmations/contracts/test/token/custodian/CustodianToken.t.sol create mode 100644 protocol-units/post-confirmations/contracts/test/token/locked/LockedToken.t.sol create mode 100644 protocol-units/post-confirmations/contracts/test/token/stlMoveToken.t.sol create mode 100644 protocol-units/post-confirmations/contracts/tsconfig.json create mode 100644 protocol-units/post-confirmations/contracts/upgrader/README.md create mode 100644 protocol-units/post-confirmations/contracts/upgrader/accept.sh create mode 100644 protocol-units/post-confirmations/contracts/upgrader/accept.ts create mode 100644 protocol-units/post-confirmations/contracts/upgrader/acceptKms.sh create mode 100644 protocol-units/post-confirmations/contracts/upgrader/acceptKms.ts create mode 100644 protocol-units/post-confirmations/contracts/upgrader/kmsSign.ts create mode 100644 protocol-units/post-confirmations/contracts/upgrader/package-lock.json create mode 100644 protocol-units/post-confirmations/contracts/upgrader/package.json create mode 100644 protocol-units/post-confirmations/contracts/upgrader/propose.sh create mode 100644 protocol-units/post-confirmations/contracts/upgrader/propose.ts create mode 100644 protocol-units/post-confirmations/contracts/upgrader/safeDeploy.sh create mode 100644 protocol-units/post-confirmations/contracts/upgrader/safeDeploy.ts create mode 100644 protocol-units/post-confirmations/contracts/yarn.lock create mode 100644 protocol-units/post-confirmations/eth-network-params.yaml create mode 100644 protocol-units/post-confirmations/manager/Cargo.toml create mode 100644 protocol-units/post-confirmations/manager/src/lib.rs create mode 100644 protocol-units/post-confirmations/manager/src/manager.rs create mode 100644 protocol-units/post-confirmations/runner/Cargo.toml create mode 100644 protocol-units/post-confirmations/runner/src/main.rs diff --git a/protocol-units/post-confirmations/.gitmodules b/protocol-units/post-confirmations/.gitmodules new file mode 100644 index 00000000..aa71afef --- /dev/null +++ b/protocol-units/post-confirmations/.gitmodules @@ -0,0 +1,15 @@ +[submodule "mcr/contracts/lib/forge-std"] + path = mcr/contracts/lib/forge-std + url = https://github.com/foundry-rs/forge-std +[submodule "mcr/contracts/lib/openzeppelin-contracts"] + path = mcr/contracts/lib/openzeppelin-contracts + url = https://github.com/OpenZeppelin/openzeppelin-contracts +[submodule "mcr/contracts/lib/openzeppelin-contracts-upgradeable"] + path = mcr/contracts/lib/openzeppelin-contracts-upgradeable + url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable +[submodule "mcr/contracts/lib/safe-smart-account"] + path = mcr/contracts/lib/safe-smart-account + url = https://github.com/safe-global/safe-smart-account +[submodule "mcr/contracts/lib/solmate"] + path = mcr/contracts/lib/solmate + url = https://github.com/transmissions11/solmate diff --git a/protocol-units/post-confirmations/README copy.md b/protocol-units/post-confirmations/README copy.md new file mode 100644 index 00000000..d75c7852 --- /dev/null +++ b/protocol-units/post-confirmations/README copy.md @@ -0,0 +1,15 @@ +# MCR - Multi-Commit Rollup + +**MCR** implements a staking-based settlement where validators commit L2-blocks on Layer 1 (L1). + +Validators stake tokens to participate in block validation. They commit to L2-blocks on L1, and the contract on L1 tracks block commitments, epochs, and stake. The contracts also manage validators and custodian staking and unstaking. The contract validates if commitments have reached two-thirds supermajority stake, and rewards or slashes validators based on their actions. + +For further details see the [RFC for MCR](https://github.com/movementlabsxyz/rfcs/pull/29) and the [MIP-34](https://github.com/movementlabsxyz/MIP/blob/main/MIP/mip-34). + +## Architecture + +- [Contracts](./contracts/README.md): Includes settlement contracts for block commitments, staking contracts for validator management, token contracts for custody. +- **Manager**: Manages block commitments by batching and submitting them, interacts with clients, and processes commitment events (acceptance or rejection) for the settlement system. +- **Setup**: Prepares local environments or deploys contracts, manages configuration for local and deployment setups, and ensures contract deployment when needed. +- **Runner**: Orchestrates the setup and execution of configuration tasks, applies setup steps, and logs processes for debugging. +- **Client**: Handles interaction with the MCR system by posting block commitments, streaming commitment data, and managing Ethereum blockchain interactions. \ No newline at end of file diff --git a/protocol-units/post-confirmations/client/Cargo.toml b/protocol-units/post-confirmations/client/Cargo.toml new file mode 100644 index 00000000..f487d2de --- /dev/null +++ b/protocol-units/post-confirmations/client/Cargo.toml @@ -0,0 +1,67 @@ +[package] +name = "post-confirmationssettlement-client" +version = { workspace = true } +edition = { workspace = true } +license = { workspace = true } +authors = { workspace = true } +homepage = { workspace = true } +publish = { workspace = true } +rust-version = { workspace = true } + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +# [[bin]] +# name = "test-post-confirmationssettlement-client" +# path = "src/bin/e2e/test_client_settlement.rs" + + +[dependencies] +post-confirmationsconfig = { workspace = true } +secure-signer-loader = { workspace = true } +secure-signer = { workspace = true } +secure-signing-eth = { workspace = true } + +alloy = { workspace = true, features = [ + "node-bindings", + "rpc-types-trace", + "json-rpc", + "rpc-client", + "signers", + "signer-yubihsm", + "pubsub", + "providers", +] } +alloy-contract = { workspace = true } +alloy-network = { workspace = true } +alloy-primitives = { workspace = true } +alloy-provider = { workspace = true, features = [] } +alloy-signer = { workspace = true } +alloy-sol-types = { workspace = true } +alloy-transport = { workspace = true } +alloy-transport-ws = { workspace = true } + +anyhow = { workspace = true } +async-stream = { workspace = true } +async-trait = { workspace = true } +serde_json = { workspace = true } +movement-types = { workspace = true } +thiserror = { workspace = true } +tokio = { workspace = true } +tokio-stream = { workspace = true } +tracing = { workspace = true } +serde = { workspace = true } + +ffs-environment = { workspace = true } + +dot-movement = { workspace = true } +alloy-rpc-types = { workspace = true } +futures = { workspace = true } +tracing-subscriber = { workspace = true } + +[features] +default = ["eth"] +e2e = ["eth"] +eth = [] +mock = [] + +[lints] +workspace = true diff --git a/protocol-units/post-confirmations/client/abis/MCR.json b/protocol-units/post-confirmations/client/abis/MCR.json new file mode 100644 index 00000000..1b1c5c7c --- /dev/null +++ b/protocol-units/post-confirmations/client/abis/MCR.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"COMMITMENT_ADMIN","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"TRUSTED_ATTESTER","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"acceptGenesisCeremony","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"acceptorTerm","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchGrantCommitmentAdmin","inputs":[{"name":"accounts","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"batchGrantTrustedAttester","inputs":[{"name":"attesters","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitmentStakes","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"commitement","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"commitments","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"computeTotalStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"computeTotalStakeForAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"createSuperBlockCommitment","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct MCRStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"pure"},{"type":"function","name":"currentAcceptor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"currentAcceptorIsLive","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"forceLatestCommitment","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct MCRStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStakeForAcceptingEpoch","inputs":[{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCurrentAcceptor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStakeForAcceptingEpoch","inputs":[{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getL1BlockStartOfCurrentAcceptorTerm","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getMaxTolerableSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmedCommitment","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct MCRStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"getPresentEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakeForAcceptingEpoch","inputs":[{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakedAttestersForAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getValidatorCommitmentAtSuperBlockHeight","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct MCRStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"grantCommitmentAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantTrustedAttester","inputs":[{"name":"attester","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_stakingContract","type":"address","internalType":"contract IMovementStaking"},{"name":"_lastPostconfirmedSuperBlockHeight","type":"uint256","internalType":"uint256"},{"name":"_leadingSuperBlockTolerance","type":"uint256","internalType":"uint256"},{"name":"_epochDuration","type":"uint256","internalType":"uint256"},{"name":"_custodians","type":"address[]","internalType":"address[]"},{"name":"_acceptorTerm","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lastPostconfirmedSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"leadingSuperBlockTolerance","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"openAttestationEnabled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"postconfirmSuperBlocks","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"postconfirmedAtL1BlockHeight","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockHeight","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedAtL1BlockHeightByAcceptor","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockHeight","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedAtL1BlockTimestamp","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockTimestamp","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedBy","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"attester","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedByAcceptor","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedSuperBlocks","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedSuperBlocksVersion","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setLastPostconfirmedSuperBlockHeight","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOpenAttestationEnabled","inputs":[{"name":"enabled","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPostconfirmedCommitmentAtBlockHeight","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct MCRStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakingContract","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IMovementStaking"}],"stateMutability":"view"},{"type":"function","name":"submitBatchSuperBlockCommitment","inputs":[{"name":"superBlockCommitments","type":"tuple[]","internalType":"struct MCRStorage.SuperBlockCommitment[]","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitSuperBlockCommitment","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct MCRStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"superBlockHeightAssignedEpoch","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epoch","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"versionedPostconfirmedSuperBlocks","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SuperBlockCommitmentSubmitted","inputs":[{"name":"blockHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"stateCommitment","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"attesterStake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SuperBlockPostconfirmed","inputs":[{"name":"blockHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"stateCommitment","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"height","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AttesterAlreadyCommitted","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"UnacceptableSuperBlockCommitment","inputs":[]}],"bytecode":{"object":"0x60a0604052306080523480156012575f80fd5b50608051612cf76100395f395f8181611d5a01528181611d830152611ec40152612cf75ff3fe60806040526004361061039d575f3560e01c80638129fc1c116101de578063c691e6e411610108578063ec18c1861161009d578063f8d26aec1161006d578063f8d26aec14610beb578063f99f6e4c14610c16578063fc2788ad14610c2a578063fdafe9ca14610c60575f80fd5b8063ec18c18614610b65578063eda67fc414610b7a578063ee99205c14610bb4578063ef9ae15c14610bd2575f80fd5b8063d547741f116100d8578063d547741f14610ada578063e4566c7814610af9578063e4d991ee14610b0c578063e90d4c0614610b20575f80fd5b8063c691e6e414610a68578063cf6772ad14610a7d578063d2526fef14610a9c578063d440116d14610abb575f80fd5b8063949d7c2a1161017e578063ad3cb1cc1161014e578063ad3cb1cc146109d9578063ba26513e14610a16578063bb04bd2f14610a35578063c5de60a914610a54575f80fd5b8063949d7c2a1461095b578063a207fe2f1461097a578063a217fddf146109a5578063aa0d6fcd146109b8575f80fd5b806391807e4f116101b957806391807e4f146108e057806391d148541461091457806392a2ebf314610933578063943b79e214610947575f80fd5b80638129fc1c1461088257806381df17461461089657806385e6b8c2146108b5575f80fd5b806336568abe116102ca57806352d1902d1161025f5780636c713af81161022f5780636c713af8146108045780637aa81c2a146108185780637ac561c81461083757806380e460f014610862575f80fd5b806352d1902d14610732578063556d97c8146107465780635db916ab146107c5578063622e3616146107e5575f80fd5b8063491d04671161029a578063491d0467146106c25780634b47d955146106e15780634c17b024146107005780634f1ef2861461071f575f80fd5b806336568abe1461060157806337d7f58f146106205780633ba1800514610634578063410f314614610694575f80fd5b80630daf6181116103405780632bfd11d6116103105780632bfd11d61461051d5780632e55d0f61461058c5780632f2ff15d146105c35780633119edd4146105e2575f80fd5b80630daf6181146104a15780630e74b609146104c05780631de38fe1146104df578063248a9ca3146104fe575f80fd5b806303d3f7fd1161037b57806303d3f7fd1461042c57806303f02fc01461044f57806308c397931461046e57806308c7050f14610482575f80fd5b8063017304e1146103a157806301ffc9a7146103b7578063026583d7146103eb575b5f80fd5b3480156103ac575f80fd5b506103b5610c75565b005b3480156103c2575f80fd5b506103d66103d1366004612528565b610c80565b60405190151581526020015b60405180910390f35b3480156103f6575f80fd5b5061040a61040536600461254f565b610cb6565b60408051825181526020808401519082015291810151908201526060016103e2565b348015610437575f80fd5b5061044160015481565b6040519081526020016103e2565b34801561045a575f80fd5b506103b5610469366004612665565b610cef565b348015610479575f80fd5b50610441610e8d565b34801561048d575f80fd5b506103b561049c36600461272c565b610e9e565b3480156104ac575f80fd5b506104416104bb366004612746565b610f2b565b3480156104cb575f80fd5b506103b56104da36600461272c565b610fe4565b3480156104ea575f80fd5b506104416104f936600461275d565b61102d565b348015610509575f80fd5b50610441610518366004612746565b6110a6565b348015610528575f80fd5b5061040a610537366004612746565b60408051606080820183525f80835260208084018290529284018190526010548152600f8352838120948152938252928290208251938401835280548452600181015491840191909152600201549082015290565b348015610597575f80fd5b506004546105ab906001600160a01b031681565b6040516001600160a01b0390911681526020016103e2565b3480156105ce575f80fd5b506103b56105dd36600461275d565b6110c6565b3480156105ed575f80fd5b506103b56105fc36600461272c565b6110e8565b34801561060c575f80fd5b506103b561061b36600461275d565b6111b4565b34801561062b575f80fd5b506104416111ec565b34801561063f575f80fd5b5061067961064e36600461278b565b600f60209081525f928352604080842090915290825290208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103e2565b34801561069f575f80fd5b506103d66106ae366004612746565b60096020525f908152604090205460ff1681565b3480156106cd575f80fd5b506104416106dc3660046127ab565b611257565b3480156106ec575f80fd5b506103b56106fb3660046127c6565b611269565b34801561070b575f80fd5b506103b561071a366004612746565b6112d6565b6103b561072d3660046127f7565b61136e565b34801561073d575f80fd5b50610441611389565b348015610751575f80fd5b5061040a61076036600461275d565b604080516060810182525f8082526020820181905291810191909152505f9182526006602090815260408084206001600160a01b0393909316845291815291819020815160608101835281548152600182015493810193909352600201549082015290565b3480156107d0575f80fd5b506104415f80516020612ca283398151915281565b3480156107f0575f80fd5b506103b56107ff36600461289c565b6113a4565b34801561080f575f80fd5b50610441611419565b348015610823575f80fd5b50610441610832366004612936565b611449565b348015610842575f80fd5b50610441610851366004612746565b600a6020525f908152604090205481565b34801561086d575f80fd5b506104415f80516020612c4283398151915281565b34801561088d575f80fd5b506103b56114d2565b3480156108a1575f80fd5b506103b56108b03660046127ab565b6115dc565b3480156108c0575f80fd5b506104416108cf366004612746565b60056020525f908152604090205481565b3480156108eb575f80fd5b506105ab6108fa366004612746565b60086020525f90815260409020546001600160a01b031681565b34801561091f575f80fd5b506103d661092e36600461275d565b61160a565b34801561093e575f80fd5b506103b5611640565b348015610952575f80fd5b506104416116f5565b348015610966575f80fd5b506103b56109753660046127ab565b611706565b348015610985575f80fd5b50610441610994366004612746565b600b6020525f908152604090205481565b3480156109b0575f80fd5b506104415f81565b3480156109c3575f80fd5b506109cc611743565b6040516103e291906129b8565b3480156109e4575f80fd5b50610a09604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103e291906129ca565b348015610a21575f80fd5b50610441610a3036600461275d565b6117af565b348015610a40575f80fd5b50610441610a4f3660046129ff565b61186a565b348015610a5f575f80fd5b5061044161187d565b348015610a73575f80fd5b5061044160035481565b348015610a88575f80fd5b506103b5610a973660046127c6565b6118a7565b348015610aa7575f80fd5b506103b5610ab6366004612a2b565b6118f4565b348015610ac6575f80fd5b50610441610ad53660046127ab565b61191f565b348015610ae5575f80fd5b506103b5610af436600461275d565b611931565b348015610b04575f80fd5b5060016103d6565b348015610b17575f80fd5b5061044161194d565b348015610b2b575f80fd5b50610679610b3a36600461275d565b600660209081525f928352604080842090915290825290208054600182015460029092015490919083565b348015610b70575f80fd5b5061044160105481565b348015610b85575f80fd5b50610679610b94366004612746565b600d6020525f908152604090208054600182015460029092015490919083565b348015610bbf575f80fd5b505f546105ab906001600160a01b031681565b348015610bdd575f80fd5b50600e546103d69060ff1681565b348015610bf6575f80fd5b50610441610c05366004612746565b600c6020525f908152604090205481565b348015610c21575f80fd5b506105ab61197d565b348015610c35575f80fd5b50610441610c4436600461278b565b600760209081525f928352604080842090915290825290205481565b348015610c6b575f80fd5b5061044160025481565b610c7e33611a2e565b565b5f6001600160e01b03198216637965db0b60e01b1480610cb057506301ffc9a760e01b6001600160e01b03198316145b92915050565b60408051606080820183525f808352602080840182905292840152825190810183528581529081018490529081018290525b9392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610d335750825b90505f826001600160401b03166001148015610d4e5750303b155b905081158015610d5c575080155b15610d7a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610da457845460ff60401b1916600160401b1785555b610dac611ab4565b5f80546001600160a01b0319166001600160a01b038d1690811790915560018a905560028b9055604051631a6e609f60e31b815263d37304f890610df6908b908b90600401612a4a565b5f604051808303815f87803b158015610e0d575f80fd5b505af1158015610e1f573d5f803e3d5ffd5b50505050610e2c33611706565b610e35336115dc565b60038690558315610e8057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b5f610e996104bb611419565b905090565b610eb55f80516020612c428339815191523361160a565b610f1f5760405162461bcd60e51b815260206004820152603060248201527f464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d4960448201526f544d454e545f41444d494e5f4f4e4c5960801b60648201526084015b60405180910390fd5b610f28816110e8565b50565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa158015610f70573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f979190810190612a62565b90505f805b8251811015610fdc57610fc885848381518110610fbb57610fbb612af1565b602002602001015161102d565b610fd29083612b19565b9150600101610f9c565b509392505050565b600e5460ff168061100757506110075f80516020612ca28339815191523361160a565b6110235760405162461bcd60e51b8152600401610f1690612b2c565b610f283382611ac6565b5f8054604051630ce52af560e01b8152306004820152602481018590526001600160a01b03848116604483015290911690630ce52af590606401602060405180830381865afa158015611082573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce89190612b6e565b5f9081525f80516020612c82833981519152602052604090206001015490565b6110cf826110a6565b6110d881611c2b565b6110e28383611c35565b50505050565b6110ff5f80516020612c428339815191523361160a565b61117f5760405162461bcd60e51b8152602060048201526044602482018190527f5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e908201527f545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f6064820152634f4e4c5960e01b608482015260a401610f16565b6010545f908152600f602090815260408083208451845282529182902083518155908301516001820155910151600290910155565b6001600160a01b03811633146111dd5760405163334bd91960e11b815260040160405180910390fd5b6111e78282611cd6565b505050565b5f805460405163d980b40d60e01b81523060048201526001600160a01b039091169063d980b40d906024015b602060405180830381865afa158015611233573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e999190612b6e565b5f610cb0611263611419565b836117af565b6112735f3361160a565b61128f5760405162461bcd60e51b8152600401610f1690612b85565b5f5b81518110156112d2576112ca5f80516020612c428339815191528383815181106112bd576112bd612af1565b60200260200101516110c6565b600101611291565b5050565b6112ed5f80516020612c428339815191523361160a565b6113695760405162461bcd60e51b815260206004820152604160248201527f5345545f4c4153545f504f5354434f4e4649524d45445f5355504552424c4f4360448201527f4b5f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c6064820152605960f81b608482015260a401610f16565b600255565b611376611d4f565b61137f82611df3565b6112d28282611dfd565b5f611392611eb9565b505f80516020612c6283398151915290565b600e5460ff16806113c757506113c75f80516020612ca28339815191523361160a565b6113e35760405162461bcd60e51b8152600401610f1690612b2c565b5f5b81518110156112d2576114113383838151811061140457611404612af1565b6020026020010151611ac6565b6001016113e5565b5f80546040516322fceb7560e01b81523060048201526001600160a01b03909116906322fceb7590602401611218565b5f80546040516324f7ee1760e21b8152306004820152602481018690526001600160a01b0385811660448301528481166064830152909116906393dfb85c90608401602060405180830381865afa1580156114a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ca9190612b6e565b949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156115165750825b90505f826001600160401b031660011480156115315750303b155b90508115801561153f575080155b1561155d5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561158757845460ff60401b1916600160401b1785555b61158f611f02565b83156115d557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f80516020612c428339815191526115f381611c2b565b6112d25f80516020612ca2833981519152836110c6565b5f9182525f80516020612c82833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61164a5f3361160a565b6116a45760405162461bcd60e51b815260206004820152602560248201527f4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e6044820152645f4f4e4c5960d81b6064820152608401610f16565b5f8054604080516392a2ebf360e01b815290516001600160a01b03909216926392a2ebf39260048084019382900301818387803b1580156116e3575f80fd5b505af11580156110e2573d5f803e3d5ffd5b5f600154600254610e999190612b19565b6117105f3361160a565b61172c5760405162461bcd60e51b8152600401610f1690612b85565b610f285f80516020612c42833981519152826110c6565b5f54604051634234a47960e01b81523060048201526060916001600160a01b031690634234a479906024015f60405180830381865afa158015611788573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e999190810190612a62565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa1580156117f4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261181b9190810190612a62565b90505f805b82518110156118615761184d8684838151811061183f5761183f612af1565b602002602001015187611449565b6118579083612b19565b9150600101611820565b50949350505050565b5f610ce8611876611419565b8484611449565b5f804390505f6001600354836118939190612bdb565b61189d9084612bee565b610ce89190612bee565b5f80516020612c428339815191526118be81611c2b565b5f5b82518110156111e7576118ec5f80516020612ca28339815191528483815181106112bd576112bd612af1565b6001016118c0565b5f80516020612c4283398151915261190b81611c2b565b50600e805460ff1916911515919091179055565b5f610cb061192b611419565b8361102d565b61193a826110a6565b61194381611c2b565b6110e28383611cd6565b5f8054604051639b7cadc760e01b81523060048201526001600160a01b0390911690639b7cadc790602401611218565b5f8061198761187d565b5f8054604051634234a47960e01b81523060048201529240935090916001600160a01b0390911690634234a479906024015f60405180830381865afa1580156119d2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119f99190810190612a62565b80519091505f90611a0a9084612bdb565b9050818181518110611a1e57611a1e612af1565b6020026020010151935050505090565b611a3661197d565b6001600160a01b0316816001600160a01b031614611a965760405162461bcd60e51b815260206004820152601c60248201527f4e6f744163636570746f72416e644163636570746f7249734c697665000000006044820152606401610f16565b611aad6002546001611aa89190612b19565b611f12565b611a965750565b611abc612090565b610f285f33611c35565b80515f9081526006602090815260408083206001600160a01b038616845290915290205415611b0857604051630ae09ad960e41b815260040160405180910390fd5b8051600154600254611b1a9190612b19565b1015611b3957604051630ae09ad960e41b815260040160405180910390fd5b80515f908152600560205260408120549003611b6857611b576111ec565b81515f908152600560205260409020555b80515f9081526006602090815260408083206001600160a01b0386168452825280832084518155918401516001830155830151600290910155611baa83611257565b82515f908152600760209081526040808320828701518452909152812080549293508392909190611bdc908490612b19565b9091555050604080830151602080850151835190815290810184905290917fa8445a6b8a16633ad62fbc0954848ec55c4d5323d90b9745dbda4121ec5ce12b91015b60405180910390a2505050565b610f2881336120d9565b5f5f80516020612c82833981519152611c4e848461160a565b611ccd575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611c833390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610cb0565b5f915050610cb0565b5f5f80516020612c82833981519152611cef848461160a565b15611ccd575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610cb0565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611dd557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611dc95f80516020612c62833981519152546001600160a01b031690565b6001600160a01b031614155b15610c7e5760405163703e46dd60e11b815260040160405180910390fd5b5f6112d281611c2b565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e57575060408051601f3d908101601f19168201909252611e5491810190612b6e565b60015b611e7f57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610f16565b5f80516020612c628339815191528114611eaf57604051632a87526960e21b815260048101829052602401610f16565b6111e78383612112565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c7e5760405163703e46dd60e11b815260040160405180910390fd5b611f0a612090565b610c7e611ab4565b5f81815260056020819052604082205490829081611f31600187612bee565b81526020019081526020015f2054905080821015611f5a575f8481526005602052604090208190555b8091505b81611f67611419565b1015611f9257611f7633611257565b5f03611f8557505f9392505050565b611f8d612167565b611f5e565b611f9b33611257565b5f03611faa57505f9392505050565b5f6003611fb684610f2b565b611fc1906002612c01565b611fcb9190612c18565b90505f611fd6611743565b90505f5b8151811015612084575f828281518110611ff657611ff6612af1565b6020908102919091018101515f8a81526006835260408082206001600160a01b0384168352845280822081516060810183528154808252600183015482880190815260029093015482850152845260078652828420915184529452902054909250858111156120795761206982336121c4565b5060019998505050505050505050565b505050600101611fda565b505f9695505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610c7e57604051631afcd79f60e31b815260040160405180910390fd5b6120e3828261160a565b6112d25760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610f16565b61211b826122e1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561215f576111e78282612344565b6112d26123b6565b5f805460408051632a21edc760e21b815290516001600160a01b039092169263a887b71c9260048084019382900301818387803b1580156121a6575f80fd5b505af11580156121b8573d5f803e3d5ffd5b50505050610c7e6123d5565b5f6121cd611419565b83515f9081526005602052604090205490915081146121ff57604051631f2d18b160e31b815260040160405180910390fd5b825161220d90600190612bee565b6002541461222e57604051631f2d18b160e31b815260040160405180910390fd5b6010545f908152600f602090815260408083208651845282528083208651808255878401805160018401558884018051600294850155928290559085526008845282852080546001600160a01b0319166001600160a01b03891617905587518552600a845282852043905587518552600b84529382902042905551925186518251918252928101929092527fc28fbeddd1d6ba9496d1b91564f9aa2bc4dffed78aae631bbc6ef67296ad3c3c9101611c1e565b806001600160a01b03163b5f0361231657604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610f16565b5f80516020612c6283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516123609190612c2b565b5f60405180830381855af49150503d805f8114612398576040519150601f19603f3d011682016040523d82523d5f602084013e61239d565b606091505b50915091506123ad8583836124a3565b95945050505050565b3415610c7e5760405163b398979f60e01b815260040160405180910390fd5b5f8054604051634234a47960e01b81523060048201526001600160a01b0390911690634234a479906024015f60405180830381865afa15801561241a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124419190810190612a62565b90505f81516001436124539190612bee565b61245e919040612bdb565b905081818151811061247257612472612af1565b602002602001015160045f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b6060826124b8576124b3826124ff565b610ce8565b81511580156124cf57506001600160a01b0384163b155b156124f857604051639996b31560e01b81526001600160a01b0385166004820152602401610f16565b5080610ce8565b80511561250f5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f60208284031215612538575f80fd5b81356001600160e01b031981168114610ce8575f80fd5b5f805f60608486031215612561575f80fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114610f28575f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156125c8576125c861258c565b604052919050565b5f6001600160401b038211156125e8576125e861258c565b5060051b60200190565b5f82601f830112612601575f80fd5b813561261461260f826125d0565b6125a0565b8082825260208201915060208360051b860101925085831115612635575f80fd5b602085015b8381101561265b57803561264d81612578565b83526020928301920161263a565b5095945050505050565b5f805f805f8060c0878903121561267a575f80fd5b863561268581612578565b955060208701359450604087013593506060870135925060808701356001600160401b038111156126b4575f80fd5b6126c089828a016125f2565b9699959850939692959460a09093013593505050565b5f606082840312156126e6575f80fd5b604051606081016001600160401b03811182821017156127085761270861258c565b60409081528335825260208085013590830152928301359281019290925250919050565b5f6060828403121561273c575f80fd5b610ce883836126d6565b5f60208284031215612756575f80fd5b5035919050565b5f806040838503121561276e575f80fd5b82359150602083013561278081612578565b809150509250929050565b5f806040838503121561279c575f80fd5b50508035926020909101359150565b5f602082840312156127bb575f80fd5b8135610ce881612578565b5f602082840312156127d6575f80fd5b81356001600160401b038111156127eb575f80fd5b6114ca848285016125f2565b5f8060408385031215612808575f80fd5b823561281381612578565b915060208301356001600160401b0381111561282d575f80fd5b8301601f8101851361283d575f80fd5b80356001600160401b038111156128565761285661258c565b612869601f8201601f19166020016125a0565b81815286602083850101111561287d575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f602082840312156128ac575f80fd5b81356001600160401b038111156128c1575f80fd5b8201601f810184136128d1575f80fd5b80356128df61260f826125d0565b80828252602082019150602060608402850101925086831115612900575f80fd5b6020840193505b8284101561292c5761291987856126d6565b8252602082019150606084019350612907565b9695505050505050565b5f805f60608486031215612948575f80fd5b83359250602084013561295a81612578565b9150604084013561296a81612578565b809150509250925092565b5f8151808452602084019350602083015f5b828110156129ae5781516001600160a01b0316865260209586019590910190600101612987565b5093949350505050565b602081525f610ce86020830184612975565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215612a10575f80fd5b8235612a1b81612578565b9150602083013561278081612578565b5f60208284031215612a3b575f80fd5b81358015158114610ce8575f80fd5b828152604060208201525f6114ca6040830184612975565b5f60208284031215612a72575f80fd5b81516001600160401b03811115612a87575f80fd5b8201601f81018413612a97575f80fd5b8051612aa561260f826125d0565b8082825260208201915060208360051b850101925086831115612ac6575f80fd5b6020840193505b8284101561292c578351612ae081612578565b825260209384019390910190612acd565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610cb057610cb0612b05565b60208082526022908201527f554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d45604082015261139560f21b606082015260800190565b5f60208284031215612b7e575f80fd5b5051919050565b60208082526022908201527f4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e6040820152614c5960f01b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b5f82612be957612be9612bc7565b500690565b81810381811115610cb057610cb0612b05565b8082028115828204841417610cb057610cb0612b05565b5f82612c2657612c26612bc7565b500490565b5f82518060208501845e5f92019182525091905056fedb2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18a26469706673582212209bfbcb758a3624510a25f97aa3d92fc8a1033ce9c0ddd2d520646535e1e2afba64736f6c634300081a0033","sourceMap":"577:22802:88:-:0;;;1171:4:25;1128:48;;577:22802:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061039d575f3560e01c80638129fc1c116101de578063c691e6e411610108578063ec18c1861161009d578063f8d26aec1161006d578063f8d26aec14610beb578063f99f6e4c14610c16578063fc2788ad14610c2a578063fdafe9ca14610c60575f80fd5b8063ec18c18614610b65578063eda67fc414610b7a578063ee99205c14610bb4578063ef9ae15c14610bd2575f80fd5b8063d547741f116100d8578063d547741f14610ada578063e4566c7814610af9578063e4d991ee14610b0c578063e90d4c0614610b20575f80fd5b8063c691e6e414610a68578063cf6772ad14610a7d578063d2526fef14610a9c578063d440116d14610abb575f80fd5b8063949d7c2a1161017e578063ad3cb1cc1161014e578063ad3cb1cc146109d9578063ba26513e14610a16578063bb04bd2f14610a35578063c5de60a914610a54575f80fd5b8063949d7c2a1461095b578063a207fe2f1461097a578063a217fddf146109a5578063aa0d6fcd146109b8575f80fd5b806391807e4f116101b957806391807e4f146108e057806391d148541461091457806392a2ebf314610933578063943b79e214610947575f80fd5b80638129fc1c1461088257806381df17461461089657806385e6b8c2146108b5575f80fd5b806336568abe116102ca57806352d1902d1161025f5780636c713af81161022f5780636c713af8146108045780637aa81c2a146108185780637ac561c81461083757806380e460f014610862575f80fd5b806352d1902d14610732578063556d97c8146107465780635db916ab146107c5578063622e3616146107e5575f80fd5b8063491d04671161029a578063491d0467146106c25780634b47d955146106e15780634c17b024146107005780634f1ef2861461071f575f80fd5b806336568abe1461060157806337d7f58f146106205780633ba1800514610634578063410f314614610694575f80fd5b80630daf6181116103405780632bfd11d6116103105780632bfd11d61461051d5780632e55d0f61461058c5780632f2ff15d146105c35780633119edd4146105e2575f80fd5b80630daf6181146104a15780630e74b609146104c05780631de38fe1146104df578063248a9ca3146104fe575f80fd5b806303d3f7fd1161037b57806303d3f7fd1461042c57806303f02fc01461044f57806308c397931461046e57806308c7050f14610482575f80fd5b8063017304e1146103a157806301ffc9a7146103b7578063026583d7146103eb575b5f80fd5b3480156103ac575f80fd5b506103b5610c75565b005b3480156103c2575f80fd5b506103d66103d1366004612528565b610c80565b60405190151581526020015b60405180910390f35b3480156103f6575f80fd5b5061040a61040536600461254f565b610cb6565b60408051825181526020808401519082015291810151908201526060016103e2565b348015610437575f80fd5b5061044160015481565b6040519081526020016103e2565b34801561045a575f80fd5b506103b5610469366004612665565b610cef565b348015610479575f80fd5b50610441610e8d565b34801561048d575f80fd5b506103b561049c36600461272c565b610e9e565b3480156104ac575f80fd5b506104416104bb366004612746565b610f2b565b3480156104cb575f80fd5b506103b56104da36600461272c565b610fe4565b3480156104ea575f80fd5b506104416104f936600461275d565b61102d565b348015610509575f80fd5b50610441610518366004612746565b6110a6565b348015610528575f80fd5b5061040a610537366004612746565b60408051606080820183525f80835260208084018290529284018190526010548152600f8352838120948152938252928290208251938401835280548452600181015491840191909152600201549082015290565b348015610597575f80fd5b506004546105ab906001600160a01b031681565b6040516001600160a01b0390911681526020016103e2565b3480156105ce575f80fd5b506103b56105dd36600461275d565b6110c6565b3480156105ed575f80fd5b506103b56105fc36600461272c565b6110e8565b34801561060c575f80fd5b506103b561061b36600461275d565b6111b4565b34801561062b575f80fd5b506104416111ec565b34801561063f575f80fd5b5061067961064e36600461278b565b600f60209081525f928352604080842090915290825290208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103e2565b34801561069f575f80fd5b506103d66106ae366004612746565b60096020525f908152604090205460ff1681565b3480156106cd575f80fd5b506104416106dc3660046127ab565b611257565b3480156106ec575f80fd5b506103b56106fb3660046127c6565b611269565b34801561070b575f80fd5b506103b561071a366004612746565b6112d6565b6103b561072d3660046127f7565b61136e565b34801561073d575f80fd5b50610441611389565b348015610751575f80fd5b5061040a61076036600461275d565b604080516060810182525f8082526020820181905291810191909152505f9182526006602090815260408084206001600160a01b0393909316845291815291819020815160608101835281548152600182015493810193909352600201549082015290565b3480156107d0575f80fd5b506104415f80516020612ca283398151915281565b3480156107f0575f80fd5b506103b56107ff36600461289c565b6113a4565b34801561080f575f80fd5b50610441611419565b348015610823575f80fd5b50610441610832366004612936565b611449565b348015610842575f80fd5b50610441610851366004612746565b600a6020525f908152604090205481565b34801561086d575f80fd5b506104415f80516020612c4283398151915281565b34801561088d575f80fd5b506103b56114d2565b3480156108a1575f80fd5b506103b56108b03660046127ab565b6115dc565b3480156108c0575f80fd5b506104416108cf366004612746565b60056020525f908152604090205481565b3480156108eb575f80fd5b506105ab6108fa366004612746565b60086020525f90815260409020546001600160a01b031681565b34801561091f575f80fd5b506103d661092e36600461275d565b61160a565b34801561093e575f80fd5b506103b5611640565b348015610952575f80fd5b506104416116f5565b348015610966575f80fd5b506103b56109753660046127ab565b611706565b348015610985575f80fd5b50610441610994366004612746565b600b6020525f908152604090205481565b3480156109b0575f80fd5b506104415f81565b3480156109c3575f80fd5b506109cc611743565b6040516103e291906129b8565b3480156109e4575f80fd5b50610a09604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103e291906129ca565b348015610a21575f80fd5b50610441610a3036600461275d565b6117af565b348015610a40575f80fd5b50610441610a4f3660046129ff565b61186a565b348015610a5f575f80fd5b5061044161187d565b348015610a73575f80fd5b5061044160035481565b348015610a88575f80fd5b506103b5610a973660046127c6565b6118a7565b348015610aa7575f80fd5b506103b5610ab6366004612a2b565b6118f4565b348015610ac6575f80fd5b50610441610ad53660046127ab565b61191f565b348015610ae5575f80fd5b506103b5610af436600461275d565b611931565b348015610b04575f80fd5b5060016103d6565b348015610b17575f80fd5b5061044161194d565b348015610b2b575f80fd5b50610679610b3a36600461275d565b600660209081525f928352604080842090915290825290208054600182015460029092015490919083565b348015610b70575f80fd5b5061044160105481565b348015610b85575f80fd5b50610679610b94366004612746565b600d6020525f908152604090208054600182015460029092015490919083565b348015610bbf575f80fd5b505f546105ab906001600160a01b031681565b348015610bdd575f80fd5b50600e546103d69060ff1681565b348015610bf6575f80fd5b50610441610c05366004612746565b600c6020525f908152604090205481565b348015610c21575f80fd5b506105ab61197d565b348015610c35575f80fd5b50610441610c4436600461278b565b600760209081525f928352604080842090915290825290205481565b348015610c6b575f80fd5b5061044160025481565b610c7e33611a2e565b565b5f6001600160e01b03198216637965db0b60e01b1480610cb057506301ffc9a760e01b6001600160e01b03198316145b92915050565b60408051606080820183525f808352602080840182905292840152825190810183528581529081018490529081018290525b9392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610d335750825b90505f826001600160401b03166001148015610d4e5750303b155b905081158015610d5c575080155b15610d7a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610da457845460ff60401b1916600160401b1785555b610dac611ab4565b5f80546001600160a01b0319166001600160a01b038d1690811790915560018a905560028b9055604051631a6e609f60e31b815263d37304f890610df6908b908b90600401612a4a565b5f604051808303815f87803b158015610e0d575f80fd5b505af1158015610e1f573d5f803e3d5ffd5b50505050610e2c33611706565b610e35336115dc565b60038690558315610e8057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b5f610e996104bb611419565b905090565b610eb55f80516020612c428339815191523361160a565b610f1f5760405162461bcd60e51b815260206004820152603060248201527f464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d4960448201526f544d454e545f41444d494e5f4f4e4c5960801b60648201526084015b60405180910390fd5b610f28816110e8565b50565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa158015610f70573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f979190810190612a62565b90505f805b8251811015610fdc57610fc885848381518110610fbb57610fbb612af1565b602002602001015161102d565b610fd29083612b19565b9150600101610f9c565b509392505050565b600e5460ff168061100757506110075f80516020612ca28339815191523361160a565b6110235760405162461bcd60e51b8152600401610f1690612b2c565b610f283382611ac6565b5f8054604051630ce52af560e01b8152306004820152602481018590526001600160a01b03848116604483015290911690630ce52af590606401602060405180830381865afa158015611082573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce89190612b6e565b5f9081525f80516020612c82833981519152602052604090206001015490565b6110cf826110a6565b6110d881611c2b565b6110e28383611c35565b50505050565b6110ff5f80516020612c428339815191523361160a565b61117f5760405162461bcd60e51b8152602060048201526044602482018190527f5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e908201527f545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f6064820152634f4e4c5960e01b608482015260a401610f16565b6010545f908152600f602090815260408083208451845282529182902083518155908301516001820155910151600290910155565b6001600160a01b03811633146111dd5760405163334bd91960e11b815260040160405180910390fd5b6111e78282611cd6565b505050565b5f805460405163d980b40d60e01b81523060048201526001600160a01b039091169063d980b40d906024015b602060405180830381865afa158015611233573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e999190612b6e565b5f610cb0611263611419565b836117af565b6112735f3361160a565b61128f5760405162461bcd60e51b8152600401610f1690612b85565b5f5b81518110156112d2576112ca5f80516020612c428339815191528383815181106112bd576112bd612af1565b60200260200101516110c6565b600101611291565b5050565b6112ed5f80516020612c428339815191523361160a565b6113695760405162461bcd60e51b815260206004820152604160248201527f5345545f4c4153545f504f5354434f4e4649524d45445f5355504552424c4f4360448201527f4b5f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c6064820152605960f81b608482015260a401610f16565b600255565b611376611d4f565b61137f82611df3565b6112d28282611dfd565b5f611392611eb9565b505f80516020612c6283398151915290565b600e5460ff16806113c757506113c75f80516020612ca28339815191523361160a565b6113e35760405162461bcd60e51b8152600401610f1690612b2c565b5f5b81518110156112d2576114113383838151811061140457611404612af1565b6020026020010151611ac6565b6001016113e5565b5f80546040516322fceb7560e01b81523060048201526001600160a01b03909116906322fceb7590602401611218565b5f80546040516324f7ee1760e21b8152306004820152602481018690526001600160a01b0385811660448301528481166064830152909116906393dfb85c90608401602060405180830381865afa1580156114a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ca9190612b6e565b949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156115165750825b90505f826001600160401b031660011480156115315750303b155b90508115801561153f575080155b1561155d5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561158757845460ff60401b1916600160401b1785555b61158f611f02565b83156115d557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f80516020612c428339815191526115f381611c2b565b6112d25f80516020612ca2833981519152836110c6565b5f9182525f80516020612c82833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61164a5f3361160a565b6116a45760405162461bcd60e51b815260206004820152602560248201527f4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e6044820152645f4f4e4c5960d81b6064820152608401610f16565b5f8054604080516392a2ebf360e01b815290516001600160a01b03909216926392a2ebf39260048084019382900301818387803b1580156116e3575f80fd5b505af11580156110e2573d5f803e3d5ffd5b5f600154600254610e999190612b19565b6117105f3361160a565b61172c5760405162461bcd60e51b8152600401610f1690612b85565b610f285f80516020612c42833981519152826110c6565b5f54604051634234a47960e01b81523060048201526060916001600160a01b031690634234a479906024015f60405180830381865afa158015611788573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e999190810190612a62565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa1580156117f4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261181b9190810190612a62565b90505f805b82518110156118615761184d8684838151811061183f5761183f612af1565b602002602001015187611449565b6118579083612b19565b9150600101611820565b50949350505050565b5f610ce8611876611419565b8484611449565b5f804390505f6001600354836118939190612bdb565b61189d9084612bee565b610ce89190612bee565b5f80516020612c428339815191526118be81611c2b565b5f5b82518110156111e7576118ec5f80516020612ca28339815191528483815181106112bd576112bd612af1565b6001016118c0565b5f80516020612c4283398151915261190b81611c2b565b50600e805460ff1916911515919091179055565b5f610cb061192b611419565b8361102d565b61193a826110a6565b61194381611c2b565b6110e28383611cd6565b5f8054604051639b7cadc760e01b81523060048201526001600160a01b0390911690639b7cadc790602401611218565b5f8061198761187d565b5f8054604051634234a47960e01b81523060048201529240935090916001600160a01b0390911690634234a479906024015f60405180830381865afa1580156119d2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119f99190810190612a62565b80519091505f90611a0a9084612bdb565b9050818181518110611a1e57611a1e612af1565b6020026020010151935050505090565b611a3661197d565b6001600160a01b0316816001600160a01b031614611a965760405162461bcd60e51b815260206004820152601c60248201527f4e6f744163636570746f72416e644163636570746f7249734c697665000000006044820152606401610f16565b611aad6002546001611aa89190612b19565b611f12565b611a965750565b611abc612090565b610f285f33611c35565b80515f9081526006602090815260408083206001600160a01b038616845290915290205415611b0857604051630ae09ad960e41b815260040160405180910390fd5b8051600154600254611b1a9190612b19565b1015611b3957604051630ae09ad960e41b815260040160405180910390fd5b80515f908152600560205260408120549003611b6857611b576111ec565b81515f908152600560205260409020555b80515f9081526006602090815260408083206001600160a01b0386168452825280832084518155918401516001830155830151600290910155611baa83611257565b82515f908152600760209081526040808320828701518452909152812080549293508392909190611bdc908490612b19565b9091555050604080830151602080850151835190815290810184905290917fa8445a6b8a16633ad62fbc0954848ec55c4d5323d90b9745dbda4121ec5ce12b91015b60405180910390a2505050565b610f2881336120d9565b5f5f80516020612c82833981519152611c4e848461160a565b611ccd575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611c833390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610cb0565b5f915050610cb0565b5f5f80516020612c82833981519152611cef848461160a565b15611ccd575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610cb0565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611dd557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611dc95f80516020612c62833981519152546001600160a01b031690565b6001600160a01b031614155b15610c7e5760405163703e46dd60e11b815260040160405180910390fd5b5f6112d281611c2b565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e57575060408051601f3d908101601f19168201909252611e5491810190612b6e565b60015b611e7f57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610f16565b5f80516020612c628339815191528114611eaf57604051632a87526960e21b815260048101829052602401610f16565b6111e78383612112565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c7e5760405163703e46dd60e11b815260040160405180910390fd5b611f0a612090565b610c7e611ab4565b5f81815260056020819052604082205490829081611f31600187612bee565b81526020019081526020015f2054905080821015611f5a575f8481526005602052604090208190555b8091505b81611f67611419565b1015611f9257611f7633611257565b5f03611f8557505f9392505050565b611f8d612167565b611f5e565b611f9b33611257565b5f03611faa57505f9392505050565b5f6003611fb684610f2b565b611fc1906002612c01565b611fcb9190612c18565b90505f611fd6611743565b90505f5b8151811015612084575f828281518110611ff657611ff6612af1565b6020908102919091018101515f8a81526006835260408082206001600160a01b0384168352845280822081516060810183528154808252600183015482880190815260029093015482850152845260078652828420915184529452902054909250858111156120795761206982336121c4565b5060019998505050505050505050565b505050600101611fda565b505f9695505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610c7e57604051631afcd79f60e31b815260040160405180910390fd5b6120e3828261160a565b6112d25760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610f16565b61211b826122e1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561215f576111e78282612344565b6112d26123b6565b5f805460408051632a21edc760e21b815290516001600160a01b039092169263a887b71c9260048084019382900301818387803b1580156121a6575f80fd5b505af11580156121b8573d5f803e3d5ffd5b50505050610c7e6123d5565b5f6121cd611419565b83515f9081526005602052604090205490915081146121ff57604051631f2d18b160e31b815260040160405180910390fd5b825161220d90600190612bee565b6002541461222e57604051631f2d18b160e31b815260040160405180910390fd5b6010545f908152600f602090815260408083208651845282528083208651808255878401805160018401558884018051600294850155928290559085526008845282852080546001600160a01b0319166001600160a01b03891617905587518552600a845282852043905587518552600b84529382902042905551925186518251918252928101929092527fc28fbeddd1d6ba9496d1b91564f9aa2bc4dffed78aae631bbc6ef67296ad3c3c9101611c1e565b806001600160a01b03163b5f0361231657604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610f16565b5f80516020612c6283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516123609190612c2b565b5f60405180830381855af49150503d805f8114612398576040519150601f19603f3d011682016040523d82523d5f602084013e61239d565b606091505b50915091506123ad8583836124a3565b95945050505050565b3415610c7e5760405163b398979f60e01b815260040160405180910390fd5b5f8054604051634234a47960e01b81523060048201526001600160a01b0390911690634234a479906024015f60405180830381865afa15801561241a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124419190810190612a62565b90505f81516001436124539190612bee565b61245e919040612bdb565b905081818151811061247257612472612af1565b602002602001015160045f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b6060826124b8576124b3826124ff565b610ce8565b81511580156124cf57506001600160a01b0384163b155b156124f857604051639996b31560e01b81526001600160a01b0385166004820152602401610f16565b5080610ce8565b80511561250f5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f60208284031215612538575f80fd5b81356001600160e01b031981168114610ce8575f80fd5b5f805f60608486031215612561575f80fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114610f28575f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156125c8576125c861258c565b604052919050565b5f6001600160401b038211156125e8576125e861258c565b5060051b60200190565b5f82601f830112612601575f80fd5b813561261461260f826125d0565b6125a0565b8082825260208201915060208360051b860101925085831115612635575f80fd5b602085015b8381101561265b57803561264d81612578565b83526020928301920161263a565b5095945050505050565b5f805f805f8060c0878903121561267a575f80fd5b863561268581612578565b955060208701359450604087013593506060870135925060808701356001600160401b038111156126b4575f80fd5b6126c089828a016125f2565b9699959850939692959460a09093013593505050565b5f606082840312156126e6575f80fd5b604051606081016001600160401b03811182821017156127085761270861258c565b60409081528335825260208085013590830152928301359281019290925250919050565b5f6060828403121561273c575f80fd5b610ce883836126d6565b5f60208284031215612756575f80fd5b5035919050565b5f806040838503121561276e575f80fd5b82359150602083013561278081612578565b809150509250929050565b5f806040838503121561279c575f80fd5b50508035926020909101359150565b5f602082840312156127bb575f80fd5b8135610ce881612578565b5f602082840312156127d6575f80fd5b81356001600160401b038111156127eb575f80fd5b6114ca848285016125f2565b5f8060408385031215612808575f80fd5b823561281381612578565b915060208301356001600160401b0381111561282d575f80fd5b8301601f8101851361283d575f80fd5b80356001600160401b038111156128565761285661258c565b612869601f8201601f19166020016125a0565b81815286602083850101111561287d575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f602082840312156128ac575f80fd5b81356001600160401b038111156128c1575f80fd5b8201601f810184136128d1575f80fd5b80356128df61260f826125d0565b80828252602082019150602060608402850101925086831115612900575f80fd5b6020840193505b8284101561292c5761291987856126d6565b8252602082019150606084019350612907565b9695505050505050565b5f805f60608486031215612948575f80fd5b83359250602084013561295a81612578565b9150604084013561296a81612578565b809150509250925092565b5f8151808452602084019350602083015f5b828110156129ae5781516001600160a01b0316865260209586019590910190600101612987565b5093949350505050565b602081525f610ce86020830184612975565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215612a10575f80fd5b8235612a1b81612578565b9150602083013561278081612578565b5f60208284031215612a3b575f80fd5b81358015158114610ce8575f80fd5b828152604060208201525f6114ca6040830184612975565b5f60208284031215612a72575f80fd5b81516001600160401b03811115612a87575f80fd5b8201601f81018413612a97575f80fd5b8051612aa561260f826125d0565b8082825260208201915060208360051b850101925086831115612ac6575f80fd5b6020840193505b8284101561292c578351612ae081612578565b825260209384019390910190612acd565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610cb057610cb0612b05565b60208082526022908201527f554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d45604082015261139560f21b606082015260800190565b5f60208284031215612b7e575f80fd5b5051919050565b60208082526022908201527f4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e6040820152614c5960f01b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b5f82612be957612be9612bc7565b500690565b81810381811115610cb057610cb0612b05565b8082028115828204841417610cb057610cb0612b05565b5f82612c2657612c26612bc7565b500490565b5f82518060208501845e5f92019182525091905056fedb2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18a26469706673582212209bfbcb758a3624510a25f97aa3d92fc8a1033ce9c0ddd2d520646535e1e2afba64736f6c634300081a0033","sourceMap":"577:22802:88:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11196:104;;;;;;;;;;;;;:::i;:::-;;3443:202:23;;;;;;;;;;-1:-1:-1;3443:202:23;;;;;:::i;:::-;;:::i;:::-;;;470:14:120;;463:22;445:41;;433:2;418:18;3443:202:23;;;;;;;;2202:242:88;;;;;;;;;;-1:-1:-1;2202:242:88;;;;;:::i;:::-;;:::i;:::-;;;;1210:13:120;;1192:32;;1280:4;1268:17;;;1262:24;1240:20;;;1233:54;1331:17;;;1325:24;1303:20;;;1296:54;1180:2;1165:18;2202:242:88;968:388:120;1302:41:89;;;;;;;;;;;;;;;;;;;1507:25:120;;;1495:2;1480:18;1302:41:89;1361:177:120;875:718:88;;;;;;;;;;-1:-1:-1;875:718:88;;;;;:::i;:::-;;:::i;6032:166::-;;;;;;;;;;;;;:::i;7675:308::-;;;;;;;;;;-1:-1:-1;7675:308:88;;;;;:::i;:::-;;:::i;5414:611::-;;;;;;;;;;-1:-1:-1;5414:611:88;;;;;:::i;:::-;;:::i;19334:335::-;;;;;;;;;;-1:-1:-1;19334:335:88;;;;;:::i;:::-;;:::i;4886:287::-;;;;;;;;;;-1:-1:-1;4886:287:88;;;;;:::i;:::-;;:::i;4759:191:23:-;;;;;;;;;;-1:-1:-1;4759:191:23;;;;;:::i;:::-;;:::i;7989:200:88:-;;;;;;;;;;-1:-1:-1;7989:200:88;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;8142:31:88;;8108:66;;:33;:66;;;;;:74;;;;;;;;;;8101:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7989:200;2235:30:89;;;;;;;;;;-1:-1:-1;2235:30:89;;;;-1:-1:-1;;;;;2235:30:89;;;;;;-1:-1:-1;;;;;6268:32:120;;;6250:51;;6238:2;6223:18;2235:30:89;6104:203:120;5246:136:23;;;;;;;;;;-1:-1:-1;5246:136:23;;;;;:::i;:::-;;:::i;6727:405:88:-;;;;;;;;;;-1:-1:-1;6727:405:88;;;;;:::i;:::-;;:::i;6348:245:23:-;;;;;;;;;;-1:-1:-1;6348:245:23;;;;;:::i;:::-;;:::i;2723:133:88:-;;;;;;;;;;;;;:::i;4693:118:89:-;;;;;;;;;;-1:-1:-1;4693:118:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7255:25:120;;;7311:2;7296:18;;7289:34;;;;7339:18;;;7332:34;7243:2;7228:18;4693:118:89;7053:319:120;3604:72:89;;;;;;;;;;-1:-1:-1;3604:72:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;4632:176:88;;;;;;;;;;-1:-1:-1;4632:176:88;;;;;:::i;:::-;;:::i;1842:326::-;;;;;;;;;;-1:-1:-1;1842:326:88;;;;;:::i;:::-;;:::i;7193:287::-;;;;;;;;;;-1:-1:-1;7193:287:88;;;;;:::i;:::-;;:::i;4158:214:25:-;;;;;;:::i;:::-;;:::i;3705:134::-;;;;;;;;;;;;;:::i;6442:209:88:-;;;;;;;;;;-1:-1:-1;6442:209:88;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;6615:19:88;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;6615:29:88;;;;;;;;;;;;;6608:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6442:209;796:72;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;796:72:88;;19675:430;;;;;;;;;;-1:-1:-1;19675:430:88;;;;;:::i;:::-;;:::i;2927:131::-;;;;;;;;;;;;;:::i;3324:311::-;;;;;;;;;;-1:-1:-1;3324:311:88;;;;;:::i;:::-;;:::i;3758:94:89:-;;;;;;;;;;-1:-1:-1;3758:94:89;;;;;:::i;:::-;;;;;;;;;;;;;;686:72:88;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;686:72:88;;528:89:91;;;;;;;;;;;;;:::i;18821:136:88:-;;;;;;;;;;-1:-1:-1;18821:136:88;;;;;:::i;:::-;;:::i;2839:87:89:-;;;;;;;;;;-1:-1:-1;2839:87:89;;;;;:::i;:::-;;;;;;;;;;;;;;3388:76;;;;;;;;;;-1:-1:-1;3388:76:89;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3388:76:89;;;3732:207:23;;;;;;;;;;-1:-1:-1;3732:207:23;;;;;:::i;:::-;;:::i;5179:229:88:-;;;;;;;;;;;;;:::i;2498:159::-;;;;;;;;;;;;;:::i;1599:237::-;;;;;;;;;;-1:-1:-1;1599:237:88;;;;;:::i;:::-;;:::i;4089:100:89:-;;;;;;;;;;-1:-1:-1;4089:100:89;;;;;:::i;:::-;;;;;;;;;;;;;;2317:49:23;;;;;;;;;;-1:-1:-1;2317:49:23;2362:4;2317:49;;8478:247:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1819:58:25:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:25;;;;;;;;;;;;:::i;4067:484:88:-;;;;;;;;;;-1:-1:-1;4067:484:88;;;;;:::i;:::-;;:::i;3735:198::-;;;;;;;;;;-1:-1:-1;3735:198:88;;;;;:::i;:::-;;:::i;13116:445::-;;;;;;;;;;;;;:::i;2157:27:89:-;;;;;;;;;;;;;;;;18963:227:88;;;;;;;;;;-1:-1:-1;18963:227:88;;;;;:::i;:::-;;:::i;19196:132::-;;;;;;;;;;-1:-1:-1;19196:132:88;;;;;:::i;:::-;;:::i;6256:180::-;;;;;;;;;;-1:-1:-1;6256:180:88;;;;;:::i;:::-;;:::i;5662:138:23:-;;;;;;;;;;-1:-1:-1;5662:138:23;;;;;:::i;:::-;;:::i;12764:260:88:-;;;;;;;;;;-1:-1:-1;12989:4:88;12764:260;;3091:139;;;;;;;;;;;;;:::i;3008:105:89:-;;;;;;;;;;-1:-1:-1;3008:105:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4817:46;;;;;;;;;;;;;;;;4461:89;;;;;;;;;;-1:-1:-1;4461:89:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;293:39;;;;;;;;;;-1:-1:-1;293:39:89;;;;-1:-1:-1;;;;;293:39:89;;;4598:34;;;;;;;;;;-1:-1:-1;4598:34:89;;;;;;;;4287:104;;;;;;;;;;-1:-1:-1;4287:104:89;;;;;:::i;:::-;;;;;;;;;;;;;;13661:647:88;;;;;;;;;;;;;:::i;3207:106:89:-;;;;;;;;;;-1:-1:-1;3207:106:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1494:48;;;;;;;;;;;;;;;;11196:104:88;11247:46;11282:10;11247:34;:46::i;:::-;11196:104::o;3443:202:23:-;3528:4;-1:-1:-1;;;;;;3551:47:23;;-1:-1:-1;;;3551:47:23;;:87;;-1:-1:-1;;;;;;;;;;1133:40:31;;;3602:36:23;3544:94;3443:202;-1:-1:-1;;3443:202:23:o;2202:242:88:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;2388:49:88;;;;;;;;;;;;;;;;;;;;;;2202:242;;;;;;:::o;875:718::-;8870:21:24;4302:15;;-1:-1:-1;;;4302:15:24;;;;4301:16;;-1:-1:-1;;;;;4348:14:24;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:24;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:24;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:24;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:24;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:24;-1:-1:-1;;;5013:22:24;;;4979:67;1172:33:88::1;:31;:33::i;:::-;1215:15;:34:::0;;-1:-1:-1;;;;;;1215:34:88::1;-1:-1:-1::0;;;;;1215:34:88;::::1;::::0;;::::1;::::0;;;-1:-1:-1;1259:56:88;;;1325:33:::1;:70:::0;;;1405:59:::1;::::0;-1:-1:-1;;;1405:59:88;;:30:::1;::::0;:59:::1;::::0;1436:14;;1452:11;;1405:59:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1474:32;1495:10;1474:20;:32::i;:::-;1516;1537:10;1516:20;:32::i;:::-;1558:12;:28:::0;;;5066:101:24;;;;5100:23;;-1:-1:-1;;;;5100:23:24;;;5142:14;;-1:-1:-1;13364:50:120;;5142:14:24;;13352:2:120;13337:18;5142:14:24;;;;;;;5066:101;4092:1081;;;;;875:718:88;;;;;;:::o;6032:166::-;6123:7;6153:38;6171:19;:17;:19::i;6153:38::-;6146:45;;6032:166;:::o;7675:308::-;7794:37;-1:-1:-1;;;;;;;;;;;7820:10:88;7794:7;:37::i;:::-;7773:132;;;;-1:-1:-1;;;7773:132:88;;13627:2:120;7773:132:88;;;13609:21:120;13666:2;13646:18;;;13639:30;13705:34;13685:18;;;13678:62;-1:-1:-1;;;13756:18:120;;;13749:46;13812:19;;7773:132:88;;;;;;;;;7915:61;7955:20;7915:39;:61::i;:::-;7675:308;:::o;5414:611::-;5491:7;5693:15;;:76;;-1:-1:-1;;;5693:76:88;;5754:4;5693:76;;;6250:51:120;5491:7:88;;-1:-1:-1;;;;;5693:15:88;;:39;;6223:18:120;;5693:76:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5693:76:88;;;;;;;;;;;;:::i;:::-;5663:106;;5779:18;5816:9;5811:181;5835:10;:17;5831:1;:21;5811:181;;;5942:39;5960:5;5967:10;5978:1;5967:13;;;;;;;;:::i;:::-;;;;;;;5942:17;:39::i;:::-;5928:53;;;;:::i;:::-;;-1:-1:-1;5854:3:88;;5811:181;;;-1:-1:-1;6008:10:88;5414:611;-1:-1:-1;;;5414:611:88:o;19334:335::-;19458:22;;;;;:63;;;19484:37;-1:-1:-1;;;;;;;;;;;19510:10:88;19484:7;:37::i;:::-;19437:144;;;;-1:-1:-1;;;19437:144:88;;;;;;;:::i;:::-;19591:71;19629:10;19641:20;19591:37;:71::i;4886:287::-;4990:7;5028:15;;:138;;-1:-1:-1;;;5028:138:88;;5087:4;5028:138;;;15815:51:120;15882:18;;;15875:34;;;-1:-1:-1;;;;;15945:32:120;;;15925:18;;;15918:60;5028:15:88;;;;:33;;15788:18:120;;5028:138:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4759:191:23:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:23;;;;;:24;;;;4759:191::o;5246:136::-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;6727:405:88:-;6864:37;-1:-1:-1;;;;;;;;;;;6890:10:88;6864:7;:37::i;:::-;6843:152;;;;-1:-1:-1;;;6843:152:88;;16380:2:120;6843:152:88;;;16362:21:120;16419:2;16399:18;;;16392:30;;;16458:34;16438:18;;;16431:62;16529:34;16509:18;;;16502:62;-1:-1:-1;;;16580:19:120;;;16573:35;16625:19;;6843:152:88;16178:472:120;6843:152:88;7039:31;;7005:66;;;;:33;:66;;;;;;;;7072:27;;7005:95;;;;;;;;:118;;;;;;;;;;;;;;;;;;;;6727:405::o;6348:245:23:-;-1:-1:-1;;;;;6441:34:23;;966:10:28;6441:34:23;6437:102;;6498:30;;-1:-1:-1;;;6498:30:23;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;2723:133:88:-;2771:7;2797:15;;:52;;-1:-1:-1;;;2797:52:88;;2843:4;2797:52;;;6250:51:120;-1:-1:-1;;;;;2797:15:88;;;;:37;;6223:18:120;;2797:52:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4632:176::-;4728:7;4754:47;4771:19;:17;:19::i;:::-;4792:8;4754:16;:47::i;1842:326::-;1942:39;2362:4:23;1970:10:88;1942:7;:39::i;:::-;1921:120;;;;-1:-1:-1;;;1921:120:88;;;;;;;:::i;:::-;2056:9;2051:111;2075:8;:15;2071:1;:19;2051:111;;;2111:40;-1:-1:-1;;;;;;;;;;;2139:8:88;2148:1;2139:11;;;;;;;;:::i;:::-;;;;;;;2111:9;:40::i;:::-;2092:3;;2051:111;;;;1842:326;:::o;7193:287::-;7293:37;-1:-1:-1;;;;;;;;;;;7319:10:88;7293:7;:37::i;:::-;7272:149;;;;-1:-1:-1;;;7272:149:88;;17260:2:120;7272:149:88;;;17242:21:120;17299:2;17279:18;;;17272:30;17338:34;17318:18;;;17311:62;17409:34;17389:18;;;17382:62;-1:-1:-1;;;17460:19:120;;;17453:32;17502:19;;7272:149:88;17058:469:120;7272:149:88;7431:33;:42;7193:287::o;4158:214:25:-;2653:13;:11;:13::i;:::-;4273:36:::1;4291:17;4273;:36::i;:::-;4319:46;4341:17;4360:4;4319:21;:46::i;3705:134::-:0;3774:7;2924:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3705:134:25;:::o;19675:430:88:-;19807:22;;;;;:63;;;19833:37;-1:-1:-1;;;;;;;;;;;19859:10:88;19833:7;:37::i;:::-;19786:144;;;;-1:-1:-1;;;19786:144:88;;;;;;;:::i;:::-;19945:9;19940:159;19964:21;:28;19960:1;:32;19940:159;;;20013:75;20051:10;20063:21;20085:1;20063:24;;;;;;;;:::i;:::-;;;;;;;20013:37;:75::i;:::-;19994:3;;19940:159;;2927:131;2977:7;3003:15;;:48;;-1:-1:-1;;;3003:48:88;;3045:4;3003:48;;;6250:51:120;-1:-1:-1;;;;;3003:15:88;;;;:33;;6223:18:120;;3003:48:88;6104:203:120;3324:311:88;3445:7;3483:15;;:145;;-1:-1:-1;;;3483:145:88;;3533:4;3483:145;;;17763:51:120;17830:18;;;17823:34;;;-1:-1:-1;;;;;17893:32:120;;;17873:18;;;17866:60;17962:32;;;17942:18;;;17935:60;3483:15:88;;;;:24;;17735:19:120;;3483:145:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3464:164;3324:311;-1:-1:-1;;;;3324:311:88:o;528:89:91:-;8870:21:24;4302:15;;-1:-1:-1;;;4302:15:24;;;;4301:16;;-1:-1:-1;;;;;4348:14:24;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:24;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:24;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:24;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:24;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:24;-1:-1:-1;;;5013:22:24;;;4979:67;587:23:91::1;:21;:23::i;:::-;5070:14:24::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:24;;;5142:14;;-1:-1:-1;13364:50:120;;5142:14:24;;13352:2:120;13337:18;5142:14:24;;;;;;;5066:101;4092:1081;;;;;528:89:91:o;18821:136:88:-;-1:-1:-1;;;;;;;;;;;3191:16:23;3202:4;3191:10;:16::i;:::-;18913:37:88::1;-1:-1:-1::0;;;;;;;;;;;18941:8:88::1;18913:9;:37::i;3732:207:23:-:0;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:23;;;;;;;;-1:-1:-1;;;;;3901:31:23;;;;;;;;;;;;;;;3732:207::o;5179:229:88:-;5250:39;2362:4:23;5278:10:88;5250:7;:39::i;:::-;5229:123;;;;-1:-1:-1;;;5229:123:88;;18208:2:120;5229:123:88;;;18190:21:120;18247:2;18227:18;;;18220:30;18286:34;18266:18;;;18259:62;-1:-1:-1;;;18337:18:120;;;18330:35;18382:19;;5229:123:88;18006:401:120;5229:123:88;5362:15;;;:39;;;-1:-1:-1;;;5362:39:88;;;;-1:-1:-1;;;;;5362:15:88;;;;:37;;:39;;;;;;;;;;:15;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;2498:159;2562:7;2624:26;;2588:33;;:62;;;;:::i;1599:237::-;1684:39;2362:4:23;1712:10:88;1684:7;:39::i;:::-;1663:120;;;;-1:-1:-1;;;1663:120:88;;;;;;;:::i;:::-;1793:36;-1:-1:-1;;;;;;;;;;;1821:7:88;1793:9;:36::i;8478:247::-;8651:15;;:66;;-1:-1:-1;;;8651:66:88;;8711:4;8651:66;;;6250:51:120;8546:16:88;;-1:-1:-1;;;;;8651:15:88;;:51;;6223:18:120;;8651:66:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8651:66:88;;;;;;;;;;;;:::i;4067:484::-;4169:7;4218:15;;:76;;-1:-1:-1;;;4218:76:88;;4279:4;4218:76;;;6250:51:120;4169:7:88;;-1:-1:-1;;;;;4218:15:88;;:39;;6223:18:120;;4218:76:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4218:76:88;;;;;;;;;;;;:::i;:::-;4188:106;;4304:18;4341:9;4336:182;4360:10;:17;4356:1;:21;4336:182;;;4467:40;4476:5;4483:10;4494:1;4483:13;;;;;;;;:::i;:::-;;;;;;;4498:8;4467;:40::i;:::-;4453:54;;;;:::i;:::-;;-1:-1:-1;4379:3:88;;4336:182;;;-1:-1:-1;4534:10:88;4067:484;-1:-1:-1;;;;4067:484:88:o;3735:198::-;3850:7;3876:50;3885:19;:17;:19::i;:::-;3906:9;3917:8;3876;:50::i;13116:445::-;13185:7;13204:28;13235:12;13204:43;;13257:26;13347:1;13332:12;;13309:20;:35;;;;:::i;:::-;13286:58;;:20;:58;:::i;:::-;:62;;;;:::i;18963:227::-;-1:-1:-1;;;;;;;;;;;3191:16:23;3202:4;3191:10;:16::i;:::-;19075:9:88::1;19070:113;19094:9;:16;19090:1;:20;19070:113;;;19131:41;-1:-1:-1::0;;;;;;;;;;;19159:9:88::1;19169:1;19159:12;;;;;;;;:::i;19131:41::-;19112:3;;19070:113;;19196:132:::0;-1:-1:-1;;;;;;;;;;;3191:16:23;3202:4;3191:10;:16::i;:::-;-1:-1:-1;19289:22:88::1;:32:::0;;-1:-1:-1;;19289:32:88::1;::::0;::::1;;::::0;;;::::1;::::0;;19196:132::o;6256:180::-;6354:7;6380:49;6398:19;:17;:19::i;:::-;6419:9;6380:17;:49::i;5662:138:23:-;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;3091:139:88:-:0;3145:7;3171:15;;:52;;-1:-1:-1;;;3171:52:88;;3217:4;3171:52;;;6250:51:120;-1:-1:-1;;;;;3171:15:88;;;;:37;;6223:18:120;;3171:52:88;6104:203:120;13661:647:88;13712:7;13913:18;13944:38;:36;:38::i;:::-;14085:26;14114:15;;:66;;-1:-1:-1;;;14114:66:88;;14174:4;14114:66;;;6250:51:120;13934:49:88;;;-1:-1:-1;14085:26:88;;-1:-1:-1;;;;;14114:15:88;;;;:51;;6223:18:120;;14114:66:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14114:66:88;;;;;;;;;;;;:::i;:::-;14236:16;;14085:95;;-1:-1:-1;14190:21:88;;14214:38;;14222:10;14214:38;:::i;:::-;14190:62;;14269:9;14279:13;14269:24;;;;;;;;:::i;:::-;;;;;;;14262:31;;;;;13661:647;:::o;11899:859::-;12309:20;:18;:20::i;:::-;-1:-1:-1;;;;;12297:32:88;:8;-1:-1:-1;;;;;12297:32:88;;12293:76;;12331:38;;-1:-1:-1;;;12331:38:88;;18996:2:120;12331:38:88;;;18978:21:120;19035:2;19015:18;;;19008:30;19074;19054:18;;;19047:58;19122:18;;12331:38:88;18794:352:120;12293:76:88;12691:57;12710:33;;12746:1;12710:37;;;;:::i;:::-;12691:18;:57::i;:::-;12684:68;;11899:859;:::o;738:128:91:-;6931:20:24;:18;:20::i;:::-;817:42:91::1;2362:4:23;848:10:91;817;:42::i;8793:2397:88:-:0;9038:27;;9026:40;;;;:11;:40;;;;;;;;-1:-1:-1;;;;;9026:50:88;;;;;;;;;:57;:62;9022:113;;9109:26;;-1:-1:-1;;;9109:26:88;;;;;;;;;;;9022:113;9606:27;;9577:26;;9541:33;;:62;;9577:26;9541:62;:::i;:::-;:92;9537:131;;;9642:26;;-1:-1:-1;;;9642:26:88;;;;;;;;;;;9537:131;10033:27;;10003:58;;;;:29;:58;;;;;;:63;;9999:172;;10143:17;:15;:17::i;:::-;10112:27;;10082:58;;;;:29;:58;;;;;:78;9999:172;10239:27;;10227:40;;;;:11;:40;;;;;;;;-1:-1:-1;;;;;10227:50:88;;;;;;;;;:73;;;;;;;;;;;;;;;;;;;;10831:43;10268:8;10831:33;:43::i;:::-;10901:27;;10884:45;;;;:16;:45;;;;;;;;10930:31;;;;10884:78;;;;;;;:112;;10790:84;;-1:-1:-1;10790:84:88;;10884:78;;:45;:112;;10790:84;;10884:112;:::i;:::-;;;;-1:-1:-1;;11055:28:88;;;;;11097:31;;;;;11012:170;;19325:25:120;;;19366:18;;;19359:34;;;11055:28:88;;11012:170;;19298:18:120;11012:170:88;;;;;;;;8939:2251;8793:2397;;:::o;4148:103:23:-;4214:30;4225:4;966:10:28;4214::23;:30::i;7270:387::-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:23;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:23;;;;;;;;;:38;;-1:-1:-1;;7475:38:23;7509:4;7475:38;;;7559:12;966:10:28;;887:96;7559:12:23;-1:-1:-1;;;;;7532:40:23;7550:7;-1:-1:-1;;;;;7532:40:23;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7892:388;7970:4;-1:-1:-1;;;;;;;;;;;8059:22:23;8067:4;8073:7;8059;:22::i;:::-;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:23;;;;;;;;;;:39;;-1:-1:-1;;8097:39:23;;;8155:40;966:10:28;;8097:14:23;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;4599:312:25;4679:4;-1:-1:-1;;;;;4688:6:25;4671:23;;;:120;;;4785:6;-1:-1:-1;;;;;4749:42:25;:32;-1:-1:-1;;;;;;;;;;;2035:53:42;-1:-1:-1;;;;;2035:53:42;;1957:138;4749:32:25;-1:-1:-1;;;;;4749:42:25;;;4671:120;4654:251;;;4865:29;;-1:-1:-1;;;4865:29:25;;;;;;;;;;;991:117:91;2362:4:23;3191:16;2362:4;3191:10;:16::i;6052:538:25:-;6169:17;-1:-1:-1;;;;;6151:50:25;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6151:52:25;;;;;;;;-1:-1:-1;;6151:52:25;;;;;;;;;;;;:::i;:::-;;;6147:437;;6513:60;;-1:-1:-1;;;6513:60:25;;-1:-1:-1;;;;;6268:32:120;;6513:60:25;;;6250:51:120;6223:18;;6513:60:25;6104:203:120;6147:437:25;-1:-1:-1;;;;;;;;;;;6245:40:25;;6241:120;;6312:34;;-1:-1:-1;;;6312:34:25;;;;;1507:25:120;;;1480:18;;6312:34:25;1361:177:120;6241:120:25;6374:54;6404:17;6423:4;6374:29;:54::i;5028:213::-;5102:4;-1:-1:-1;;;;;5111:6:25;5094:23;;5090:145;;5195:29;;-1:-1:-1;;;5195:29:25;;;;;;;;;;;623:109:91;6931:20:24;:18;:20::i;:::-;692:33:91::1;:31;:33::i;14699:4115:88:-:0;14771:4;14813:47;;;:29;:47;;;;;;;;;14771:4;;;15035:18;15052:1;14843:16;15035:18;:::i;:::-;15005:49;;;;;;;;;;;;14971:83;;15086:23;15068:15;:41;15064:133;;;15124:47;;;;:29;:47;;;;;:73;;;15064:133;15229:23;15211:41;;15677:837;15706:15;15684:19;:17;:19::i;:::-;:37;15677:837;;;15874:45;15908:10;15874:33;:45::i;:::-;15923:1;15874:50;15870:68;;-1:-1:-1;15933:5:88;;14699:4115;-1:-1:-1;;;14699:4115:88:o;15870:68::-;16488:15;:13;:15::i;:::-;15677:837;;;16665:45;16699:10;16665:33;:45::i;:::-;16714:1;16665:50;16661:68;;-1:-1:-1;16724:5:88;;14699:4115;-1:-1:-1;;;14699:4115:88:o;16661:68::-;16990:21;17057:1;17019:34;17037:15;17019:17;:34::i;:::-;17015:38;;:1;:38;:::i;:::-;17014:44;;;;:::i;:::-;16990:68;;17068:26;17097:37;:35;:37::i;:::-;17068:66;;17401:9;17396:1389;17420:9;:16;17416:1;:20;17396:1389;;;17457:16;17476:9;17486:1;17476:12;;;;;;;;:::i;:::-;;;;;;;;;;;;17502:48;17553:29;;;:11;:29;;;;;;-1:-1:-1;;;;;17553:39:88;;;;;;;;;17502:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17694:45;;:16;:45;;;;;17740:31;;17694:78;;;;;;;17476:12;;-1:-1:-1;17790:38:88;;;17786:989;;;17848:66;17881:20;17903:10;17848:32;:66::i;:::-;-1:-1:-1;18756:4:88;;14699:4115;-1:-1:-1;;;;;;;;;14699:4115:88:o;17786:989::-;-1:-1:-1;;;17438:3:88;;17396:1389;;;-1:-1:-1;18802:5:88;;14699:4115;-1:-1:-1;;;;;;14699:4115:88:o;7084:141:24:-;8870:21;8560:40;-1:-1:-1;;;8560:40:24;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:24;;;;;;;;;;;4381:197:23;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:23;;-1:-1:-1;;;;;20083:32:120;;4514:47:23;;;20065:51:120;20132:18;;;20125:34;;;20038:18;;4514:47:23;19891:274:120;2779:335:42;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:42;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;2960:148::-;3079:18;:16;:18::i;22773:105:88:-;22817:15;;;:31;;;-1:-1:-1;;;22817:31:88;;;;-1:-1:-1;;;;;22817:15:88;;;;:29;;:31;;;;;;;;;;:15;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22858:13;:11;:13::i;20341:1992::-;20470:29;20502:19;:17;:19::i;:::-;21075:27;;21045:58;;;;:29;:58;;;;;;20470:51;;-1:-1:-1;21045:83:88;;21041:142;;21149:34;;-1:-1:-1;;;21149:34:88;;;;;;;;;;;21041:142;21333:27;;:31;;21363:1;;21333:31;:::i;:::-;21296:33;;:68;21292:127;;21385:34;;-1:-1:-1;;;21385:34:88;;;;;;;;;;;21292:127;21464:31;;21430:66;;;;:33;:66;;;;;;;;21497:27;;21430:95;;;;;;;:118;;;;;;;;;;;;;;;;;;;;;;;;21558:63;;;;21631:44;;;:15;:44;;;;;:55;;-1:-1:-1;;;;;;21631:55:88;-1:-1:-1;;;;;21631:55:88;;;;;21725:27;;21696:57;;:28;:57;;;;;21756:12;21696:72;;21810:27;;21778:60;;:31;:60;;;;;;21841:15;21778:78;;22202:28;22244:31;;22289:27;;22165:161;;19325:25:120;;;19366:18;;;19359:34;;;;22165:161:88;;19298:18:120;22165:161:88;19151:248:120;2186:281:42;2263:17;-1:-1:-1;;;;;2263:29:42;;2296:1;2263:34;2259:119;;2320:47;;-1:-1:-1;;;2320:47:42;;-1:-1:-1;;;;;6268:32:120;;2320:47:42;;;6250:51:120;6223:18;;2320:47:42;6104:203:120;2259:119:42;-1:-1:-1;;;;;;;;;;;2387:73:42;;-1:-1:-1;;;;;;2387:73:42;-1:-1:-1;;;;;2387:73:42;;;;;;;;;;2186:281::o;4106:253:55:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:55;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:55:o;6598:122:42:-;6648:9;:13;6644:70;;6684:19;;-1:-1:-1;;;6684:19:42;;;;;;;;;;;22998:379:88;23085:26;23114:15;;:66;;-1:-1:-1;;;23114:66:88;;23174:4;23114:66;;;6250:51:120;-1:-1:-1;;;;;23114:15:88;;;;:51;;6223:18:120;;23114:66:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23114:66:88;;;;;;;;;;;;:::i;:::-;23085:95;;23190:21;23251:9;:16;23245:1;23232:12;:14;;;;:::i;:::-;23214:53;;;23222:25;23214:53;:::i;:::-;23190:77;;23346:9;23356:13;23346:24;;;;;;;;:::i;:::-;;;;;;;23328:15;;:42;;;;;-1:-1:-1;;;;;23328:42:88;;;;;-1:-1:-1;;;;;23328:42:88;;;;;;23030:347;;22998:379::o;4625:582:55:-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:55;;;:23;5045:49;5041:119;;;5121:24;;-1:-1:-1;;;5121:24:55;;-1:-1:-1;;;;;6268:32:120;;5121:24:55;;;6250:51:120;6223:18;;5121:24:55;6104:203:120;5041:119:55;-1:-1:-1;5180:10:55;5173:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:55;;;;;;;;;;;14:286:120;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:120;;209:43;;199:71;;266:1;263;256:12;497:466;574:6;582;590;643:2;631:9;622:7;618:23;614:32;611:52;;;659:1;656;649:12;611:52;-1:-1:-1;;704:23:120;;;824:2;809:18;;796:32;;-1:-1:-1;927:2:120;912:18;;;899:32;;497:466;-1:-1:-1;497:466:120:o;1543:149::-;-1:-1:-1;;;;;1636:31:120;;1626:42;;1616:70;;1682:1;1679;1672:12;1697:127;1758:10;1753:3;1749:20;1746:1;1739:31;1789:4;1786:1;1779:15;1813:4;1810:1;1803:15;1829:275;1900:2;1894:9;1965:2;1946:13;;-1:-1:-1;;1942:27:120;1930:40;;-1:-1:-1;;;;;1985:34:120;;2021:22;;;1982:62;1979:88;;;2047:18;;:::i;:::-;2083:2;2076:22;1829:275;;-1:-1:-1;1829:275:120:o;2109:183::-;2169:4;-1:-1:-1;;;;;2194:6:120;2191:30;2188:56;;;2224:18;;:::i;:::-;-1:-1:-1;2269:1:120;2265:14;2281:4;2261:25;;2109:183::o;2297:762::-;2351:5;2404:3;2397:4;2389:6;2385:17;2381:27;2371:55;;2422:1;2419;2412:12;2371:55;2462:6;2449:20;2489:64;2505:47;2545:6;2505:47;:::i;:::-;2489:64;:::i;:::-;2577:3;2601:6;2596:3;2589:19;2633:4;2628:3;2624:14;2617:21;;2694:4;2684:6;2681:1;2677:14;2669:6;2665:27;2661:38;2647:52;;2722:3;2714:6;2711:15;2708:35;;;2739:1;2736;2729:12;2708:35;2775:4;2767:6;2763:17;2789:239;2805:6;2800:3;2797:15;2789:239;;;2887:3;2874:17;2904:49;2947:5;2904:49;:::i;:::-;2966:18;;3013:4;3004:14;;;;2822;2789:239;;;-1:-1:-1;3046:7:120;2297:762;-1:-1:-1;;;;;2297:762:120:o;3064:1010::-;3219:6;3227;3235;3243;3251;3259;3312:3;3300:9;3291:7;3287:23;3283:33;3280:53;;;3329:1;3326;3319:12;3280:53;3368:9;3355:23;3387:49;3430:5;3387:49;:::i;:::-;3455:5;-1:-1:-1;3533:2:120;3518:18;;3505:32;;-1:-1:-1;3636:2:120;3621:18;;3608:32;;-1:-1:-1;3739:2:120;3724:18;;3711:32;;-1:-1:-1;3820:3:120;3805:19;;3792:33;-1:-1:-1;;;;;3837:30:120;;3834:50;;;3880:1;3877;3870:12;3834:50;3903:61;3956:7;3947:6;3936:9;3932:22;3903:61;:::i;:::-;3064:1010;;;;-1:-1:-1;3064:1010:120;;;;;4037:3;4022:19;;;4009:33;;-1:-1:-1;;;3064:1010:120:o;4079:727::-;4146:5;4194:4;4182:9;4177:3;4173:19;4169:30;4166:50;;;4212:1;4209;4202:12;4166:50;4265:2;4259:9;4307:4;4295:17;;-1:-1:-1;;;;;4327:34:120;;4363:22;;;4324:62;4321:88;;;4389:18;;:::i;:::-;4425:2;4418:22;;;4509:23;;4541;;4637:2;4622:18;;;4609:32;4657:15;;;4650:32;4740:18;;;4727:32;4775:15;;;4768:32;;;;-1:-1:-1;4458:6:120;4079:727;-1:-1:-1;4079:727:120:o;4811:254::-;4909:6;4962:2;4950:9;4941:7;4937:23;4933:32;4930:52;;;4978:1;4975;4968:12;4930:52;5001:58;5051:7;5040:9;5001:58;:::i;5070:226::-;5129:6;5182:2;5170:9;5161:7;5157:23;5153:32;5150:52;;;5198:1;5195;5188:12;5150:52;-1:-1:-1;5243:23:120;;5070:226;-1:-1:-1;5070:226:120:o;5301:385::-;5369:6;5377;5430:2;5418:9;5409:7;5405:23;5401:32;5398:52;;;5446:1;5443;5436:12;5398:52;5491:23;;;-1:-1:-1;5590:2:120;5575:18;;5562:32;5603:51;5562:32;5603:51;:::i;:::-;5673:7;5663:17;;;5301:385;;;;;:::o;6702:346::-;6770:6;6778;6831:2;6819:9;6810:7;6806:23;6802:32;6799:52;;;6847:1;6844;6837:12;6799:52;-1:-1:-1;;6892:23:120;;;7012:2;6997:18;;;6984:32;;-1:-1:-1;6702:346:120:o;7377:265::-;7436:6;7489:2;7477:9;7468:7;7464:23;7460:32;7457:52;;;7505:1;7502;7495:12;7457:52;7544:9;7531:23;7563:49;7606:5;7563:49;:::i;7647:348::-;7731:6;7784:2;7772:9;7763:7;7759:23;7755:32;7752:52;;;7800:1;7797;7790:12;7752:52;7840:9;7827:23;-1:-1:-1;;;;;7865:6:120;7862:30;7859:50;;;7905:1;7902;7895:12;7859:50;7928:61;7981:7;7972:6;7961:9;7957:22;7928:61;:::i;8000:918::-;8077:6;8085;8138:2;8126:9;8117:7;8113:23;8109:32;8106:52;;;8154:1;8151;8144:12;8106:52;8193:9;8180:23;8212:49;8255:5;8212:49;:::i;:::-;8280:5;-1:-1:-1;8336:2:120;8321:18;;8308:32;-1:-1:-1;;;;;8352:30:120;;8349:50;;;8395:1;8392;8385:12;8349:50;8418:22;;8471:4;8463:13;;8459:27;-1:-1:-1;8449:55:120;;8500:1;8497;8490:12;8449:55;8540:2;8527:16;-1:-1:-1;;;;;8558:6:120;8555:30;8552:56;;;8588:18;;:::i;:::-;8630:57;8677:2;8654:17;;-1:-1:-1;;8650:31:120;8683:2;8646:40;8630:57;:::i;:::-;8710:6;8703:5;8696:21;8758:7;8753:2;8744:6;8740:2;8736:15;8732:24;8729:37;8726:57;;;8779:1;8776;8769:12;8726:57;8834:6;8829:2;8825;8821:11;8816:2;8809:5;8805:14;8792:49;8886:1;8881:2;8872:6;8865:5;8861:18;8857:27;8850:38;8907:5;8897:15;;;;;8000:918;;;;;:::o;8923:965::-;9046:6;9099:2;9087:9;9078:7;9074:23;9070:32;9067:52;;;9115:1;9112;9105:12;9067:52;9155:9;9142:23;-1:-1:-1;;;;;9180:6:120;9177:30;9174:50;;;9220:1;9217;9210:12;9174:50;9243:22;;9296:4;9288:13;;9284:27;-1:-1:-1;9274:55:120;;9325:1;9322;9315:12;9274:55;9365:2;9352:16;9388:64;9404:47;9444:6;9404:47;:::i;9388:64::-;9474:3;9498:6;9493:3;9486:19;9530:2;9525:3;9521:12;9514:19;;9588:2;9580:4;9572:6;9568:17;9564:2;9560:26;9556:35;9542:49;;9614:7;9606:6;9603:19;9600:39;;;9635:1;9632;9625:12;9600:39;9667:2;9663;9659:11;9648:22;;9679:179;9695:6;9690:3;9687:15;9679:179;;;9763:52;9807:7;9802:3;9763:52;:::i;:::-;9758:3;9751:65;9845:2;9840:3;9836:12;9829:19;;9721:4;9716:3;9712:14;9705:21;;9679:179;;;9877:5;8923:965;-1:-1:-1;;;;;;8923:965:120:o;9893:544::-;9970:6;9978;9986;10039:2;10027:9;10018:7;10014:23;10010:32;10007:52;;;10055:1;10052;10045:12;10007:52;10100:23;;;-1:-1:-1;10199:2:120;10184:18;;10171:32;10212:51;10171:32;10212:51;:::i;:::-;10282:7;-1:-1:-1;10341:2:120;10326:18;;10313:32;10354:51;10313:32;10354:51;:::i;:::-;10424:7;10414:17;;;9893:544;;;;;:::o;10442:446::-;10495:3;10533:5;10527:12;10560:6;10555:3;10548:19;10592:4;10587:3;10583:14;10576:21;;10631:4;10624:5;10620:16;10654:1;10664:199;10678:6;10675:1;10672:13;10664:199;;;10743:13;;-1:-1:-1;;;;;10739:39:120;10727:52;;10808:4;10799:14;;;;10836:17;;;;10775:1;10693:9;10664:199;;;-1:-1:-1;10879:3:120;;10442:446;-1:-1:-1;;;;10442:446:120:o;10893:261::-;11072:2;11061:9;11054:21;11035:4;11092:56;11144:2;11133:9;11129:18;11121:6;11092:56;:::i;11159:418::-;11308:2;11297:9;11290:21;11271:4;11340:6;11334:13;11383:6;11378:2;11367:9;11363:18;11356:34;11442:6;11437:2;11429:6;11425:15;11420:2;11409:9;11405:18;11399:50;11498:1;11493:2;11484:6;11473:9;11469:22;11465:31;11458:42;11568:2;11561;11557:7;11552:2;11544:6;11540:15;11536:29;11525:9;11521:45;11517:54;11509:62;;;11159:418;;;;:::o;11582:424::-;11650:6;11658;11711:2;11699:9;11690:7;11686:23;11682:32;11679:52;;;11727:1;11724;11717:12;11679:52;11766:9;11753:23;11785:49;11828:5;11785:49;:::i;:::-;11853:5;-1:-1:-1;11910:2:120;11895:18;;11882:32;11923:51;11882:32;11923:51;:::i;12011:273::-;12067:6;12120:2;12108:9;12099:7;12095:23;12091:32;12088:52;;;12136:1;12133;12126:12;12088:52;12175:9;12162:23;12228:5;12221:13;12214:21;12207:5;12204:32;12194:60;;12250:1;12247;12240:12;12874:332;13081:6;13070:9;13063:25;13124:2;13119;13108:9;13104:18;13097:30;13044:4;13144:56;13196:2;13185:9;13181:18;13173:6;13144:56;:::i;13842:969::-;13937:6;13990:2;13978:9;13969:7;13965:23;13961:32;13958:52;;;14006:1;14003;13996:12;13958:52;14039:9;14033:16;-1:-1:-1;;;;;14064:6:120;14061:30;14058:50;;;14104:1;14101;14094:12;14058:50;14127:22;;14180:4;14172:13;;14168:27;-1:-1:-1;14158:55:120;;14209:1;14206;14199:12;14158:55;14242:2;14236:9;14265:64;14281:47;14321:6;14281:47;:::i;14265:64::-;14351:3;14375:6;14370:3;14363:19;14407:2;14402:3;14398:12;14391:19;;14462:2;14452:6;14449:1;14445:14;14441:2;14437:23;14433:32;14419:46;;14488:7;14480:6;14477:19;14474:39;;;14509:1;14506;14499:12;14474:39;14541:2;14537;14533:11;14522:22;;14553:228;14569:6;14564:3;14561:15;14553:228;;;14642:3;14636:10;14659:49;14702:5;14659:49;:::i;:::-;14721:18;;14768:2;14586:12;;;;14759;;;;14553:228;;14816:127;14877:10;14872:3;14868:20;14865:1;14858:31;14908:4;14905:1;14898:15;14932:4;14929:1;14922:15;14948:127;15009:10;15004:3;15000:20;14997:1;14990:31;15040:4;15037:1;15030:15;15064:4;15061:1;15054:15;15080:125;15145:9;;;15166:10;;;15163:36;;;15179:18;;:::i;15210:398::-;15412:2;15394:21;;;15451:2;15431:18;;;15424:30;15490:34;15485:2;15470:18;;15463:62;-1:-1:-1;;;15556:2:120;15541:18;;15534:32;15598:3;15583:19;;15210:398::o;15989:184::-;16059:6;16112:2;16100:9;16091:7;16087:23;16083:32;16080:52;;;16128:1;16125;16118:12;16080:52;-1:-1:-1;16151:16:120;;15989:184;-1:-1:-1;15989:184:120:o;16655:398::-;16857:2;16839:21;;;16896:2;16876:18;;;16869:30;16935:34;16930:2;16915:18;;16908:62;-1:-1:-1;;;17001:2:120;16986:18;;16979:32;17043:3;17028:19;;16655:398::o;18412:127::-;18473:10;18468:3;18464:20;18461:1;18454:31;18504:4;18501:1;18494:15;18528:4;18525:1;18518:15;18544:112;18576:1;18602;18592:35;;18607:18;;:::i;:::-;-1:-1:-1;18641:9:120;;18544:112::o;18661:128::-;18728:9;;;18749:11;;;18746:37;;;18763:18;;:::i;19593:168::-;19666:9;;;19697;;19714:15;;;19708:22;;19694:37;19684:71;;19735:18;;:::i;19766:120::-;19806:1;19832;19822:35;;19837:18;;:::i;:::-;-1:-1:-1;19871:9:120;;19766:120::o;20170:301::-;20299:3;20337:6;20331:13;20383:6;20376:4;20368:6;20364:17;20359:3;20353:37;20445:1;20409:16;;20434:13;;;-1:-1:-1;20409:16:120;20170:301;-1:-1:-1;20170:301:120:o","linkReferences":{},"immutableReferences":{"39620":[{"start":7514,"length":32},{"start":7555,"length":32},{"start":7876,"length":32}]}},"methodIdentifiers":{"COMMITMENT_ADMIN()":"80e460f0","DEFAULT_ADMIN_ROLE()":"a217fddf","TRUSTED_ATTESTER()":"5db916ab","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","acceptGenesisCeremony()":"92a2ebf3","acceptorTerm()":"c691e6e4","batchGrantCommitmentAdmin(address[])":"4b47d955","batchGrantTrustedAttester(address[])":"cf6772ad","commitmentStakes(uint256,bytes32)":"fc2788ad","commitments(uint256,address)":"e90d4c06","computeTotalStake(uint256)":"0daf6181","computeTotalStakeForAcceptingEpoch()":"08c39793","createSuperBlockCommitment(uint256,bytes32,bytes32)":"026583d7","currentAcceptor()":"2e55d0f6","currentAcceptorIsLive()":"e4566c78","forceLatestCommitment((uint256,bytes32,bytes32))":"08c7050f","getAcceptingEpoch()":"6c713af8","getAttesterStake(uint256,address)":"ba26513e","getAttesterStakeForAcceptingEpoch(address)":"491d0467","getCurrentAcceptor()":"f99f6e4c","getCustodianStake(uint256,address)":"1de38fe1","getCustodianStakeForAcceptingEpoch(address)":"d440116d","getL1BlockStartOfCurrentAcceptorTerm()":"c5de60a9","getMaxTolerableSuperBlockHeight()":"943b79e2","getNextAcceptingEpoch()":"e4d991ee","getPostconfirmedCommitment(uint256)":"2bfd11d6","getPresentEpoch()":"37d7f58f","getRoleAdmin(bytes32)":"248a9ca3","getStake(uint256,address,address)":"7aa81c2a","getStakeForAcceptingEpoch(address,address)":"bb04bd2f","getStakedAttestersForAcceptingEpoch()":"aa0d6fcd","getValidatorCommitmentAtSuperBlockHeight(uint256,address)":"556d97c8","grantCommitmentAdmin(address)":"949d7c2a","grantRole(bytes32,address)":"2f2ff15d","grantTrustedAttester(address)":"81df1746","hasRole(bytes32,address)":"91d14854","initialize()":"8129fc1c","initialize(address,uint256,uint256,uint256,address[],uint256)":"03f02fc0","lastPostconfirmedSuperBlockHeight()":"fdafe9ca","leadingSuperBlockTolerance()":"03d3f7fd","openAttestationEnabled()":"ef9ae15c","postconfirmSuperBlocks()":"017304e1","postconfirmedAtL1BlockHeight(uint256)":"7ac561c8","postconfirmedAtL1BlockHeightByAcceptor(uint256)":"f8d26aec","postconfirmedAtL1BlockTimestamp(uint256)":"a207fe2f","postconfirmedBy(uint256)":"91807e4f","postconfirmedByAcceptor(uint256)":"410f3146","postconfirmedSuperBlocks(uint256)":"eda67fc4","postconfirmedSuperBlocksVersion()":"ec18c186","proxiableUUID()":"52d1902d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","setLastPostconfirmedSuperBlockHeight(uint256)":"4c17b024","setOpenAttestationEnabled(bool)":"d2526fef","setPostconfirmedCommitmentAtBlockHeight((uint256,bytes32,bytes32))":"3119edd4","stakingContract()":"ee99205c","submitBatchSuperBlockCommitment((uint256,bytes32,bytes32)[])":"622e3616","submitSuperBlockCommitment((uint256,bytes32,bytes32))":"0e74b609","superBlockHeightAssignedEpoch(uint256)":"85e6b8c2","supportsInterface(bytes4)":"01ffc9a7","upgradeToAndCall(address,bytes)":"4f1ef286","versionedPostconfirmedSuperBlocks(uint256,uint256)":"3ba18005"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AttesterAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnacceptableSuperBlockCommitment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateCommitment\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"attesterStake\",\"type\":\"uint256\"}],\"name\":\"SuperBlockCommitmentSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateCommitment\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"SuperBlockPostconfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COMMITMENT_ADMIN\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRUSTED_ATTESTER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptorTerm\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"}],\"name\":\"batchGrantCommitmentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"}],\"name\":\"batchGrantTrustedAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitement\",\"type\":\"bytes32\"}],\"name\":\"commitmentStakes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"commitments\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"computeTotalStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeTotalStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"name\":\"createSuperBlockCommitment\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentAcceptor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentAcceptorIsLive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"forceLatestCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentAcceptor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1BlockStartOfCurrentAcceptorTerm\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxTolerableSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"getPostconfirmedCommitment\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPresentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakedAttestersForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getValidatorCommitmentAtSuperBlockHeight\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantCommitmentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"grantTrustedAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IMovementStaking\",\"name\":\"_stakingContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_lastPostconfirmedSuperBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_leadingSuperBlockTolerance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_epochDuration\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_custodians\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_acceptorTerm\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPostconfirmedSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"leadingSuperBlockTolerance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"openAttestationEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmSuperBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockHeight\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockHeightByAcceptor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockHeight\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedBy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedByAcceptor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedSuperBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmedSuperBlocksVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"setLastPostconfirmedSuperBlockHeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOpenAttestationEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"setPostconfirmedCommitmentAtBlockHeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakingContract\",\"outputs\":[{\"internalType\":\"contract IMovementStaking\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.SuperBlockCommitment[]\",\"name\":\"superBlockCommitments\",\"type\":\"tuple[]\"}],\"name\":\"submitBatchSuperBlockCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"submitSuperBlockCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"superBlockHeightAssignedEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"versionedPostconfirmedSuperBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize()\":{\"details\":\"Initialize the contract\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptorTerm()\":{\"notice\":\"Acceptor term time in seconds (determined by L1 blocks). The confimer remains the same for acceptorTerm period.\"},\"getAttesterStake(uint256,address)\":{\"notice\":\"Gets the stake for a given attester at a given epoch\"},\"getAttesterStakeForAcceptingEpoch(address)\":{\"notice\":\"Gets the stake for a given attester at the accepting epoch\"},\"getCurrentAcceptor()\":{\"notice\":\"Determines the current acceptor using L1 block hash as a source of randomness\"},\"getCustodianStake(uint256,address)\":{\"notice\":\"Gets the stake for a given custodian for a given epoch\"},\"getL1BlockStartOfCurrentAcceptorTerm()\":{\"notice\":\"Gets the L1 block height at which the current acceptor's term started\"},\"getStake(uint256,address,address)\":{\"notice\":\"Gets the stake for a given tuple (custodian, attester) at a given epoch\"},\"getStakeForAcceptingEpoch(address,address)\":{\"notice\":\"Gets the stake for a given tuple (custodian, attester) at the accepting epoch\"},\"getStakedAttestersForAcceptingEpoch()\":{\"notice\":\"Gets the attesters who have stake in the current accepting epoch\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/settlement/MCR.sol\":\"MCR\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194\",\"dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"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/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040\",\"dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt\"]},\"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/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02\",\"dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"]},\"src/settlement/MCR.sol\":{\"keccak256\":\"0xf52d69afcb85e946f6e2377ca488c249731f44cbe98d875d641adbf7e6ef0e18\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://8a74c297206ed8942a64397f67ee9511d1bbd344fc8eff27f2df523fda794b62\",\"dweb:/ipfs/QmNU91hnEWbGopF2ufw49G8qm3MoXck4e6LMYJQuhaHCxD\"]},\"src/settlement/MCRStorage.sol\":{\"keccak256\":\"0xcf70794dacadaceaf5126031e9d5d35cf02d3a113727b085e5e936d5852e6feb\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://76b8f02fa46689cc386b3bc76f9b1e393f61faed5786028c12ac28c0d0b54b9b\",\"dweb:/ipfs/QmWyqMrsFNYFYchDTyxoJvctc1QRPHes6sFdw39y1rASxo\"]},\"src/settlement/interfaces/IMCR.sol\":{\"keccak256\":\"0xcdad9c33e8f5dfb74d23c3fa94d50cb8d1ebc4012edb34d1d11e5f59afe02d70\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://27b7274db68ba31c7fccad0545cdb5803e9c5d78d11880607bfed5acd1a76c45\",\"dweb:/ipfs/QmaraqpoyZLaDYdgaRFji91Jaj1hmGjKV857jw1LjMYGP6\"]},\"src/settlement/settlement/BaseSettlement.sol\":{\"keccak256\":\"0xf3f6ea0ae8db122d1c6dade60057ea8fa03b8efc8108f03e48049bb9548d2c9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e340fdd89c1872461ec0f98195ef56aaf583ebf2897890ee74c1eefad8e8c86e\",\"dweb:/ipfs/QmWCcRibYEJZEvY1ugrw7jkumrHNxr8z3dMeP457PkbJED\"]},\"src/staking/MovementStaking.sol\":{\"keccak256\":\"0x0280962d01745f8bd126f4cd28a7abb2b3cc5d89e0320bba39ef1b32f3c83959\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ec0b7c24bd18159a653f2f9d7990dd3db388542051e861614150be9e5832ce5b\",\"dweb:/ipfs/QmTDPHADiBHiD95aSagLiHZrRHZ35cNFokjMUT2ydPUydZ\"]},\"src/staking/MovementStakingStorage.sol\":{\"keccak256\":\"0x1272d2291cc72bdc4aa2adf265786c40dad3066ba6ab1708442a349590f1c822\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://e9ce2dac8f59becae906307ae5868fd5b1597413a79a7f977d0e70638cadf404\",\"dweb:/ipfs/QmSdj3ZEHhmCMaK1Cx8CvP2Nsfdnf5gr3TVqiR5iETaBtE\"]},\"src/staking/base/BaseStaking.sol\":{\"keccak256\":\"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46\",\"dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx\"]},\"src/staking/interfaces/IMovementStaking.sol\":{\"keccak256\":\"0x66bce33452b60845a2d47bd0e4c58dc8d1c690f2681b4c2d6de3a6db9cd09d34\",\"urls\":[\"bzz-raw://f6dac6c2395bc43a7e3a7637e63a2deafbb9cf815ad9d879919f6a7f31c47b44\",\"dweb:/ipfs/QmRQSBNe2xZXksDkVmRfsiz3a1Zp9NLD8kHYPnMW4ytzDM\"]},\"src/token/base/BaseToken.sol\":{\"keccak256\":\"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e\",\"dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd\"]},\"src/token/base/MintableToken.sol\":{\"keccak256\":\"0x67dcaae55138dda0f6fb9cce7d00b21b1dcf48144d0442073bec83aedbd73ca6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009d22618ed30e84b0839edbe7bd1a18afe7073a62477667bf96d765428385b7\",\"dweb:/ipfs/QmNzA9RjM6SxVJYWohq7JbLvyBrhzzjzQQwBfArBQqCNAQ\"]},\"src/token/base/WrappedToken.sol\":{\"keccak256\":\"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885\",\"dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4\"]},\"src/token/base/WrappedTokenStorage.sol\":{\"keccak256\":\"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08\",\"dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj\"]},\"src/token/custodian/CustodianToken.sol\":{\"keccak256\":\"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04\",\"dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"AttesterAlreadyCommitted"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[],"type":"error","name":"UnacceptableSuperBlockCommitment"},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"stateCommitment","type":"bytes32","indexed":false},{"internalType":"uint256","name":"attesterStake","type":"uint256","indexed":false}],"type":"event","name":"SuperBlockCommitmentSubmitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"stateCommitment","type":"bytes32","indexed":false},{"internalType":"uint256","name":"height","type":"uint256","indexed":false}],"type":"event","name":"SuperBlockPostconfirmed","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"COMMITMENT_ADMIN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TRUSTED_ATTESTER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptGenesisCeremony"},{"inputs":[],"stateMutability":"view","type":"function","name":"acceptorTerm","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"batchGrantCommitmentAdmin"},{"inputs":[{"internalType":"address[]","name":"attesters","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"batchGrantTrustedAttester"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"bytes32","name":"commitement","type":"bytes32"}],"stateMutability":"view","type":"function","name":"commitmentStakes","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"commitments","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}],"stateMutability":"view","type":"function","name":"computeTotalStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"computeTotalStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"createSuperBlockCommitment","outputs":[{"internalType":"struct MCRStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"currentAcceptor","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"currentAcceptorIsLive","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct MCRStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"forceLatestCommitment"},{"inputs":[],"stateMutability":"view","type":"function","name":"getAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentAcceptor","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getL1BlockStartOfCurrentAcceptorTerm","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getMaxTolerableSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getNextAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"getPostconfirmedCommitment","outputs":[{"internalType":"struct MCRStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPresentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getStakedAttestersForAcceptingEpoch","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getValidatorCommitmentAtSuperBlockHeight","outputs":[{"internalType":"struct MCRStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantCommitmentAdmin"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantTrustedAttester"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"contract IMovementStaking","name":"_stakingContract","type":"address"},{"internalType":"uint256","name":"_lastPostconfirmedSuperBlockHeight","type":"uint256"},{"internalType":"uint256","name":"_leadingSuperBlockTolerance","type":"uint256"},{"internalType":"uint256","name":"_epochDuration","type":"uint256"},{"internalType":"address[]","name":"_custodians","type":"address[]"},{"internalType":"uint256","name":"_acceptorTerm","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"lastPostconfirmedSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"leadingSuperBlockTolerance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"openAttestationEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"postconfirmSuperBlocks"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockHeight","outputs":[{"internalType":"uint256","name":"L1BlockHeight","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockHeightByAcceptor","outputs":[{"internalType":"uint256","name":"L1BlockHeight","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockTimestamp","outputs":[{"internalType":"uint256","name":"L1BlockTimestamp","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedBy","outputs":[{"internalType":"address","name":"attester","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedByAcceptor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedSuperBlocks","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"postconfirmedSuperBlocksVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setLastPostconfirmedSuperBlockHeight"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setOpenAttestationEnabled"},{"inputs":[{"internalType":"struct MCRStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"setPostconfirmedCommitmentAtBlockHeight"},{"inputs":[],"stateMutability":"view","type":"function","name":"stakingContract","outputs":[{"internalType":"contract IMovementStaking","name":"","type":"address"}]},{"inputs":[{"internalType":"struct MCRStorage.SuperBlockCommitment[]","name":"superBlockCommitments","type":"tuple[]","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"submitBatchSuperBlockCommitment"},{"inputs":[{"internalType":"struct MCRStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"submitSuperBlockCommitment"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"superBlockHeightAssignedEpoch","outputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}]},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"versionedPostconfirmedSuperBlocks","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize()":{"details":"Initialize the contract"},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"acceptorTerm()":{"notice":"Acceptor term time in seconds (determined by L1 blocks). The confimer remains the same for acceptorTerm period."},"getAttesterStake(uint256,address)":{"notice":"Gets the stake for a given attester at a given epoch"},"getAttesterStakeForAcceptingEpoch(address)":{"notice":"Gets the stake for a given attester at the accepting epoch"},"getCurrentAcceptor()":{"notice":"Determines the current acceptor using L1 block hash as a source of randomness"},"getCustodianStake(uint256,address)":{"notice":"Gets the stake for a given custodian for a given epoch"},"getL1BlockStartOfCurrentAcceptorTerm()":{"notice":"Gets the L1 block height at which the current acceptor's term started"},"getStake(uint256,address,address)":{"notice":"Gets the stake for a given tuple (custodian, attester) at a given epoch"},"getStakeForAcceptingEpoch(address,address)":{"notice":"Gets the stake for a given tuple (custodian, attester) at the accepting epoch"},"getStakedAttestersForAcceptingEpoch()":{"notice":"Gets the attesters who have stake in the current accepting epoch"}},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/settlement/MCR.sol":"MCR"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/forge-std/src/console.sol":{"keccak256":"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a","urls":["bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194","dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"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/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53","urls":["bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930","dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f","urls":["bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040","dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt"],"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/introspection/ERC165Upgradeable.sol":{"keccak256":"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8","urls":["bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45","dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c","urls":["bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba","dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c","urls":["bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9","dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65","urls":["bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a","dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"],"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/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386","urls":["bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0","dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"keccak256":"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236","urls":["bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02","dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa","urls":["bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1","dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA"],"license":"MIT"},"src/settlement/MCR.sol":{"keccak256":"0xf52d69afcb85e946f6e2377ca488c249731f44cbe98d875d641adbf7e6ef0e18","urls":["bzz-raw://8a74c297206ed8942a64397f67ee9511d1bbd344fc8eff27f2df523fda794b62","dweb:/ipfs/QmNU91hnEWbGopF2ufw49G8qm3MoXck4e6LMYJQuhaHCxD"],"license":"UNLICENSED"},"src/settlement/MCRStorage.sol":{"keccak256":"0xcf70794dacadaceaf5126031e9d5d35cf02d3a113727b085e5e936d5852e6feb","urls":["bzz-raw://76b8f02fa46689cc386b3bc76f9b1e393f61faed5786028c12ac28c0d0b54b9b","dweb:/ipfs/QmWyqMrsFNYFYchDTyxoJvctc1QRPHes6sFdw39y1rASxo"],"license":"UNLICENSED"},"src/settlement/interfaces/IMCR.sol":{"keccak256":"0xcdad9c33e8f5dfb74d23c3fa94d50cb8d1ebc4012edb34d1d11e5f59afe02d70","urls":["bzz-raw://27b7274db68ba31c7fccad0545cdb5803e9c5d78d11880607bfed5acd1a76c45","dweb:/ipfs/QmaraqpoyZLaDYdgaRFji91Jaj1hmGjKV857jw1LjMYGP6"],"license":"UNLICENSED"},"src/settlement/settlement/BaseSettlement.sol":{"keccak256":"0xf3f6ea0ae8db122d1c6dade60057ea8fa03b8efc8108f03e48049bb9548d2c9a","urls":["bzz-raw://e340fdd89c1872461ec0f98195ef56aaf583ebf2897890ee74c1eefad8e8c86e","dweb:/ipfs/QmWCcRibYEJZEvY1ugrw7jkumrHNxr8z3dMeP457PkbJED"],"license":"MIT"},"src/staking/MovementStaking.sol":{"keccak256":"0x0280962d01745f8bd126f4cd28a7abb2b3cc5d89e0320bba39ef1b32f3c83959","urls":["bzz-raw://ec0b7c24bd18159a653f2f9d7990dd3db388542051e861614150be9e5832ce5b","dweb:/ipfs/QmTDPHADiBHiD95aSagLiHZrRHZ35cNFokjMUT2ydPUydZ"],"license":"UNLICENSED"},"src/staking/MovementStakingStorage.sol":{"keccak256":"0x1272d2291cc72bdc4aa2adf265786c40dad3066ba6ab1708442a349590f1c822","urls":["bzz-raw://e9ce2dac8f59becae906307ae5868fd5b1597413a79a7f977d0e70638cadf404","dweb:/ipfs/QmSdj3ZEHhmCMaK1Cx8CvP2Nsfdnf5gr3TVqiR5iETaBtE"],"license":"UNLICENSED"},"src/staking/base/BaseStaking.sol":{"keccak256":"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393","urls":["bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46","dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx"],"license":"MIT"},"src/staking/interfaces/IMovementStaking.sol":{"keccak256":"0x66bce33452b60845a2d47bd0e4c58dc8d1c690f2681b4c2d6de3a6db9cd09d34","urls":["bzz-raw://f6dac6c2395bc43a7e3a7637e63a2deafbb9cf815ad9d879919f6a7f31c47b44","dweb:/ipfs/QmRQSBNe2xZXksDkVmRfsiz3a1Zp9NLD8kHYPnMW4ytzDM"],"license":null},"src/token/base/BaseToken.sol":{"keccak256":"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2","urls":["bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e","dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd"],"license":"MIT"},"src/token/base/MintableToken.sol":{"keccak256":"0x67dcaae55138dda0f6fb9cce7d00b21b1dcf48144d0442073bec83aedbd73ca6","urls":["bzz-raw://009d22618ed30e84b0839edbe7bd1a18afe7073a62477667bf96d765428385b7","dweb:/ipfs/QmNzA9RjM6SxVJYWohq7JbLvyBrhzzjzQQwBfArBQqCNAQ"],"license":"MIT"},"src/token/base/WrappedToken.sol":{"keccak256":"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45","urls":["bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885","dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4"],"license":"MIT"},"src/token/base/WrappedTokenStorage.sol":{"keccak256":"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e","urls":["bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08","dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj"],"license":"MIT"},"src/token/custodian/CustodianToken.sol":{"keccak256":"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350","urls":["bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04","dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":50962,"contract":"src/settlement/MCR.sol:MCR","label":"stakingContract","offset":0,"slot":"0","type":"t_contract(IMovementStaking)52990"},{"astId":50964,"contract":"src/settlement/MCR.sol:MCR","label":"leadingSuperBlockTolerance","offset":0,"slot":"1","type":"t_uint256"},{"astId":50966,"contract":"src/settlement/MCR.sol:MCR","label":"lastPostconfirmedSuperBlockHeight","offset":0,"slot":"2","type":"t_uint256"},{"astId":50969,"contract":"src/settlement/MCR.sol:MCR","label":"acceptorTerm","offset":0,"slot":"3","type":"t_uint256"},{"astId":50971,"contract":"src/settlement/MCR.sol:MCR","label":"currentAcceptor","offset":0,"slot":"4","type":"t_address"},{"astId":50983,"contract":"src/settlement/MCR.sol:MCR","label":"superBlockHeightAssignedEpoch","offset":0,"slot":"5","type":"t_mapping(t_uint256,t_uint256)"},{"astId":50990,"contract":"src/settlement/MCR.sol:MCR","label":"commitments","offset":0,"slot":"6","type":"t_mapping(t_uint256,t_mapping(t_address,t_struct(SuperBlockCommitment)50979_storage))"},{"astId":50996,"contract":"src/settlement/MCR.sol:MCR","label":"commitmentStakes","offset":0,"slot":"7","type":"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))"},{"astId":51000,"contract":"src/settlement/MCR.sol:MCR","label":"postconfirmedBy","offset":0,"slot":"8","type":"t_mapping(t_uint256,t_address)"},{"astId":51004,"contract":"src/settlement/MCR.sol:MCR","label":"postconfirmedByAcceptor","offset":0,"slot":"9","type":"t_mapping(t_uint256,t_bool)"},{"astId":51008,"contract":"src/settlement/MCR.sol:MCR","label":"postconfirmedAtL1BlockHeight","offset":0,"slot":"10","type":"t_mapping(t_uint256,t_uint256)"},{"astId":51012,"contract":"src/settlement/MCR.sol:MCR","label":"postconfirmedAtL1BlockTimestamp","offset":0,"slot":"11","type":"t_mapping(t_uint256,t_uint256)"},{"astId":51016,"contract":"src/settlement/MCR.sol:MCR","label":"postconfirmedAtL1BlockHeightByAcceptor","offset":0,"slot":"12","type":"t_mapping(t_uint256,t_uint256)"},{"astId":51021,"contract":"src/settlement/MCR.sol:MCR","label":"postconfirmedSuperBlocks","offset":0,"slot":"13","type":"t_mapping(t_uint256,t_struct(SuperBlockCommitment)50979_storage)"},{"astId":51023,"contract":"src/settlement/MCR.sol:MCR","label":"openAttestationEnabled","offset":0,"slot":"14","type":"t_bool"},{"astId":51030,"contract":"src/settlement/MCR.sol:MCR","label":"versionedPostconfirmedSuperBlocks","offset":0,"slot":"15","type":"t_mapping(t_uint256,t_mapping(t_uint256,t_struct(SuperBlockCommitment)50979_storage))"},{"astId":51032,"contract":"src/settlement/MCR.sol:MCR","label":"postconfirmedSuperBlocksVersion","offset":0,"slot":"16","type":"t_uint256"},{"astId":51036,"contract":"src/settlement/MCR.sol:MCR","label":"__gap","offset":0,"slot":"17","type":"t_array(t_uint256)47_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)47_storage":{"encoding":"inplace","label":"uint256[47]","numberOfBytes":"1504","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IMovementStaking)52990":{"encoding":"inplace","label":"contract IMovementStaking","numberOfBytes":"20"},"t_mapping(t_address,t_struct(SuperBlockCommitment)50979_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct MCRStorage.SuperBlockCommitment)","numberOfBytes":"32","value":"t_struct(SuperBlockCommitment)50979_storage"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint256,t_bool)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_uint256,t_mapping(t_address,t_struct(SuperBlockCommitment)50979_storage))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => struct MCRStorage.SuperBlockCommitment))","numberOfBytes":"32","value":"t_mapping(t_address,t_struct(SuperBlockCommitment)50979_storage)"},"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_uint256,t_mapping(t_uint256,t_struct(SuperBlockCommitment)50979_storage))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(uint256 => struct MCRStorage.SuperBlockCommitment))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_struct(SuperBlockCommitment)50979_storage)"},"t_mapping(t_uint256,t_struct(SuperBlockCommitment)50979_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct MCRStorage.SuperBlockCommitment)","numberOfBytes":"32","value":"t_struct(SuperBlockCommitment)50979_storage"},"t_mapping(t_uint256,t_uint256)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_struct(SuperBlockCommitment)50979_storage":{"encoding":"inplace","label":"struct MCRStorage.SuperBlockCommitment","numberOfBytes":"96","members":[{"astId":50974,"contract":"src/settlement/MCR.sol:MCR","label":"height","offset":0,"slot":"0","type":"t_uint256"},{"astId":50976,"contract":"src/settlement/MCR.sol:MCR","label":"commitment","offset":0,"slot":"1","type":"t_bytes32"},{"astId":50978,"contract":"src/settlement/MCR.sol:MCR","label":"blockId","offset":0,"slot":"2","type":"t_bytes32"}]},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/settlement/MCR.sol","id":50952,"exportedSymbols":{"BaseSettlement":[51115],"EnumerableSet":[46968],"IMCR":[51060],"IMovementStaking":[52990],"Initializable":[39600],"MCR":[50951],"MCRStorage":[51037],"MovementStaking":[52616],"ReentrancyGuard":[44373],"console":[24267]},"nodeType":"SourceUnit","src":"39:23341:88","nodes":[{"id":49804,"nodeType":"PragmaDirective","src":"39:24:88","nodes":[],"literals":["solidity","^","0.8",".13"]},{"id":49806,"nodeType":"ImportDirective","src":"65:86:88","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol","file":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":46969,"symbolAliases":[{"foreign":{"id":49805,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46968,"src":"73:13:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":49808,"nodeType":"ImportDirective","src":"152:96:88","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":39601,"symbolAliases":[{"foreign":{"id":49807,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39600,"src":"160:13:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":49809,"nodeType":"ImportDirective","src":"249:31:88","nodes":[],"absolutePath":"lib/forge-std/src/console.sol","file":"forge-std/console.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":24268,"symbolAliases":[],"unitAlias":""},{"id":49812,"nodeType":"ImportDirective","src":"281:81:88","nodes":[],"absolutePath":"src/staking/MovementStaking.sol","file":"../staking/MovementStaking.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":52617,"symbolAliases":[{"foreign":{"id":49810,"name":"MovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52616,"src":"289:15:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":49811,"name":"IMovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52990,"src":"306:16:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":49814,"nodeType":"ImportDirective","src":"363:44:88","nodes":[],"absolutePath":"src/settlement/MCRStorage.sol","file":"./MCRStorage.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":51038,"symbolAliases":[{"foreign":{"id":49813,"name":"MCRStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51037,"src":"371:10:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":49816,"nodeType":"ImportDirective","src":"408:63:88","nodes":[],"absolutePath":"src/settlement/settlement/BaseSettlement.sol","file":"./settlement/BaseSettlement.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":51116,"symbolAliases":[{"foreign":{"id":49815,"name":"BaseSettlement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51115,"src":"416:14:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":49818,"nodeType":"ImportDirective","src":"472:43:88","nodes":[],"absolutePath":"src/settlement/interfaces/IMCR.sol","file":"./interfaces/IMCR.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":51061,"symbolAliases":[{"foreign":{"id":49817,"name":"IMCR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51060,"src":"480:4:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":49819,"nodeType":"ImportDirective","src":"516:59:88","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":44374,"symbolAliases":[],"unitAlias":""},{"id":50951,"nodeType":"ContractDefinition","src":"577:22802:88","nodes":[{"id":49832,"nodeType":"VariableDeclaration","src":"686:72:88","nodes":[],"constant":true,"functionSelector":"80e460f0","mutability":"constant","name":"COMMITMENT_ADMIN","nameLocation":"710:16:88","scope":50951,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49828,"name":"bytes32","nodeType":"ElementaryTypeName","src":"686:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"434f4d4d49544d454e545f41444d494e","id":49830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"739:18:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_db2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c","typeString":"literal_string \"COMMITMENT_ADMIN\""},"value":"COMMITMENT_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_db2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c","typeString":"literal_string \"COMMITMENT_ADMIN\""}],"id":49829,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"729:9:88","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":49831,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"729:29:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":49837,"nodeType":"VariableDeclaration","src":"796:72:88","nodes":[],"constant":true,"functionSelector":"5db916ab","mutability":"constant","name":"TRUSTED_ATTESTER","nameLocation":"820:16:88","scope":50951,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49833,"name":"bytes32","nodeType":"ElementaryTypeName","src":"796:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"545255535445445f4154544553544552","id":49835,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"849:18:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18","typeString":"literal_string \"TRUSTED_ATTESTER\""},"value":"TRUSTED_ATTESTER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18","typeString":"literal_string \"TRUSTED_ATTESTER\""}],"id":49834,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"839:9:88","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":49836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"839:29:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":49893,"nodeType":"FunctionDefinition","src":"875:718:88","nodes":[],"body":{"id":49892,"nodeType":"Block","src":"1162:431:88","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":49856,"name":"__BaseSettlement_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51103,"src":"1172:31:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":49857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1172:33:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49858,"nodeType":"ExpressionStatement","src":"1172:33:88"},{"expression":{"id":49861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49859,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"1215:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49860,"name":"_stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49840,"src":"1233:16:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"src":"1215:34:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":49862,"nodeType":"ExpressionStatement","src":"1215:34:88"},{"expression":{"id":49865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49863,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50964,"src":"1259:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49864,"name":"_leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49844,"src":"1288:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1259:56:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49866,"nodeType":"ExpressionStatement","src":"1259:56:88"},{"expression":{"id":49869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49867,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50966,"src":"1325:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49868,"name":"_lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49842,"src":"1361:34:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1325:70:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49870,"nodeType":"ExpressionStatement","src":"1325:70:88"},{"expression":{"arguments":[{"id":49874,"name":"_epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49846,"src":"1436:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":49875,"name":"_custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49849,"src":"1452:11:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"expression":{"id":49871,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"1405:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":49873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1421:14:88","memberName":"registerDomain","nodeType":"MemberAccess","referencedDeclaration":52764,"src":"1405:30:88","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (uint256,address[] memory) external"}},"id":49876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1405:59:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49877,"nodeType":"ExpressionStatement","src":"1405:59:88"},{"expression":{"arguments":[{"expression":{"id":49879,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1495:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":49880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1499:6:88","memberName":"sender","nodeType":"MemberAccess","src":"1495:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":49878,"name":"grantCommitmentAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49913,"src":"1474:20:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":49881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1474:32:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49882,"nodeType":"ExpressionStatement","src":"1474:32:88"},{"expression":{"arguments":[{"expression":{"id":49884,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1537:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":49885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1541:6:88","memberName":"sender","nodeType":"MemberAccess","src":"1537:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":49883,"name":"grantTrustedAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50704,"src":"1516:20:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":49886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1516:32:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49887,"nodeType":"ExpressionStatement","src":"1516:32:88"},{"expression":{"id":49890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49888,"name":"acceptorTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50969,"src":"1558:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49889,"name":"_acceptorTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49851,"src":"1573:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1558:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49891,"nodeType":"ExpressionStatement","src":"1558:28:88"}]},"functionSelector":"03f02fc0","implemented":true,"kind":"function","modifiers":[{"id":49854,"kind":"modifierInvocation","modifierName":{"id":49853,"name":"initializer","nameLocations":["1150:11:88"],"nodeType":"IdentifierPath","referencedDeclaration":39454,"src":"1150:11:88"},"nodeType":"ModifierInvocation","src":"1150:11:88"}],"name":"initialize","nameLocation":"884:10:88","parameters":{"id":49852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49840,"mutability":"mutable","name":"_stakingContract","nameLocation":"921:16:88","nodeType":"VariableDeclaration","scope":49893,"src":"904:33:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"},"typeName":{"id":49839,"nodeType":"UserDefinedTypeName","pathNode":{"id":49838,"name":"IMovementStaking","nameLocations":["904:16:88"],"nodeType":"IdentifierPath","referencedDeclaration":52990,"src":"904:16:88"},"referencedDeclaration":52990,"src":"904:16:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"visibility":"internal"},{"constant":false,"id":49842,"mutability":"mutable","name":"_lastPostconfirmedSuperBlockHeight","nameLocation":"955:34:88","nodeType":"VariableDeclaration","scope":49893,"src":"947:42:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49841,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":49844,"mutability":"mutable","name":"_leadingSuperBlockTolerance","nameLocation":"1007:27:88","nodeType":"VariableDeclaration","scope":49893,"src":"999:35:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49843,"name":"uint256","nodeType":"ElementaryTypeName","src":"999:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":49846,"mutability":"mutable","name":"_epochDuration","nameLocation":"1052:14:88","nodeType":"VariableDeclaration","scope":49893,"src":"1044:22:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49845,"name":"uint256","nodeType":"ElementaryTypeName","src":"1044:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":49849,"mutability":"mutable","name":"_custodians","nameLocation":"1093:11:88","nodeType":"VariableDeclaration","scope":49893,"src":"1076:28:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":49847,"name":"address","nodeType":"ElementaryTypeName","src":"1076:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":49848,"nodeType":"ArrayTypeName","src":"1076:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":49851,"mutability":"mutable","name":"_acceptorTerm","nameLocation":"1122:13:88","nodeType":"VariableDeclaration","scope":49893,"src":"1114:21:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49850,"name":"uint256","nodeType":"ElementaryTypeName","src":"1114:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"894:248:88"},"returnParameters":{"id":49855,"nodeType":"ParameterList","parameters":[],"src":"1162:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":49913,"nodeType":"FunctionDefinition","src":"1599:237:88","nodes":[],"body":{"id":49912,"nodeType":"Block","src":"1653:183:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":49900,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39012,"src":"1692:18:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":49901,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1712:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":49902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1716:6:88","memberName":"sender","nodeType":"MemberAccess","src":"1712:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":49899,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"1684:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":49903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1684:39:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e4c59","id":49904,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1737:36:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""},"value":"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""}],"id":49898,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1663:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":49905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1663:120:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49906,"nodeType":"ExpressionStatement","src":"1663:120:88"},{"expression":{"arguments":[{"id":49908,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"1803:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":49909,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49895,"src":"1821:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":49907,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39174,"src":"1793:9:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":49910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1793:36:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49911,"nodeType":"ExpressionStatement","src":"1793:36:88"}]},"functionSelector":"949d7c2a","implemented":true,"kind":"function","modifiers":[],"name":"grantCommitmentAdmin","nameLocation":"1608:20:88","parameters":{"id":49896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49895,"mutability":"mutable","name":"account","nameLocation":"1637:7:88","nodeType":"VariableDeclaration","scope":49913,"src":"1629:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49894,"name":"address","nodeType":"ElementaryTypeName","src":"1629:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1628:17:88"},"returnParameters":{"id":49897,"nodeType":"ParameterList","parameters":[],"src":"1653:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":49949,"nodeType":"FunctionDefinition","src":"1842:326:88","nodes":[],"body":{"id":49948,"nodeType":"Block","src":"1911:257:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":49921,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39012,"src":"1950:18:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":49922,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1970:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":49923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1974:6:88","memberName":"sender","nodeType":"MemberAccess","src":"1970:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":49920,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"1942:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":49924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1942:39:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e4c59","id":49925,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1995:36:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""},"value":"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""}],"id":49919,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1921:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":49926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1921:120:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49927,"nodeType":"ExpressionStatement","src":"1921:120:88"},{"body":{"id":49946,"nodeType":"Block","src":"2097:65:88","statements":[{"expression":{"arguments":[{"id":49940,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"2121:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":49941,"name":"accounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49916,"src":"2139:8:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":49943,"indexExpression":{"id":49942,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49929,"src":"2148:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2139:11:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":49939,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39174,"src":"2111:9:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":49944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2111:40:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49945,"nodeType":"ExpressionStatement","src":"2111:40:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49932,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49929,"src":"2071:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":49933,"name":"accounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49916,"src":"2075:8:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":49934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2084:6:88","memberName":"length","nodeType":"MemberAccess","src":"2075:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2071:19:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49947,"initializationExpression":{"assignments":[49929],"declarations":[{"constant":false,"id":49929,"mutability":"mutable","name":"i","nameLocation":"2064:1:88","nodeType":"VariableDeclaration","scope":49947,"src":"2056:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49928,"name":"uint256","nodeType":"ElementaryTypeName","src":"2056:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49931,"initialValue":{"hexValue":"30","id":49930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2068:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2056:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":49937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2092:3:88","subExpression":{"id":49936,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49929,"src":"2092:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49938,"nodeType":"ExpressionStatement","src":"2092:3:88"},"nodeType":"ForStatement","src":"2051:111:88"}]},"functionSelector":"4b47d955","implemented":true,"kind":"function","modifiers":[],"name":"batchGrantCommitmentAdmin","nameLocation":"1851:25:88","parameters":{"id":49917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49916,"mutability":"mutable","name":"accounts","nameLocation":"1894:8:88","nodeType":"VariableDeclaration","scope":49949,"src":"1877:25:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":49914,"name":"address","nodeType":"ElementaryTypeName","src":"1877:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":49915,"nodeType":"ArrayTypeName","src":"1877:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1876:27:88"},"returnParameters":{"id":49918,"nodeType":"ParameterList","parameters":[],"src":"1911:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":49968,"nodeType":"FunctionDefinition","src":"2202:242:88","nodes":[],"body":{"id":49967,"nodeType":"Block","src":"2371:73:88","nodes":[],"statements":[{"expression":{"arguments":[{"id":49962,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49951,"src":"2409:6:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":49963,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49953,"src":"2417:10:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":49964,"name":"blockId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49955,"src":"2429:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":49961,"name":"SuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50979,"src":"2388:20:88","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SuperBlockCommitment_$50979_storage_ptr_$","typeString":"type(struct MCRStorage.SuperBlockCommitment storage pointer)"}},"id":49965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2388:49:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"functionReturnParameters":49960,"id":49966,"nodeType":"Return","src":"2381:56:88"}]},"functionSelector":"026583d7","implemented":true,"kind":"function","modifiers":[],"name":"createSuperBlockCommitment","nameLocation":"2211:26:88","parameters":{"id":49956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49951,"mutability":"mutable","name":"height","nameLocation":"2255:6:88","nodeType":"VariableDeclaration","scope":49968,"src":"2247:14:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49950,"name":"uint256","nodeType":"ElementaryTypeName","src":"2247:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":49953,"mutability":"mutable","name":"commitment","nameLocation":"2279:10:88","nodeType":"VariableDeclaration","scope":49968,"src":"2271:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49952,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2271:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49955,"mutability":"mutable","name":"blockId","nameLocation":"2307:7:88","nodeType":"VariableDeclaration","scope":49968,"src":"2299:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49954,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2299:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2237:83:88"},"returnParameters":{"id":49960,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49959,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49968,"src":"2342:27:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":49958,"nodeType":"UserDefinedTypeName","pathNode":{"id":49957,"name":"SuperBlockCommitment","nameLocations":["2342:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"2342:20:88"},"referencedDeclaration":50979,"src":"2342:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"2341:29:88"},"scope":50951,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":49978,"nodeType":"FunctionDefinition","src":"2498:159:88","nodes":[],"body":{"id":49977,"nodeType":"Block","src":"2571:86:88","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49973,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50966,"src":"2588:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":49974,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50964,"src":"2624:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2588:62:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49972,"id":49976,"nodeType":"Return","src":"2581:69:88"}]},"functionSelector":"943b79e2","implemented":true,"kind":"function","modifiers":[],"name":"getMaxTolerableSuperBlockHeight","nameLocation":"2507:31:88","parameters":{"id":49969,"nodeType":"ParameterList","parameters":[],"src":"2538:2:88"},"returnParameters":{"id":49972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49971,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49978,"src":"2562:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49970,"name":"uint256","nodeType":"ElementaryTypeName","src":"2562:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2561:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":49992,"nodeType":"FunctionDefinition","src":"2723:133:88","nodes":[],"body":{"id":49991,"nodeType":"Block","src":"2780:76:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":49987,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2843:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":49986,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2835:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":49985,"name":"address","nodeType":"ElementaryTypeName","src":"2835:7:88","typeDescriptions":{}}},"id":49988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2835:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":49983,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"2797:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":49984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2813:21:88","memberName":"getEpochByL1BlockTime","nodeType":"MemberAccess","referencedDeclaration":52774,"src":"2797:37:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":49989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2797:52:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49982,"id":49990,"nodeType":"Return","src":"2790:59:88"}]},"functionSelector":"37d7f58f","implemented":true,"kind":"function","modifiers":[],"name":"getPresentEpoch","nameLocation":"2732:15:88","parameters":{"id":49979,"nodeType":"ParameterList","parameters":[],"src":"2747:2:88"},"returnParameters":{"id":49982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49992,"src":"2771:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49980,"name":"uint256","nodeType":"ElementaryTypeName","src":"2771:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2770:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50006,"nodeType":"FunctionDefinition","src":"2927:131:88","nodes":[],"body":{"id":50005,"nodeType":"Block","src":"2986:72:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50001,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3045:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50000,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3037:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":49999,"name":"address","nodeType":"ElementaryTypeName","src":"3037:7:88","typeDescriptions":{}}},"id":50002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3037:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":49997,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"3003:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":49998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3019:17:88","memberName":"getAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":52781,"src":"3003:33:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":50003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3003:48:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49996,"id":50004,"nodeType":"Return","src":"2996:55:88"}]},"functionSelector":"6c713af8","implemented":true,"kind":"function","modifiers":[],"name":"getAcceptingEpoch","nameLocation":"2936:17:88","parameters":{"id":49993,"nodeType":"ParameterList","parameters":[],"src":"2953:2:88"},"returnParameters":{"id":49996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49995,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50006,"src":"2977:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49994,"name":"uint256","nodeType":"ElementaryTypeName","src":"2977:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2976:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50020,"nodeType":"FunctionDefinition","src":"3091:139:88","nodes":[],"body":{"id":50019,"nodeType":"Block","src":"3154:76:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50015,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3217:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50014,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3209:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50013,"name":"address","nodeType":"ElementaryTypeName","src":"3209:7:88","typeDescriptions":{}}},"id":50016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3209:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50011,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"3171:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3187:21:88","memberName":"getNextAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":52788,"src":"3171:37:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":50017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3171:52:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50010,"id":50018,"nodeType":"Return","src":"3164:59:88"}]},"functionSelector":"e4d991ee","implemented":true,"kind":"function","modifiers":[],"name":"getNextAcceptingEpoch","nameLocation":"3100:21:88","parameters":{"id":50007,"nodeType":"ParameterList","parameters":[],"src":"3121:2:88"},"returnParameters":{"id":50010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50009,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50020,"src":"3145:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50008,"name":"uint256","nodeType":"ElementaryTypeName","src":"3145:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3144:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50044,"nodeType":"FunctionDefinition","src":"3324:311:88","nodes":[],"body":{"id":50043,"nodeType":"Block","src":"3454:181:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50036,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3533:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50035,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3525:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50034,"name":"address","nodeType":"ElementaryTypeName","src":"3525:7:88","typeDescriptions":{}}},"id":50037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3525:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":50038,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50023,"src":"3556:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50039,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50025,"src":"3579:9:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":50040,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50027,"src":"3606:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50032,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"3483:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3499:8:88","memberName":"getStake","nodeType":"MemberAccess","referencedDeclaration":52808,"src":"3483:24:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view external returns (uint256)"}},"id":50041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3483:145:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50031,"id":50042,"nodeType":"Return","src":"3464:164:88"}]},"documentation":{"id":50021,"nodeType":"StructuredDocumentation","src":"3236:83:88","text":"@notice Gets the stake for a given tuple (custodian, attester) at a given epoch"},"functionSelector":"7aa81c2a","implemented":true,"kind":"function","modifiers":[],"name":"getStake","nameLocation":"3333:8:88","parameters":{"id":50028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50023,"mutability":"mutable","name":"epoch","nameLocation":"3359:5:88","nodeType":"VariableDeclaration","scope":50044,"src":"3351:13:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50022,"name":"uint256","nodeType":"ElementaryTypeName","src":"3351:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50025,"mutability":"mutable","name":"custodian","nameLocation":"3382:9:88","nodeType":"VariableDeclaration","scope":50044,"src":"3374:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50024,"name":"address","nodeType":"ElementaryTypeName","src":"3374:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":50027,"mutability":"mutable","name":"attester","nameLocation":"3409:8:88","nodeType":"VariableDeclaration","scope":50044,"src":"3401:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50026,"name":"address","nodeType":"ElementaryTypeName","src":"3401:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3341:82:88"},"returnParameters":{"id":50031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50030,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50044,"src":"3445:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50029,"name":"uint256","nodeType":"ElementaryTypeName","src":"3445:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3444:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50062,"nodeType":"FunctionDefinition","src":"3735:198:88","nodes":[],"body":{"id":50061,"nodeType":"Block","src":"3859:74:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":50055,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50006,"src":"3885:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3885:19:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50057,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50047,"src":"3906:9:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":50058,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50049,"src":"3917:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50054,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50044,"src":"3876:8:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) view returns (uint256)"}},"id":50059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3876:50:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50053,"id":50060,"nodeType":"Return","src":"3869:57:88"}]},"documentation":{"id":50045,"nodeType":"StructuredDocumentation","src":"3641:89:88","text":"@notice Gets the stake for a given tuple (custodian, attester) at the accepting epoch"},"functionSelector":"bb04bd2f","implemented":true,"kind":"function","modifiers":[],"name":"getStakeForAcceptingEpoch","nameLocation":"3744:25:88","parameters":{"id":50050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50047,"mutability":"mutable","name":"custodian","nameLocation":"3787:9:88","nodeType":"VariableDeclaration","scope":50062,"src":"3779:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50046,"name":"address","nodeType":"ElementaryTypeName","src":"3779:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":50049,"mutability":"mutable","name":"attester","nameLocation":"3814:8:88","nodeType":"VariableDeclaration","scope":50062,"src":"3806:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50048,"name":"address","nodeType":"ElementaryTypeName","src":"3806:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3769:59:88"},"returnParameters":{"id":50053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50052,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50062,"src":"3850:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50051,"name":"uint256","nodeType":"ElementaryTypeName","src":"3850:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3849:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50115,"nodeType":"FunctionDefinition","src":"4067:484:88","nodes":[],"body":{"id":50114,"nodeType":"Block","src":"4178:373:88","nodes":[],"statements":[{"assignments":[50076],"declarations":[{"constant":false,"id":50076,"mutability":"mutable","name":"custodians","nameLocation":"4205:10:88","nodeType":"VariableDeclaration","scope":50114,"src":"4188:27:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":50074,"name":"address","nodeType":"ElementaryTypeName","src":"4188:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50075,"nodeType":"ArrayTypeName","src":"4188:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":50084,"initialValue":{"arguments":[{"arguments":[{"id":50081,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4279:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50080,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4271:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50079,"name":"address","nodeType":"ElementaryTypeName","src":"4271:7:88","typeDescriptions":{}}},"id":50082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4271:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50077,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"4218:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4234:23:88","memberName":"getRegisteredCustodians","nodeType":"MemberAccess","referencedDeclaration":52890,"src":"4218:39:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":50083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4218:76:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"4188:106:88"},{"assignments":[50086],"declarations":[{"constant":false,"id":50086,"mutability":"mutable","name":"totalStake","nameLocation":"4312:10:88","nodeType":"VariableDeclaration","scope":50114,"src":"4304:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50085,"name":"uint256","nodeType":"ElementaryTypeName","src":"4304:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50088,"initialValue":{"hexValue":"30","id":50087,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4325:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4304:22:88"},{"body":{"id":50110,"nodeType":"Block","src":"4384:134:88","statements":[{"expression":{"id":50108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50100,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50086,"src":"4453:10:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":50102,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50065,"src":"4476:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":50103,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50076,"src":"4483:10:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50105,"indexExpression":{"id":50104,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50090,"src":"4494:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4483:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":50106,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50067,"src":"4498:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50101,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50044,"src":"4467:8:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) view returns (uint256)"}},"id":50107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4467:40:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4453:54:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50109,"nodeType":"ExpressionStatement","src":"4453:54:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50093,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50090,"src":"4356:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":50094,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50076,"src":"4360:10:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4371:6:88","memberName":"length","nodeType":"MemberAccess","src":"4360:17:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4356:21:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50111,"initializationExpression":{"assignments":[50090],"declarations":[{"constant":false,"id":50090,"mutability":"mutable","name":"i","nameLocation":"4349:1:88","nodeType":"VariableDeclaration","scope":50111,"src":"4341:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50089,"name":"uint256","nodeType":"ElementaryTypeName","src":"4341:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50092,"initialValue":{"hexValue":"30","id":50091,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4353:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4341:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":50098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4379:3:88","subExpression":{"id":50097,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50090,"src":"4379:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50099,"nodeType":"ExpressionStatement","src":"4379:3:88"},"nodeType":"ForStatement","src":"4336:182:88"},{"expression":{"id":50112,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50086,"src":"4534:10:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50071,"id":50113,"nodeType":"Return","src":"4527:17:88"}]},"documentation":{"id":50063,"nodeType":"StructuredDocumentation","src":"3939:64:88","text":"@notice Gets the stake for a given attester at a given epoch"},"functionSelector":"ba26513e","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStake","nameLocation":"4076:16:88","parameters":{"id":50068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50065,"mutability":"mutable","name":"epoch","nameLocation":"4110:5:88","nodeType":"VariableDeclaration","scope":50115,"src":"4102:13:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50064,"name":"uint256","nodeType":"ElementaryTypeName","src":"4102:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50067,"mutability":"mutable","name":"attester","nameLocation":"4133:8:88","nodeType":"VariableDeclaration","scope":50115,"src":"4125:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50066,"name":"address","nodeType":"ElementaryTypeName","src":"4125:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4092:55:88"},"returnParameters":{"id":50071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50070,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50115,"src":"4169:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50069,"name":"uint256","nodeType":"ElementaryTypeName","src":"4169:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4168:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50130,"nodeType":"FunctionDefinition","src":"4632:176:88","nodes":[],"body":{"id":50129,"nodeType":"Block","src":"4737:71:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":50124,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50006,"src":"4771:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4771:19:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50126,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50118,"src":"4792:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50123,"name":"getAttesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50115,"src":"4754:16:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":50127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4754:47:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50122,"id":50128,"nodeType":"Return","src":"4747:54:88"}]},"documentation":{"id":50116,"nodeType":"StructuredDocumentation","src":"4557:70:88","text":"@notice Gets the stake for a given attester at the accepting epoch"},"functionSelector":"491d0467","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStakeForAcceptingEpoch","nameLocation":"4641:33:88","parameters":{"id":50119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50118,"mutability":"mutable","name":"attester","nameLocation":"4692:8:88","nodeType":"VariableDeclaration","scope":50130,"src":"4684:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50117,"name":"address","nodeType":"ElementaryTypeName","src":"4684:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4674:32:88"},"returnParameters":{"id":50122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50121,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50130,"src":"4728:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50120,"name":"uint256","nodeType":"ElementaryTypeName","src":"4728:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4727:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50151,"nodeType":"FunctionDefinition","src":"4886:287:88","nodes":[],"body":{"id":50150,"nodeType":"Block","src":"4999:174:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50144,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5087:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5079:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50142,"name":"address","nodeType":"ElementaryTypeName","src":"5079:7:88","typeDescriptions":{}}},"id":50145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5079:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":50146,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50133,"src":"5120:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50147,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50135,"src":"5143:9:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50140,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"5028:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5044:17:88","memberName":"getCustodianStake","nodeType":"MemberAccess","referencedDeclaration":52854,"src":"5028:33:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view external returns (uint256)"}},"id":50148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5028:138:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50139,"id":50149,"nodeType":"Return","src":"5009:157:88"}]},"documentation":{"id":50131,"nodeType":"StructuredDocumentation","src":"4815:66:88","text":"@notice Gets the stake for a given custodian for a given epoch"},"functionSelector":"1de38fe1","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStake","nameLocation":"4895:17:88","parameters":{"id":50136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50133,"mutability":"mutable","name":"epoch","nameLocation":"4930:5:88","nodeType":"VariableDeclaration","scope":50151,"src":"4922:13:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50132,"name":"uint256","nodeType":"ElementaryTypeName","src":"4922:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50135,"mutability":"mutable","name":"custodian","nameLocation":"4953:9:88","nodeType":"VariableDeclaration","scope":50151,"src":"4945:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50134,"name":"address","nodeType":"ElementaryTypeName","src":"4945:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4912:56:88"},"returnParameters":{"id":50139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50151,"src":"4990:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50137,"name":"uint256","nodeType":"ElementaryTypeName","src":"4990:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4989:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50169,"nodeType":"FunctionDefinition","src":"5179:229:88","nodes":[],"body":{"id":50168,"nodeType":"Block","src":"5219:189:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50156,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39012,"src":"5258:18:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50157,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5278:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5282:6:88","memberName":"sender","nodeType":"MemberAccess","src":"5278:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50155,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"5250:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":50159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5250:39:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e5f4f4e4c59","id":50160,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5303:39:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_b077b31285a16307062fcb4fde0e57e8246ea6dc3cdd1c5dd5880d32a26fbf54","typeString":"literal_string \"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY\""},"value":"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b077b31285a16307062fcb4fde0e57e8246ea6dc3cdd1c5dd5880d32a26fbf54","typeString":"literal_string \"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY\""}],"id":50154,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5229:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":50161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5229:123:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50162,"nodeType":"ExpressionStatement","src":"5229:123:88"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":50163,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"5362:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5378:21:88","memberName":"acceptGenesisCeremony","nodeType":"MemberAccess","referencedDeclaration":52767,"src":"5362:37:88","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":50166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5362:39:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50167,"nodeType":"ExpressionStatement","src":"5362:39:88"}]},"functionSelector":"92a2ebf3","implemented":true,"kind":"function","modifiers":[],"name":"acceptGenesisCeremony","nameLocation":"5188:21:88","parameters":{"id":50152,"nodeType":"ParameterList","parameters":[],"src":"5209:2:88"},"returnParameters":{"id":50153,"nodeType":"ParameterList","parameters":[],"src":"5219:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50218,"nodeType":"FunctionDefinition","src":"5414:611:88","nodes":[],"body":{"id":50217,"nodeType":"Block","src":"5500:525:88","nodes":[],"statements":[{"assignments":[50180],"declarations":[{"constant":false,"id":50180,"mutability":"mutable","name":"custodians","nameLocation":"5680:10:88","nodeType":"VariableDeclaration","scope":50217,"src":"5663:27:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":50178,"name":"address","nodeType":"ElementaryTypeName","src":"5663:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50179,"nodeType":"ArrayTypeName","src":"5663:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":50188,"initialValue":{"arguments":[{"arguments":[{"id":50185,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5754:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50184,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5746:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50183,"name":"address","nodeType":"ElementaryTypeName","src":"5746:7:88","typeDescriptions":{}}},"id":50186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5746:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50181,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"5693:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5709:23:88","memberName":"getRegisteredCustodians","nodeType":"MemberAccess","referencedDeclaration":52890,"src":"5693:39:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":50187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5693:76:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5663:106:88"},{"assignments":[50190],"declarations":[{"constant":false,"id":50190,"mutability":"mutable","name":"totalStake","nameLocation":"5787:10:88","nodeType":"VariableDeclaration","scope":50217,"src":"5779:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50189,"name":"uint256","nodeType":"ElementaryTypeName","src":"5779:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50192,"initialValue":{"hexValue":"30","id":50191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5800:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5779:22:88"},{"body":{"id":50213,"nodeType":"Block","src":"5859:133:88","statements":[{"expression":{"id":50211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50204,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50190,"src":"5928:10:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":50206,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50171,"src":"5960:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":50207,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50180,"src":"5967:10:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50209,"indexExpression":{"id":50208,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50194,"src":"5978:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5967:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50205,"name":"getCustodianStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50151,"src":"5942:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":50210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5942:39:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5928:53:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50212,"nodeType":"ExpressionStatement","src":"5928:53:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50197,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50194,"src":"5831:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":50198,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50180,"src":"5835:10:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5846:6:88","memberName":"length","nodeType":"MemberAccess","src":"5835:17:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5831:21:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50214,"initializationExpression":{"assignments":[50194],"declarations":[{"constant":false,"id":50194,"mutability":"mutable","name":"i","nameLocation":"5824:1:88","nodeType":"VariableDeclaration","scope":50214,"src":"5816:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50193,"name":"uint256","nodeType":"ElementaryTypeName","src":"5816:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50196,"initialValue":{"hexValue":"30","id":50195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5828:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5816:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":50202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5854:3:88","subExpression":{"id":50201,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50194,"src":"5854:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50203,"nodeType":"ExpressionStatement","src":"5854:3:88"},"nodeType":"ForStatement","src":"5811:181:88"},{"expression":{"id":50215,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50190,"src":"6008:10:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50175,"id":50216,"nodeType":"Return","src":"6001:17:88"}]},"functionSelector":"0daf6181","implemented":true,"kind":"function","modifiers":[],"name":"computeTotalStake","nameLocation":"5423:17:88","parameters":{"id":50172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50171,"mutability":"mutable","name":"epoch","nameLocation":"5458:5:88","nodeType":"VariableDeclaration","scope":50218,"src":"5450:13:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50170,"name":"uint256","nodeType":"ElementaryTypeName","src":"5450:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5440:29:88"},"returnParameters":{"id":50175,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50174,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50218,"src":"5491:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50173,"name":"uint256","nodeType":"ElementaryTypeName","src":"5491:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5490:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50229,"nodeType":"FunctionDefinition","src":"6032:166:88","nodes":[],"body":{"id":50228,"nodeType":"Block","src":"6136:62:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":50224,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50006,"src":"6171:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6171:19:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50223,"name":"computeTotalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50218,"src":"6153:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":50226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6153:38:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50222,"id":50227,"nodeType":"Return","src":"6146:45:88"}]},"functionSelector":"08c39793","implemented":true,"kind":"function","modifiers":[],"name":"computeTotalStakeForAcceptingEpoch","nameLocation":"6041:34:88","parameters":{"id":50219,"nodeType":"ParameterList","parameters":[],"src":"6075:2:88"},"returnParameters":{"id":50222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50221,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50229,"src":"6123:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50220,"name":"uint256","nodeType":"ElementaryTypeName","src":"6123:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6122:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50243,"nodeType":"FunctionDefinition","src":"6256:180:88","nodes":[],"body":{"id":50242,"nodeType":"Block","src":"6363:73:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":50237,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50006,"src":"6398:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6398:19:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50239,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50231,"src":"6419:9:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50236,"name":"getCustodianStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50151,"src":"6380:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":50240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6380:49:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50235,"id":50241,"nodeType":"Return","src":"6373:56:88"}]},"functionSelector":"d440116d","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStakeForAcceptingEpoch","nameLocation":"6265:34:88","parameters":{"id":50232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50231,"mutability":"mutable","name":"custodian","nameLocation":"6317:9:88","nodeType":"VariableDeclaration","scope":50243,"src":"6309:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50230,"name":"address","nodeType":"ElementaryTypeName","src":"6309:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6299:33:88"},"returnParameters":{"id":50235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50234,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50243,"src":"6354:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50233,"name":"uint256","nodeType":"ElementaryTypeName","src":"6354:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6353:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50260,"nodeType":"FunctionDefinition","src":"6442:209:88","nodes":[],"body":{"id":50259,"nodeType":"Block","src":"6598:53:88","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":50253,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50990,"src":"6615:11:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct MCRStorage.SuperBlockCommitment storage ref))"}},"id":50255,"indexExpression":{"id":50254,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50245,"src":"6627:6:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6615:19:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$","typeString":"mapping(address => struct MCRStorage.SuperBlockCommitment storage ref)"}},"id":50257,"indexExpression":{"id":50256,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50247,"src":"6635:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6615:29:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":50252,"id":50258,"nodeType":"Return","src":"6608:36:88"}]},"functionSelector":"556d97c8","implemented":true,"kind":"function","modifiers":[],"name":"getValidatorCommitmentAtSuperBlockHeight","nameLocation":"6451:40:88","parameters":{"id":50248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50245,"mutability":"mutable","name":"height","nameLocation":"6509:6:88","nodeType":"VariableDeclaration","scope":50260,"src":"6501:14:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50244,"name":"uint256","nodeType":"ElementaryTypeName","src":"6501:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50247,"mutability":"mutable","name":"attester","nameLocation":"6533:8:88","nodeType":"VariableDeclaration","scope":50260,"src":"6525:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50246,"name":"address","nodeType":"ElementaryTypeName","src":"6525:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6491:56:88"},"returnParameters":{"id":50252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50251,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50260,"src":"6569:27:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50250,"nodeType":"UserDefinedTypeName","pathNode":{"id":50249,"name":"SuperBlockCommitment","nameLocations":["6569:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"6569:20:88"},"referencedDeclaration":50979,"src":"6569:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"6568:29:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50285,"nodeType":"FunctionDefinition","src":"6727:405:88","nodes":[],"body":{"id":50284,"nodeType":"Block","src":"6833:299:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50268,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"6872:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50269,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6890:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6894:6:88","memberName":"sender","nodeType":"MemberAccess","src":"6890:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50267,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"6864:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":50271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6864:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":50272,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6915:70:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_0977ec2248431def5ae1a15f4d76a33486566739fca9c42d9176f889e347a11f","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0977ec2248431def5ae1a15f4d76a33486566739fca9c42d9176f889e347a11f","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":50266,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6843:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":50273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6843:152:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50274,"nodeType":"ExpressionStatement","src":"6843:152:88"},{"expression":{"id":50282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":50275,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51030,"src":"7005:33:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$50979_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct MCRStorage.SuperBlockCommitment storage ref))"}},"id":50279,"indexExpression":{"id":50276,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51032,"src":"7039:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7005:66:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$50979_storage_$","typeString":"mapping(uint256 => struct MCRStorage.SuperBlockCommitment storage ref)"}},"id":50280,"indexExpression":{"expression":{"id":50277,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50263,"src":"7072:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50278,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7093:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"7072:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7005:95:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50281,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50263,"src":"7103:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"src":"7005:118:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"id":50283,"nodeType":"ExpressionStatement","src":"7005:118:88"}]},"functionSelector":"3119edd4","implemented":true,"kind":"function","modifiers":[],"name":"setPostconfirmedCommitmentAtBlockHeight","nameLocation":"6736:39:88","parameters":{"id":50264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50263,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"6804:20:88","nodeType":"VariableDeclaration","scope":50285,"src":"6776:48:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50262,"nodeType":"UserDefinedTypeName","pathNode":{"id":50261,"name":"SuperBlockCommitment","nameLocations":["6776:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"6776:20:88"},"referencedDeclaration":50979,"src":"6776:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"6775:50:88"},"returnParameters":{"id":50265,"nodeType":"ParameterList","parameters":[],"src":"6833:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50304,"nodeType":"FunctionDefinition","src":"7193:287:88","nodes":[],"body":{"id":50303,"nodeType":"Block","src":"7262:218:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50292,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"7301:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50293,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7319:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7323:6:88","memberName":"sender","nodeType":"MemberAccess","src":"7319:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50291,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"7293:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":50295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7293:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5345545f4c4153545f504f5354434f4e4649524d45445f5355504552424c4f434b5f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":50296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7344:67:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_2303274c041dc20648e4a0774e71fb8a6ec57c7e42eff6ba4a7830cad65f94c8","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_SUPERBLOCK_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"SET_LAST_POSTCONFIRMED_SUPERBLOCK_HEIGHT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2303274c041dc20648e4a0774e71fb8a6ec57c7e42eff6ba4a7830cad65f94c8","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_SUPERBLOCK_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":50290,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7272:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":50297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7272:149:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50298,"nodeType":"ExpressionStatement","src":"7272:149:88"},{"expression":{"id":50301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50299,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50966,"src":"7431:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50300,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50287,"src":"7467:6:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7431:42:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50302,"nodeType":"ExpressionStatement","src":"7431:42:88"}]},"functionSelector":"4c17b024","implemented":true,"kind":"function","modifiers":[],"name":"setLastPostconfirmedSuperBlockHeight","nameLocation":"7202:36:88","parameters":{"id":50288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50287,"mutability":"mutable","name":"height","nameLocation":"7247:6:88","nodeType":"VariableDeclaration","scope":50304,"src":"7239:14:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50286,"name":"uint256","nodeType":"ElementaryTypeName","src":"7239:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7238:16:88"},"returnParameters":{"id":50289,"nodeType":"ParameterList","parameters":[],"src":"7262:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50324,"nodeType":"FunctionDefinition","src":"7675:308:88","nodes":[],"body":{"id":50323,"nodeType":"Block","src":"7763:220:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50312,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"7802:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50313,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7820:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7824:6:88","memberName":"sender","nodeType":"MemberAccess","src":"7820:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50311,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"7794:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":50315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7794:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":50316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7845:50:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_769db6d293c786b13b107ddcfdc491f9fdfa9dc0a09944362f64328186fea1df","typeString":"literal_string \"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_769db6d293c786b13b107ddcfdc491f9fdfa9dc0a09944362f64328186fea1df","typeString":"literal_string \"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":50310,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7773:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":50317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7773:132:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50318,"nodeType":"ExpressionStatement","src":"7773:132:88"},{"expression":{"arguments":[{"id":50320,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50307,"src":"7955:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}],"id":50319,"name":"setPostconfirmedCommitmentAtBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50285,"src":"7915:39:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SuperBlockCommitment_$50979_memory_ptr_$returns$__$","typeString":"function (struct MCRStorage.SuperBlockCommitment memory)"}},"id":50321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7915:61:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50322,"nodeType":"ExpressionStatement","src":"7915:61:88"}]},"functionSelector":"08c7050f","implemented":true,"kind":"function","modifiers":[],"name":"forceLatestCommitment","nameLocation":"7684:21:88","parameters":{"id":50308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50307,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"7734:20:88","nodeType":"VariableDeclaration","scope":50324,"src":"7706:48:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50306,"nodeType":"UserDefinedTypeName","pathNode":{"id":50305,"name":"SuperBlockCommitment","nameLocations":["7706:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"7706:20:88"},"referencedDeclaration":50979,"src":"7706:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"7705:50:88"},"returnParameters":{"id":50309,"nodeType":"ParameterList","parameters":[],"src":"7763:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50339,"nodeType":"FunctionDefinition","src":"7989:200:88","nodes":[],"body":{"id":50338,"nodeType":"Block","src":"8091:98:88","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":50332,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51030,"src":"8108:33:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$50979_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct MCRStorage.SuperBlockCommitment storage ref))"}},"id":50334,"indexExpression":{"id":50333,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51032,"src":"8142:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8108:66:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$50979_storage_$","typeString":"mapping(uint256 => struct MCRStorage.SuperBlockCommitment storage ref)"}},"id":50336,"indexExpression":{"id":50335,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50326,"src":"8175:6:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8108:74:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":50331,"id":50337,"nodeType":"Return","src":"8101:81:88"}]},"functionSelector":"2bfd11d6","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmedCommitment","nameLocation":"7998:26:88","parameters":{"id":50327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50326,"mutability":"mutable","name":"height","nameLocation":"8033:6:88","nodeType":"VariableDeclaration","scope":50339,"src":"8025:14:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50325,"name":"uint256","nodeType":"ElementaryTypeName","src":"8025:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8024:16:88"},"returnParameters":{"id":50331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50330,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50339,"src":"8062:27:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50329,"nodeType":"UserDefinedTypeName","pathNode":{"id":50328,"name":"SuperBlockCommitment","nameLocations":["8062:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"8062:20:88"},"referencedDeclaration":50979,"src":"8062:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"8061:29:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50355,"nodeType":"FunctionDefinition","src":"8478:247:88","nodes":[],"body":{"id":50354,"nodeType":"Block","src":"8564:161:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50350,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8711:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50349,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8703:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50348,"name":"address","nodeType":"ElementaryTypeName","src":"8703:7:88","typeDescriptions":{}}},"id":50351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8703:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50346,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"8651:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8667:35:88","memberName":"getStakedAttestersForAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":52982,"src":"8651:51:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":50352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8651:66:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":50345,"id":50353,"nodeType":"Return","src":"8644:73:88"}]},"documentation":{"id":50340,"nodeType":"StructuredDocumentation","src":"8397:76:88","text":"@notice Gets the attesters who have stake in the current accepting epoch"},"functionSelector":"aa0d6fcd","implemented":true,"kind":"function","modifiers":[],"name":"getStakedAttestersForAcceptingEpoch","nameLocation":"8487:35:88","parameters":{"id":50341,"nodeType":"ParameterList","parameters":[],"src":"8522:2:88"},"returnParameters":{"id":50345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50344,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50355,"src":"8546:16:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":50342,"name":"address","nodeType":"ElementaryTypeName","src":"8546:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50343,"nodeType":"ArrayTypeName","src":"8546:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"8545:18:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50437,"nodeType":"FunctionDefinition","src":"8793:2397:88","nodes":[],"body":{"id":50436,"nodeType":"Block","src":"8939:2251:88","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":50364,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50990,"src":"9026:11:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct MCRStorage.SuperBlockCommitment storage ref))"}},"id":50367,"indexExpression":{"expression":{"id":50365,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"9038:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50366,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9059:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"9038:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9026:40:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$","typeString":"mapping(address => struct MCRStorage.SuperBlockCommitment storage ref)"}},"id":50369,"indexExpression":{"id":50368,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50358,"src":"9067:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9026:50:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"id":50370,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9077:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"9026:57:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":50371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9087:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9026:62:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50376,"nodeType":"IfStatement","src":"9022:113:88","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":50373,"name":"AttesterAlreadyCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51059,"src":"9109:24:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":50374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9109:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":50375,"nodeType":"RevertStatement","src":"9102:33:88"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50377,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50966,"src":"9541:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":50378,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50964,"src":"9577:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9541:62:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":50380,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"9606:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50381,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9627:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"9606:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9541:92:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50386,"nodeType":"IfStatement","src":"9537:131:88","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":50383,"name":"AttesterAlreadyCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51059,"src":"9642:24:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":50384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9642:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":50385,"nodeType":"RevertStatement","src":"9635:33:88"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":50387,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50983,"src":"10003:29:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50390,"indexExpression":{"expression":{"id":50388,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"10033:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50389,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10054:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"10033:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10003:58:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":50391,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10065:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10003:63:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50402,"nodeType":"IfStatement","src":"9999:172:88","trueBody":{"id":50401,"nodeType":"Block","src":"10068:103:88","statements":[{"expression":{"id":50399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":50393,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50983,"src":"10082:29:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50396,"indexExpression":{"expression":{"id":50394,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"10112:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50395,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10133:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"10112:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10082:58:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":50397,"name":"getPresentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49992,"src":"10143:15:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10143:17:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10082:78:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50400,"nodeType":"ExpressionStatement","src":"10082:78:88"}]}},{"expression":{"id":50410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":50403,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50990,"src":"10227:11:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct MCRStorage.SuperBlockCommitment storage ref))"}},"id":50407,"indexExpression":{"expression":{"id":50404,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"10239:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50405,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10260:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"10239:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10227:40:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$","typeString":"mapping(address => struct MCRStorage.SuperBlockCommitment storage ref)"}},"id":50408,"indexExpression":{"id":50406,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50358,"src":"10268:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10227:50:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50409,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"10280:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"src":"10227:73:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"id":50411,"nodeType":"ExpressionStatement","src":"10227:73:88"},{"assignments":[50413],"declarations":[{"constant":false,"id":50413,"mutability":"mutable","name":"attesterStakeForAcceptingEpoch","nameLocation":"10798:30:88","nodeType":"VariableDeclaration","scope":50436,"src":"10790:38:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50412,"name":"uint256","nodeType":"ElementaryTypeName","src":"10790:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50417,"initialValue":{"arguments":[{"id":50415,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50358,"src":"10865:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":50414,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50130,"src":"10831:33:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":50416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10831:43:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10790:84:88"},{"expression":{"id":50426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":50418,"name":"commitmentStakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50996,"src":"10884:16:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":50423,"indexExpression":{"expression":{"id":50419,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"10901:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50420,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10922:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"10901:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10884:45:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":50424,"indexExpression":{"expression":{"id":50421,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"10930:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50422,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10951:10:88","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":50976,"src":"10930:31:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10884:78:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":50425,"name":"attesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50413,"src":"10966:30:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10884:112:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50427,"nodeType":"ExpressionStatement","src":"10884:112:88"},{"eventCall":{"arguments":[{"expression":{"id":50429,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"11055:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11076:7:88","memberName":"blockId","nodeType":"MemberAccess","referencedDeclaration":50978,"src":"11055:28:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50431,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"11097:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50432,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11118:10:88","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":50976,"src":"11097:31:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":50433,"name":"attesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50413,"src":"11142:30:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50428,"name":"SuperBlockCommitmentSubmitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51055,"src":"11012:29:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,uint256)"}},"id":50434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11012:170:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50435,"nodeType":"EmitStatement","src":"11007:175:88"}]},"documentation":{"id":50356,"nodeType":"StructuredDocumentation","src":"8731:57:88","text":"@dev submits a superBlock commitment for an attester."},"implemented":true,"kind":"function","modifiers":[],"name":"submitSuperBlockCommitment","nameLocation":"8802:37:88","parameters":{"id":50362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50358,"mutability":"mutable","name":"attester","nameLocation":"8857:8:88","nodeType":"VariableDeclaration","scope":50437,"src":"8849:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50357,"name":"address","nodeType":"ElementaryTypeName","src":"8849:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":50361,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"8903:20:88","nodeType":"VariableDeclaration","scope":50437,"src":"8875:48:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50360,"nodeType":"UserDefinedTypeName","pathNode":{"id":50359,"name":"SuperBlockCommitment","nameLocations":["8875:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"8875:20:88"},"referencedDeclaration":50979,"src":"8875:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"8839:90:88"},"returnParameters":{"id":50363,"nodeType":"ParameterList","parameters":[],"src":"8939:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":50446,"nodeType":"FunctionDefinition","src":"11196:104:88","nodes":[],"body":{"id":50445,"nodeType":"Block","src":"11237:63:88","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":50441,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11282:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11286:6:88","memberName":"sender","nodeType":"MemberAccess","src":"11282:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":50440,"name":"postconfirmSuperBlocksWithAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50473,"src":"11247:34:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":50443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11247:46:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50444,"nodeType":"ExpressionStatement","src":"11247:46:88"}]},"functionSelector":"017304e1","implemented":true,"kind":"function","modifiers":[],"name":"postconfirmSuperBlocks","nameLocation":"11205:22:88","parameters":{"id":50438,"nodeType":"ParameterList","parameters":[],"src":"11227:2:88"},"returnParameters":{"id":50439,"nodeType":"ParameterList","parameters":[],"src":"11237:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50473,"nodeType":"FunctionDefinition","src":"11899:859:88","nodes":[],"body":{"id":50472,"nodeType":"Block","src":"11970:788:88","nodes":[],"statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":50452,"name":"currentAcceptorIsLive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50481,"src":"12254:21:88","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_bool_$","typeString":"function () pure returns (bool)"}},"id":50453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12254:23:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50464,"nodeType":"IfStatement","src":"12250:130:88","trueBody":{"id":50463,"nodeType":"Block","src":"12279:101:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":50457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50454,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50449,"src":"12297:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":50455,"name":"getCurrentAcceptor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50555,"src":"12309:18:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":50456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12309:20:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12297:32:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50462,"nodeType":"IfStatement","src":"12293:76:88","trueBody":{"expression":{"arguments":[{"hexValue":"4e6f744163636570746f72416e644163636570746f7249734c697665","id":50459,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12338:30:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_9a38bba0f70fe3cb1ae4184f9594c1ead93c44a0599854fb0b4317f29be4fe41","typeString":"literal_string \"NotAcceptorAndAcceptorIsLive\""},"value":"NotAcceptorAndAcceptorIsLive"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9a38bba0f70fe3cb1ae4184f9594c1ead93c44a0599854fb0b4317f29be4fe41","typeString":"literal_string \"NotAcceptorAndAcceptorIsLive\""}],"id":50458,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12331:6:88","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":50460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12331:38:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50461,"nodeType":"ExpressionStatement","src":"12331:38:88"}}]}},{"body":{"id":50470,"nodeType":"Block","src":"12750:2:88","statements":[]},"condition":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50466,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50966,"src":"12710:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":50467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12746:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12710:37:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50465,"name":"attemptPostconfirm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50690,"src":"12691:18:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) returns (bool)"}},"id":50469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12691:57:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50471,"nodeType":"WhileStatement","src":"12684:68:88"}]},"documentation":{"id":50447,"nodeType":"StructuredDocumentation","src":"11693:101:88","text":"@notice If the current acceptor is not live, we should accept postconfirmations from any attester"},"implemented":true,"kind":"function","modifiers":[],"name":"postconfirmSuperBlocksWithAttester","nameLocation":"11908:34:88","parameters":{"id":50450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50449,"mutability":"mutable","name":"attester","nameLocation":"11951:8:88","nodeType":"VariableDeclaration","scope":50473,"src":"11943:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50448,"name":"address","nodeType":"ElementaryTypeName","src":"11943:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11942:18:88"},"returnParameters":{"id":50451,"nodeType":"ParameterList","parameters":[],"src":"11970:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":50481,"nodeType":"FunctionDefinition","src":"12764:260:88","nodes":[],"body":{"id":50480,"nodeType":"Block","src":"12824:200:88","nodes":[],"statements":[{"expression":{"hexValue":"74727565","id":50478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12989:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":50477,"id":50479,"nodeType":"Return","src":"12982:11:88"}]},"functionSelector":"e4566c78","implemented":true,"kind":"function","modifiers":[],"name":"currentAcceptorIsLive","nameLocation":"12773:21:88","parameters":{"id":50474,"nodeType":"ParameterList","parameters":[],"src":"12794:2:88"},"returnParameters":{"id":50477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50476,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50481,"src":"12818:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50475,"name":"bool","nodeType":"ElementaryTypeName","src":"12818:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12817:6:88"},"scope":50951,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":50514,"nodeType":"FunctionDefinition","src":"13116:445:88","nodes":[],"body":{"id":50513,"nodeType":"Block","src":"13194:367:88","nodes":[],"statements":[{"assignments":[50488],"declarations":[{"constant":false,"id":50488,"mutability":"mutable","name":"currentL1BlockHeight","nameLocation":"13212:20:88","nodeType":"VariableDeclaration","scope":50513,"src":"13204:28:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50487,"name":"uint256","nodeType":"ElementaryTypeName","src":"13204:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50491,"initialValue":{"expression":{"id":50489,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"13235:5:88","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":50490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13241:6:88","memberName":"number","nodeType":"MemberAccess","src":"13235:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13204:43:88"},{"assignments":[50493],"declarations":[{"constant":false,"id":50493,"mutability":"mutable","name":"startL1BlockHeight","nameLocation":"13265:18:88","nodeType":"VariableDeclaration","scope":50513,"src":"13257:26:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50492,"name":"uint256","nodeType":"ElementaryTypeName","src":"13257:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50501,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50494,"name":"currentL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50488,"src":"13286:20:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50495,"name":"currentL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50488,"src":"13309:20:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":50496,"name":"acceptorTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50969,"src":"13332:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13309:35:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13286:58:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":50499,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13347:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13286:62:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13257:91:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50502,"name":"startL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50493,"src":"13422:18:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":50503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13443:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13422:22:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50510,"nodeType":"IfStatement","src":"13418:102:88","trueBody":{"id":50509,"nodeType":"Block","src":"13446:74:88","statements":[{"expression":{"id":50507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50505,"name":"startL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50493,"src":"13487:18:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":50506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13508:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13487:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50508,"nodeType":"ExpressionStatement","src":"13487:22:88"}]}},{"expression":{"id":50511,"name":"startL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50493,"src":"13536:18:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50486,"id":50512,"nodeType":"Return","src":"13529:25:88"}]},"documentation":{"id":50482,"nodeType":"StructuredDocumentation","src":"13030:81:88","text":"@notice Gets the L1 block height at which the current acceptor's term started"},"functionSelector":"c5de60a9","implemented":true,"kind":"function","modifiers":[],"name":"getL1BlockStartOfCurrentAcceptorTerm","nameLocation":"13125:36:88","parameters":{"id":50483,"nodeType":"ParameterList","parameters":[],"src":"13161:2:88"},"returnParameters":{"id":50486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50485,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50514,"src":"13185:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50484,"name":"uint256","nodeType":"ElementaryTypeName","src":"13185:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13184:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50555,"nodeType":"FunctionDefinition","src":"13661:647:88","nodes":[],"body":{"id":50554,"nodeType":"Block","src":"13721:587:88","nodes":[],"statements":[{"assignments":[50521],"declarations":[{"constant":false,"id":50521,"mutability":"mutable","name":"randomness","nameLocation":"13921:10:88","nodeType":"VariableDeclaration","scope":50554,"src":"13913:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":50520,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13913:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":50526,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":50523,"name":"getL1BlockStartOfCurrentAcceptorTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50514,"src":"13944:36:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13944:38:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50522,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"13934:9:88","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":50525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13934:49:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13913:70:88"},{"assignments":[50531],"declarations":[{"constant":false,"id":50531,"mutability":"mutable","name":"attesters","nameLocation":"14102:9:88","nodeType":"VariableDeclaration","scope":50554,"src":"14085:26:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":50529,"name":"address","nodeType":"ElementaryTypeName","src":"14085:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50530,"nodeType":"ArrayTypeName","src":"14085:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":50539,"initialValue":{"arguments":[{"arguments":[{"id":50536,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"14174:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50535,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14166:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50534,"name":"address","nodeType":"ElementaryTypeName","src":"14166:7:88","typeDescriptions":{}}},"id":50537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14166:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50532,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"14114:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14130:35:88","memberName":"getStakedAttestersForAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":52982,"src":"14114:51:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":50538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14114:66:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"14085:95:88"},{"assignments":[50541],"declarations":[{"constant":false,"id":50541,"mutability":"mutable","name":"acceptorIndex","nameLocation":"14198:13:88","nodeType":"VariableDeclaration","scope":50554,"src":"14190:21:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50540,"name":"uint256","nodeType":"ElementaryTypeName","src":"14190:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50549,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":50544,"name":"randomness","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50521,"src":"14222:10:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":50543,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14214:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":50542,"name":"uint256","nodeType":"ElementaryTypeName","src":"14214:7:88","typeDescriptions":{}}},"id":50545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14214:19:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"expression":{"id":50546,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50531,"src":"14236:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14246:6:88","memberName":"length","nodeType":"MemberAccess","src":"14236:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14214:38:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14190:62:88"},{"expression":{"baseExpression":{"id":50550,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50531,"src":"14269:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50552,"indexExpression":{"id":50551,"name":"acceptorIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50541,"src":"14279:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14269:24:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":50519,"id":50553,"nodeType":"Return","src":"14262:31:88"}]},"documentation":{"id":50515,"nodeType":"StructuredDocumentation","src":"13567:89:88","text":"@notice Determines the current acceptor using L1 block hash as a source of randomness"},"functionSelector":"f99f6e4c","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentAcceptor","nameLocation":"13670:18:88","parameters":{"id":50516,"nodeType":"ParameterList","parameters":[],"src":"13688:2:88"},"returnParameters":{"id":50519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50518,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50555,"src":"13712:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50517,"name":"address","nodeType":"ElementaryTypeName","src":"13712:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13711:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50690,"nodeType":"FunctionDefinition","src":"14699:4115:88","nodes":[],"body":{"id":50689,"nodeType":"Block","src":"14777:4037:88","nodes":[],"statements":[{"assignments":[50563],"declarations":[{"constant":false,"id":50563,"mutability":"mutable","name":"superBlockEpoch","nameLocation":"14795:15:88","nodeType":"VariableDeclaration","scope":50689,"src":"14787:23:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50562,"name":"uint256","nodeType":"ElementaryTypeName","src":"14787:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50567,"initialValue":{"baseExpression":{"id":50564,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50983,"src":"14813:29:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50566,"indexExpression":{"id":50565,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50557,"src":"14843:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14813:47:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14787:73:88"},{"assignments":[50569],"declarations":[{"constant":false,"id":50569,"mutability":"mutable","name":"previousSuperBlockEpoch","nameLocation":"14979:23:88","nodeType":"VariableDeclaration","scope":50689,"src":"14971:31:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50568,"name":"uint256","nodeType":"ElementaryTypeName","src":"14971:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50575,"initialValue":{"baseExpression":{"id":50570,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50983,"src":"15005:29:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50574,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50571,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50557,"src":"15035:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":50572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15052:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15035:18:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15005:49:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14971:83:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50576,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50563,"src":"15068:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":50577,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50569,"src":"15086:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15068:41:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50585,"nodeType":"IfStatement","src":"15064:133:88","trueBody":{"expression":{"id":50583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":50579,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50983,"src":"15124:29:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50581,"indexExpression":{"id":50580,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50557,"src":"15154:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15124:47:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50582,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50569,"src":"15174:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15124:73:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50584,"nodeType":"ExpressionStatement","src":"15124:73:88"}},{"expression":{"id":50588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50586,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50563,"src":"15211:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50587,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50569,"src":"15229:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15211:41:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50589,"nodeType":"ExpressionStatement","src":"15211:41:88"},{"body":{"id":50606,"nodeType":"Block","src":"15723:791:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":50595,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15908:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15912:6:88","memberName":"sender","nodeType":"MemberAccess","src":"15908:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":50594,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50130,"src":"15874:33:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":50597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15874:45:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":50598,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15923:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"15874:50:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50602,"nodeType":"IfStatement","src":"15870:68:88","trueBody":{"expression":{"hexValue":"66616c7365","id":50600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15933:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":50561,"id":50601,"nodeType":"Return","src":"15926:12:88"}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":50603,"name":"rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50912,"src":"16488:13:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":50604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16488:15:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50605,"nodeType":"ExpressionStatement","src":"16488:15:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":50590,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50006,"src":"15684:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15684:19:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":50592,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50563,"src":"15706:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15684:37:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50607,"nodeType":"WhileStatement","src":"15677:837:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":50609,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16699:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16703:6:88","memberName":"sender","nodeType":"MemberAccess","src":"16699:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":50608,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50130,"src":"16665:33:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":50611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16665:45:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":50612,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16714:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16665:50:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50616,"nodeType":"IfStatement","src":"16661:68:88","trueBody":{"expression":{"hexValue":"66616c7365","id":50614,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16724:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":50561,"id":50615,"nodeType":"Return","src":"16717:12:88"}},{"assignments":[50618],"declarations":[{"constant":false,"id":50618,"mutability":"mutable","name":"supermajority","nameLocation":"16998:13:88","nodeType":"VariableDeclaration","scope":50689,"src":"16990:21:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50617,"name":"uint256","nodeType":"ElementaryTypeName","src":"16990:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50627,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":50619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17015:1:88","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":50621,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50563,"src":"17037:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50620,"name":"computeTotalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50218,"src":"17019:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":50622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17019:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17015:38:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50624,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17014:40:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":50625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17057:1:88","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"17014:44:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16990:68:88"},{"assignments":[50632],"declarations":[{"constant":false,"id":50632,"mutability":"mutable","name":"attesters","nameLocation":"17085:9:88","nodeType":"VariableDeclaration","scope":50689,"src":"17068:26:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":50630,"name":"address","nodeType":"ElementaryTypeName","src":"17068:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50631,"nodeType":"ArrayTypeName","src":"17068:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":50635,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":50633,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50355,"src":"17097:35:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":50634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17097:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"17068:66:88"},{"body":{"id":50685,"nodeType":"Block","src":"17443:1342:88","statements":[{"assignments":[50648],"declarations":[{"constant":false,"id":50648,"mutability":"mutable","name":"attester","nameLocation":"17465:8:88","nodeType":"VariableDeclaration","scope":50685,"src":"17457:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50647,"name":"address","nodeType":"ElementaryTypeName","src":"17457:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":50652,"initialValue":{"baseExpression":{"id":50649,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50632,"src":"17476:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50651,"indexExpression":{"id":50650,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50637,"src":"17486:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17476:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"17457:31:88"},{"assignments":[50655],"declarations":[{"constant":false,"id":50655,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"17530:20:88","nodeType":"VariableDeclaration","scope":50685,"src":"17502:48:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50654,"nodeType":"UserDefinedTypeName","pathNode":{"id":50653,"name":"SuperBlockCommitment","nameLocations":["17502:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"17502:20:88"},"referencedDeclaration":50979,"src":"17502:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"id":50661,"initialValue":{"baseExpression":{"baseExpression":{"id":50656,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50990,"src":"17553:11:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct MCRStorage.SuperBlockCommitment storage ref))"}},"id":50658,"indexExpression":{"id":50657,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50557,"src":"17565:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17553:29:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$","typeString":"mapping(address => struct MCRStorage.SuperBlockCommitment storage ref)"}},"id":50660,"indexExpression":{"id":50659,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50648,"src":"17583:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17553:39:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"nodeType":"VariableDeclarationStatement","src":"17502:90:88"},{"assignments":[50663],"declarations":[{"constant":false,"id":50663,"mutability":"mutable","name":"totalStakeOnCommitment","nameLocation":"17669:22:88","nodeType":"VariableDeclaration","scope":50685,"src":"17661:30:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50662,"name":"uint256","nodeType":"ElementaryTypeName","src":"17661:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50671,"initialValue":{"baseExpression":{"baseExpression":{"id":50664,"name":"commitmentStakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50996,"src":"17694:16:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":50667,"indexExpression":{"expression":{"id":50665,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50655,"src":"17711:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50666,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17732:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"17711:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17694:45:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":50670,"indexExpression":{"expression":{"id":50668,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50655,"src":"17740:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50669,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17761:10:88","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":50976,"src":"17740:31:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17694:78:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17661:111:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50672,"name":"totalStakeOnCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50663,"src":"17790:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":50673,"name":"supermajority","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50618,"src":"17815:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17790:38:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50684,"nodeType":"IfStatement","src":"17786:989:88","trueBody":{"id":50683,"nodeType":"Block","src":"17830:945:88","statements":[{"expression":{"arguments":[{"id":50676,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50655,"src":"17881:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},{"expression":{"id":50677,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17903:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17907:6:88","memberName":"sender","nodeType":"MemberAccess","src":"17903:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50675,"name":"_postconfirmSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50892,"src":"17848:32:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SuperBlockCommitment_$50979_memory_ptr_$_t_address_$returns$__$","typeString":"function (struct MCRStorage.SuperBlockCommitment memory,address)"}},"id":50679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17848:66:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50680,"nodeType":"ExpressionStatement","src":"17848:66:88"},{"expression":{"hexValue":"74727565","id":50681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18756:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":50561,"id":50682,"nodeType":"Return","src":"18749:11:88"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50640,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50637,"src":"17416:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":50641,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50632,"src":"17420:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17430:6:88","memberName":"length","nodeType":"MemberAccess","src":"17420:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17416:20:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50686,"initializationExpression":{"assignments":[50637],"declarations":[{"constant":false,"id":50637,"mutability":"mutable","name":"i","nameLocation":"17409:1:88","nodeType":"VariableDeclaration","scope":50686,"src":"17401:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50636,"name":"uint256","nodeType":"ElementaryTypeName","src":"17401:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50639,"initialValue":{"hexValue":"30","id":50638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17413:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"17401:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":50645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"17438:3:88","subExpression":{"id":50644,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50637,"src":"17438:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50646,"nodeType":"ExpressionStatement","src":"17438:3:88"},"nodeType":"ForStatement","src":"17396:1389:88"},{"expression":{"hexValue":"66616c7365","id":50687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18802:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":50561,"id":50688,"nodeType":"Return","src":"18795:12:88"}]},"implemented":true,"kind":"function","modifiers":[],"name":"attemptPostconfirm","nameLocation":"14708:18:88","parameters":{"id":50558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50557,"mutability":"mutable","name":"superBlockHeight","nameLocation":"14735:16:88","nodeType":"VariableDeclaration","scope":50690,"src":"14727:24:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50556,"name":"uint256","nodeType":"ElementaryTypeName","src":"14727:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14726:26:88"},"returnParameters":{"id":50561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50560,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50690,"src":"14771:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50559,"name":"bool","nodeType":"ElementaryTypeName","src":"14771:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14770:6:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":50704,"nodeType":"FunctionDefinition","src":"18821:136:88","nodes":[],"body":{"id":50703,"nodeType":"Block","src":"18903:54:88","nodes":[],"statements":[{"expression":{"arguments":[{"id":50699,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49837,"src":"18923:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":50700,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50692,"src":"18941:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50698,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39174,"src":"18913:9:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":50701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18913:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50702,"nodeType":"ExpressionStatement","src":"18913:37:88"}]},"functionSelector":"81df1746","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":50695,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"18885:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":50696,"kind":"modifierInvocation","modifierName":{"id":50694,"name":"onlyRole","nameLocations":["18876:8:88"],"nodeType":"IdentifierPath","referencedDeclaration":39041,"src":"18876:8:88"},"nodeType":"ModifierInvocation","src":"18876:26:88"}],"name":"grantTrustedAttester","nameLocation":"18830:20:88","parameters":{"id":50693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50692,"mutability":"mutable","name":"attester","nameLocation":"18859:8:88","nodeType":"VariableDeclaration","scope":50704,"src":"18851:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50691,"name":"address","nodeType":"ElementaryTypeName","src":"18851:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18850:18:88"},"returnParameters":{"id":50697,"nodeType":"ParameterList","parameters":[],"src":"18903:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50734,"nodeType":"FunctionDefinition","src":"18963:227:88","nodes":[],"body":{"id":50733,"nodeType":"Block","src":"19060:130:88","nodes":[],"statements":[{"body":{"id":50731,"nodeType":"Block","src":"19117:66:88","statements":[{"expression":{"arguments":[{"id":50725,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49837,"src":"19141:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":50726,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50707,"src":"19159:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50728,"indexExpression":{"id":50727,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50714,"src":"19169:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19159:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50724,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39174,"src":"19131:9:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":50729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19131:41:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50730,"nodeType":"ExpressionStatement","src":"19131:41:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50717,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50714,"src":"19090:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":50718,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50707,"src":"19094:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19104:6:88","memberName":"length","nodeType":"MemberAccess","src":"19094:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19090:20:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50732,"initializationExpression":{"assignments":[50714],"declarations":[{"constant":false,"id":50714,"mutability":"mutable","name":"i","nameLocation":"19083:1:88","nodeType":"VariableDeclaration","scope":50732,"src":"19075:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50713,"name":"uint256","nodeType":"ElementaryTypeName","src":"19075:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50716,"initialValue":{"hexValue":"30","id":50715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19087:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"19075:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":50722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19112:3:88","subExpression":{"id":50721,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50714,"src":"19112:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50723,"nodeType":"ExpressionStatement","src":"19112:3:88"},"nodeType":"ForStatement","src":"19070:113:88"}]},"functionSelector":"cf6772ad","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":50710,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"19042:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":50711,"kind":"modifierInvocation","modifierName":{"id":50709,"name":"onlyRole","nameLocations":["19033:8:88"],"nodeType":"IdentifierPath","referencedDeclaration":39041,"src":"19033:8:88"},"nodeType":"ModifierInvocation","src":"19033:26:88"}],"name":"batchGrantTrustedAttester","nameLocation":"18972:25:88","parameters":{"id":50708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50707,"mutability":"mutable","name":"attesters","nameLocation":"19015:9:88","nodeType":"VariableDeclaration","scope":50734,"src":"18998:26:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":50705,"name":"address","nodeType":"ElementaryTypeName","src":"18998:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50706,"nodeType":"ArrayTypeName","src":"18998:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"18997:28:88"},"returnParameters":{"id":50712,"nodeType":"ParameterList","parameters":[],"src":"19060:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50747,"nodeType":"FunctionDefinition","src":"19196:132:88","nodes":[],"body":{"id":50746,"nodeType":"Block","src":"19279:49:88","nodes":[],"statements":[{"expression":{"id":50744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50742,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51023,"src":"19289:22:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50743,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50736,"src":"19314:7:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19289:32:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50745,"nodeType":"ExpressionStatement","src":"19289:32:88"}]},"functionSelector":"d2526fef","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":50739,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"19261:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":50740,"kind":"modifierInvocation","modifierName":{"id":50738,"name":"onlyRole","nameLocations":["19252:8:88"],"nodeType":"IdentifierPath","referencedDeclaration":39041,"src":"19252:8:88"},"nodeType":"ModifierInvocation","src":"19252:26:88"}],"name":"setOpenAttestationEnabled","nameLocation":"19205:25:88","parameters":{"id":50737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50736,"mutability":"mutable","name":"enabled","nameLocation":"19236:7:88","nodeType":"VariableDeclaration","scope":50747,"src":"19231:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50735,"name":"bool","nodeType":"ElementaryTypeName","src":"19231:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19230:14:88"},"returnParameters":{"id":50741,"nodeType":"ParameterList","parameters":[],"src":"19279:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50771,"nodeType":"FunctionDefinition","src":"19334:335:88","nodes":[],"body":{"id":50770,"nodeType":"Block","src":"19427:242:88","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":50760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50754,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51023,"src":"19458:22:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":50756,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49837,"src":"19492:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50757,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19510:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19514:6:88","memberName":"sender","nodeType":"MemberAccess","src":"19510:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50755,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"19484:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":50759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19484:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19458:63:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d454e54","id":50761,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19535:36:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""},"value":"UNAUTHORIZED_SUPERBLOCK_COMMITMENT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""}],"id":50753,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19437:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":50762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19437:144:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50763,"nodeType":"ExpressionStatement","src":"19437:144:88"},{"expression":{"arguments":[{"expression":{"id":50765,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19629:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19633:6:88","memberName":"sender","nodeType":"MemberAccess","src":"19629:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":50767,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50750,"src":"19641:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}],"id":50764,"name":"submitSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50437,"src":"19591:37:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_SuperBlockCommitment_$50979_memory_ptr_$returns$__$","typeString":"function (address,struct MCRStorage.SuperBlockCommitment memory)"}},"id":50768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19591:71:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50769,"nodeType":"ExpressionStatement","src":"19591:71:88"}]},"functionSelector":"0e74b609","implemented":true,"kind":"function","modifiers":[],"name":"submitSuperBlockCommitment","nameLocation":"19343:26:88","parameters":{"id":50751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50750,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"19398:20:88","nodeType":"VariableDeclaration","scope":50771,"src":"19370:48:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50749,"nodeType":"UserDefinedTypeName","pathNode":{"id":50748,"name":"SuperBlockCommitment","nameLocations":["19370:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"19370:20:88"},"referencedDeclaration":50979,"src":"19370:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"19369:50:88"},"returnParameters":{"id":50752,"nodeType":"ParameterList","parameters":[],"src":"19427:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50811,"nodeType":"FunctionDefinition","src":"19675:430:88","nodes":[],"body":{"id":50810,"nodeType":"Block","src":"19776:329:88","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":50785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50779,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51023,"src":"19807:22:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":50781,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49837,"src":"19841:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50782,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19859:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19863:6:88","memberName":"sender","nodeType":"MemberAccess","src":"19859:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50780,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"19833:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":50784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19833:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19807:63:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d454e54","id":50786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19884:36:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""},"value":"UNAUTHORIZED_SUPERBLOCK_COMMITMENT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""}],"id":50778,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19786:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":50787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19786:144:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50788,"nodeType":"ExpressionStatement","src":"19786:144:88"},{"body":{"id":50808,"nodeType":"Block","src":"19999:100:88","statements":[{"expression":{"arguments":[{"expression":{"id":50801,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20051:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20055:6:88","memberName":"sender","nodeType":"MemberAccess","src":"20051:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":50803,"name":"superBlockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50775,"src":"20063:21:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$50979_memory_ptr_$dyn_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory[] memory"}},"id":50805,"indexExpression":{"id":50804,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50790,"src":"20085:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20063:24:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}],"id":50800,"name":"submitSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50437,"src":"20013:37:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_SuperBlockCommitment_$50979_memory_ptr_$returns$__$","typeString":"function (address,struct MCRStorage.SuperBlockCommitment memory)"}},"id":50806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20013:75:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50807,"nodeType":"ExpressionStatement","src":"20013:75:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50793,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50790,"src":"19960:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":50794,"name":"superBlockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50775,"src":"19964:21:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$50979_memory_ptr_$dyn_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory[] memory"}},"id":50795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19986:6:88","memberName":"length","nodeType":"MemberAccess","src":"19964:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19960:32:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50809,"initializationExpression":{"assignments":[50790],"declarations":[{"constant":false,"id":50790,"mutability":"mutable","name":"i","nameLocation":"19953:1:88","nodeType":"VariableDeclaration","scope":50809,"src":"19945:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50789,"name":"uint256","nodeType":"ElementaryTypeName","src":"19945:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50792,"initialValue":{"hexValue":"30","id":50791,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19957:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"19945:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":50798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19994:3:88","subExpression":{"id":50797,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50790,"src":"19994:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50799,"nodeType":"ExpressionStatement","src":"19994:3:88"},"nodeType":"ForStatement","src":"19940:159:88"}]},"functionSelector":"622e3616","implemented":true,"kind":"function","modifiers":[],"name":"submitBatchSuperBlockCommitment","nameLocation":"19684:31:88","parameters":{"id":50776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50775,"mutability":"mutable","name":"superBlockCommitments","nameLocation":"19746:21:88","nodeType":"VariableDeclaration","scope":50811,"src":"19716:51:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$50979_memory_ptr_$dyn_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment[]"},"typeName":{"baseType":{"id":50773,"nodeType":"UserDefinedTypeName","pathNode":{"id":50772,"name":"SuperBlockCommitment","nameLocations":["19716:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"19716:20:88"},"referencedDeclaration":50979,"src":"19716:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"id":50774,"nodeType":"ArrayTypeName","src":"19716:22:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$50979_storage_$dyn_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment[]"}},"visibility":"internal"}],"src":"19715:53:88"},"returnParameters":{"id":50777,"nodeType":"ParameterList","parameters":[],"src":"19776:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50892,"nodeType":"FunctionDefinition","src":"20341:1992:88","nodes":[],"body":{"id":50891,"nodeType":"Block","src":"20460:1873:88","nodes":[],"statements":[{"assignments":[50821],"declarations":[{"constant":false,"id":50821,"mutability":"mutable","name":"currentAcceptingEpoch","nameLocation":"20478:21:88","nodeType":"VariableDeclaration","scope":50891,"src":"20470:29:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50820,"name":"uint256","nodeType":"ElementaryTypeName","src":"20470:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50824,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":50822,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50006,"src":"20502:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20502:19:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20470:51:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":50825,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50983,"src":"21045:29:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50828,"indexExpression":{"expression":{"id":50826,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21075:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50827,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21096:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"21075:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21045:58:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":50829,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50821,"src":"21107:21:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21045:83:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50834,"nodeType":"IfStatement","src":"21041:142:88","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":50831,"name":"UnacceptableSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51057,"src":"21149:32:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":50832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21149:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":50833,"nodeType":"RevertStatement","src":"21142:41:88"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50835,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50966,"src":"21296:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":50836,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21333:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50837,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21354:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"21333:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":50838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21363:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"21333:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21296:68:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50844,"nodeType":"IfStatement","src":"21292:127:88","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":50841,"name":"UnacceptableSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51057,"src":"21385:32:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":50842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21385:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":50843,"nodeType":"RevertStatement","src":"21378:41:88"}},{"expression":{"id":50852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":50845,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51030,"src":"21430:33:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$50979_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct MCRStorage.SuperBlockCommitment storage ref))"}},"id":50849,"indexExpression":{"id":50846,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51032,"src":"21464:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21430:66:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$50979_storage_$","typeString":"mapping(uint256 => struct MCRStorage.SuperBlockCommitment storage ref)"}},"id":50850,"indexExpression":{"expression":{"id":50847,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21497:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50848,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21518:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"21497:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21430:95:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50851,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21528:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"src":"21430:118:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"id":50853,"nodeType":"ExpressionStatement","src":"21430:118:88"},{"expression":{"id":50857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50854,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50966,"src":"21558:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":50855,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21594:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50856,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21615:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"21594:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21558:63:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50858,"nodeType":"ExpressionStatement","src":"21558:63:88"},{"expression":{"id":50864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":50859,"name":"postconfirmedBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51000,"src":"21631:15:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":50862,"indexExpression":{"expression":{"id":50860,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21647:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50861,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21668:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"21647:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21631:44:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50863,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50817,"src":"21678:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21631:55:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50865,"nodeType":"ExpressionStatement","src":"21631:55:88"},{"expression":{"id":50872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":50866,"name":"postconfirmedAtL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51008,"src":"21696:28:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50869,"indexExpression":{"expression":{"id":50867,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21725:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21746:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"21725:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21696:57:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":50870,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"21756:5:88","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":50871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21762:6:88","memberName":"number","nodeType":"MemberAccess","src":"21756:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21696:72:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50873,"nodeType":"ExpressionStatement","src":"21696:72:88"},{"expression":{"id":50880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":50874,"name":"postconfirmedAtL1BlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51012,"src":"21778:31:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50877,"indexExpression":{"expression":{"id":50875,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21810:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50876,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21831:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"21810:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21778:60:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":50878,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"21841:5:88","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":50879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21847:9:88","memberName":"timestamp","nodeType":"MemberAccess","src":"21841:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21778:78:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50881,"nodeType":"ExpressionStatement","src":"21778:78:88"},{"eventCall":{"arguments":[{"expression":{"id":50883,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"22202:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50884,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22223:7:88","memberName":"blockId","nodeType":"MemberAccess","referencedDeclaration":50978,"src":"22202:28:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50885,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"22244:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50886,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22265:10:88","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":50976,"src":"22244:31:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50887,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"22289:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50888,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22310:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"22289:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50882,"name":"SuperBlockPostconfirmed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51047,"src":"22165:23:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,uint256)"}},"id":50889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22165:161:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50890,"nodeType":"EmitStatement","src":"22160:166:88"}]},"documentation":{"id":50812,"nodeType":"StructuredDocumentation","src":"20111:173:88","text":"@dev Accepts a superBlock commitment.\n @dev This function and attemptPostconfirm() could call each other recursively, so we must ensure it's safe from re-entrancy"},"implemented":true,"kind":"function","modifiers":[],"name":"_postconfirmSuperBlockCommitment","nameLocation":"20350:32:88","parameters":{"id":50818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50815,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"20411:20:88","nodeType":"VariableDeclaration","scope":50892,"src":"20383:48:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50814,"nodeType":"UserDefinedTypeName","pathNode":{"id":50813,"name":"SuperBlockCommitment","nameLocations":["20383:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"20383:20:88"},"referencedDeclaration":50979,"src":"20383:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"},{"constant":false,"id":50817,"mutability":"mutable","name":"attester","nameLocation":"20441:8:88","nodeType":"VariableDeclaration","scope":50892,"src":"20433:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50816,"name":"address","nodeType":"ElementaryTypeName","src":"20433:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20382:68:88"},"returnParameters":{"id":50819,"nodeType":"ParameterList","parameters":[],"src":"20460:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":50899,"nodeType":"FunctionDefinition","src":"22355:170:88","nodes":[],"body":{"id":50898,"nodeType":"Block","src":"22437:88:88","nodes":[],"statements":[]},"implemented":true,"kind":"function","modifiers":[],"name":"slashMinority","nameLocation":"22364:13:88","parameters":{"id":50896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50895,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"22406:20:88","nodeType":"VariableDeclaration","scope":50899,"src":"22378:48:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50894,"nodeType":"UserDefinedTypeName","pathNode":{"id":50893,"name":"SuperBlockCommitment","nameLocations":["22378:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"22378:20:88"},"referencedDeclaration":50979,"src":"22378:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"22377:50:88"},"returnParameters":{"id":50897,"nodeType":"ParameterList","parameters":[],"src":"22437:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":50912,"nodeType":"FunctionDefinition","src":"22773:105:88","nodes":[],"body":{"id":50911,"nodeType":"Block","src":"22807:71:88","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":50903,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"22817:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22833:13:88","memberName":"rollOverEpoch","nodeType":"MemberAccess","referencedDeclaration":52901,"src":"22817:29:88","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":50906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22817:31:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50907,"nodeType":"ExpressionStatement","src":"22817:31:88"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":50908,"name":"setAcceptor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50950,"src":"22858:11:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":50909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22858:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50910,"nodeType":"ExpressionStatement","src":"22858:13:88"}]},"documentation":{"id":50900,"nodeType":"StructuredDocumentation","src":"22531:237:88","text":" @dev nonReentrant because there is no need to reenter this function. It should be called iteratively. Marked on the internal method to simplify risks from complex calling patterns. This also calls an external contract."},"implemented":true,"kind":"function","modifiers":[],"name":"rollOverEpoch","nameLocation":"22782:13:88","parameters":{"id":50901,"nodeType":"ParameterList","parameters":[],"src":"22795:2:88"},"returnParameters":{"id":50902,"nodeType":"ParameterList","parameters":[],"src":"22807:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":50950,"nodeType":"FunctionDefinition","src":"22998:379:88","nodes":[],"body":{"id":50949,"nodeType":"Block","src":"23030:347:88","nodes":[],"statements":[{"assignments":[50919],"declarations":[{"constant":false,"id":50919,"mutability":"mutable","name":"attesters","nameLocation":"23102:9:88","nodeType":"VariableDeclaration","scope":50949,"src":"23085:26:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":50917,"name":"address","nodeType":"ElementaryTypeName","src":"23085:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50918,"nodeType":"ArrayTypeName","src":"23085:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":50927,"initialValue":{"arguments":[{"arguments":[{"id":50924,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"23174:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50923,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23166:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50922,"name":"address","nodeType":"ElementaryTypeName","src":"23166:7:88","typeDescriptions":{}}},"id":50925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23166:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50920,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"23114:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23130:35:88","memberName":"getStakedAttestersForAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":52982,"src":"23114:51:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":50926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23114:66:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"23085:95:88"},{"assignments":[50929],"declarations":[{"constant":false,"id":50929,"mutability":"mutable","name":"acceptorIndex","nameLocation":"23198:13:88","nodeType":"VariableDeclaration","scope":50949,"src":"23190:21:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50928,"name":"uint256","nodeType":"ElementaryTypeName","src":"23190:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50942,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":50933,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"23232:5:88","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":50934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23238:6:88","memberName":"number","nodeType":"MemberAccess","src":"23232:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":50935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23245:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"23232:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50932,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"23222:9:88","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":50937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23222:25:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":50931,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23214:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":50930,"name":"uint256","nodeType":"ElementaryTypeName","src":"23214:7:88","typeDescriptions":{}}},"id":50938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23214:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"expression":{"id":50939,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50919,"src":"23251:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23261:6:88","memberName":"length","nodeType":"MemberAccess","src":"23251:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23214:53:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23190:77:88"},{"expression":{"id":50947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50943,"name":"currentAcceptor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50971,"src":"23328:15:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":50944,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50919,"src":"23346:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50946,"indexExpression":{"id":50945,"name":"acceptorIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50929,"src":"23356:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23346:24:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23328:42:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50948,"nodeType":"ExpressionStatement","src":"23328:42:88"}]},"implemented":true,"kind":"function","modifiers":[],"name":"setAcceptor","nameLocation":"23007:11:88","parameters":{"id":50913,"nodeType":"ParameterList","parameters":[],"src":"23018:2:88"},"returnParameters":{"id":50914,"nodeType":"ParameterList","parameters":[],"src":"23030:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":49820,"name":"Initializable","nameLocations":["593:13:88"],"nodeType":"IdentifierPath","referencedDeclaration":39600,"src":"593:13:88"},"id":49821,"nodeType":"InheritanceSpecifier","src":"593:13:88"},{"baseName":{"id":49822,"name":"BaseSettlement","nameLocations":["608:14:88"],"nodeType":"IdentifierPath","referencedDeclaration":51115,"src":"608:14:88"},"id":49823,"nodeType":"InheritanceSpecifier","src":"608:14:88"},{"baseName":{"id":49824,"name":"MCRStorage","nameLocations":["624:10:88"],"nodeType":"IdentifierPath","referencedDeclaration":51037,"src":"624:10:88"},"id":49825,"nodeType":"InheritanceSpecifier","src":"624:10:88"},{"baseName":{"id":49826,"name":"IMCR","nameLocations":["636:4:88"],"nodeType":"IdentifierPath","referencedDeclaration":51060,"src":"636:4:88"},"id":49827,"nodeType":"InheritanceSpecifier","src":"636:4:88"}],"canonicalName":"MCR","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[50951,51060,51037,51115,39782,42716,39346,41109,45196,41488,40614,39600],"name":"MCR","nameLocation":"586:3:88","scope":50952,"usedErrors":[39363,39366,39627,39632,41415,41418,42926,42939,44034,44037,51057,51059],"usedEvents":[39371,41427,41436,41445,42905,51047,51055]}],"license":"UNLICENSED"},"id":88} \ No newline at end of file diff --git a/protocol-units/post-confirmations/client/abis/MOVEToken.json b/protocol-units/post-confirmations/client/abis/MOVEToken.json new file mode 100644 index 00000000..f20116a0 --- /dev/null +++ b/protocol-units/post-confirmations/client/abis/MOVEToken.json @@ -0,0 +1,2983 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "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": "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": "getRoleAdmin", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "grantRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "hasRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_owner", + "type": "address", + "internalType": "address" + }, + { + "name": "_custody", + "type": "address", + "internalType": "address" + } + ], + "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": "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": "renounceRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "callerConfirmation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "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": "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": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "newAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "sender", + "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": "AccessControlBadConfirmation", + "inputs": [] + }, + { + "type": "error", + "name": "AccessControlUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "neededRole", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "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": [] + } + ], + "bytecode": { + "object": "0x6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61181a806100d65f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063485cc955116100b457806395d89b411161007957806395d89b4114610283578063a217fddf1461028b578063a9059cbb14610292578063d505accf146102a5578063d547741f146102b8578063dd62ed3e146102cb575f80fd5b8063485cc9551461021c57806370a082311461022f5780637ecebe001461024257806384b0196e1461025557806391d1485414610270575f80fd5b8063248a9ca3116100fa578063248a9ca3146101ca5780632f2ff15d146101dd578063313ce567146101f25780633644e5151461020157806336568abe14610209575f80fd5b806301ffc9a71461013657806306fdde031461015e578063095ea7b31461017357806318160ddd1461018657806323b872dd146101b7575b5f80fd5b610149610144366004611286565b6102de565b60405190151581526020015b60405180910390f35b610166610314565b60405161015591906112e2565b61014961018136600461130f565b6103b9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610155565b6101496101c5366004611337565b6103d0565b6101a96101d8366004611371565b6103f3565b6101f06101eb366004611388565b610413565b005b60405160088152602001610155565b6101a9610435565b6101f0610217366004611388565b610443565b6101f061022a3660046113b2565b61047b565b6101a961023d3660046113da565b610661565b6101a96102503660046113da565b610691565b61025d61069b565b60405161015597969594939291906113f3565b61014961027e366004611388565b610749565b61016661077f565b6101a95f81565b6101496102a036600461130f565b6107bd565b6101f06102b3366004611489565b6107ca565b6101f06102c6366004611388565b61091f565b6101a96102d93660046113b2565b61093b565b5f6001600160e01b03198216637965db0b60e01b148061030e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5f805160206117858339815191525b9050806003018054610337906114f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610363906114f6565b80156103ae5780601f10610385576101008083540402835291602001916103ae565b820191905f5260205f20905b81548152906001019060200180831161039157829003601f168201915b505050505091505090565b5f336103c6818585610984565b5060019392505050565b5f336103dd858285610991565b6103e88585856109ee565b506001949350505050565b5f9081525f805160206117c5833981519152602052604090206001015490565b61041c826103f3565b61042581610a4b565b61042f8383610a58565b50505050565b5f61043e610af9565b905090565b6001600160a01b038116331461046c5760405163334bd91960e11b815260040160405180910390fd5b6104768282610b02565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156104c05750825b90505f8267ffffffffffffffff1660011480156104dc5750303b155b9050811580156104ea575080155b156105085760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053257845460ff60401b1916600160401b1785555b6001600160a01b0387161580159061055257506001600160a01b03861615155b61055a575f80fd5b6105a060405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060048152602001634d4f564560e01b815250610b7b565b6105e360405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060018152602001603160f81b815250610b91565b6105ed5f88610a58565b50610612866105fe6008600a611625565b61060d906402540be400611633565b610bf0565b831561065857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f805f805160206117858339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b5f61030e82610c24565b5f60608082808083815f805160206117a583398151915280549091501580156106c657506001810154155b61070f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610717610c4c565b61071f610c8a565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f9182525f805160206117c5833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061178583398151915291610337906114f6565b5f336103c68185856109ee565b834211156107ee5760405163313c898160e11b815260048101859052602401610706565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108588c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6108b282610ca0565b90505f6108c182878787610ccc565b9050896001600160a01b0316816001600160a01b031614610908576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610706565b6109138a8a8a610984565b50505050505050505050565b610928826103f3565b61093181610a4b565b61042f8383610b02565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104768383836001610cf8565b5f61099c848461093b565b90505f19811461042f57818110156109e057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610706565b61042f84848484035f610cf8565b6001600160a01b038316610a1757604051634b637e8f60e11b81525f6004820152602401610706565b6001600160a01b038216610a405760405163ec442f0560e01b81525f6004820152602401610706565b610476838383610ddc565b610a558133610f15565b50565b5f5f805160206117c5833981519152610a718484610749565b610af0575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610aa63390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061030e565b5f91505061030e565b5f61043e610f4e565b5f5f805160206117c5833981519152610b1b8484610749565b15610af0575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061030e565b610b83610fc1565b610b8d828261100c565b5050565b610b99610fc1565b5f805160206117a58339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610bd284826116a2565b5060038101610be183826116a2565b505f8082556001909101555050565b6001600160a01b038216610c195760405163ec442f0560e01b81525f6004820152602401610706565b610b8d5f8383610ddc565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610672565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206117a583398151915291610337906114f6565b60605f5f805160206117a5833981519152610326565b5f61030e610cac610af9565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80610cdc8888888861105c565b925092509250610cec8282611124565b50909695505050505050565b5f805160206117858339815191526001600160a01b038516610d2f5760405163e602df0560e01b81525f6004820152602401610706565b6001600160a01b038416610d5857604051634a1406b160e11b81525f6004820152602401610706565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610dd557836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610dcc91815260200190565b60405180910390a35b5050505050565b5f805160206117858339815191526001600160a01b038416610e165781816002015f828254610e0b919061175d565b90915550610e869050565b6001600160a01b0384165f9081526020829052604090205482811015610e685760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610706565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610ea4576002810180548390039055610ec2565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f0791815260200190565b60405180910390a350505050565b610f1f8282610749565b610b8d5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610706565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f786111dc565b610f80611244565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661100a57604051631afcd79f60e31b815260040160405180910390fd5b565b611014610fc1565b5f805160206117858339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361104d84826116a2565b506004810161042f83826116a2565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561109557505f9150600390508261111a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156110e6573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661111157505f92506001915082905061111a565b92505f91508190505b9450945094915050565b5f82600381111561113757611137611770565b03611140575050565b600182600381111561115457611154611770565b036111725760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561118657611186611770565b036111a75760405163fce698f760e01b815260048101829052602401610706565b60038260038111156111bb576111bb611770565b03610b8d576040516335e2f38360e21b815260048101829052602401610706565b5f5f805160206117a5833981519152816111f4610c4c565b80519091501561120c57805160209091012092915050565b8154801561121b579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f805160206117a58339815191528161125c610c8a565b80519091501561127457805160209091012092915050565b6001820154801561121b579392505050565b5f60208284031215611296575f80fd5b81356001600160e01b0319811681146112ad575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112ad60208301846112b4565b80356001600160a01b038116811461130a575f80fd5b919050565b5f8060408385031215611320575f80fd5b611329836112f4565b946020939093013593505050565b5f805f60608486031215611349575f80fd5b611352846112f4565b9250611360602085016112f4565b929592945050506040919091013590565b5f60208284031215611381575f80fd5b5035919050565b5f8060408385031215611399575f80fd5b823591506113a9602084016112f4565b90509250929050565b5f80604083850312156113c3575f80fd5b6113cc836112f4565b91506113a9602084016112f4565b5f602082840312156113ea575f80fd5b6112ad826112f4565b60ff60f81b8816815260e060208201525f61141160e08301896112b4565b828103604084015261142381896112b4565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561147857835183526020938401939092019160010161145a565b50909b9a5050505050505050505050565b5f805f805f805f60e0888a03121561149f575f80fd5b6114a8886112f4565b96506114b6602089016112f4565b95506040880135945060608801359350608088013560ff811681146114d9575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c9082168061150a57607f821691505b60208210810361152857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561157d578085048111156115615761156161152e565b600184161561156f57908102905b60019390931c928002611546565b935093915050565b5f826115935750600161030e565b8161159f57505f61030e565b81600181146115b557600281146115bf576115db565b600191505061030e565b60ff8411156115d0576115d061152e565b50506001821b61030e565b5060208310610133831016604e8410600b84101617156115fe575081810a61030e565b61160a5f198484611542565b805f190482111561161d5761161d61152e565b029392505050565b5f6112ad60ff841683611585565b808202811582820484141761030e5761030e61152e565b634e487b7160e01b5f52604160045260245ffd5b601f82111561047657805f5260205f20601f840160051c810160208510156116835750805b601f840160051c820191505b81811015610dd5575f815560010161168f565b815167ffffffffffffffff8111156116bc576116bc61164a565b6116d0816116ca84546114f6565b8461165e565b6020601f821160018114611702575f83156116eb5750848201515b5f19600385901b1c1916600184901b178455610dd5565b5f84815260208120601f198516915b828110156117315787850151825560209485019460019092019101611711565b508482101561174e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561030e5761030e61152e565b634e487b7160e01b5f52602160045260245ffdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212200c213e57e697f2dee37f51b79647b3593da8c247917d58e21e2647bf25597abc64736f6c634300081a0033", + "sourceMap": "299:1259:112:-:0;;;447:39;;;;;;;;;-1:-1:-1;462:22:112;:20;:22::i;:::-;299:1259;;7711:422:25;8870:21;7900:15;;;;;;;7896:76;;;7938:23;;-1:-1:-1;;;7938:23:25;;;;;;;;;;;7896:76;7985:14;;-1:-1:-1;;;;;7985:14:25;;;:34;7981:146;;8035:33;;-1:-1:-1;;;;;;8035:33:25;-1:-1:-1;;;;;8035:33:25;;;;;8087:29;;158:50:137;;;8087:29:25;;146:2:137;131:18;8087:29:25;;;;;;;7981:146;7760:373;7711:422::o;14:200:137:-;299:1259:112;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063485cc955116100b457806395d89b411161007957806395d89b4114610283578063a217fddf1461028b578063a9059cbb14610292578063d505accf146102a5578063d547741f146102b8578063dd62ed3e146102cb575f80fd5b8063485cc9551461021c57806370a082311461022f5780637ecebe001461024257806384b0196e1461025557806391d1485414610270575f80fd5b8063248a9ca3116100fa578063248a9ca3146101ca5780632f2ff15d146101dd578063313ce567146101f25780633644e5151461020157806336568abe14610209575f80fd5b806301ffc9a71461013657806306fdde031461015e578063095ea7b31461017357806318160ddd1461018657806323b872dd146101b7575b5f80fd5b610149610144366004611286565b6102de565b60405190151581526020015b60405180910390f35b610166610314565b60405161015591906112e2565b61014961018136600461130f565b6103b9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610155565b6101496101c5366004611337565b6103d0565b6101a96101d8366004611371565b6103f3565b6101f06101eb366004611388565b610413565b005b60405160088152602001610155565b6101a9610435565b6101f0610217366004611388565b610443565b6101f061022a3660046113b2565b61047b565b6101a961023d3660046113da565b610661565b6101a96102503660046113da565b610691565b61025d61069b565b60405161015597969594939291906113f3565b61014961027e366004611388565b610749565b61016661077f565b6101a95f81565b6101496102a036600461130f565b6107bd565b6101f06102b3366004611489565b6107ca565b6101f06102c6366004611388565b61091f565b6101a96102d93660046113b2565b61093b565b5f6001600160e01b03198216637965db0b60e01b148061030e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5f805160206117858339815191525b9050806003018054610337906114f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610363906114f6565b80156103ae5780601f10610385576101008083540402835291602001916103ae565b820191905f5260205f20905b81548152906001019060200180831161039157829003601f168201915b505050505091505090565b5f336103c6818585610984565b5060019392505050565b5f336103dd858285610991565b6103e88585856109ee565b506001949350505050565b5f9081525f805160206117c5833981519152602052604090206001015490565b61041c826103f3565b61042581610a4b565b61042f8383610a58565b50505050565b5f61043e610af9565b905090565b6001600160a01b038116331461046c5760405163334bd91960e11b815260040160405180910390fd5b6104768282610b02565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156104c05750825b90505f8267ffffffffffffffff1660011480156104dc5750303b155b9050811580156104ea575080155b156105085760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053257845460ff60401b1916600160401b1785555b6001600160a01b0387161580159061055257506001600160a01b03861615155b61055a575f80fd5b6105a060405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060048152602001634d4f564560e01b815250610b7b565b6105e360405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060018152602001603160f81b815250610b91565b6105ed5f88610a58565b50610612866105fe6008600a611625565b61060d906402540be400611633565b610bf0565b831561065857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f805f805160206117858339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b5f61030e82610c24565b5f60608082808083815f805160206117a583398151915280549091501580156106c657506001810154155b61070f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610717610c4c565b61071f610c8a565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f9182525f805160206117c5833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061178583398151915291610337906114f6565b5f336103c68185856109ee565b834211156107ee5760405163313c898160e11b815260048101859052602401610706565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108588c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6108b282610ca0565b90505f6108c182878787610ccc565b9050896001600160a01b0316816001600160a01b031614610908576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610706565b6109138a8a8a610984565b50505050505050505050565b610928826103f3565b61093181610a4b565b61042f8383610b02565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104768383836001610cf8565b5f61099c848461093b565b90505f19811461042f57818110156109e057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610706565b61042f84848484035f610cf8565b6001600160a01b038316610a1757604051634b637e8f60e11b81525f6004820152602401610706565b6001600160a01b038216610a405760405163ec442f0560e01b81525f6004820152602401610706565b610476838383610ddc565b610a558133610f15565b50565b5f5f805160206117c5833981519152610a718484610749565b610af0575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610aa63390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061030e565b5f91505061030e565b5f61043e610f4e565b5f5f805160206117c5833981519152610b1b8484610749565b15610af0575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061030e565b610b83610fc1565b610b8d828261100c565b5050565b610b99610fc1565b5f805160206117a58339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610bd284826116a2565b5060038101610be183826116a2565b505f8082556001909101555050565b6001600160a01b038216610c195760405163ec442f0560e01b81525f6004820152602401610706565b610b8d5f8383610ddc565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610672565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206117a583398151915291610337906114f6565b60605f5f805160206117a5833981519152610326565b5f61030e610cac610af9565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80610cdc8888888861105c565b925092509250610cec8282611124565b50909695505050505050565b5f805160206117858339815191526001600160a01b038516610d2f5760405163e602df0560e01b81525f6004820152602401610706565b6001600160a01b038416610d5857604051634a1406b160e11b81525f6004820152602401610706565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610dd557836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610dcc91815260200190565b60405180910390a35b5050505050565b5f805160206117858339815191526001600160a01b038416610e165781816002015f828254610e0b919061175d565b90915550610e869050565b6001600160a01b0384165f9081526020829052604090205482811015610e685760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610706565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610ea4576002810180548390039055610ec2565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f0791815260200190565b60405180910390a350505050565b610f1f8282610749565b610b8d5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610706565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f786111dc565b610f80611244565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661100a57604051631afcd79f60e31b815260040160405180910390fd5b565b611014610fc1565b5f805160206117858339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361104d84826116a2565b506004810161042f83826116a2565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561109557505f9150600390508261111a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156110e6573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661111157505f92506001915082905061111a565b92505f91508190505b9450945094915050565b5f82600381111561113757611137611770565b03611140575050565b600182600381111561115457611154611770565b036111725760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561118657611186611770565b036111a75760405163fce698f760e01b815260048101829052602401610706565b60038260038111156111bb576111bb611770565b03610b8d576040516335e2f38360e21b815260048101829052602401610706565b5f5f805160206117a5833981519152816111f4610c4c565b80519091501561120c57805160209091012092915050565b8154801561121b579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f805160206117a58339815191528161125c610c8a565b80519091501561127457805160209091012092915050565b6001820154801561121b579392505050565b5f60208284031215611296575f80fd5b81356001600160e01b0319811681146112ad575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112ad60208301846112b4565b80356001600160a01b038116811461130a575f80fd5b919050565b5f8060408385031215611320575f80fd5b611329836112f4565b946020939093013593505050565b5f805f60608486031215611349575f80fd5b611352846112f4565b9250611360602085016112f4565b929592945050506040919091013590565b5f60208284031215611381575f80fd5b5035919050565b5f8060408385031215611399575f80fd5b823591506113a9602084016112f4565b90509250929050565b5f80604083850312156113c3575f80fd5b6113cc836112f4565b91506113a9602084016112f4565b5f602082840312156113ea575f80fd5b6112ad826112f4565b60ff60f81b8816815260e060208201525f61141160e08301896112b4565b828103604084015261142381896112b4565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561147857835183526020938401939092019160010161145a565b50909b9a5050505050505050505050565b5f805f805f805f60e0888a03121561149f575f80fd5b6114a8886112f4565b96506114b6602089016112f4565b95506040880135945060608801359350608088013560ff811681146114d9575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c9082168061150a57607f821691505b60208210810361152857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561157d578085048111156115615761156161152e565b600184161561156f57908102905b60019390931c928002611546565b935093915050565b5f826115935750600161030e565b8161159f57505f61030e565b81600181146115b557600281146115bf576115db565b600191505061030e565b60ff8411156115d0576115d061152e565b50506001821b61030e565b5060208310610133831016604e8410600b84101617156115fe575081810a61030e565b61160a5f198484611542565b805f190482111561161d5761161d61152e565b029392505050565b5f6112ad60ff841683611585565b808202811582820484141761030e5761030e61152e565b634e487b7160e01b5f52604160045260245ffd5b601f82111561047657805f5260205f20601f840160051c810160208510156116835750805b601f840160051c820191505b81811015610dd5575f815560010161168f565b815167ffffffffffffffff8111156116bc576116bc61164a565b6116d0816116ca84546114f6565b8461165e565b6020601f821160018114611702575f83156116eb5750848201515b5f19600385901b1c1916600184901b178455610dd5565b5f84815260208120601f198516915b828110156117315787850151825560209485019460019092019101611711565b508482101561174e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561030e5761030e61152e565b634e487b7160e01b5f52602160045260245ffdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212200c213e57e697f2dee37f51b79647b3593da8c247917d58e21e2647bf25597abc64736f6c634300081a0033", + "sourceMap": "299:1259:112:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:24;;;;;;:::i;:::-;;:::i;:::-;;;470:14:137;;463:22;445:41;;433:2;418:18;3443:202:24;;;;;;;;3011:144:27;;;:::i;:::-;;;;;;;:::i;5505:186::-;;;;;;:::i;:::-;;:::i;4191:152::-;4322:14;;4191:152;;;1645:25:137;;;1633:2;1618:18;4191:152:27;1499:177:137;6251:244:27;;;;;;:::i;:::-;;:::i;4759:191:24:-;;;;;;:::i;:::-;;:::i;5246:136::-;;;;;;:::i;:::-;;:::i;:::-;;1474:82:112;;;1548:1;2920:36:137;;2908:2;2893:18;1474:82:112;2778:184:137;3082:112:28;;;:::i;6348:245:24:-;;;;;;:::i;:::-;;:::i;981:342:112:-;;;;;;:::i;:::-;;:::i;4401:171:27:-;;;;;;:::i;:::-;;:::i;2821:154:28:-;;;;;;:::i;:::-;;:::i;5173:903:31:-;;;:::i;:::-;;;;;;;;;;;;;:::i;3732:207:24:-;;;;;;:::i;:::-;;:::i;3268:148:27:-;;;:::i;2317:49:24:-;;2362:4;2317:49;;4767:178:27;;;;;;:::i;:::-;;:::i;2095:672:28:-;;;;;;:::i;:::-;;:::i;5662:138:24:-;;;;;;:::i;:::-;;:::i;5003:195:27:-;;;;;;:::i;:::-;;:::i;3443:202:24:-;3528:4;-1:-1:-1;;;;;;3551:47:24;;-1:-1:-1;;;3551:47:24;;:87;;-1:-1:-1;;;;;;;;;;1133:40:32;;;3602:36:24;3544:94;3443:202;-1:-1:-1;;3443:202:24:o;3011:144:27:-;3056:13;3081:22;-1:-1:-1;;;;;;;;;;;3106:18:27;3081:43;;3141:1;:7;;3134:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3011:144;:::o;5505:186::-;5578:4;966:10:29;5632:31:27;966:10:29;5648:7:27;5657:5;5632:8;:31::i;:::-;-1:-1:-1;5680:4:27;;5505:186;-1:-1:-1;;;5505:186:27:o;6251:244::-;6338:4;966:10:29;6394:37:27;6410:4;966:10:29;6425:5:27;6394:15;:37::i;:::-;6441:26;6451:4;6457:2;6461:5;6441:9;:26::i;:::-;-1:-1:-1;6484:4:27;;6251:244;-1:-1:-1;;;;6251:244:27:o;4759:191:24:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:24;;;;;:24;;;;4759:191::o;5246:136::-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;3082:112:28:-;3141:7;3167:20;:18;:20::i;:::-;3160:27;;3082:112;:::o;6348:245:24:-;-1:-1:-1;;;;;6441:34:24;;966:10:29;6441:34:24;6437:102;;6498:30;;-1:-1:-1;;;6498:30:24;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;981:342:112:-;8870:21:25;4302:15;;-1:-1:-1;;;4302:15:25;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:25;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:25;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:25;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:25;-1:-1:-1;;;5013:22:25;;;4979:67;-1:-1:-1;;;;;1072:20:112;::::1;::::0;;::::1;::::0;:46:::1;;-1:-1:-1::0;;;;;;1096:22:112;::::1;::::0;::::1;1072:46;1064:55;;;::::0;::::1;;1129:32;;;;;;;;;;;;;;-1:-1:-1::0;;;1129:32:112::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1129:32:112::1;;::::0;:12:::1;:32::i;:::-;1171:40;;;;;;;;;;;;;;-1:-1:-1::0;;;1171:40:112::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1171:40:112::1;;::::0;:23:::1;:40::i;:::-;1221:38;2362:4:24;1252:6:112::0;1221:10:::1;:38::i;:::-;-1:-1:-1::0;1269:47:112::1;1275:8:::0;1299:16:::1;1548:1:::0;1299:2:::1;:16;:::i;:::-;1285:30;::::0;:11:::1;:30;:::i;:::-;1269:5;:47::i;:::-;5070:14:25::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:25;;;5142:14;;-1:-1:-1;7849:50:137;;5142:14:25;;7837:2:137;7822:18;5142:14:25;;;;;;;5066:101;4092:1081;;;;;981:342:112;;:::o;4401:171:27:-;4466:7;;-1:-1:-1;;;;;;;;;;;4510:18:27;-1:-1:-1;;;;;4545:20:27;;;:11;:20;;;;;;;;-1:-1:-1;;4545:20:27;;;;;4401:171::o;2821:154:28:-;2923:7;2949:19;2962:5;2949:12;:19::i;5173:903:31:-;5271:13;5298:18;;5271:13;;;5298:18;5271:13;-1:-1:-1;;;;;;;;;;;5777:13:31;;5511:45;;-1:-1:-1;5777:18:31;:43;;;;-1:-1:-1;5799:16:31;;;;:21;5777:43;5769:77;;;;-1:-1:-1;;;5769:77:31;;8112:2:137;5769:77:31;;;8094:21:137;8151:2;8131:18;;;8124:30;-1:-1:-1;;;8170:18:137;;;8163:51;8231:18;;5769:77:31;;;;;;;;;5908:13;:11;:13::i;:::-;5935:16;:14;:16::i;:::-;6043;;;6027:1;6043:16;;;;;;;;;-1:-1:-1;;;5857:212:31;;;-1:-1:-1;5857:212:31;;-1:-1:-1;5965:13:31;;-1:-1:-1;6000:4:31;;-1:-1:-1;6027:1:31;-1:-1:-1;6043:16:31;-1:-1:-1;5857:212:31;-1:-1:-1;;5173:903:31:o;3732:207:24:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:24;;;;;;;;-1:-1:-1;;;;;3901:31:24;;;;;;;;;;;;;;;3732:207::o;3268:148:27:-;3400:9;3393:16;;3315:13;;-1:-1:-1;;;;;;;;;;;2359:20:27;3393:16;;;:::i;4767:178::-;4836:4;966:10:29;4890:27:27;966:10:29;4907:2:27;4911:5;4890:9;:27::i;2095:672:28:-;2316:8;2298:15;:26;2294:97;;;2347:33;;-1:-1:-1;;;2347:33:28;;;;;1645:25:137;;;1618:18;;2347:33:28;1499:177:137;2294:97:28;2401:18;1277:95;2460:5;2467:7;2476:5;2483:16;2493:5;-1:-1:-1;;;;;1954:16:30;1597:7;1954:16;;;1005:21;1954:16;;;;;:18;;;;;;;;;1537:452;2483:16:28;2432:78;;;;;;8679:25:137;;;;-1:-1:-1;;;;;8740:32:137;;;8720:18;;;8713:60;8809:32;;;;8789:18;;;8782:60;8858:18;;;8851:34;8901:19;;;8894:35;8945:19;;;8938:35;;;8651:19;;2432:78:28;;;;;;;;;;;;2422:89;;;;;;2401:110;;2522:12;2537:28;2554:10;2537:16;:28::i;:::-;2522:43;;2576:14;2593:28;2607:4;2613:1;2616;2619;2593:13;:28::i;:::-;2576:45;;2645:5;-1:-1:-1;;;;;2635:15:28;:6;-1:-1:-1;;;;;2635:15:28;;2631:88;;2673:35;;-1:-1:-1;;;2673:35:28;;-1:-1:-1;;;;;9176:32:137;;;2673:35:28;;;9158:51:137;9245:32;;9225:18;;;9218:60;9131:18;;2673:35:28;8984:300:137;2631:88:28;2729:31;2738:5;2745:7;2754:5;2729:8;:31::i;:::-;2284:483;;;2095:672;;;;;;;:::o;5662:138:24:-;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;5003:195:27:-:0;-1:-1:-1;;;;;5162:20:27;;;5083:7;5162:20;;;:13;:20;;;;;;;;:29;;;;;;;;;;;;;5003:195::o;10264:128::-;10348:37;10357:5;10364:7;10373:5;10380:4;10348:8;:37::i;11993:477::-;12092:24;12119:25;12129:5;12136:7;12119:9;:25::i;:::-;12092:52;;-1:-1:-1;;12158:16:27;:37;12154:310;;12234:5;12215:16;:24;12211:130;;;12266:60;;-1:-1:-1;;;12266:60:27;;-1:-1:-1;;;;;9509:32:137;;12266:60:27;;;9491:51:137;9558:18;;;9551:34;;;9601:18;;;9594:34;;;9464:18;;12266:60:27;9289:345:137;12211:130:27;12382:57;12391:5;12398:7;12426:5;12407:16;:24;12433:5;12382:8;:57::i;6868:300::-;-1:-1:-1;;;;;6951:18:27;;6947:86;;6992:30;;-1:-1:-1;;;6992:30:27;;7019:1;6992:30;;;9785:51:137;9758:18;;6992:30:27;9639:203:137;6947:86:27;-1:-1:-1;;;;;7046:16:27;;7042:86;;7085:32;;-1:-1:-1;;;7085:32:27;;7114:1;7085:32;;;9785:51:137;9758:18;;7085:32:27;9639:203:137;7042:86:27;7137:24;7145:4;7151:2;7155:5;7137:7;:24::i;4148:103:24:-;4214:30;4225:4;966:10:29;4214::24;:30::i;:::-;4148:103;:::o;7270:387::-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:24;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:24;;;;;;;;;:38;;-1:-1:-1;;7475:38:24;7509:4;7475:38;;;7559:12;966:10:29;;887:96;7559:12:24;-1:-1:-1;;;;;7532:40:24;7550:7;-1:-1:-1;;;;;7532:40:24;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;4015:109:31;4068:7;4094:23;:21;:23::i;7892:388:24:-;7970:4;-1:-1:-1;;;;;;;;;;;8059:22:24;8067:4;8073:7;8059;:22::i;:::-;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:24;;;;;;;;;;:39;;-1:-1:-1;;8097:39:24;;;8155:40;966:10:29;;8097:14:24;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;2577:147:27;6931:20:25;:18;:20::i;:::-;2679:38:27::1;2702:5;2709:7;2679:22;:38::i;:::-;2577:147:::0;;:::o;3599:330:31:-;6931:20:25;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;3766:7:31;:14:::1;3776:4:::0;3766:7;:14:::1;:::i;:::-;-1:-1:-1::0;3790:10:31::1;::::0;::::1;:20;3803:7:::0;3790:10;:20:::1;:::i;:::-;-1:-1:-1::0;3891:1:31::1;3875:17:::0;;;3902:16:::1;::::0;;::::1;:20:::0;-1:-1:-1;;3599:330:31:o;8996:208:27:-;-1:-1:-1;;;;;9066:21:27;;9062:91;;9110:32;;-1:-1:-1;;;9110:32:27;;9139:1;9110:32;;;9785:51:137;9758:18;;9110:32:27;9639:203:137;9062:91:27;9162:35;9178:1;9182:7;9191:5;9162:7;:35::i;1259:164:30:-;1319:7;;1005:21;1364:19;886:156;6300:155:31;6441:7;6434:14;;6354:13;;-1:-1:-1;;;;;;;;;;;2839:21:31;6434:14;;;:::i;6682:161::-;6739:13;6764:23;-1:-1:-1;;;;;;;;;;;6790:19:31;2720:156;4946:176;5023:7;5049:66;5082:20;:18;:20::i;:::-;5104:10;3555:4:61;3549:11;-1:-1:-1;;;3573:23:61;;3625:4;3616:14;;3609:39;;;;3677:4;3668:14;;3661:34;3733:4;3718:20;;;3353:401;6803:260:60;6888:7;6908:17;6927:18;6947:16;6967:25;6978:4;6984:1;6987;6990;6967:10;:25::i;:::-;6907:85;;;;;;7002:28;7014:5;7021:8;7002:11;:28::i;:::-;-1:-1:-1;7047:9:60;;6803:260;-1:-1:-1;;;;;;6803:260:60:o;11224:487:27:-;-1:-1:-1;;;;;;;;;;;;;;;;11389:19:27;;11385:89;;11431:32;;-1:-1:-1;;;11431:32:27;;11460:1;11431:32;;;9785:51:137;9758:18;;11431:32:27;9639:203:137;11385:89:27;-1:-1:-1;;;;;11487:21:27;;11483:90;;11531:31;;-1:-1:-1;;;11531:31:27;;11559:1;11531:31;;;9785:51:137;9758:18;;11531:31:27;9639:203:137;11483:90:27;-1:-1:-1;;;;;11582:20:27;;;;;;;:13;;;:20;;;;;;;;:29;;;;;;;;;:37;;;11629:76;;;;11679:7;-1:-1:-1;;;;;11663:31:27;11672:5;-1:-1:-1;;;;;11663:31:27;;11688:5;11663:31;;;;1645:25:137;;1633:2;1618:18;;1499:177;11663:31:27;;;;;;;;11629:76;11322:389;11224:487;;;;:::o;7483:1170::-;-1:-1:-1;;;;;;;;;;;;;;;;7625:18:27;;7621:546;;7779:5;7761:1;:14;;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;7621:546:27;;-1:-1:-1;7621:546:27;;-1:-1:-1;;;;;7837:17:27;;7815:19;7837:17;;;;;;;;;;;7872:19;;;7868:115;;;7918:50;;-1:-1:-1;;;7918:50:27;;-1:-1:-1;;;;;9509:32:137;;7918:50:27;;;9491:51:137;9558:18;;;9551:34;;;9601:18;;;9594:34;;;9464:18;;7918:50:27;9289:345:137;7868:115:27;-1:-1:-1;;;;;8103:17:27;;:11;:17;;;;;;;;;;8123:19;;;;8103:39;;7621:546;-1:-1:-1;;;;;8181:16:27;;8177:429;;8344:14;;;:23;;;;;;;8177:429;;;-1:-1:-1;;;;;8557:15:27;;:11;:15;;;;;;;;;;:24;;;;;;8177:429;8636:2;-1:-1:-1;;;;;8621:25:27;8630:4;-1:-1:-1;;;;;8621:25:27;;8640:5;8621:25;;;;1645::137;;1633:2;1618:18;;1499:177;8621:25:27;;;;;;;;7558:1095;7483:1170;;;:::o;4381:197:24:-;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:24;;-1:-1:-1;;;;;12293:32:137;;4514:47:24;;;12275:51:137;12342:18;;;12335:34;;;12248:18;;4514:47:24;12101:274:137;4130:191:31;4185:7;2073:95;4243:17;:15;:17::i;:::-;4262:20;:18;:20::i;:::-;4221:92;;;;;;12639:25:137;;;;12680:18;;12673:34;;;;12723:18;;;12716:34;4284:13:31;12766:18:137;;;12759:34;4307:4:31;12809:19:137;;;12802:61;12611:19;;4221:92:31;;;;;;;;;;;;4211:103;;;;;;4204:110;;4130:191;:::o;7084:141:25:-;8870:21;8560:40;-1:-1:-1;;;8560:40:25;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:25;;;;;;;;;;;7146:73;7084:141::o;2730:216:27:-;6931:20:25;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;2895:7:27;:15:::1;2905:5:::0;2895:7;:15:::1;:::i;:::-;-1:-1:-1::0;2920:9:27::1;::::0;::::1;:19;2932:7:::0;2920:9;:19:::1;:::i;5140:1530:60:-:0;5266:7;;;6199:66;6186:79;;6182:164;;;-1:-1:-1;6297:1:60;;-1:-1:-1;6301:30:60;;-1:-1:-1;6333:1:60;6281:54;;6182:164;6457:24;;;6440:14;6457:24;;;;;;;;;13101:25:137;;;13174:4;13162:17;;13142:18;;;13135:45;;;;13196:18;;;13189:34;;;13239:18;;;13232:34;;;6457:24:60;;13073:19:137;;6457:24:60;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6457:24:60;;-1:-1:-1;;6457:24:60;;;-1:-1:-1;;;;;;;6495:20:60;;6491:113;;-1:-1:-1;6547:1:60;;-1:-1:-1;6551:29:60;;-1:-1:-1;6547:1:60;;-1:-1:-1;6531:62:60;;6491:113;6622:6;-1:-1:-1;6630:20:60;;-1:-1:-1;6630:20:60;;-1:-1:-1;5140:1530:60;;;;;;;;;:::o;7196:532::-;7291:20;7282:5;:29;;;;;;;;:::i;:::-;;7278:444;;7196:532;;:::o;7278:444::-;7387:29;7378:5;:38;;;;;;;;:::i;:::-;;7374:348;;7439:23;;-1:-1:-1;;;7439:23:60;;;;;;;;;;;7374:348;7492:35;7483:5;:44;;;;;;;;:::i;:::-;;7479:243;;7550:46;;-1:-1:-1;;;7550:46:60;;;;;1645:25:137;;;1618:18;;7550:46:60;1499:177:137;7479:243:60;7626:30;7617:5;:39;;;;;;;;:::i;:::-;;7613:109;;7679:32;;-1:-1:-1;;;7679:32:60;;;;;1645:25:137;;;1618:18;;7679:32:60;1499:177:137;7058:687:31;7108:7;-1:-1:-1;;;;;;;;;;;7108:7:31;7203:13;:11;:13::i;:::-;7230:18;;7182:34;;-1:-1:-1;7230:22:31;7226:513;;7275:22;;;;;;;;7058:687;-1:-1:-1;;7058:687:31:o;7226:513::-;7572:13;;7603:15;;7599:130;;7645:10;7058:687;-1:-1:-1;;;7058:687:31:o;7599:130::-;7701:13;7694:20;;;;;7058:687;:::o;7966:723::-;8019:7;-1:-1:-1;;;;;;;;;;;8019:7:31;8117:16;:14;:16::i;:::-;8147:21;;8093:40;;-1:-1:-1;8147:25:31;8143:540;;8195:25;;;;;;;;7966:723;-1:-1:-1;;7966:723:31:o;8143:540::-;8507:16;;;;8541:18;;8537:136;;8586:13;7966:723;-1:-1:-1;;;7966:723:31:o;14:286:137:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:137;;209:43;;199:71;;266:1;263;256:12;199:71;289:5;14:286;-1:-1:-1;;;14:286:137:o;497:289::-;539:3;577:5;571:12;604:6;599:3;592:19;660:6;653:4;646:5;642:16;635:4;630:3;626:14;620:47;712:1;705:4;696:6;691:3;687:16;683:27;676:38;775:4;768:2;764:7;759:2;751:6;747:15;743:29;738:3;734:39;730:50;723:57;;;497:289;;;;:::o;791:220::-;940:2;929:9;922:21;903:4;960:45;1001:2;990:9;986:18;978:6;960:45;:::i;1016:173::-;1084:20;;-1:-1:-1;;;;;1133:31:137;;1123:42;;1113:70;;1179:1;1176;1169:12;1113:70;1016:173;;;:::o;1194:300::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1362:29;1381:9;1362:29;:::i;:::-;1352:39;1460:2;1445:18;;;;1432:32;;-1:-1:-1;;;1194:300:137:o;1681:374::-;1758:6;1766;1774;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;1866:29;1885:9;1866:29;:::i;:::-;1856:39;;1914:38;1948:2;1937:9;1933:18;1914:38;:::i;:::-;1681:374;;1904:48;;-1:-1:-1;;;2021:2:137;2006:18;;;;1993:32;;1681:374::o;2060:226::-;2119:6;2172:2;2160:9;2151:7;2147:23;2143:32;2140:52;;;2188:1;2185;2178:12;2140:52;-1:-1:-1;2233:23:137;;2060:226;-1:-1:-1;2060:226:137:o;2473:300::-;2541:6;2549;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2663:23;;;-1:-1:-1;2729:38:137;2763:2;2748:18;;2729:38;:::i;:::-;2719:48;;2473:300;;;;;:::o;2967:260::-;3035:6;3043;3096:2;3084:9;3075:7;3071:23;3067:32;3064:52;;;3112:1;3109;3102:12;3064:52;3135:29;3154:9;3135:29;:::i;:::-;3125:39;;3183:38;3217:2;3206:9;3202:18;3183:38;:::i;3232:186::-;3291:6;3344:2;3332:9;3323:7;3319:23;3315:32;3312:52;;;3360:1;3357;3350:12;3312:52;3383:29;3402:9;3383:29;:::i;3423:1238::-;3829:3;3824;3820:13;3812:6;3808:26;3797:9;3790:45;3871:3;3866:2;3855:9;3851:18;3844:31;3771:4;3898:46;3939:3;3928:9;3924:19;3916:6;3898:46;:::i;:::-;3992:9;3984:6;3980:22;3975:2;3964:9;3960:18;3953:50;4026:33;4052:6;4044;4026:33;:::i;:::-;4090:2;4075:18;;4068:34;;;-1:-1:-1;;;;;4139:32:137;;4133:3;4118:19;;4111:61;4159:3;4188:19;;4181:35;;;4253:22;;;4247:3;4232:19;;4225:51;4325:13;;4347:22;;;4397:2;4423:15;;;;-1:-1:-1;4385:15:137;;;;-1:-1:-1;4466:169:137;4480:6;4477:1;4474:13;4466:169;;;4541:13;;4529:26;;4584:2;4610:15;;;;4575:12;;;;4502:1;4495:9;4466:169;;;-1:-1:-1;4652:3:137;;3423:1238;-1:-1:-1;;;;;;;;;;;3423:1238:137:o;4666:903::-;4777:6;4785;4793;4801;4809;4817;4825;4878:3;4866:9;4857:7;4853:23;4849:33;4846:53;;;4895:1;4892;4885:12;4846:53;4918:29;4937:9;4918:29;:::i;:::-;4908:39;;4966:38;5000:2;4989:9;4985:18;4966:38;:::i;:::-;4956:48;-1:-1:-1;5073:2:137;5058:18;;5045:32;;-1:-1:-1;5174:2:137;5159:18;;5146:32;;-1:-1:-1;5256:3:137;5241:19;;5228:33;5305:4;5292:18;;5280:31;;5270:59;;5325:1;5322;5315:12;5270:59;4666:903;;;;-1:-1:-1;4666:903:137;;;;5348:7;5428:3;5413:19;;5400:33;;-1:-1:-1;5532:3:137;5517:19;;;5504:33;;4666:903;-1:-1:-1;;4666:903:137:o;5574:380::-;5653:1;5649:12;;;;5696;;;5717:61;;5771:4;5763:6;5759:17;5749:27;;5717:61;5824:2;5816:6;5813:14;5793:18;5790:38;5787:161;;5870:10;5865:3;5861:20;5858:1;5851:31;5905:4;5902:1;5895:15;5933:4;5930:1;5923:15;5787:161;;5574:380;;;:::o;5959:127::-;6020:10;6015:3;6011:20;6008:1;6001:31;6051:4;6048:1;6041:15;6075:4;6072:1;6065:15;6091:375;6179:1;6197:5;6211:249;6232:1;6222:8;6219:15;6211:249;;;6282:4;6277:3;6273:14;6267:4;6264:24;6261:50;;;6291:18;;:::i;:::-;6341:1;6331:8;6327:16;6324:49;;;6355:16;;;;6324:49;6438:1;6434:16;;;;;6394:15;;6211:249;;;6091:375;;;;;;:::o;6471:902::-;6520:5;6550:8;6540:80;;-1:-1:-1;6591:1:137;6605:5;;6540:80;6639:4;6629:76;;-1:-1:-1;6676:1:137;6690:5;;6629:76;6721:4;6739:1;6734:59;;;;6807:1;6802:174;;;;6714:262;;6734:59;6764:1;6755:10;;6778:5;;;6802:174;6839:3;6829:8;6826:17;6823:43;;;6846:18;;:::i;:::-;-1:-1:-1;;6902:1:137;6888:16;;6961:5;;6714:262;;7060:2;7050:8;7047:16;7041:3;7035:4;7032:13;7028:36;7022:2;7012:8;7009:16;7004:2;6998:4;6995:12;6991:35;6988:77;6985:203;;;-1:-1:-1;7097:19:137;;;7173:5;;6985:203;7220:42;-1:-1:-1;;7245:8:137;7239:4;7220:42;:::i;:::-;7298:6;7294:1;7290:6;7286:19;7277:7;7274:32;7271:58;;;7309:18;;:::i;:::-;7347:20;;6471:902;-1:-1:-1;;;6471:902:137:o;7378:140::-;7436:5;7465:47;7506:4;7496:8;7492:19;7486:4;7465:47;:::i;7523:168::-;7596:9;;;7627;;7644:15;;;7638:22;;7624:37;7614:71;;7665:18;;:::i;8260:127::-;8321:10;8316:3;8312:20;8309:1;8302:31;8352:4;8349:1;8342:15;8376:4;8373:1;8366:15;9973:518;10075:2;10070:3;10067:11;10064:421;;;10111:5;10108:1;10101:16;10155:4;10152:1;10142:18;10225:2;10213:10;10209:19;10206:1;10202:27;10196:4;10192:38;10261:4;10249:10;10246:20;10243:47;;;-1:-1:-1;10284:4:137;10243:47;10339:2;10334:3;10330:12;10327:1;10323:20;10317:4;10313:31;10303:41;;10394:81;10412:2;10405:5;10402:13;10394:81;;;10471:1;10457:16;;10438:1;10427:13;10394:81;;10667:1299;10793:3;10787:10;10820:18;10812:6;10809:30;10806:56;;;10842:18;;:::i;:::-;10871:97;10961:6;10921:38;10953:4;10947:11;10921:38;:::i;:::-;10915:4;10871:97;:::i;:::-;11017:4;11048:2;11037:14;;11065:1;11060:649;;;;11753:1;11770:6;11767:89;;;-1:-1:-1;11822:19:137;;;11816:26;11767:89;-1:-1:-1;;10624:1:137;10620:11;;;10616:24;10612:29;10602:40;10648:1;10644:11;;;10599:57;11869:81;;11030:930;;11060:649;9920:1;9913:14;;;9957:4;9944:18;;-1:-1:-1;;11096:20:137;;;11214:222;11228:7;11225:1;11222:14;11214:222;;;11310:19;;;11304:26;11289:42;;11417:4;11402:20;;;;11370:1;11358:14;;;;11244:12;11214:222;;;11218:3;11464:6;11455:7;11452:19;11449:201;;;11525:19;;;11519:26;-1:-1:-1;;11608:1:137;11604:14;;;11620:3;11600:24;11596:37;11592:42;11577:58;11562:74;;11449:201;-1:-1:-1;;;;11696:1:137;11680:14;;;11676:22;11663:36;;-1:-1:-1;10667:1299:137:o;11971:125::-;12036:9;;;12057:10;;;12054:36;;;12070:18;;:::i;13277:127::-;13338:10;13333:3;13329:20;13326:1;13319:31;13369:4;13366:1;13359:15;13393:4;13390:1;13383:15", + "linkReferences": {} + }, + "methodIdentifiers": { + "DEFAULT_ADMIN_ROLE()": "a217fddf", + "DOMAIN_SEPARATOR()": "3644e515", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "eip712Domain()": "84b0196e", + "getRoleAdmin(bytes32)": "248a9ca3", + "grantRole(bytes32,address)": "2f2ff15d", + "hasRole(bytes32,address)": "91d14854", + "initialize(address,address)": "485cc955", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "renounceRole(bytes32,address)": "36568abe", + "revokeRole(bytes32,address)": "d547741f", + "supportsInterface(bytes4)": "01ffc9a7", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"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\"},{\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"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\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"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\":[],\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_custody\",\"type\":\"address\"}],\"name\":\"initialize\",\"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\":[{\"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\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an .\"}],\"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.\"}]},\"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.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"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}.\"},\"constructor\":{\"details\":\"Disables potential implementation exploit\"},\"decimals()\":{\"details\":\"Returns the number of decimals\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize(address,address)\":{\"details\":\"Initializes the contract with initial parameters.\",\"params\":{\"_custody\":\"The address of the custody account.\",\"_owner\":\"The address of the owner who receives default admin role.\"}},\"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.\"},\"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.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"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}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. 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`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"decimals()\":{\"notice\":\"decimals is set to 8, following the Movement network standard decimals\"},\"initialize(address,address)\":{\"notice\":\"The ERC20 token is named \\\"Movement\\\" with symbol \\\"MOVE\\\".EIP712 domain version is set to \\\"1\\\" for signatures.The owner is granted the `DEFAULT_ADMIN_ROLE`.10 billion MOVE tokens are minted to the owner's address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/MOVEToken.sol\":\"MOVEToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"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\":\"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040\",\"dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x8a97653aeba40e9f0c2e8df1a1379b29b927b6dc3534040c668e71ad9ae89d88\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e529c294c9d634eb68a1e4aeb66eb8381de5a08ccd2c0bfeebd48a6b28fcff7\",\"dweb:/ipfs/QmWCezuxfZb68nM3Hs6XzQNNiW7VJsymU4sajy2DW1CKbp\"]},\"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\":\"0x85462422a22578744581e012e9aa0a391958cb360288b0b63f29bf0431d70327\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2bc529e2b9b28da5d26da451058250d85afcaa3c5083ee273ac68fa6bf956b78\",\"dweb:/ipfs/Qmd3Aq59ztmoVmHigsaR4YjkXWKERVpjfQ4a2PHk7Ke6Rx\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"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\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"src/token/MOVEToken.sol\":{\"keccak256\":\"0x907babd7e2db7867a9401ab8edcecd579ad7db099ae4693a27e052887d91eb22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a87e3b44d5e5409f0695ca2057be132b02b12a6cfa3d95a1a69382458e16b20a\",\"dweb:/ipfs/QmPNA8kiRGr3jR4ngz8UeKLUM7QitN4J5xNbxxWYNncV9H\"]}},\"version\":1}", + "metadata": { + "compiler": { + "version": "0.8.26+commit.8a97fa7a" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "type": "error", + "name": "AccessControlBadConfirmation" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "neededRole", + "type": "bytes32" + } + ], + "type": "error", + "name": "AccessControlUnauthorizedAccount" + }, + { + "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", + "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": "bytes32", + "name": "role", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32", + "indexed": true + } + ], + "type": "event", + "name": "RoleAdminChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "address", + "name": "account", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "sender", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "RoleGranted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "address", + "name": "account", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "sender", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "RoleRevoked", + "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": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "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": [], + "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": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "grantRole" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_custody", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "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": [ + { + "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": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "callerConfirmation", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceRole" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeRole" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "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" + } + ] + } + ], + "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}." + }, + "constructor": { + "details": "Disables potential implementation exploit" + }, + "decimals()": { + "details": "Returns the number of decimals" + }, + "eip712Domain()": { + "details": "See {IERC-5267}." + }, + "getRoleAdmin(bytes32)": { + "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." + }, + "grantRole(bytes32,address)": { + "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." + }, + "hasRole(bytes32,address)": { + "details": "Returns `true` if `account` has been granted `role`." + }, + "initialize(address,address)": { + "details": "Initializes the contract with initial parameters.", + "params": { + "_custody": "The address of the custody account.", + "_owner": "The address of the owner who receives default admin role." + } + }, + "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." + }, + "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." + }, + "renounceRole(bytes32,address)": { + "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event." + }, + "revokeRole(bytes32,address)": { + "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}." + }, + "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}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. 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`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "decimals()": { + "notice": "decimals is set to 8, following the Movement network standard decimals" + }, + "initialize(address,address)": { + "notice": "The ERC20 token is named \"Movement\" with symbol \"MOVE\".EIP712 domain version is set to \"1\" for signatures.The owner is granted the `DEFAULT_ADMIN_ROLE`.10 billion MOVE tokens are minted to the owner's address." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@createx/=lib/createx/src/", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", + "@safe-smart-account/=lib/safe-smart-account/", + "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/", + "murky/=lib/murky/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", + "openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/", + "safe-smart-account/=lib/safe-smart-account/", + "solady/=lib/createx/lib/solady/", + "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/", + "solmate/=lib/solmate/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "ipfs" + }, + "compilationTarget": { + "src/token/MOVEToken.sol": "MOVEToken" + }, + "evmVersion": "cancun", + "libraries": {} + }, + "sources": { + "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol": { + "keccak256": "0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225", + "urls": [ + "bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45", + "dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN" + ], + "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": "0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f", + "urls": [ + "bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040", + "dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol": { + "keccak256": "0x8a97653aeba40e9f0c2e8df1a1379b29b927b6dc3534040c668e71ad9ae89d88", + "urls": [ + "bzz-raw://6e529c294c9d634eb68a1e4aeb66eb8381de5a08ccd2c0bfeebd48a6b28fcff7", + "dweb:/ipfs/QmWCezuxfZb68nM3Hs6XzQNNiW7VJsymU4sajy2DW1CKbp" + ], + "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": "0x85462422a22578744581e012e9aa0a391958cb360288b0b63f29bf0431d70327", + "urls": [ + "bzz-raw://2bc529e2b9b28da5d26da451058250d85afcaa3c5083ee273ac68fa6bf956b78", + "dweb:/ipfs/Qmd3Aq59ztmoVmHigsaR4YjkXWKERVpjfQ4a2PHk7Ke6Rx" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol": { + "keccak256": "0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8", + "urls": [ + "bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45", + "dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/IAccessControl.sol": { + "keccak256": "0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41", + "urls": [ + "bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26", + "dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH" + ], + "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": "0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7", + "urls": [ + "bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f", + "dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": { + "keccak256": "0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70", + "urls": [ + "bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c", + "dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": { + "keccak256": "0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2", + "urls": [ + "bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850", + "dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol": { + "keccak256": "0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff", + "urls": [ + "bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d", + "dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Strings.sol": { + "keccak256": "0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792", + "urls": [ + "bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453", + "dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { + "keccak256": "0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf", + "urls": [ + "bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c", + "dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol": { + "keccak256": "0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435", + "urls": [ + "bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c", + "dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": { + "keccak256": "0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b", + "urls": [ + "bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df", + "dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { + "keccak256": "0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d", + "urls": [ + "bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875", + "dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol": { + "keccak256": "0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72", + "urls": [ + "bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc", + "dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT" + ], + "license": "MIT" + }, + "src/token/MOVEToken.sol": { + "keccak256": "0x907babd7e2db7867a9401ab8edcecd579ad7db099ae4693a27e052887d91eb22", + "urls": [ + "bzz-raw://a87e3b44d5e5409f0695ca2057be132b02b12a6cfa3d95a1a69382458e16b20a", + "dweb:/ipfs/QmPNA8kiRGr3jR4ngz8UeKLUM7QitN4J5xNbxxWYNncV9H" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": {} + }, + "ast": { + "absolutePath": "src/token/MOVEToken.sol", + "id": 56720, + "exportedSymbols": { + "AccessControlUpgradeable": [ + 39385 + ], + "ERC20PermitUpgradeable": [ + 40607 + ], + "MOVEToken": [ + 56719 + ] + }, + "nodeType": "SourceUnit", + "src": "32:1526:112", + "nodes": [ + { + "id": 56640, + "nodeType": "PragmaDirective", + "src": "32:24:112", + "nodes": [], + "literals": [ + "solidity", + "^", + "0.8", + ".19" + ] + }, + { + "id": 56642, + "nodeType": "ImportDirective", + "src": "58:125:112", + "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": 56720, + "sourceUnit": 40608, + "symbolAliases": [ + { + "foreign": { + "id": 56641, + "name": "ERC20PermitUpgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40607, + "src": "66:22:112", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 56644, + "nodeType": "ImportDirective", + "src": "184:113:112", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol", + "nameLocation": "-1:-1:-1", + "scope": 56720, + "sourceUnit": 39386, + "symbolAliases": [ + { + "foreign": { + "id": 56643, + "name": "AccessControlUpgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 39385, + "src": "192:24:112", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 56719, + "nodeType": "ContractDefinition", + "src": "299:1259:112", + "nodes": [ + { + "id": 56656, + "nodeType": "FunctionDefinition", + "src": "447:39:112", + "nodes": [], + "body": { + "id": 56655, + "nodeType": "Block", + "src": "461:25:112", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 56652, + "name": "_disableInitializers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 39607, + "src": "462:20:112", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 56653, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "462:22:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 56654, + "nodeType": "ExpressionStatement", + "src": "462:22:112" + } + ] + }, + "documentation": { + "id": 56649, + "nodeType": "StructuredDocumentation", + "src": "377:65:112", + "text": " @dev Disables potential implementation exploit" + }, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "parameters": { + "id": 56650, + "nodeType": "ParameterList", + "parameters": [], + "src": "458:2:112" + }, + "returnParameters": { + "id": 56651, + "nodeType": "ParameterList", + "parameters": [], + "src": "461:0:112" + }, + "scope": 56719, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 56708, + "nodeType": "FunctionDefinition", + "src": "981:342:112", + "nodes": [], + "body": { + "id": 56707, + "nodeType": "Block", + "src": "1054:269:112", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 56679, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 56672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 56667, + "name": "_owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 56659, + "src": "1072:6:112", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 56670, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1090:1:112", + "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": 56669, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1082:7:112", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 56668, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1082:7:112", + "typeDescriptions": {} + } + }, + "id": 56671, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1082:10:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1072:20:112", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 56678, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 56673, + "name": "_custody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 56661, + "src": "1096:8:112", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 56676, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1116:1:112", + "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": 56675, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1108:7:112", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 56674, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1108:7:112", + "typeDescriptions": {} + } + }, + "id": 56677, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1108:10:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1096:22:112", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1072:46:112", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 56666, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1064:7:112", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 56680, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1064:55:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 56681, + "nodeType": "ExpressionStatement", + "src": "1064:55:112" + }, + { + "expression": { + "arguments": [ + { + "hexValue": "4d6f76656d656e74", + "id": 56683, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1142:10:112", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252", + "typeString": "literal_string \"Movement\"" + }, + "value": "Movement" + }, + { + "hexValue": "4d4f5645", + "id": 56684, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1154:6:112", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_94304e8d07ec49123c30284d16c4a1082e90258cc0faf510314d9c3808edcda0", + "typeString": "literal_string \"MOVE\"" + }, + "value": "MOVE" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252", + "typeString": "literal_string \"Movement\"" + }, + { + "typeIdentifier": "t_stringliteral_94304e8d07ec49123c30284d16c4a1082e90258cc0faf510314d9c3808edcda0", + "typeString": "literal_string \"MOVE\"" + } + ], + "id": 56682, + "name": "__ERC20_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 39889, + "src": "1129:12:112", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory,string memory)" + } + }, + "id": 56685, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1129:32:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 56686, + "nodeType": "ExpressionStatement", + "src": "1129:32:112" + }, + { + "expression": { + "arguments": [ + { + "hexValue": "4d6f76656d656e74", + "id": 56688, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1195:10:112", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252", + "typeString": "literal_string \"Movement\"" + }, + "value": "Movement" + }, + { + "hexValue": "31", + "id": 56689, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1207:3:112", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", + "typeString": "literal_string \"1\"" + }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252", + "typeString": "literal_string \"Movement\"" + }, + { + "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", + "typeString": "literal_string \"1\"" + } + ], + "id": 56687, + "name": "__EIP712_init_unchained", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40861, + "src": "1171:23:112", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory,string memory)" + } + }, + "id": 56690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1171:40:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 56691, + "nodeType": "ExpressionStatement", + "src": "1171:40:112" + }, + { + "expression": { + "arguments": [ + { + "id": 56693, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 39051, + "src": "1232:18:112", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 56694, + "name": "_owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 56659, + "src": "1252:6:112", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 56692, + "name": "_grantRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 39338, + "src": "1221:10:112", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address) returns (bool)" + } + }, + "id": 56695, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1221:38:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 56696, + "nodeType": "ExpressionStatement", + "src": "1221:38:112" + }, + { + "expression": { + "arguments": [ + { + "id": 56698, + "name": "_custody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 56661, + "src": "1275:8:112", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 56704, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130303030303030303030", + "id": 56699, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1285:11:112", + "typeDescriptions": { + "typeIdentifier": "t_rational_10000000000_by_1", + "typeString": "int_const 10000000000" + }, + "value": "10000000000" + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 56703, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 56700, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1299:2:112", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 56701, + "name": "decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 56718 + ], + "referencedDeclaration": 56718, + "src": "1305:8:112", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint8_$", + "typeString": "function () pure returns (uint8)" + } + }, + "id": 56702, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1305:10:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "src": "1299:16:112", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1285:30:112", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 56697, + "name": "_mint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40270, + "src": "1269:5:112", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 56705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1269:47:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 56706, + "nodeType": "ExpressionStatement", + "src": "1269:47:112" + } + ] + }, + "documentation": { + "id": 56657, + "nodeType": "StructuredDocumentation", + "src": "492:484:112", + "text": " @dev Initializes the contract with initial parameters.\n @param _owner The address of the owner who receives default admin role.\n @param _custody The address of the custody account.\n @notice The ERC20 token is named \"Movement\" with symbol \"MOVE\".\n @notice EIP712 domain version is set to \"1\" for signatures.\n @notice The owner is granted the `DEFAULT_ADMIN_ROLE`.\n @notice 10 billion MOVE tokens are minted to the owner's address." + }, + "functionSelector": "485cc955", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 56664, + "kind": "modifierInvocation", + "modifierName": { + "id": 56663, + "name": "initializer", + "nameLocations": [ + "1042:11:112" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 39493, + "src": "1042:11:112" + }, + "nodeType": "ModifierInvocation", + "src": "1042:11:112" + } + ], + "name": "initialize", + "nameLocation": "990:10:112", + "parameters": { + "id": 56662, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 56659, + "mutability": "mutable", + "name": "_owner", + "nameLocation": "1009:6:112", + "nodeType": "VariableDeclaration", + "scope": 56708, + "src": "1001:14:112", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 56658, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1001:7:112", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 56661, + "mutability": "mutable", + "name": "_custody", + "nameLocation": "1025:8:112", + "nodeType": "VariableDeclaration", + "scope": 56708, + "src": "1017:16:112", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 56660, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1017:7:112", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1000:34:112" + }, + "returnParameters": { + "id": 56665, + "nodeType": "ParameterList", + "parameters": [], + "src": "1054:0:112" + }, + "scope": 56719, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 56718, + "nodeType": "FunctionDefinition", + "src": "1474:82:112", + "nodes": [], + "body": { + "id": 56717, + "nodeType": "Block", + "src": "1531:25:112", + "nodes": [], + "statements": [ + { + "expression": { + "hexValue": "38", + "id": 56715, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1548:1:112", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "functionReturnParameters": 56714, + "id": 56716, + "nodeType": "Return", + "src": "1541:8:112" + } + ] + }, + "baseFunctions": [ + 39958 + ], + "documentation": { + "id": 56709, + "nodeType": "StructuredDocumentation", + "src": "1329:140:112", + "text": " @dev Returns the number of decimals\n @notice decimals is set to 8, following the Movement network standard decimals" + }, + "functionSelector": "313ce567", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decimals", + "nameLocation": "1483:8:112", + "overrides": { + "id": 56711, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1506:8:112" + }, + "parameters": { + "id": 56710, + "nodeType": "ParameterList", + "parameters": [], + "src": "1491:2:112" + }, + "returnParameters": { + "id": 56714, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 56713, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 56718, + "src": "1524:5:112", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 56712, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1524:5:112", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "src": "1523:7:112" + }, + "scope": 56719, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 56645, + "name": "ERC20PermitUpgradeable", + "nameLocations": [ + "321:22:112" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 40607, + "src": "321:22:112" + }, + "id": 56646, + "nodeType": "InheritanceSpecifier", + "src": "321:22:112" + }, + { + "baseName": { + "id": 56647, + "name": "AccessControlUpgradeable", + "nameLocations": [ + "345:24:112" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 39385, + "src": "345:24:112" + }, + "id": 56648, + "nodeType": "InheritanceSpecifier", + "src": "345:24:112" + } + ], + "canonicalName": "MOVEToken", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "linearizedBaseContracts": [ + 56719, + 39385, + 41148, + 45166, + 41527, + 40607, + 40764, + 41108, + 42745, + 43725, + 40438, + 42797, + 43689, + 43663, + 40653, + 39639 + ], + "name": "MOVEToken", + "nameLocation": "308:9:112", + "scope": 56720, + "usedErrors": [ + 39402, + 39405, + 40473, + 40480, + 40667, + 41454, + 41457, + 42767, + 42772, + 42777, + 42786, + 42791, + 42796, + 44719, + 44724, + 44729 + ], + "usedEvents": [ + 39410, + 41466, + 41475, + 41484, + 42725, + 43597, + 43606 + ] + } + ], + "license": "MIT" + }, + "id": 112 +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/client/abis/MovementStaking.json b/protocol-units/post-confirmations/client/abis/MovementStaking.json new file mode 100644 index 00000000..f79819f9 --- /dev/null +++ b/protocol-units/post-confirmations/client/abis/MovementStaking.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"WHITELIST_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"acceptGenesisCeremony","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"currentEpochByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"currentEpoch","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"domainGenesisAccepted","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"epochDurationByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"epochDuration","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"epochStakesByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"epochTotalStakeByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"epochUnstakesByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttestersByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpochStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpochUnstake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodiansByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getEpochByBlockTime","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextEpochByBlockTime","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStakeAtEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStakeForCurrentEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStakeForEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUnstakeAtEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"_token","type":"address","internalType":"contract IERC20"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"registerDomain","inputs":[{"name":"epochDuration","type":"uint256","internalType":"uint256"},{"name":"custodians","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeAddressFromWhitelist","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reward","inputs":[{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"amounts","type":"uint256[]","internalType":"uint256[]"},{"name":"custodians","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rollOverEpoch","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setGenesisCeremony","inputs":[{"name":"custodians","type":"address[]","internalType":"address[]"},{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"stakes","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"slash","inputs":[{"name":"custodians","type":"address[]","internalType":"address[]"},{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"amounts","type":"uint256[]","internalType":"uint256[]"},{"name":"refundAmounts","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"contract IERC20"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"unstake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"whitelistAddress","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AttesterEpochRolledOver","inputs":[{"name":"attester","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"unstake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AttesterStaked","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":false,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AttesterUnstaked","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":false,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EpochRolledOver","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"CustodianTransferAmountMismatch","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"GenesisAlreadyAccepted","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"StakeExceedsGenesisStake","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a0604052306080523480156012575f80fd5b50608051612b386100395f395f81816119f701528181611a200152611b660152612b385ff3fe608060405260043610610249575f3560e01c80638129fc1c11610134578063bf6eac2f116100b3578063d37304f811610078578063d37304f814610773578063d547741f14610792578063d5ca03de146107b1578063da33ee7f146107d0578063fc0c546a146107ef578063ff62787c14610825575f80fd5b8063bf6eac2f146106a3578063c0b95ab8146106c2578063c3471ff814610707578063c4d66de814610726578063d1ba90ff14610745575f80fd5b806392a2ebf3116100f957806392a2ebf31461060c578063a217fddf14610620578063a885c97514610633578063a887b71c14610652578063ad3cb1cc14610666575f80fd5b80638129fc1c1461057c5780638489e58014610590578063879b938b146105af5780638d908258146105ce57806391d14854146105ed575f80fd5b806344198e4d116101cb5780635cdf3155116101905780635cdf31551461046e57806360829f8a146104ba57806365f1ea20146104d9578063702243601461051e5780637667b76d1461053d5780637a997ab71461055c575f80fd5b806344198e4d146103cd5780634d3223a5146103ec5780634f1ef2861461040b57806352d1902d1461041e57806354300d7a14610432575f80fd5b80632c7785a8116102115780632c7785a8146103265780632f2ff15d1461034557806336568abe146103645780633bccf6351461038357806341566585146103ae575f80fd5b806301ffc9a71461024d5780630a0b1b6414610281578063248a9ca3146102ba578063286dd3f5146102d95780632924b73b146102fa575b5f80fd5b348015610258575f80fd5b5061026c6102673660046124cd565b610844565b60405190151581526020015b60405180910390f35b34801561028c575f80fd5b506102ac61029b366004612508565b60026020525f908152604090205481565b604051908152602001610278565b3480156102c5575f80fd5b506102ac6102d4366004612523565b61087a565b3480156102e4575f80fd5b506102f86102f3366004612508565b61089a565b005b348015610305575f80fd5b50610319610314366004612508565b6108bf565b604051610278919061253a565b348015610331575f80fd5b506102ac610340366004612508565b6109a9565b348015610350575f80fd5b506102f861035f366004612585565b6109d8565b34801561036f575f80fd5b506102f861037e366004612585565b6109fa565b34801561038e575f80fd5b506102ac61039d366004612508565b60016020525f908152604090205481565b3480156103b9575f80fd5b506102f86103c8366004612508565b610a32565b3480156103d8575f80fd5b506102ac6103e73660046125b3565b610a53565b3480156103f7575f80fd5b506102ac610406366004612508565b610a9b565b6102f86104193660046125f3565b610ab5565b348015610429575f80fd5b506102ac610ad0565b34801561043d575f80fd5b506102ac61044c3660046126b6565b600760209081525f938452604080852082529284528284209052825290205481565b348015610479575f80fd5b506102ac6104883660046126b6565b6001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b3480156104c5575f80fd5b506102f86104d43660046126f5565b610aeb565b3480156104e4575f80fd5b506102ac6104f3366004612733565b600660209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610529575f80fd5b506102ac610538366004612783565b610b74565b348015610548575f80fd5b506102ac610557366004612783565b610b91565b348015610567575f80fd5b506102ac5f80516020612aa383398151915281565b348015610587575f80fd5b506102f8610ba6565b34801561059b575f80fd5b506102ac6105aa366004612508565b610cb0565b3480156105ba575f80fd5b506102ac6105c9366004612733565b610cc8565b3480156105d9575f80fd5b506102ac6105e8366004612733565b610d05565b3480156105f8575f80fd5b5061026c610607366004612585565b610d42565b348015610617575f80fd5b506102f8610d78565b34801561062b575f80fd5b506102ac5f81565b34801561063e575f80fd5b506102f861064d366004612807565b610ebc565b34801561065d575f80fd5b506102f86110cc565b348015610671575f80fd5b50610696604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161027891906128d1565b3480156106ae575f80fd5b506102f86106bd3660046126f5565b6110e0565b3480156106cd575f80fd5b506102ac6106dc366004612733565b600560209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610712575f80fd5b506102ac610721366004612508565b6112ff565b348015610731575f80fd5b506102f8610740366004612508565b611321565b348015610750575f80fd5b5061026c61075f366004612508565b60086020525f908152604090205460ff1681565b34801561077e575f80fd5b506102f861078d366004612906565b611446565b34801561079d575f80fd5b506102f86107ac366004612585565b6114b0565b3480156107bc575f80fd5b506103196107cb366004612508565b6114cc565b3480156107db575f80fd5b506102f86107ea36600461294d565b6115af565b3480156107fa575f80fd5b505f5461080d906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b348015610830575f80fd5b506102f861083f36600461294d565b61163a565b5f6001600160e01b03198216637965db0b60e01b148061087457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f9081525f80516020612ae3833981519152602052604090206001015490565b5f6108a4816118b1565b6108bb5f80516020612aa3833981519152836114b0565b5050565b6001600160a01b0381165f908152600360205260408120606091906108e3906118be565b6001600160401b038111156108fa576108fa6125df565b604051908082528060200260200182016040528015610923578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600360205260409020610948906118be565b8110156109a2576001600160a01b0384165f90815260036020526040902061097090826118c7565b828281518110610982576109826129e9565b6001600160a01b0390921660209283029190910190910152600101610928565b5092915050565b5f6109b382610a9b565b156109d1576109c1826112ff565b6109cc906001612a11565b610874565b5f92915050565b6109e18261087a565b6109ea816118b1565b6109f483836118d2565b50505050565b6001600160a01b0381163314610a235760405163334bd91960e11b815260040160405180910390fd5b610a2d8282611973565b505050565b5f610a3c816118b1565b6108bb5f80516020612aa3833981519152836109d8565b5f610a9483610a6185610a9b565b846001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b9392505050565b6001600160a01b03165f9081526002602052604090205490565b610abd6119ec565b610ac682611a90565b6108bb8282611a9a565b5f610ad9611b5b565b505f80516020612ac383398151915290565b5f80516020612aa3833981519152610b02816118b1565b610b1784610b0f866109a9565b853386611ba4565b826001600160a01b0316610b2a85610cb0565b60408051338152602081018690526001600160a01b038816917fd41c64546a5c34c283150998874c7ee0412c8954f57aef484c681f6e137827df910160405180910390a450505050565b5f610b8984610b8286610a9b565b8585610d05565b949350505050565b5f610b8984610b9f86610a9b565b8585610cc8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610bea5750825b90505f826001600160401b03166001148015610c055750303b155b905081158015610c13575080155b15610c315760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c5b57845460ff60401b1916600160401b1785555b610c63611bf8565b8315610ca957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f610cba82610a9b565b156109d1576109c182610a9b565b6001600160a01b039384165f9081526006602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b6001600160a01b039384165f9081526005602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f9182525f80516020612ae3833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b335f8181526008602052604090205460ff1615610da75760405162fe178760e01b815260040160405180910390fd5b6001600160a01b0381165f908152600860205260409020805460ff19166001179055610dd2816112ff565b6001600160a01b0382165f908152600260205260408120919091555b6001600160a01b0382165f908152600360205260409020610e0e906118be565b8110156108bb576001600160a01b0382165f908152600360205260408120610e3690836118c7565b90505f5b6001600160a01b0384165f908152600460205260409020610e5a906118be565b811015610eb2576001600160a01b0384165f908152600460205260408120610e8290836118c7565b90505f610e91865f8487610d05565b9050610ea886610ea088610a9b565b848785611c08565b5050600101610e3a565b5050600101610dee565b5f5b858110156110c1575f610f85610f4633610ef88b8b87818110610ee357610ee36129e9565b90506020020160208101906104069190612508565b8d8d87818110610f0a57610f0a6129e9565b9050602002016020810190610f1f9190612508565b8c8c88818110610f3157610f316129e9565b90506020020160208101906105e89190612508565b610f80888886818110610f5b57610f5b6129e9565b90506020020135878787818110610f7457610f746129e9565b90506020020135611c93565b611c93565b9050610fdf30898985818110610f9d57610f9d6129e9565b9050602002016020810190610fb29190612508565b8c8c86818110610fc457610fc46129e9565b9050602002016020810190610fd99190612508565b84611ca8565b61105833610fec33610a9b565b8c8c86818110610ffe57610ffe6129e9565b90506020020160208101906110139190612508565b8b8b87818110611025576110256129e9565b905060200201602081019061103a9190612508565b8a8a8881811061104c5761104c6129e9565b90506020020135611ed1565b6110b83361106533610a9b565b8c8c86818110611077576110776129e9565b905060200201602081019061108c9190612508565b8b8b8781811061109e5761109e6129e9565b90506020020160208101906110b39190612508565b611f08565b50600101610ebe565b505050505050505050565b6110de336110d933610a9b565b611f7a565b565b5f80516020612aa38339815191526110f7816118b1565b6001600160a01b0384165f9081526003602052604090206111189033612097565b505f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561115f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111839190612a24565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303815f875af11580156111d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111fa9190612a3b565b506112058382612a11565b5f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561124a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126e9190612a24565b1461128c57604051631910d68360e21b815260040160405180910390fd5b6112a185611299876109a9565b863387611c08565b836001600160a01b03166112b486610cb0565b60408051338152602081018790526001600160a01b038916917f7be65c2ae4d3c544de23b1db5bea4d541c02b93a5f4302852f4dc9880e0cb554910160405180910390a45050505050565b6001600160a01b0381165f908152600160205260408120546108749042612a5a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156113655750825b90505f826001600160401b031660011480156113805750303b155b90508115801561138e575080155b156113ac5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156113d657845460ff60401b1916600160401b1785555b6113de6120ab565b5f80546001600160a01b0319166001600160a01b038816179055831561143e57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b335f8181526001602052604081208590555b82811015610ca9576114a7848483818110611475576114756129e9565b905060200201602081019061148a9190612508565b6001600160a01b0384165f90815260046020526040902090612097565b50600101611458565b6114b98261087a565b6114c2816118b1565b6109f48383611973565b6001600160a01b0381165f908152600460205260408120606091906114f0906118be565b6001600160401b03811115611507576115076125df565b604051908082528060200260200182016040528015611530578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600460205260409020611555906118be565b8110156109a2576001600160a01b0384165f90815260046020526040902061157d90826118c7565b82828151811061158f5761158f6129e9565b6001600160a01b0390921660209283029190910190910152600101611535565b5f5b8581101561163157611629338888848181106115cf576115cf6129e9565b90506020020160208101906115e49190612508565b8585858181106115f6576115f66129e9565b905060200201602081019061160b9190612508565b88888681811061161d5761161d6129e9565b90506020020135611ca8565b6001016115b1565b50505050505050565b33611644816112ff565b6001600160a01b0382165f908152600260205260408120919091555b848110156118a7575f88888381811061167b5761167b6129e9565b90506020020160208101906116909190612508565b90505f6116ab845f848b8b88818110610f3157610f316129e9565b90508585848181106116bf576116bf6129e9565b905060200201358111156116e657604051630eba55e760e21b815260040160405180910390fd5b61172d8888858181106116fb576116fb6129e9565b90506020020160208101906117109190612508565b6001600160a01b0386165f90815260036020526040902090612097565b50858584818110611740576117406129e9565b9050602002013560055f866001600160a01b03166001600160a01b031681526020019081526020015f205f61177487610a9b565b81526020019081526020015f205f846001600160a01b03166001600160a01b031681526020019081526020015f205f8a8a878181106117b5576117b56129e9565b90506020020160208101906117ca9190612508565b6001600160a01b0316815260208101919091526040015f20558585848181106117f5576117f56129e9565b6001600160a01b038088165f9081526007602090815260408083208380528252808320938916835292815291812080549290930294909401359391925061183d908490612a11565b909155505f905081878786818110611857576118576129e9565b905060200201356118689190612a79565b905061189c308a8a87818110611880576118806129e9565b90506020020160208101906118959190612508565b8584611ca8565b505050600101611660565b5050505050505050565b6118bb81336120bd565b50565b5f610874825490565b5f610a9483836120f6565b5f5f80516020612ae38339815191526118eb8484610d42565b61196a575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556119203390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610874565b5f915050610874565b5f5f80516020612ae383398151915261198c8484610d42565b1561196a575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610874565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a7257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a665f80516020612ac3833981519152546001600160a01b031690565b6001600160a01b031614155b156110de5760405163703e46dd60e11b815260040160405180910390fd5b5f6108bb816118b1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611af4575060408051601f3d908101601f19168201909252611af191810190612a24565b60015b611b2157604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f80516020612ac38339815191528114611b5157604051632a87526960e21b815260048101829052602401611b18565b610a2d838361211c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110de5760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b038086165f90815260066020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611bec908490612a11565b90915550505050505050565b611c00612171565b6110de6120ab565b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611c50908490612a11565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290611bec908490612a11565b5f818310611ca15781610a94565b5090919050565b306001600160a01b03851603611e1c575f546001600160a01b03808416911603611d46575f5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044015b6020604051808303815f875af1158015611d1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d409190612a3b565b506109f4565b5f5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015611d95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db99190612a3b565b506040516318950c7160e01b81526001600160a01b038481166004830152602482018390528316906318950c71906044015f604051808303815f87803b158015611e01575f80fd5b505af1158015611e13573d5f803e3d5ffd5b505050506109f4565b5f546001600160a01b03808416911603611e70575f546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201849052909116906323b872dd90606401611d00565b60405163c4652d8360e01b81526001600160a01b03858116600483015284811660248301526044820183905283169063c4652d83906064015f604051808303815f87803b158015611ebf575f80fd5b505af11580156118a7573d5f803e3d5ffd5b835f611edf87838787610d05565b905082811015611efb57611ef687838787856121ba565b611631565b61163187838787876121ba565b5f611f1585858585610d05565b90505f611f23856001612a11565b90505f611f3287838787610cc8565b905082811115611631576001600160a01b038088165f9081526006602090815260408083208684528252808320848a1684528252808320938816835292905220839055611631565b5f5b6001600160a01b0383165f908152600360205260409020611f9c906118be565b811015612031576001600160a01b0383165f908152600360205260408120611fc490836118c7565b90505f5b6001600160a01b0385165f908152600460205260409020611fe8906118be565b811015612027576001600160a01b0385165f90815260046020526040812061201090836118c7565b905061201e86868386612245565b50600101611fc8565b5050600101611f7c565b5061203d816001612a11565b6001600160a01b0383165f81815260026020526040908190209290925590517fb693195b5ff3e376f8b562486abc516e10fe2467b75f0e4165e79cf4ab70dc419061208b9084815260200190565b60405180910390a25050565b5f610a94836001600160a01b038416612308565b6120b3612171565b6118bb5f336118d2565b6120c78282610d42565b6108bb5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401611b18565b5f825f01828154811061210b5761210b6129e9565b905f5260205f200154905092915050565b61212582612354565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561216957610a2d82826123b7565b6108bb612429565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166110de57604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290612202908490612a79565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290611bec908490612a79565b5f61225285858585610d05565b90505f61226b86612264876001612a11565b8686610cc8565b9050818111156122785750805b5f6122838284612a79565b905061229c87612294886001612a11565b878785611c08565b6122a830858785611ca8565b846001600160a01b031686856001600160a01b03167f3ddb7f725ac69363a1df8296c965af4d268f31b082480dcd8419d284fb7fd34286866040516122f7929190918252602082015260400190565b60405180910390a450505050505050565b5f81815260018301602052604081205461234d57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610874565b505f610874565b806001600160a01b03163b5f0361238957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611b18565b5f80516020612ac383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516123d39190612a8c565b5f60405180830381855af49150503d805f811461240b576040519150601f19603f3d011682016040523d82523d5f602084013e612410565b606091505b5091509150612420858383612448565b95945050505050565b34156110de5760405163b398979f60e01b815260040160405180910390fd5b60608261245d57612458826124a4565b610a94565b815115801561247457506001600160a01b0384163b155b1561249d57604051639996b31560e01b81526001600160a01b0385166004820152602401611b18565b5080610a94565b8051156124b45780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f602082840312156124dd575f80fd5b81356001600160e01b031981168114610a94575f80fd5b6001600160a01b03811681146118bb575f80fd5b5f60208284031215612518575f80fd5b8135610a94816124f4565b5f60208284031215612533575f80fd5b5035919050565b602080825282518282018190525f918401906040840190835b8181101561257a5783516001600160a01b0316835260209384019390920191600101612553565b509095945050505050565b5f8060408385031215612596575f80fd5b8235915060208301356125a8816124f4565b809150509250929050565b5f80604083850312156125c4575f80fd5b82356125cf816124f4565b915060208301356125a8816124f4565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612604575f80fd5b823561260f816124f4565b915060208301356001600160401b03811115612629575f80fd5b8301601f81018513612639575f80fd5b80356001600160401b03811115612652576126526125df565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612680576126806125df565b604052818152828201602001871015612697575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f805f606084860312156126c8575f80fd5b83356126d3816124f4565b92506020840135915060408401356126ea816124f4565b809150509250925092565b5f805f60608486031215612707575f80fd5b8335612712816124f4565b92506020840135612722816124f4565b929592945050506040919091013590565b5f805f8060808587031215612746575f80fd5b8435612751816124f4565b9350602085013592506040850135612768816124f4565b91506060850135612778816124f4565b939692955090935050565b5f805f60608486031215612795575f80fd5b83356127a0816124f4565b925060208401356127b0816124f4565b915060408401356126ea816124f4565b5f8083601f8401126127d0575f80fd5b5081356001600160401b038111156127e6575f80fd5b6020830191508360208260051b8501011115612800575f80fd5b9250929050565b5f805f805f805f806080898b03121561281e575f80fd5b88356001600160401b03811115612833575f80fd5b61283f8b828c016127c0565b90995097505060208901356001600160401b0381111561285d575f80fd5b6128698b828c016127c0565b90975095505060408901356001600160401b03811115612887575f80fd5b6128938b828c016127c0565b90955093505060608901356001600160401b038111156128b1575f80fd5b6128bd8b828c016127c0565b999c989b5096995094979396929594505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f60408486031215612918575f80fd5b8335925060208401356001600160401b03811115612934575f80fd5b612940868287016127c0565b9497909650939450505050565b5f805f805f8060608789031215612962575f80fd5b86356001600160401b03811115612977575f80fd5b61298389828a016127c0565b90975095505060208701356001600160401b038111156129a1575f80fd5b6129ad89828a016127c0565b90955093505060408701356001600160401b038111156129cb575f80fd5b6129d789828a016127c0565b979a9699509497509295939492505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610874576108746129fd565b5f60208284031215612a34575f80fd5b5051919050565b5f60208284031215612a4b575f80fd5b81518015158114610a94575f80fd5b5f82612a7457634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610874576108746129fd565b5f82518060208501845e5f92019182525091905056fedc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220607b8c1972ce4fe4e14ac69101762168966bf4e7c61c37e51539df8ce23e5dde64736f6c634300081a0033","sourceMap":"591:19196:108:-:0;;;1171:4:26;1128:48;;591:19196:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610610249575f3560e01c80638129fc1c11610134578063bf6eac2f116100b3578063d37304f811610078578063d37304f814610773578063d547741f14610792578063d5ca03de146107b1578063da33ee7f146107d0578063fc0c546a146107ef578063ff62787c14610825575f80fd5b8063bf6eac2f146106a3578063c0b95ab8146106c2578063c3471ff814610707578063c4d66de814610726578063d1ba90ff14610745575f80fd5b806392a2ebf3116100f957806392a2ebf31461060c578063a217fddf14610620578063a885c97514610633578063a887b71c14610652578063ad3cb1cc14610666575f80fd5b80638129fc1c1461057c5780638489e58014610590578063879b938b146105af5780638d908258146105ce57806391d14854146105ed575f80fd5b806344198e4d116101cb5780635cdf3155116101905780635cdf31551461046e57806360829f8a146104ba57806365f1ea20146104d9578063702243601461051e5780637667b76d1461053d5780637a997ab71461055c575f80fd5b806344198e4d146103cd5780634d3223a5146103ec5780634f1ef2861461040b57806352d1902d1461041e57806354300d7a14610432575f80fd5b80632c7785a8116102115780632c7785a8146103265780632f2ff15d1461034557806336568abe146103645780633bccf6351461038357806341566585146103ae575f80fd5b806301ffc9a71461024d5780630a0b1b6414610281578063248a9ca3146102ba578063286dd3f5146102d95780632924b73b146102fa575b5f80fd5b348015610258575f80fd5b5061026c6102673660046124cd565b610844565b60405190151581526020015b60405180910390f35b34801561028c575f80fd5b506102ac61029b366004612508565b60026020525f908152604090205481565b604051908152602001610278565b3480156102c5575f80fd5b506102ac6102d4366004612523565b61087a565b3480156102e4575f80fd5b506102f86102f3366004612508565b61089a565b005b348015610305575f80fd5b50610319610314366004612508565b6108bf565b604051610278919061253a565b348015610331575f80fd5b506102ac610340366004612508565b6109a9565b348015610350575f80fd5b506102f861035f366004612585565b6109d8565b34801561036f575f80fd5b506102f861037e366004612585565b6109fa565b34801561038e575f80fd5b506102ac61039d366004612508565b60016020525f908152604090205481565b3480156103b9575f80fd5b506102f86103c8366004612508565b610a32565b3480156103d8575f80fd5b506102ac6103e73660046125b3565b610a53565b3480156103f7575f80fd5b506102ac610406366004612508565b610a9b565b6102f86104193660046125f3565b610ab5565b348015610429575f80fd5b506102ac610ad0565b34801561043d575f80fd5b506102ac61044c3660046126b6565b600760209081525f938452604080852082529284528284209052825290205481565b348015610479575f80fd5b506102ac6104883660046126b6565b6001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b3480156104c5575f80fd5b506102f86104d43660046126f5565b610aeb565b3480156104e4575f80fd5b506102ac6104f3366004612733565b600660209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610529575f80fd5b506102ac610538366004612783565b610b74565b348015610548575f80fd5b506102ac610557366004612783565b610b91565b348015610567575f80fd5b506102ac5f80516020612aa383398151915281565b348015610587575f80fd5b506102f8610ba6565b34801561059b575f80fd5b506102ac6105aa366004612508565b610cb0565b3480156105ba575f80fd5b506102ac6105c9366004612733565b610cc8565b3480156105d9575f80fd5b506102ac6105e8366004612733565b610d05565b3480156105f8575f80fd5b5061026c610607366004612585565b610d42565b348015610617575f80fd5b506102f8610d78565b34801561062b575f80fd5b506102ac5f81565b34801561063e575f80fd5b506102f861064d366004612807565b610ebc565b34801561065d575f80fd5b506102f86110cc565b348015610671575f80fd5b50610696604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161027891906128d1565b3480156106ae575f80fd5b506102f86106bd3660046126f5565b6110e0565b3480156106cd575f80fd5b506102ac6106dc366004612733565b600560209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610712575f80fd5b506102ac610721366004612508565b6112ff565b348015610731575f80fd5b506102f8610740366004612508565b611321565b348015610750575f80fd5b5061026c61075f366004612508565b60086020525f908152604090205460ff1681565b34801561077e575f80fd5b506102f861078d366004612906565b611446565b34801561079d575f80fd5b506102f86107ac366004612585565b6114b0565b3480156107bc575f80fd5b506103196107cb366004612508565b6114cc565b3480156107db575f80fd5b506102f86107ea36600461294d565b6115af565b3480156107fa575f80fd5b505f5461080d906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b348015610830575f80fd5b506102f861083f36600461294d565b61163a565b5f6001600160e01b03198216637965db0b60e01b148061087457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f9081525f80516020612ae3833981519152602052604090206001015490565b5f6108a4816118b1565b6108bb5f80516020612aa3833981519152836114b0565b5050565b6001600160a01b0381165f908152600360205260408120606091906108e3906118be565b6001600160401b038111156108fa576108fa6125df565b604051908082528060200260200182016040528015610923578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600360205260409020610948906118be565b8110156109a2576001600160a01b0384165f90815260036020526040902061097090826118c7565b828281518110610982576109826129e9565b6001600160a01b0390921660209283029190910190910152600101610928565b5092915050565b5f6109b382610a9b565b156109d1576109c1826112ff565b6109cc906001612a11565b610874565b5f92915050565b6109e18261087a565b6109ea816118b1565b6109f483836118d2565b50505050565b6001600160a01b0381163314610a235760405163334bd91960e11b815260040160405180910390fd5b610a2d8282611973565b505050565b5f610a3c816118b1565b6108bb5f80516020612aa3833981519152836109d8565b5f610a9483610a6185610a9b565b846001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b9392505050565b6001600160a01b03165f9081526002602052604090205490565b610abd6119ec565b610ac682611a90565b6108bb8282611a9a565b5f610ad9611b5b565b505f80516020612ac383398151915290565b5f80516020612aa3833981519152610b02816118b1565b610b1784610b0f866109a9565b853386611ba4565b826001600160a01b0316610b2a85610cb0565b60408051338152602081018690526001600160a01b038816917fd41c64546a5c34c283150998874c7ee0412c8954f57aef484c681f6e137827df910160405180910390a450505050565b5f610b8984610b8286610a9b565b8585610d05565b949350505050565b5f610b8984610b9f86610a9b565b8585610cc8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610bea5750825b90505f826001600160401b03166001148015610c055750303b155b905081158015610c13575080155b15610c315760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c5b57845460ff60401b1916600160401b1785555b610c63611bf8565b8315610ca957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f610cba82610a9b565b156109d1576109c182610a9b565b6001600160a01b039384165f9081526006602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b6001600160a01b039384165f9081526005602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f9182525f80516020612ae3833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b335f8181526008602052604090205460ff1615610da75760405162fe178760e01b815260040160405180910390fd5b6001600160a01b0381165f908152600860205260409020805460ff19166001179055610dd2816112ff565b6001600160a01b0382165f908152600260205260408120919091555b6001600160a01b0382165f908152600360205260409020610e0e906118be565b8110156108bb576001600160a01b0382165f908152600360205260408120610e3690836118c7565b90505f5b6001600160a01b0384165f908152600460205260409020610e5a906118be565b811015610eb2576001600160a01b0384165f908152600460205260408120610e8290836118c7565b90505f610e91865f8487610d05565b9050610ea886610ea088610a9b565b848785611c08565b5050600101610e3a565b5050600101610dee565b5f5b858110156110c1575f610f85610f4633610ef88b8b87818110610ee357610ee36129e9565b90506020020160208101906104069190612508565b8d8d87818110610f0a57610f0a6129e9565b9050602002016020810190610f1f9190612508565b8c8c88818110610f3157610f316129e9565b90506020020160208101906105e89190612508565b610f80888886818110610f5b57610f5b6129e9565b90506020020135878787818110610f7457610f746129e9565b90506020020135611c93565b611c93565b9050610fdf30898985818110610f9d57610f9d6129e9565b9050602002016020810190610fb29190612508565b8c8c86818110610fc457610fc46129e9565b9050602002016020810190610fd99190612508565b84611ca8565b61105833610fec33610a9b565b8c8c86818110610ffe57610ffe6129e9565b90506020020160208101906110139190612508565b8b8b87818110611025576110256129e9565b905060200201602081019061103a9190612508565b8a8a8881811061104c5761104c6129e9565b90506020020135611ed1565b6110b83361106533610a9b565b8c8c86818110611077576110776129e9565b905060200201602081019061108c9190612508565b8b8b8781811061109e5761109e6129e9565b90506020020160208101906110b39190612508565b611f08565b50600101610ebe565b505050505050505050565b6110de336110d933610a9b565b611f7a565b565b5f80516020612aa38339815191526110f7816118b1565b6001600160a01b0384165f9081526003602052604090206111189033612097565b505f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561115f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111839190612a24565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303815f875af11580156111d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111fa9190612a3b565b506112058382612a11565b5f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561124a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126e9190612a24565b1461128c57604051631910d68360e21b815260040160405180910390fd5b6112a185611299876109a9565b863387611c08565b836001600160a01b03166112b486610cb0565b60408051338152602081018790526001600160a01b038916917f7be65c2ae4d3c544de23b1db5bea4d541c02b93a5f4302852f4dc9880e0cb554910160405180910390a45050505050565b6001600160a01b0381165f908152600160205260408120546108749042612a5a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156113655750825b90505f826001600160401b031660011480156113805750303b155b90508115801561138e575080155b156113ac5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156113d657845460ff60401b1916600160401b1785555b6113de6120ab565b5f80546001600160a01b0319166001600160a01b038816179055831561143e57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b335f8181526001602052604081208590555b82811015610ca9576114a7848483818110611475576114756129e9565b905060200201602081019061148a9190612508565b6001600160a01b0384165f90815260046020526040902090612097565b50600101611458565b6114b98261087a565b6114c2816118b1565b6109f48383611973565b6001600160a01b0381165f908152600460205260408120606091906114f0906118be565b6001600160401b03811115611507576115076125df565b604051908082528060200260200182016040528015611530578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600460205260409020611555906118be565b8110156109a2576001600160a01b0384165f90815260046020526040902061157d90826118c7565b82828151811061158f5761158f6129e9565b6001600160a01b0390921660209283029190910190910152600101611535565b5f5b8581101561163157611629338888848181106115cf576115cf6129e9565b90506020020160208101906115e49190612508565b8585858181106115f6576115f66129e9565b905060200201602081019061160b9190612508565b88888681811061161d5761161d6129e9565b90506020020135611ca8565b6001016115b1565b50505050505050565b33611644816112ff565b6001600160a01b0382165f908152600260205260408120919091555b848110156118a7575f88888381811061167b5761167b6129e9565b90506020020160208101906116909190612508565b90505f6116ab845f848b8b88818110610f3157610f316129e9565b90508585848181106116bf576116bf6129e9565b905060200201358111156116e657604051630eba55e760e21b815260040160405180910390fd5b61172d8888858181106116fb576116fb6129e9565b90506020020160208101906117109190612508565b6001600160a01b0386165f90815260036020526040902090612097565b50858584818110611740576117406129e9565b9050602002013560055f866001600160a01b03166001600160a01b031681526020019081526020015f205f61177487610a9b565b81526020019081526020015f205f846001600160a01b03166001600160a01b031681526020019081526020015f205f8a8a878181106117b5576117b56129e9565b90506020020160208101906117ca9190612508565b6001600160a01b0316815260208101919091526040015f20558585848181106117f5576117f56129e9565b6001600160a01b038088165f9081526007602090815260408083208380528252808320938916835292815291812080549290930294909401359391925061183d908490612a11565b909155505f905081878786818110611857576118576129e9565b905060200201356118689190612a79565b905061189c308a8a87818110611880576118806129e9565b90506020020160208101906118959190612508565b8584611ca8565b505050600101611660565b5050505050505050565b6118bb81336120bd565b50565b5f610874825490565b5f610a9483836120f6565b5f5f80516020612ae38339815191526118eb8484610d42565b61196a575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556119203390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610874565b5f915050610874565b5f5f80516020612ae383398151915261198c8484610d42565b1561196a575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610874565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a7257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a665f80516020612ac3833981519152546001600160a01b031690565b6001600160a01b031614155b156110de5760405163703e46dd60e11b815260040160405180910390fd5b5f6108bb816118b1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611af4575060408051601f3d908101601f19168201909252611af191810190612a24565b60015b611b2157604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f80516020612ac38339815191528114611b5157604051632a87526960e21b815260048101829052602401611b18565b610a2d838361211c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110de5760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b038086165f90815260066020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611bec908490612a11565b90915550505050505050565b611c00612171565b6110de6120ab565b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611c50908490612a11565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290611bec908490612a11565b5f818310611ca15781610a94565b5090919050565b306001600160a01b03851603611e1c575f546001600160a01b03808416911603611d46575f5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044015b6020604051808303815f875af1158015611d1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d409190612a3b565b506109f4565b5f5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015611d95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db99190612a3b565b506040516318950c7160e01b81526001600160a01b038481166004830152602482018390528316906318950c71906044015f604051808303815f87803b158015611e01575f80fd5b505af1158015611e13573d5f803e3d5ffd5b505050506109f4565b5f546001600160a01b03808416911603611e70575f546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201849052909116906323b872dd90606401611d00565b60405163c4652d8360e01b81526001600160a01b03858116600483015284811660248301526044820183905283169063c4652d83906064015f604051808303815f87803b158015611ebf575f80fd5b505af11580156118a7573d5f803e3d5ffd5b835f611edf87838787610d05565b905082811015611efb57611ef687838787856121ba565b611631565b61163187838787876121ba565b5f611f1585858585610d05565b90505f611f23856001612a11565b90505f611f3287838787610cc8565b905082811115611631576001600160a01b038088165f9081526006602090815260408083208684528252808320848a1684528252808320938816835292905220839055611631565b5f5b6001600160a01b0383165f908152600360205260409020611f9c906118be565b811015612031576001600160a01b0383165f908152600360205260408120611fc490836118c7565b90505f5b6001600160a01b0385165f908152600460205260409020611fe8906118be565b811015612027576001600160a01b0385165f90815260046020526040812061201090836118c7565b905061201e86868386612245565b50600101611fc8565b5050600101611f7c565b5061203d816001612a11565b6001600160a01b0383165f81815260026020526040908190209290925590517fb693195b5ff3e376f8b562486abc516e10fe2467b75f0e4165e79cf4ab70dc419061208b9084815260200190565b60405180910390a25050565b5f610a94836001600160a01b038416612308565b6120b3612171565b6118bb5f336118d2565b6120c78282610d42565b6108bb5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401611b18565b5f825f01828154811061210b5761210b6129e9565b905f5260205f200154905092915050565b61212582612354565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561216957610a2d82826123b7565b6108bb612429565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166110de57604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290612202908490612a79565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290611bec908490612a79565b5f61225285858585610d05565b90505f61226b86612264876001612a11565b8686610cc8565b9050818111156122785750805b5f6122838284612a79565b905061229c87612294886001612a11565b878785611c08565b6122a830858785611ca8565b846001600160a01b031686856001600160a01b03167f3ddb7f725ac69363a1df8296c965af4d268f31b082480dcd8419d284fb7fd34286866040516122f7929190918252602082015260400190565b60405180910390a450505050505050565b5f81815260018301602052604081205461234d57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610874565b505f610874565b806001600160a01b03163b5f0361238957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611b18565b5f80516020612ac383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516123d39190612a8c565b5f60405180830381855af49150503d805f811461240b576040519150601f19603f3d011682016040523d82523d5f602084013e612410565b606091505b5091509150612420858383612448565b95945050505050565b34156110de5760405163b398979f60e01b815260040160405180910390fd5b60608261245d57612458826124a4565b610a94565b815115801561247457506001600160a01b0384163b155b1561249d57604051639996b31560e01b81526001600160a01b0385166004820152602401611b18565b5080610a94565b8051156124b45780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f602082840312156124dd575f80fd5b81356001600160e01b031981168114610a94575f80fd5b6001600160a01b03811681146118bb575f80fd5b5f60208284031215612518575f80fd5b8135610a94816124f4565b5f60208284031215612533575f80fd5b5035919050565b602080825282518282018190525f918401906040840190835b8181101561257a5783516001600160a01b0316835260209384019390920191600101612553565b509095945050505050565b5f8060408385031215612596575f80fd5b8235915060208301356125a8816124f4565b809150509250929050565b5f80604083850312156125c4575f80fd5b82356125cf816124f4565b915060208301356125a8816124f4565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612604575f80fd5b823561260f816124f4565b915060208301356001600160401b03811115612629575f80fd5b8301601f81018513612639575f80fd5b80356001600160401b03811115612652576126526125df565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612680576126806125df565b604052818152828201602001871015612697575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f805f606084860312156126c8575f80fd5b83356126d3816124f4565b92506020840135915060408401356126ea816124f4565b809150509250925092565b5f805f60608486031215612707575f80fd5b8335612712816124f4565b92506020840135612722816124f4565b929592945050506040919091013590565b5f805f8060808587031215612746575f80fd5b8435612751816124f4565b9350602085013592506040850135612768816124f4565b91506060850135612778816124f4565b939692955090935050565b5f805f60608486031215612795575f80fd5b83356127a0816124f4565b925060208401356127b0816124f4565b915060408401356126ea816124f4565b5f8083601f8401126127d0575f80fd5b5081356001600160401b038111156127e6575f80fd5b6020830191508360208260051b8501011115612800575f80fd5b9250929050565b5f805f805f805f806080898b03121561281e575f80fd5b88356001600160401b03811115612833575f80fd5b61283f8b828c016127c0565b90995097505060208901356001600160401b0381111561285d575f80fd5b6128698b828c016127c0565b90975095505060408901356001600160401b03811115612887575f80fd5b6128938b828c016127c0565b90955093505060608901356001600160401b038111156128b1575f80fd5b6128bd8b828c016127c0565b999c989b5096995094979396929594505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f60408486031215612918575f80fd5b8335925060208401356001600160401b03811115612934575f80fd5b612940868287016127c0565b9497909650939450505050565b5f805f805f8060608789031215612962575f80fd5b86356001600160401b03811115612977575f80fd5b61298389828a016127c0565b90975095505060208701356001600160401b038111156129a1575f80fd5b6129ad89828a016127c0565b90955093505060408701356001600160401b038111156129cb575f80fd5b6129d789828a016127c0565b979a9699509497509295939492505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610874576108746129fd565b5f60208284031215612a34575f80fd5b5051919050565b5f60208284031215612a4b575f80fd5b81518015158114610a94575f80fd5b5f82612a7457634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610874576108746129fd565b5f82518060208501845e5f92019182525091905056fedc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220607b8c1972ce4fe4e14ac69101762168966bf4e7c61c37e51539df8ce23e5dde64736f6c634300081a0033","sourceMap":"591:19196:108:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:24;;;;;;;;;;-1:-1:-1;3443:202:24;;;;;:::i;:::-;;:::i;:::-;;;470:14:137;;463:22;445:41;;433:2;418:18;3443:202:24;;;;;;;;612:75:109;;;;;;;;;;-1:-1:-1;612:75:109;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1031:25:137;;;1019:2;1004:18;612:75:109;885:177:137;4759:191:24;;;;;;;;;;-1:-1:-1;4759:191:24;;;;;:::i;:::-;;:::i;19634:151:108:-;;;;;;;;;;-1:-1:-1;19634:151:108;;;;;:::i;:::-;;:::i;:::-;;1747:387;;;;;;;;;;-1:-1:-1;1747:387:108;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6588:195::-;;;;;;;;;;-1:-1:-1;6588:195:108;;;;;:::i;:::-;;:::i;5246:136:24:-;;;;;;;;;;-1:-1:-1;5246:136:24;;;;;:::i;:::-;;:::i;6348:245::-;;;;;;;;;;-1:-1:-1;6348:245:24;;;;;:::i;:::-;;:::i;529:77:109:-;;;;;;;;;;-1:-1:-1;529:77:109;;;;;:::i;:::-;;;;;;;;;;;;;;19488:140:108;;;;;;;;;;-1:-1:-1;19488:140:108;;;;;:::i;:::-;;:::i;8521:226::-;;;;;;;;;;-1:-1:-1;8521:226:108;;;;;:::i;:::-;;:::i;6272:123::-;;;;;;;;;;-1:-1:-1;6272:123:108;;;;;:::i;:::-;;:::i;4158:214:26:-;;;;;;:::i;:::-;;:::i;3705:134::-;;;;;;;;;;;;;:::i;1457:146:109:-;;;;;;;;;;-1:-1:-1;1457:146:109;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8251:214:108;;;;;;;;;;-1:-1:-1;8251:214:108;;;;;:::i;:::-;-1:-1:-1;;;;;8409:31:108;;;8383:7;8409:31;;;:23;:31;;;;;;;;:38;;;;;;;;;:49;;;;;;;;;;;;8251:214;10498:786;;;;;;;;;;-1:-1:-1;10498:786:108;;;;;:::i;:::-;;:::i;1192:193:109:-;;;;;;;;;;-1:-1:-1;1192:193:109;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7159:326:108;;;;;;;;;;-1:-1:-1;7159:326:108;;;;;:::i;:::-;;:::i;7869:330::-;;;;;;;;;;-1:-1:-1;7869:330:108;;;;;:::i;:::-;;:::i;1727:68:109:-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1727:68:109;;514:86:110;;;;;;;;;;;;;:::i;6428:154:108:-;;;;;;;;;;-1:-1:-1;6428:154:108;;;;;:::i;:::-;;:::i;7553:244::-;;;;;;;;;;-1:-1:-1;7553:244:108;;;;;:::i;:::-;;:::i;6849:240::-;;;;;;;;;;-1:-1:-1;6849:240:108;;;;;:::i;:::-;;:::i;3732:207:24:-;;;;;;;;;;-1:-1:-1;3732:207:24;;;;;:::i;:::-;;:::i;2140:1187:108:-;;;;;;;;;;;;;:::i;2317:49:24:-;;;;;;;;;;-1:-1:-1;2317:49:24;2362:4;2317:49;;15920:1564:108;;;;;;;;;;-1:-1:-1;15920:1564:108;;;;;:::i;:::-;;:::i;13464:106::-;;;;;;;;;;;;;:::i;1819:58:26:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:26;;;;;;;;;;;;:::i;8786:1661:108:-;;;;;;;;;;-1:-1:-1;8786:1661:108;;;;;:::i;:::-;;:::i;937:191:109:-;;;;;;;;;;-1:-1:-1;937:191:109;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6052:146:108;;;;;;;;;;-1:-1:-1;6052:146:108;;;;;:::i;:::-;;:::i;746:125::-;;;;;;;;;;-1:-1:-1;746:125:108;;;;;:::i;:::-;;:::i;1610:60:109:-;;;;;;;;;;-1:-1:-1;1610:60:109;;;;;:::i;:::-;;;;;;;;;;;;;;;;877:336:108;;;;;;;;;;-1:-1:-1;877:336:108;;;;;:::i;:::-;;:::i;5662:138:24:-;;;;;;;;;;-1:-1:-1;5662:138:24;;;;;:::i;:::-;;:::i;1219:522:108:-;;;;;;;;;;-1:-1:-1;1219:522:108;;;;;:::i;:::-;;:::i;19031:451::-;;;;;;;;;;-1:-1:-1;19031:451:108;;;;;:::i;:::-;;:::i;503:19:109:-;;;;;;;;;;-1:-1:-1;503:19:109;;;;-1:-1:-1;;;;;503:19:109;;;;;;-1:-1:-1;;;;;11186:32:137;;;11168:51;;11156:2;11141:18;503:19:109;11006:219:137;3333:1270:108;;;;;;;;;;-1:-1:-1;3333:1270:108;;;;;:::i;:::-;;:::i;3443:202:24:-;3528:4;-1:-1:-1;;;;;;3551:47:24;;-1:-1:-1;;;3551:47:24;;:87;;-1:-1:-1;;;;;;;;;;1133:40:32;;;3602:36:24;3544:94;3443:202;-1:-1:-1;;3443:202:24:o;4759:191::-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:24;;;;;:24;;;;4759:191::o;19634:151:108:-;2362:4:24;3191:16;2362:4;3191:10;:16::i;:::-;19746:32:108::1;-1:-1:-1::0;;;;;;;;;;;19773:4:108::1;19746:10;:32::i;:::-;19634:151:::0;;:::o;1747:387::-;-1:-1:-1;;;;;1912:25:108;;1856:26;1912:25;;;:17;:25;;;;;1828:16;;1856:26;1912:34;;:32;:34::i;:::-;-1:-1:-1;;;;;1885:71:108;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1885:71:108;;1856:100;;1971:9;1966:136;-1:-1:-1;;;;;1990:25:108;;;;;;:17;:25;;;;;:34;;:32;:34::i;:::-;1986:1;:38;1966:136;;;-1:-1:-1;;;;;2060:25:108;;;;;;:17;:25;;;;;:31;;2089:1;2060:28;:31::i;:::-;2045:9;2055:1;2045:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2045:46:108;;;:12;;;;;;;;;;;:46;2026:3;;1966:136;;;-1:-1:-1;2118:9:108;1747:387;-1:-1:-1;;1747:387:108:o;6588:195::-;6672:7;6710:23;6726:6;6710:15;:23::i;:::-;:28;:66;;6745:27;6765:6;6745:19;:27::i;:::-;:31;;6775:1;6745:31;:::i;:::-;6710:66;;;6741:1;6691:85;6588:195;-1:-1:-1;;6588:195:108:o;5246:136:24:-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;6348:245::-;-1:-1:-1;;;;;6441:34:24;;966:10:29;6441:34:24;6437:102;;6498:30;;-1:-1:-1;;;6498:30:24;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;19488:140:108:-;2362:4:24;3191:16;2362:4;3191:10;:16::i;:::-;19590:31:108::1;-1:-1:-1::0;;;;;;;;;;;19616:4:108::1;19590:9;:31::i;8521:226::-:0;8637:7;8675:65;8697:6;8705:23;8721:6;8705:15;:23::i;:::-;8730:9;-1:-1:-1;;;;;8409:31:108;;;8383:7;8409:31;;;:23;:31;;;;;;;;:38;;;;;;;;;:49;;;;;;;;;;;;8251:214;8675:65;8656:84;8521:226;-1:-1:-1;;;8521:226:108:o;6272:123::-;-1:-1:-1;;;;;6360:28:108;6334:7;6360:28;;;:20;:28;;;;;;;6272:123::o;4158:214:26:-;2653:13;:11;:13::i;:::-;4273:36:::1;4291:17;4273;:36::i;:::-;4319:46;4341:17;4360:4;4319:21;:46::i;3705:134::-:0;3774:7;2924:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3705:134:26;:::o;10498:786:108:-;-1:-1:-1;;;;;;;;;;;3191:16:24;3202:4;3191:10;:16::i;:::-;10961:153:108::1;10986:6;11006:31;11030:6;11006:23;:31::i;:::-;11051:9;11074:10;11098:6;10961:11;:153::i;:::-;11214:9;-1:-1:-1::0;;;;;11130:147:108::1;11180:20;11193:6;11180:12;:20::i;:::-;11130:147;::::0;;11237:10:::1;12902:51:137::0;;12984:2;12969:18;;12962:34;;;-1:-1:-1;;;;;11130:147:108;::::1;::::0;::::1;::::0;12875:18:137;11130:147:108::1;;;;;;;10498:786:::0;;;;:::o;7159:326::-;7293:7;7331:147;7364:6;7388:23;7404:6;7388:15;:23::i;:::-;7429:9;7456:8;7331:15;:147::i;:::-;7312:166;7159:326;-1:-1:-1;;;;7159:326:108:o;7869:330::-;8005:7;8043:149;8078:6;8102:23;8118:6;8102:15;:23::i;:::-;8143:9;8170:8;8043:17;:149::i;514:86:110:-;8870:21:25;4302:15;;-1:-1:-1;;;4302:15:25;;;;4301:16;;-1:-1:-1;;;;;4348:14:25;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:25;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:25;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:25;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:25;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:25;-1:-1:-1;;;5013:22:25;;;4979:67;573:20:110::1;:18;:20::i;:::-;5070:14:25::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:25;;;5142:14;;-1:-1:-1;13160:50:137;;5142:14:25;;13148:2:137;13133:18;5142:14:25;;;;;;;5066:101;4092:1081;;;;;514:86:110:o;6428:154:108:-;6487:7;6513:23;6529:6;6513:15;:23::i;:::-;:28;:62;;6548:23;6564:6;6548:15;:23::i;7553:244::-;-1:-1:-1;;;;;7733:29:108;;;7707:7;7733:29;;;:21;:29;;;;;;;;:36;;;;;;;;;:47;;;;;;;;;;;:57;;;;;;;;;;;;7553:244::o;6849:240::-;-1:-1:-1;;;;;7027:27:108;;;7001:7;7027:27;;;:19;:27;;;;;;;;:34;;;;;;;;;:45;;;;;;;;;;;:55;;;;;;;;;;;;6849:240::o;3732:207:24:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:24;;;;;;;;-1:-1:-1;;;;;3901:31:24;;;;;;;;;;;;;;;3732:207::o;2140:1187:108:-;2207:10;2190:14;2231:29;;;:21;:29;;;;;;;;2227:66;;;2269:24;;-1:-1:-1;;;2269:24:108;;;;;;;;;;;2227:66;-1:-1:-1;;;;;2303:29:108;;;;;;:21;:29;;;;;:36;;-1:-1:-1;;2303:36:108;2335:4;2303:36;;;2449:27;2325:6;2449:19;:27::i;:::-;-1:-1:-1;;;;;2418:28:108;;;;;;:20;:28;;;;;:58;;;;2487:834;-1:-1:-1;;;;;2511:25:108;;;;;;:17;:25;;;;;:34;;:32;:34::i;:::-;2507:1;:38;2487:834;;;-1:-1:-1;;;;;2585:25:108;;2566:16;2585:25;;;:17;:25;;;;;:31;;2614:1;2585:28;:31::i;:::-;2566:50;;2636:9;2631:680;-1:-1:-1;;;;;2655:26:108;;;;;;:18;:26;;;;;:35;;:33;:35::i;:::-;2651:1;:39;2631:680;;;-1:-1:-1;;;;;2735:26:108;;2715:17;2735:26;;;:18;:26;;;;;:32;;2765:1;2735:29;:32::i;:::-;2715:52;;2844:21;2868:145;2905:6;2933:1;2956:9;2987:8;2868:15;:145::i;:::-;2844:169;;3100:196;3131:6;3159:23;3175:6;3159:15;:23::i;:::-;3204:9;3235:8;3265:13;3100:9;:196::i;:::-;-1:-1:-1;;2692:3:108;;2631:680;;;-1:-1:-1;;2547:3:108;;2487:834;;15920:1564;16118:9;16113:1365;16133:20;;;16113:1365;;;16401:20;16424:281;16450:185;16487:10;16519:29;16535:9;;16545:1;16535:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;16519:29::-;16570:10;;16581:1;16570:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16605:9;;16615:1;16605:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;16450:185::-;16653:38;16662:7;;16670:1;16662:10;;;;;;;:::i;:::-;;;;;;;16674:13;;16688:1;16674:16;;;;;;;:::i;:::-;;;;;;;16653:8;:38::i;:::-;16424:8;:281::i;:::-;16401:304;;16719:226;16757:4;16858:9;;16868:1;16858:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16888:10;;16899:1;16888:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16919:12;16719;:226::i;:::-;17104:187;17133:10;17161:27;17177:10;17161:15;:27::i;:::-;17206:10;;17217:1;17206:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17237:9;;17247:1;17237:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17267:7;;17275:1;17267:10;;;;;;;:::i;:::-;;;;;;;17104:11;:187::i;:::-;17306:161;17337:10;17365:27;17381:10;17365:15;:27::i;:::-;17410:10;;17421:1;17410:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17441:9;;17451:1;17441:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17306:13;:161::i;:::-;-1:-1:-1;16155:3:108;;16113:1365;;;;15920:1564;;;;;;;;:::o;13464:106::-;13508:55;13523:10;13535:27;13551:10;13535:15;:27::i;:::-;13508:14;:55::i;:::-;13464:106::o;8786:1661::-;-1:-1:-1;;;;;;;;;;;3191:16:24;3202:4;3191:10;:16::i;:::-;-1:-1:-1;;;;;8978:25:108;::::1;;::::0;;;:17:::1;:25;::::0;;;;:41:::1;::::0;9008:10:::1;8978:29;:41::i;:::-;-1:-1:-1::0;9383:21:108::1;9407:5:::0;;:30:::1;::::0;-1:-1:-1;;;9407:30:108;;9431:4:::1;9407:30;::::0;::::1;11168:51:137::0;-1:-1:-1;;;;;9407:5:108;;::::1;::::0;:15:::1;::::0;11141:18:137;;9407:30:108::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9718:57;::::0;-1:-1:-1;;;9718:57:108;;9741:10:::1;9718:57;::::0;::::1;13820:51:137::0;9761:4:108::1;13887:18:137::0;;;13880:60;13956:18;;;13949:34;;;9383:54:108;;-1:-1:-1;;;;;;9718:22:108;::::1;::::0;::::1;::::0;13793:18:137;;9718:57:108::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;9908:22:108::1;9924:6:::0;9908:13;:22:::1;:::i;:::-;9874:5;::::0;:30:::1;::::0;-1:-1:-1;;;9874:30:108;;9898:4:::1;9874:30;::::0;::::1;11168:51:137::0;-1:-1:-1;;;;;9874:5:108;;::::1;::::0;:15:::1;::::0;11141:18:137;;9874:30:108::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;9870:114;;9951:33;;-1:-1:-1::0;;;9951:33:108::1;;;;;;;;;;;9870:114;10051:160;10074:6;10094:31;10118:6;10094:23;:31::i;:::-;10147:9;10171:10;10195:6;10051:9;:160::i;:::-;10376:9;-1:-1:-1::0;;;;;10286:154:108::1;10334:20;10347:6;10334:12;:20::i;:::-;10286:154;::::0;;10400:10:::1;12902:51:137::0;;12984:2;12969:18;;12962:34;;;-1:-1:-1;;;;;10286:154:108;::::1;::::0;::::1;::::0;12875:18:137;10286:154:108::1;;;;;;;8915:1532;8786:1661:::0;;;;:::o;6052:146::-;-1:-1:-1;;;;;6162:29:108;;6118:7;6162:29;;;:21;:29;;;;;;6144:47;;:15;:47;:::i;746:125::-;8870:21:25;4302:15;;-1:-1:-1;;;4302:15:25;;;;4301:16;;-1:-1:-1;;;;;4348:14:25;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:25;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:25;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:25;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:25;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:25;-1:-1:-1;;;5013:22:25;;;4979:67;810:30:108::1;:28;:30::i;:::-;850:5;:14:::0;;-1:-1:-1;;;;;;850:14:108::1;-1:-1:-1::0;;;;;850:14:108;::::1;;::::0;;5066:101:25;;;;5100:23;;-1:-1:-1;;;;5100:23:25;;;5142:14;;-1:-1:-1;13160:50:137;;5142:14:25;;13148:2:137;13133:18;5142:14:25;;;;;;;5066:101;4092:1081;;;;;746:125:108;:::o;877:336::-;1013:10;996:14;1033:29;;;:21;:29;;;;;:45;;;1089:118;1109:21;;;1089:118;;;1151:45;1182:10;;1193:1;1182:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1151:26:108;;;;;;:18;:26;;;;;;:30;:45::i;:::-;-1:-1:-1;1132:3:108;;1089:118;;5662:138:24;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;1219:522:108:-:0;-1:-1:-1;;;;;1514:26:108;;1457:27;1514:26;;;:18;:26;;;;;1301:16;;1457:27;1514:35;;:33;:35::i;:::-;-1:-1:-1;;;;;1487:72:108;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1487:72:108;;1457:102;;1574:9;1569:139;-1:-1:-1;;;;;1593:26:108;;;;;;:18;:26;;;;;:35;;:33;:35::i;:::-;1589:1;:39;1569:139;;;-1:-1:-1;;;;;1665:26:108;;;;;;:18;:26;;;;;:32;;1695:1;1665:29;:32::i;:::-;1649:10;1660:1;1649:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1649:48:108;;;:13;;;;;;;;;;;:48;1630:3;;1569:139;;19031:451;19312:9;19307:169;19327:20;;;19307:169;;;19400:65;19413:10;19425:9;;19435:1;19425:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19439:10;;19450:1;19439:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19454:7;;19462:1;19454:10;;;;;;;:::i;:::-;;;;;;;19400:12;:65::i;:::-;19349:3;;19307:169;;;;19031:451;;;;;;:::o;3333:1270::-;3513:10;3564:27;3513:10;3564:19;:27::i;:::-;-1:-1:-1;;;;;3533:28:108;;;;;;:20;:28;;;;;:58;;;;3602:995;3622:20;;;3602:995;;;3663:17;3683:10;;3694:1;3683:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3663:33;;3765:21;3789:129;3822:6;3846:1;3865:9;3892;;3902:1;3892:12;;;;;;;:::i;3789:129::-;3765:153;;4026:6;;4033:1;4026:9;;;;;;;:::i;:::-;;;;;;;4010:13;:25;4006:64;;;4044:26;;-1:-1:-1;;;4044:26:108;;;;;;;;;;;4006:64;4128:43;4158:9;;4168:1;4158:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4128:25:108;;;;;;:17;:25;;;;;;:29;:43::i;:::-;;4295:6;;4302:1;4295:9;;;;;;;:::i;:::-;;;;;;;4185:19;:27;4205:6;-1:-1:-1;;;;;4185:27:108;-1:-1:-1;;;;;4185:27:108;;;;;;;;;;;;:52;4213:23;4229:6;4213:15;:23::i;:::-;4185:52;;;;;;;;;;;:63;4238:9;-1:-1:-1;;;;;4185:63:108;-1:-1:-1;;;;;4185:63:108;;;;;;;;;;;;:107;4266:9;;4276:1;4266:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4185:107:108;;;;;;;;;;;;-1:-1:-1;4185:107:108;:119;4367:6;;4374:1;4367:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;4318:31:108;;;;;;;:23;4367:9;4318:31;;;;;;;:34;;;;;;;;:45;;;;;;;;;;;:58;;4367:9;;;;;;;;;;4318:45;;-1:-1:-1;4318:58:108;;4367:9;;4318:58;:::i;:::-;;;;-1:-1:-1;4458:20:108;;-1:-1:-1;4493:13:108;4481:6;;4488:1;4481:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;4458:48;;4520:66;4541:4;4548:9;;4558:1;4548:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;4562:9;4573:12;4520;:66::i;:::-;-1:-1:-1;;;3644:3:108;;3602:995;;;;3486:1117;3333:1270;;;;;;:::o;4148:103:24:-;4214:30;4225:4;966:10:29;4214::24;:30::i;:::-;4148:103;:::o;9117:115:66:-;9180:7;9206:19;9214:3;4556:18;;4474:107;9574:156;9648:7;9698:22;9702:3;9714:5;9698:3;:22::i;7270:387:24:-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:24;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:24;;;;;;;;;:38;;-1:-1:-1;;7475:38:24;7509:4;7475:38;;;7559:12;966:10:29;;887:96;7559:12:24;-1:-1:-1;;;;;7532:40:24;7550:7;-1:-1:-1;;;;;7532:40:24;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7892:388;7970:4;-1:-1:-1;;;;;;;;;;;8059:22:24;8067:4;8073:7;8059;:22::i;:::-;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:24;;;;;;;;;;:39;;-1:-1:-1;;8097:39:24;;;8155:40;966:10:29;;8097:14:24;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;4599:312:26;4679:4;-1:-1:-1;;;;;4688:6:26;4671:23;;;:120;;;4785:6;-1:-1:-1;;;;;4749:42:26;:32;-1:-1:-1;;;;;;;;;;;2035:53:43;-1:-1:-1;;;;;2035:53:43;;1957:138;4749:32:26;-1:-1:-1;;;;;4749:42:26;;;4671:120;4654:251;;;4865:29;;-1:-1:-1;;;4865:29:26;;;;;;;;;;;965:103:110;2362:4:24;3191:16;2362:4;3191:10;:16::i;6052:538:26:-;6169:17;-1:-1:-1;;;;;6151:50:26;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6151:52:26;;;;;;;;-1:-1:-1;;6151:52:26;;;;;;;;;;;;:::i;:::-;;;6147:437;;6513:60;;-1:-1:-1;;;6513:60:26;;-1:-1:-1;;;;;11186:32:137;;6513:60:26;;;11168:51:137;11141:18;;6513:60:26;;;;;;;;6147:437;-1:-1:-1;;;;;;;;;;;6245:40:26;;6241:120;;6312:34;;-1:-1:-1;;;6312:34:26;;;;;1031:25:137;;;1004:18;;6312:34:26;885:177:137;6241:120:26;6374:54;6404:17;6423:4;6374:29;:54::i;5028:213::-;5102:4;-1:-1:-1;;;;;5111:6:26;5094:23;;5090:145;;5195:29;;-1:-1:-1;;;5195:29:26;;;;;;;;;;;5242:244:108;-1:-1:-1;;;;;5412:29:108;;;;;;;:21;:29;;;;;;;;:36;;;;;;;;:47;;;;;;;;;;:57;;;;;;;;;;;:67;;5473:6;;5412:29;:67;;5473:6;;5412:67;:::i;:::-;;;;-1:-1:-1;;;;;;;5242:244:108:o;606:103:110:-;6931:20:25;:18;:20::i;:::-;672:30:110::1;:28;:30::i;4609:309:108:-:0;-1:-1:-1;;;;;4777:27:108;;;;;;;:19;:27;;;;;;;;:34;;;;;;;;:45;;;;;;;;;;:55;;;;;;;;;;;:65;;4836:6;;4777:27;:65;;4836:6;;4777:65;:::i;:::-;;;;-1:-1:-1;;;;;;;4852:31:108;;;;;;;:23;:31;;;;;;;;:38;;;;;;;;:49;;;;;;;;;;;:59;;4905:6;;4852:31;:59;;4905:6;;4852:59;:::i;2557:104:64:-;2615:7;2645:1;2641;:5;:13;;2653:1;2641:13;;;-1:-1:-1;2649:1:64;;2557:104;-1:-1:-1;2557:104:64:o;17490:1535:108:-;17656:4;-1:-1:-1;;;;;17640:21:108;;;17636:1383;;17741:5;;-1:-1:-1;;;;;17733:27:108;;;17741:5;;17733:27;17729:456;;17829:5;;:32;;-1:-1:-1;;;17829:32:108;;-1:-1:-1;;;;;12920:32:137;;;17829::108;;;12902:51:137;12969:18;;;12962:34;;;17829:5:108;;;;:14;;12875:18:137;;17829:32:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17636:1383;;17729:456;17992:5;;:32;;-1:-1:-1;;;17992:32:108;;-1:-1:-1;;;;;12920:32:137;;;17992::108;;;12902:51:137;12969:18;;;12962:34;;;17992:5:108;;;;:13;;12875:18:137;;17992:32:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18108:62:108;;-1:-1:-1;;;18108:62:108;;-1:-1:-1;;;;;12920:32:137;;;18108:62:108;;;12902:51:137;12969:18;;;12962:34;;;18108:44:108;;;;;12875:18:137;;18108:62:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17636:1383;;;18583:5;;-1:-1:-1;;;;;18575:27:108;;;18583:5;;18575:27;18571:438;;18671:5;;:42;;-1:-1:-1;;;18671:42:108;;-1:-1:-1;;;;;13838:32:137;;;18671:42:108;;;13820:51:137;13907:32;;;13887:18;;;13880:60;13956:18;;;13949:34;;;18671:5:108;;;;:18;;13793::137;;18671:42:108;13618:371:137;18571:438:108;18844:150;;-1:-1:-1;;;18844:150:108;;-1:-1:-1;;;;;13838:32:137;;;18844:150:108;;;13820:51:137;13907:32;;;13887:18;;;13880:60;13956:18;;;13949:34;;;18844:48:108;;;;;13793:18:137;;18844:150:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13877:803;14122:5;14100:19;14161:115;14190:6;14122:5;14235:9;14258:8;14161:15;:115::i;:::-;14137:139;;14385:6;14369:13;:22;14365:309;;;14407:163;14437:6;14461:11;14490:9;14517:8;14543:13;14407:12;:163::i;:::-;14365:309;;;14601:62;14614:6;14622:11;14635:9;14646:8;14656:6;14601:12;:62::i;15012:902::-;15219:21;15243:109;15272:6;15292:5;15311:9;15334:8;15243:15;:109::i;:::-;15219:133;-1:-1:-1;15362:19:108;15384:9;:5;15392:1;15384:9;:::i;:::-;15362:31;;15403:23;15429:117;15460:6;15480:11;15505:9;15528:8;15429:17;:117::i;:::-;15403:143;;15579:13;15561:15;:31;15557:351;;;-1:-1:-1;;;;;5915:29:108;;;;;;;:21;:29;;;;;;;;:36;;;;;;;;:47;;;;;;;;;;:57;;;;;;;;;:66;;;15735:162;5745:243;12697:761;12926:9;12921:383;-1:-1:-1;;;;;12945:25:108;;;;;;:17;:25;;;;;:34;;:32;:34::i;:::-;12941:1;:38;12921:383;;;-1:-1:-1;;;;;13019:25:108;;13000:16;13019:25;;;:17;:25;;;;;:31;;13048:1;13019:28;:31::i;:::-;13000:50;;13070:9;13065:229;-1:-1:-1;;;;;13089:26:108;;;;;;:18;:26;;;;;:35;;:33;:35::i;:::-;13085:1;:39;13065:229;;;-1:-1:-1;;;;;13169:26:108;;13149:17;13169:26;;;:18;:26;;;;;:32;;13199:1;13169:29;:32::i;:::-;13149:52;;13220:59;13238:6;13246:11;13259:9;13270:8;13220:17;:59::i;:::-;-1:-1:-1;13126:3:108;;13065:229;;;-1:-1:-1;;12981:3:108;;12921:383;;;-1:-1:-1;13384:15:108;:11;13398:1;13384:15;:::i;:::-;-1:-1:-1;;;;;13353:28:108;;;;;;:20;:28;;;;;;;:46;;;;13415:36;;;;;;13439:11;1031:25:137;;1019:2;1004:18;;885:177;13415:36:108;;;;;;;;12697:761;;:::o;8316:150:66:-;8386:4;8409:50;8414:3;-1:-1:-1;;;;;8434:23:66;;8409:4;:50::i;715:125:110:-;6931:20:25;:18;:20::i;:::-;791:42:110::1;2362:4:24;822:10:110;791;:42::i;4381:197:24:-:0;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:24;;-1:-1:-1;;;;;12920:32:137;;4514:47:24;;;12902:51:137;12969:18;;;12962:34;;;12875:18;;4514:47:24;12728:274:137;4923:118:66;4990:7;5016:3;:11;;5028:5;5016:18;;;;;;;;:::i;:::-;;;;;;;;;5009:25;;4923:118;;;;:::o;2779:335:43:-;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:43;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;2960:148::-;3079:18;:16;:18::i;7084:141:25:-;8870:21;8560:40;-1:-1:-1;;;8560:40:25;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:25;;;;;;;;;;;4924:312:108;-1:-1:-1;;;;;5095:27:108;;;;;;;:19;:27;;;;;;;;:34;;;;;;;;:45;;;;;;;;;;:55;;;;;;;;;;;:65;;5154:6;;5095:27;:65;;5154:6;;5095:65;:::i;:::-;;;;-1:-1:-1;;;;;;;5170:31:108;;;;;;;:23;:31;;;;;;;;:38;;;;;;;;:49;;;;;;;;;;;:59;;5223:6;;5170:31;:59;;5223:6;;5170:59;:::i;11351:1340::-;11596:19;11618:115;11647:6;11667:11;11692:9;11715:8;11618:15;:115::i;:::-;11596:137;-1:-1:-1;11743:21:108;11767:121;11798:6;11818:15;:11;11832:1;11818:15;:::i;:::-;11847:9;11870:8;11767:17;:121::i;:::-;11743:145;;11918:11;11902:13;:27;11898:85;;;-1:-1:-1;11961:11:108;11898:85;11992:17;12012:27;12026:13;12012:11;:27;:::i;:::-;11992:47;-1:-1:-1;12050:66:108;12060:6;12068:15;:11;12082:1;12068:15;:::i;:::-;12085:9;12096:8;12106:9;12050;:66::i;:::-;12450:63;12471:4;12478:8;12488:9;12499:13;12450:12;:63::i;:::-;12613:9;-1:-1:-1;;;;;12529:155:108;12588:11;12566:8;-1:-1:-1;;;;;12529:155:108;;12636:11;12661:13;12529:155;;;;;;15273:25:137;;;15329:2;15314:18;;15307:34;15261:2;15246:18;;15099:248;12529:155:108;;;;;;;;11499:1192;;;11351:1340;;;;:::o;2241:406:66:-;2304:4;4360:21;;;:14;;;:21;;;;;;2320:321;;-1:-1:-1;2362:23:66;;;;;;;;:11;:23;;;;;;;;;;;;;2544:18;;2520:21;;;:14;;;:21;;;;;;:42;;;;2576:11;;2320:321;-1:-1:-1;2625:5:66;2618:12;;2186:281:43;2263:17;-1:-1:-1;;;;;2263:29:43;;2296:1;2263:34;2259:119;;2320:47;;-1:-1:-1;;;2320:47:43;;-1:-1:-1;;;;;11186:32:137;;2320:47:43;;;11168:51:137;11141:18;;2320:47:43;11006:219:137;2259:119:43;-1:-1:-1;;;;;;;;;;;2387:73:43;;-1:-1:-1;;;;;;2387:73:43;-1:-1:-1;;;;;2387:73:43;;;;;;;;;;2186:281::o;4106:253:56:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:56;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:56:o;6598:122:43:-;6648:9;:13;6644:70;;6684:19;;-1:-1:-1;;;6684:19:43;;;;;;;;;;;4625:582:56;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:56;;;:23;5045:49;5041:119;;;5121:24;;-1:-1:-1;;;5121:24:56;;-1:-1:-1;;;;;11186:32:137;;5121:24:56;;;11168:51:137;11141:18;;5121:24:56;11006:219:137;5041:119:56;-1:-1:-1;5180:10:56;5173:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:56;;;;;;;;;;;14:286:137;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:137;;209:43;;199:71;;266:1;263;256:12;497:131;-1:-1:-1;;;;;572:31:137;;562:42;;552:70;;618:1;615;608:12;633:247;692:6;745:2;733:9;724:7;720:23;716:32;713:52;;;761:1;758;751:12;713:52;800:9;787:23;819:31;844:5;819:31;:::i;1067:226::-;1126:6;1179:2;1167:9;1158:7;1154:23;1150:32;1147:52;;;1195:1;1192;1185:12;1147:52;-1:-1:-1;1240:23:137;;1067:226;-1:-1:-1;1067:226:137:o;1480:637::-;1670:2;1682:21;;;1752:13;;1655:18;;;1774:22;;;1622:4;;1853:15;;;1827:2;1812:18;;;1622:4;1896:195;1910:6;1907:1;1904:13;1896:195;;;1975:13;;-1:-1:-1;;;;;1971:39:137;1959:52;;2040:2;2066:15;;;;2031:12;;;;2007:1;1925:9;1896:195;;;-1:-1:-1;2108:3:137;;1480:637;-1:-1:-1;;;;;1480:637:137:o;2122:367::-;2190:6;2198;2251:2;2239:9;2230:7;2226:23;2222:32;2219:52;;;2267:1;2264;2257:12;2219:52;2312:23;;;-1:-1:-1;2411:2:137;2396:18;;2383:32;2424:33;2383:32;2424:33;:::i;:::-;2476:7;2466:17;;;2122:367;;;;;:::o;2494:388::-;2562:6;2570;2623:2;2611:9;2602:7;2598:23;2594:32;2591:52;;;2639:1;2636;2629:12;2591:52;2678:9;2665:23;2697:31;2722:5;2697:31;:::i;:::-;2747:5;-1:-1:-1;2804:2:137;2789:18;;2776:32;2817:33;2776:32;2817:33;:::i;2887:127::-;2948:10;2943:3;2939:20;2936:1;2929:31;2979:4;2976:1;2969:15;3003:4;3000:1;2993:15;3019:1079;3096:6;3104;3157:2;3145:9;3136:7;3132:23;3128:32;3125:52;;;3173:1;3170;3163:12;3125:52;3212:9;3199:23;3231:31;3256:5;3231:31;:::i;:::-;3281:5;-1:-1:-1;3337:2:137;3322:18;;3309:32;-1:-1:-1;;;;;3353:30:137;;3350:50;;;3396:1;3393;3386:12;3350:50;3419:22;;3472:4;3464:13;;3460:27;-1:-1:-1;3450:55:137;;3501:1;3498;3491:12;3450:55;3541:2;3528:16;-1:-1:-1;;;;;3559:6:137;3556:30;3553:56;;;3589:18;;:::i;:::-;3638:2;3632:9;3730:2;3692:17;;-1:-1:-1;;3688:31:137;;;3721:2;3684:40;3680:54;3668:67;;-1:-1:-1;;;;;3750:34:137;;3786:22;;;3747:62;3744:88;;;3812:18;;:::i;:::-;3848:2;3841:22;3872;;;3913:15;;;3930:2;3909:24;3906:37;-1:-1:-1;3903:57:137;;;3956:1;3953;3946:12;3903:57;4012:6;4007:2;4003;3999:11;3994:2;3986:6;3982:15;3969:50;4065:1;4060:2;4051:6;4043;4039:19;4035:28;4028:39;4086:6;4076:16;;;;;3019:1079;;;;;:::o;4103:508::-;4180:6;4188;4196;4249:2;4237:9;4228:7;4224:23;4220:32;4217:52;;;4265:1;4262;4255:12;4217:52;4304:9;4291:23;4323:31;4348:5;4323:31;:::i;:::-;4373:5;-1:-1:-1;4451:2:137;4436:18;;4423:32;;-1:-1:-1;4533:2:137;4518:18;;4505:32;4546:33;4505:32;4546:33;:::i;:::-;4598:7;4588:17;;;4103:508;;;;;:::o;4616:::-;4693:6;4701;4709;4762:2;4750:9;4741:7;4737:23;4733:32;4730:52;;;4778:1;4775;4768:12;4730:52;4817:9;4804:23;4836:31;4861:5;4836:31;:::i;:::-;4886:5;-1:-1:-1;4943:2:137;4928:18;;4915:32;4956:33;4915:32;4956:33;:::i;:::-;4616:508;;5008:7;;-1:-1:-1;;;5088:2:137;5073:18;;;;5060:32;;4616:508::o;5129:650::-;5215:6;5223;5231;5239;5292:3;5280:9;5271:7;5267:23;5263:33;5260:53;;;5309:1;5306;5299:12;5260:53;5348:9;5335:23;5367:31;5392:5;5367:31;:::i;:::-;5417:5;-1:-1:-1;5495:2:137;5480:18;;5467:32;;-1:-1:-1;5577:2:137;5562:18;;5549:32;5590:33;5549:32;5590:33;:::i;:::-;5642:7;-1:-1:-1;5701:2:137;5686:18;;5673:32;5714:33;5673:32;5714:33;:::i;:::-;5129:650;;;;-1:-1:-1;5129:650:137;;-1:-1:-1;;5129:650:137:o;5784:529::-;5861:6;5869;5877;5930:2;5918:9;5909:7;5905:23;5901:32;5898:52;;;5946:1;5943;5936:12;5898:52;5985:9;5972:23;6004:31;6029:5;6004:31;:::i;:::-;6054:5;-1:-1:-1;6111:2:137;6096:18;;6083:32;6124:33;6083:32;6124:33;:::i;:::-;6176:7;-1:-1:-1;6235:2:137;6220:18;;6207:32;6248:33;6207:32;6248:33;:::i;6318:367::-;6381:8;6391:6;6445:3;6438:4;6430:6;6426:17;6422:27;6412:55;;6463:1;6460;6453:12;6412:55;-1:-1:-1;6486:20:137;;-1:-1:-1;;;;;6518:30:137;;6515:50;;;6561:1;6558;6551:12;6515:50;6598:4;6590:6;6586:17;6574:29;;6658:3;6651:4;6641:6;6638:1;6634:14;6626:6;6622:27;6618:38;6615:47;6612:67;;;6675:1;6672;6665:12;6612:67;6318:367;;;;;:::o;6690:1431::-;6884:6;6892;6900;6908;6916;6924;6932;6940;6993:3;6981:9;6972:7;6968:23;6964:33;6961:53;;;7010:1;7007;7000:12;6961:53;7050:9;7037:23;-1:-1:-1;;;;;7075:6:137;7072:30;7069:50;;;7115:1;7112;7105:12;7069:50;7154:70;7216:7;7207:6;7196:9;7192:22;7154:70;:::i;:::-;7243:8;;-1:-1:-1;7128:96:137;-1:-1:-1;;7331:2:137;7316:18;;7303:32;-1:-1:-1;;;;;7347:32:137;;7344:52;;;7392:1;7389;7382:12;7344:52;7431:72;7495:7;7484:8;7473:9;7469:24;7431:72;:::i;:::-;7522:8;;-1:-1:-1;7405:98:137;-1:-1:-1;;7610:2:137;7595:18;;7582:32;-1:-1:-1;;;;;7626:32:137;;7623:52;;;7671:1;7668;7661:12;7623:52;7710:72;7774:7;7763:8;7752:9;7748:24;7710:72;:::i;:::-;7801:8;;-1:-1:-1;7684:98:137;-1:-1:-1;;7889:2:137;7874:18;;7861:32;-1:-1:-1;;;;;7905:32:137;;7902:52;;;7950:1;7947;7940:12;7902:52;7989:72;8053:7;8042:8;8031:9;8027:24;7989:72;:::i;:::-;6690:1431;;;;-1:-1:-1;6690:1431:137;;-1:-1:-1;6690:1431:137;;;;;;8080:8;-1:-1:-1;;;6690:1431:137:o;8126:418::-;8275:2;8264:9;8257:21;8238:4;8307:6;8301:13;8350:6;8345:2;8334:9;8330:18;8323:34;8409:6;8404:2;8396:6;8392:15;8387:2;8376:9;8372:18;8366:50;8465:1;8460:2;8451:6;8440:9;8436:22;8432:31;8425:42;8535:2;8528;8524:7;8519:2;8511:6;8507:15;8503:29;8492:9;8488:45;8484:54;8476:62;;;8126:418;;;;:::o;9346:551::-;9441:6;9449;9457;9510:2;9498:9;9489:7;9485:23;9481:32;9478:52;;;9526:1;9523;9516:12;9478:52;9571:23;;;-1:-1:-1;9669:2:137;9654:18;;9641:32;-1:-1:-1;;;;;9685:30:137;;9682:50;;;9728:1;9725;9718:12;9682:50;9767:70;9829:7;9820:6;9809:9;9805:22;9767:70;:::i;:::-;9346:551;;9856:8;;-1:-1:-1;9741:96:137;;-1:-1:-1;;;;9346:551:137:o;9902:1099::-;10060:6;10068;10076;10084;10092;10100;10153:2;10141:9;10132:7;10128:23;10124:32;10121:52;;;10169:1;10166;10159:12;10121:52;10209:9;10196:23;-1:-1:-1;;;;;10234:6:137;10231:30;10228:50;;;10274:1;10271;10264:12;10228:50;10313:70;10375:7;10366:6;10355:9;10351:22;10313:70;:::i;:::-;10402:8;;-1:-1:-1;10287:96:137;-1:-1:-1;;10490:2:137;10475:18;;10462:32;-1:-1:-1;;;;;10506:32:137;;10503:52;;;10551:1;10548;10541:12;10503:52;10590:72;10654:7;10643:8;10632:9;10628:24;10590:72;:::i;:::-;10681:8;;-1:-1:-1;10564:98:137;-1:-1:-1;;10769:2:137;10754:18;;10741:32;-1:-1:-1;;;;;10785:32:137;;10782:52;;;10830:1;10827;10820:12;10782:52;10869:72;10933:7;10922:8;10911:9;10907:24;10869:72;:::i;:::-;9902:1099;;;;-1:-1:-1;9902:1099:137;;-1:-1:-1;9902:1099:137;;10960:8;;9902:1099;-1:-1:-1;;;9902:1099:137:o;12334:127::-;12395:10;12390:3;12386:20;12383:1;12376:31;12426:4;12423:1;12416:15;12450:4;12447:1;12440:15;12466:127;12527:10;12522:3;12518:20;12515:1;12508:31;12558:4;12555:1;12548:15;12582:4;12579:1;12572:15;12598:125;12663:9;;;12684:10;;;12681:36;;;12697:18;;:::i;13429:184::-;13499:6;13552:2;13540:9;13531:7;13527:23;13523:32;13520:52;;;13568:1;13565;13558:12;13520:52;-1:-1:-1;13591:16:137;;13429:184;-1:-1:-1;13429:184:137:o;13994:277::-;14061:6;14114:2;14102:9;14093:7;14089:23;14085:32;14082:52;;;14130:1;14127;14120:12;14082:52;14162:9;14156:16;14215:5;14208:13;14201:21;14194:5;14191:32;14181:60;;14237:1;14234;14227:12;14276:217;14316:1;14342;14332:132;;14386:10;14381:3;14377:20;14374:1;14367:31;14421:4;14418:1;14411:15;14449:4;14446:1;14439:15;14332:132;-1:-1:-1;14478:9:137;;14276:217::o;14498:128::-;14565:9;;;14586:11;;;14583:37;;;14600:18;;:::i;15352:301::-;15481:3;15519:6;15513:13;15565:6;15558:4;15550:6;15546:17;15541:3;15535:37;15627:1;15591:16;;15616:13;;;-1:-1:-1;15591:16:137;15352:301;-1:-1:-1;15352:301:137:o","linkReferences":{},"immutableReferences":{"39659":[{"start":6647,"length":32},{"start":6688,"length":32},{"start":7014,"length":32}]}},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","WHITELIST_ROLE()":"7a997ab7","acceptGenesisCeremony()":"92a2ebf3","currentEpochByDomain(address)":"0a0b1b64","domainGenesisAccepted(address)":"d1ba90ff","epochDurationByDomain(address)":"3bccf635","epochStakesByDomain(address,uint256,address,address)":"c0b95ab8","epochTotalStakeByDomain(address,uint256,address)":"54300d7a","epochUnstakesByDomain(address,uint256,address,address)":"65f1ea20","getAttestersByDomain(address)":"2924b73b","getCurrentEpoch(address)":"4d3223a5","getCurrentEpochStake(address,address,address)":"70224360","getCurrentEpochUnstake(address,address,address)":"7667b76d","getCustodiansByDomain(address)":"d5ca03de","getEpochByBlockTime(address)":"c3471ff8","getNextEpoch(address)":"8489e580","getNextEpochByBlockTime(address)":"2c7785a8","getRoleAdmin(bytes32)":"248a9ca3","getStakeAtEpoch(address,uint256,address,address)":"8d908258","getTotalStakeForCurrentEpoch(address,address)":"44198e4d","getTotalStakeForEpoch(address,uint256,address)":"5cdf3155","getUnstakeAtEpoch(address,uint256,address,address)":"879b938b","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize()":"8129fc1c","initialize(address)":"c4d66de8","proxiableUUID()":"52d1902d","registerDomain(uint256,address[])":"d37304f8","removeAddressFromWhitelist(address)":"286dd3f5","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","reward(address[],uint256[],address[])":"da33ee7f","rollOverEpoch()":"a887b71c","setGenesisCeremony(address[],address[],uint256[])":"ff62787c","slash(address[],address[],uint256[],uint256[])":"a885c975","stake(address,address,uint256)":"bf6eac2f","supportsInterface(bytes4)":"01ffc9a7","token()":"fc0c546a","unstake(address,address,uint256)":"60829f8a","upgradeToAndCall(address,bytes)":"4f1ef286","whitelistAddress(address)":"41566585"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodianTransferAmountMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GenesisAlreadyAccepted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakeExceedsGenesisStake\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unstake\",\"type\":\"uint256\"}],\"name\":\"AttesterEpochRolledOver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"name\":\"AttesterStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"name\":\"AttesterUnstaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"EpochRolledOver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WHITELIST_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"currentEpochByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentEpoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"domainGenesisAccepted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"epochDurationByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochDuration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"epochStakesByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"epochTotalStakeByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"epochUnstakesByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getAttestersByDomain\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getCurrentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getCurrentEpochStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getCurrentEpochUnstake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getCustodiansByDomain\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getEpochByBlockTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getNextEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getNextEpochByBlockTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStakeAtEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getTotalStakeForCurrentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getTotalStakeForEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getUnstakeAtEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epochDuration\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"}],\"name\":\"registerDomain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"removeAddressFromWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"}],\"name\":\"reward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollOverEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"stakes\",\"type\":\"uint256[]\"}],\"name\":\"setGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"refundAmounts\",\"type\":\"uint256[]\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"whitelistAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize()\":{\"details\":\"Initialize the contract\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/staking/MovementStaking.sol\":\"MovementStaking\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194\",\"dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"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/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040\",\"dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt\"]},\"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/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"]},\"src/staking/MovementStaking.sol\":{\"keccak256\":\"0xc8a4e4541fefdf79e699e0a0ab1de5cf5e247e1bcc5758dd03456f287a2f4806\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://2904e448c31814b10e9de4751d0efdfbd72f3fc7465944869933afe5c29a10b1\",\"dweb:/ipfs/QmZxXrs7AY2kCQVSB6em8osNZTYorwVX5dfcisUTYcqAkN\"]},\"src/staking/MovementStakingStorage.sol\":{\"keccak256\":\"0x9ca2df17c7dec2b75cc96453c60ef64a570ae1adf429d1a92e879127616af4af\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0d53c127b022fd35429ea183b0f1882bb03a62ed4e7e8e79f7058421fe49a947\",\"dweb:/ipfs/QmUMhEebucKiE2MedG9B18vcJMozwQ8yQFwV364Lnrjjej\"]},\"src/staking/base/BaseStaking.sol\":{\"keccak256\":\"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46\",\"dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx\"]},\"src/staking/interfaces/IMovementStaking.sol\":{\"keccak256\":\"0x23a7eca75e0fd004a60f17f88e0a0a011e135a3e666f5853276e3715f64a7f30\",\"urls\":[\"bzz-raw://43f792aa3c470a609ef6f7ab6578123453a4e205e0654dd2fa7d4a25356d76a0\",\"dweb:/ipfs/QmdGb1yzNehEUsWDyeA5BbtF9CJrbJzyng6CRhbBs3xsJ5\"]},\"src/token/base/BaseToken.sol\":{\"keccak256\":\"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e\",\"dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd\"]},\"src/token/base/MintableToken.sol\":{\"keccak256\":\"0x67dcaae55138dda0f6fb9cce7d00b21b1dcf48144d0442073bec83aedbd73ca6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009d22618ed30e84b0839edbe7bd1a18afe7073a62477667bf96d765428385b7\",\"dweb:/ipfs/QmNzA9RjM6SxVJYWohq7JbLvyBrhzzjzQQwBfArBQqCNAQ\"]},\"src/token/base/WrappedToken.sol\":{\"keccak256\":\"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885\",\"dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4\"]},\"src/token/base/WrappedTokenStorage.sol\":{\"keccak256\":\"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08\",\"dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj\"]},\"src/token/custodian/CustodianToken.sol\":{\"keccak256\":\"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04\",\"dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"CustodianTransferAmountMismatch"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[],"type":"error","name":"GenesisAlreadyAccepted"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"StakeExceedsGenesisStake"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"address","name":"attester","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false},{"internalType":"uint256","name":"unstake","type":"uint256","indexed":false}],"type":"event","name":"AttesterEpochRolledOver","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"address","name":"attester","type":"address","indexed":false},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false}],"type":"event","name":"AttesterStaked","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"address","name":"attester","type":"address","indexed":false},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false}],"type":"event","name":"AttesterUnstaked","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":false}],"type":"event","name":"EpochRolledOver","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"WHITELIST_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptGenesisCeremony"},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"currentEpochByDomain","outputs":[{"internalType":"uint256","name":"currentEpoch","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"domainGenesisAccepted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"epochDurationByDomain","outputs":[{"internalType":"uint256","name":"epochDuration","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"epochStakesByDomain","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"epochTotalStakeByDomain","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"epochUnstakesByDomain","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getAttestersByDomain","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getCurrentEpochStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getCurrentEpochUnstake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodiansByDomain","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getEpochByBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getNextEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getNextEpochByBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStakeAtEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getTotalStakeForCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getTotalStakeForEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getUnstakeAtEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epochDuration","type":"uint256"},{"internalType":"address[]","name":"custodians","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"registerDomain"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"removeAddressFromWhitelist"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address[]","name":"custodians","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"reward"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"rollOverEpoch"},{"inputs":[{"internalType":"address[]","name":"custodians","type":"address[]"},{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"stakes","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"setGenesisCeremony"},{"inputs":[{"internalType":"address[]","name":"custodians","type":"address[]"},{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"refundAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"slash"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"contract IERC20","name":"custodian","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"stake"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"unstake"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"whitelistAddress"}],"devdoc":{"kind":"dev","methods":{"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize()":{"details":"Initialize the contract"},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/staking/MovementStaking.sol":"MovementStaking"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/forge-std/src/console.sol":{"keccak256":"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a","urls":["bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194","dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"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/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53","urls":["bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930","dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f","urls":["bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040","dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt"],"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/introspection/ERC165Upgradeable.sol":{"keccak256":"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8","urls":["bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45","dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c","urls":["bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba","dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c","urls":["bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9","dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65","urls":["bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a","dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"],"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/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386","urls":["bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0","dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa","urls":["bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1","dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA"],"license":"MIT"},"src/staking/MovementStaking.sol":{"keccak256":"0xc8a4e4541fefdf79e699e0a0ab1de5cf5e247e1bcc5758dd03456f287a2f4806","urls":["bzz-raw://2904e448c31814b10e9de4751d0efdfbd72f3fc7465944869933afe5c29a10b1","dweb:/ipfs/QmZxXrs7AY2kCQVSB6em8osNZTYorwVX5dfcisUTYcqAkN"],"license":"UNLICENSED"},"src/staking/MovementStakingStorage.sol":{"keccak256":"0x9ca2df17c7dec2b75cc96453c60ef64a570ae1adf429d1a92e879127616af4af","urls":["bzz-raw://0d53c127b022fd35429ea183b0f1882bb03a62ed4e7e8e79f7058421fe49a947","dweb:/ipfs/QmUMhEebucKiE2MedG9B18vcJMozwQ8yQFwV364Lnrjjej"],"license":"UNLICENSED"},"src/staking/base/BaseStaking.sol":{"keccak256":"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393","urls":["bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46","dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx"],"license":"MIT"},"src/staking/interfaces/IMovementStaking.sol":{"keccak256":"0x23a7eca75e0fd004a60f17f88e0a0a011e135a3e666f5853276e3715f64a7f30","urls":["bzz-raw://43f792aa3c470a609ef6f7ab6578123453a4e205e0654dd2fa7d4a25356d76a0","dweb:/ipfs/QmdGb1yzNehEUsWDyeA5BbtF9CJrbJzyng6CRhbBs3xsJ5"],"license":null},"src/token/base/BaseToken.sol":{"keccak256":"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2","urls":["bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e","dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd"],"license":"MIT"},"src/token/base/MintableToken.sol":{"keccak256":"0x67dcaae55138dda0f6fb9cce7d00b21b1dcf48144d0442073bec83aedbd73ca6","urls":["bzz-raw://009d22618ed30e84b0839edbe7bd1a18afe7073a62477667bf96d765428385b7","dweb:/ipfs/QmNzA9RjM6SxVJYWohq7JbLvyBrhzzjzQQwBfArBQqCNAQ"],"license":"MIT"},"src/token/base/WrappedToken.sol":{"keccak256":"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45","urls":["bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885","dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4"],"license":"MIT"},"src/token/base/WrappedTokenStorage.sol":{"keccak256":"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e","urls":["bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08","dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj"],"license":"MIT"},"src/token/custodian/CustodianToken.sol":{"keccak256":"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350","urls":["bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04","dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":56292,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"token","offset":0,"slot":"0","type":"t_contract(IERC20)43663"},{"astId":56296,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochDurationByDomain","offset":0,"slot":"1","type":"t_mapping(t_address,t_uint256)"},{"astId":56300,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"currentEpochByDomain","offset":0,"slot":"2","type":"t_mapping(t_address,t_uint256)"},{"astId":56305,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"attestersByDomain","offset":0,"slot":"3","type":"t_mapping(t_address,t_struct(AddressSet)46651_storage)"},{"astId":56310,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"custodiansByDomain","offset":0,"slot":"4","type":"t_mapping(t_address,t_struct(AddressSet)46651_storage)"},{"astId":56320,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochStakesByDomain","offset":0,"slot":"5","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))"},{"astId":56330,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochUnstakesByDomain","offset":0,"slot":"6","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))"},{"astId":56338,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochTotalStakeByDomain","offset":0,"slot":"7","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_uint256)))"},{"astId":56342,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"domainGenesisAccepted","offset":0,"slot":"8","type":"t_mapping(t_address,t_bool)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_bytes32)dyn_storage":{"encoding":"dynamic_array","label":"bytes32[]","numberOfBytes":"32","base":"t_bytes32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IERC20)43663":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))"},"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_uint256)))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => mapping(address => uint256)))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},"t_mapping(t_address,t_struct(AddressSet)46651_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct EnumerableSet.AddressSet)","numberOfBytes":"32","value":"t_struct(AddressSet)46651_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => mapping(address => uint256)))","numberOfBytes":"32","value":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},"t_mapping(t_uint256,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_struct(AddressSet)46651_storage":{"encoding":"inplace","label":"struct EnumerableSet.AddressSet","numberOfBytes":"64","members":[{"astId":46650,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_inner","offset":0,"slot":"0","type":"t_struct(Set)46336_storage"}]},"t_struct(Set)46336_storage":{"encoding":"inplace","label":"struct EnumerableSet.Set","numberOfBytes":"64","members":[{"astId":46331,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_values","offset":0,"slot":"0","type":"t_array(t_bytes32)dyn_storage"},{"astId":46335,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_positions","offset":0,"slot":"1","type":"t_mapping(t_bytes32,t_uint256)"}]},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/staking/MovementStaking.sol","id":56273,"exportedSymbols":{"BaseStaking":[56403],"EnumerableSet":[46938],"ICustodianToken":[57304],"IERC20":[43663],"IMovementStaking":[56638],"Math":[46220],"MovementStaking":[56272],"MovementStakingStorage":[56348],"SafeERC20":[44015],"console":[24306]},"nodeType":"SourceUnit","src":"39:19749:108","nodes":[{"id":54871,"nodeType":"PragmaDirective","src":"39:24:108","nodes":[],"literals":["solidity","^","0.8",".13"]},{"id":54872,"nodeType":"ImportDirective","src":"64:31:108","nodes":[],"absolutePath":"lib/forge-std/src/console.sol","file":"forge-std/console.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":24307,"symbolAliases":[],"unitAlias":""},{"id":54874,"nodeType":"ImportDirective","src":"96:51:108","nodes":[],"absolutePath":"src/staking/base/BaseStaking.sol","file":"./base/BaseStaking.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":56404,"symbolAliases":[{"foreign":{"id":54873,"name":"BaseStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56403,"src":"104:11:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54876,"nodeType":"ImportDirective","src":"148:82:108","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":44016,"symbolAliases":[{"foreign":{"id":54875,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44015,"src":"156:9:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54878,"nodeType":"ImportDirective","src":"231:69:108","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol","file":"@openzeppelin/contracts/interfaces/IERC20.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":42721,"symbolAliases":[{"foreign":{"id":54877,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43663,"src":"239:6:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54880,"nodeType":"ImportDirective","src":"301:70:108","nodes":[],"absolutePath":"src/token/custodian/CustodianToken.sol","file":"../token/custodian/CustodianToken.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":57640,"symbolAliases":[{"foreign":{"id":54879,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57304,"src":"309:15:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54882,"nodeType":"ImportDirective","src":"372:65:108","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/math/Math.sol","file":"@openzeppelin/contracts/utils/math/Math.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":46221,"symbolAliases":[{"foreign":{"id":54881,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46220,"src":"380:4:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54885,"nodeType":"ImportDirective","src":"438:83:108","nodes":[],"absolutePath":"src/staking/MovementStakingStorage.sol","file":"./MovementStakingStorage.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":56349,"symbolAliases":[{"foreign":{"id":54883,"name":"MovementStakingStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56348,"src":"446:22:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":54884,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46938,"src":"470:13:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54887,"nodeType":"ImportDirective","src":"522:67:108","nodes":[],"absolutePath":"src/staking/interfaces/IMovementStaking.sol","file":"./interfaces/IMovementStaking.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":56639,"symbolAliases":[{"foreign":{"id":54886,"name":"IMovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56638,"src":"530:16:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":56272,"nodeType":"ContractDefinition","src":"591:19196:108","nodes":[{"id":54897,"nodeType":"UsingForDirective","src":"691:49:108","nodes":[],"global":false,"libraryName":{"id":54894,"name":"EnumerableSet","nameLocations":["697:13:108"],"nodeType":"IdentifierPath","referencedDeclaration":46938,"src":"697:13:108"},"typeName":{"id":54896,"nodeType":"UserDefinedTypeName","pathNode":{"id":54895,"name":"EnumerableSet.AddressSet","nameLocations":["715:13:108","729:10:108"],"nodeType":"IdentifierPath","referencedDeclaration":46651,"src":"715:24:108"},"referencedDeclaration":46651,"src":"715:24:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},{"id":54913,"nodeType":"FunctionDefinition","src":"746:125:108","nodes":[],"body":{"id":54912,"nodeType":"Block","src":"800:71:108","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":54905,"name":"__BaseStaking_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56391,"src":"810:28:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"810:30:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54907,"nodeType":"ExpressionStatement","src":"810:30:108"},{"expression":{"id":54910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54908,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"850:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54909,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54900,"src":"858:6:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"src":"850:14:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":54911,"nodeType":"ExpressionStatement","src":"850:14:108"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":54903,"kind":"modifierInvocation","modifierName":{"id":54902,"name":"initializer","nameLocations":["788:11:108"],"nodeType":"IdentifierPath","referencedDeclaration":39493,"src":"788:11:108"},"nodeType":"ModifierInvocation","src":"788:11:108"}],"name":"initialize","nameLocation":"755:10:108","parameters":{"id":54901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54900,"mutability":"mutable","name":"_token","nameLocation":"773:6:108","nodeType":"VariableDeclaration","scope":54913,"src":"766:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"},"typeName":{"id":54899,"nodeType":"UserDefinedTypeName","pathNode":{"id":54898,"name":"IERC20","nameLocations":["766:6:108"],"nodeType":"IdentifierPath","referencedDeclaration":43663,"src":"766:6:108"},"referencedDeclaration":43663,"src":"766:6:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"765:15:108"},"returnParameters":{"id":54904,"nodeType":"ParameterList","parameters":[],"src":"800:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54955,"nodeType":"FunctionDefinition","src":"877:336:108","nodes":[],"body":{"id":54954,"nodeType":"Block","src":"986:227:108","nodes":[],"statements":[{"assignments":[54922],"declarations":[{"constant":false,"id":54922,"mutability":"mutable","name":"domain","nameLocation":"1004:6:108","nodeType":"VariableDeclaration","scope":54954,"src":"996:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54921,"name":"address","nodeType":"ElementaryTypeName","src":"996:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54925,"initialValue":{"expression":{"id":54923,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1013:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1017:6:108","memberName":"sender","nodeType":"MemberAccess","src":"1013:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"996:27:108"},{"expression":{"id":54930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":54926,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56296,"src":"1033:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":54928,"indexExpression":{"id":54927,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54922,"src":"1055:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1033:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54929,"name":"epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54915,"src":"1065:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1033:45:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54931,"nodeType":"ExpressionStatement","src":"1033:45:108"},{"body":{"id":54952,"nodeType":"Block","src":"1137:70:108","statements":[{"expression":{"arguments":[{"baseExpression":{"id":54947,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54918,"src":"1182:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":54949,"indexExpression":{"id":54948,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54933,"src":"1193:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1182:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":54943,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"1151:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":54945,"indexExpression":{"id":54944,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54922,"src":"1170:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1151:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":54946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1178:3:108","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":46678,"src":"1151:30:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$46651_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":54950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1151:45:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54951,"nodeType":"ExpressionStatement","src":"1151:45:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54936,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54933,"src":"1109:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":54937,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54918,"src":"1113:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":54938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1124:6:108","memberName":"length","nodeType":"MemberAccess","src":"1113:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1109:21:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54953,"initializationExpression":{"assignments":[54933],"declarations":[{"constant":false,"id":54933,"mutability":"mutable","name":"i","nameLocation":"1102:1:108","nodeType":"VariableDeclaration","scope":54953,"src":"1094:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54932,"name":"uint256","nodeType":"ElementaryTypeName","src":"1094:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54935,"initialValue":{"hexValue":"30","id":54934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1106:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1094:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":54941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1132:3:108","subExpression":{"id":54940,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54933,"src":"1132:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54942,"nodeType":"ExpressionStatement","src":"1132:3:108"},"nodeType":"ForStatement","src":"1089:118:108"}]},"baseFunctions":[56415],"functionSelector":"d37304f8","implemented":true,"kind":"function","modifiers":[],"name":"registerDomain","nameLocation":"886:14:108","parameters":{"id":54919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54915,"mutability":"mutable","name":"epochDuration","nameLocation":"918:13:108","nodeType":"VariableDeclaration","scope":54955,"src":"910:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54914,"name":"uint256","nodeType":"ElementaryTypeName","src":"910:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54918,"mutability":"mutable","name":"custodians","nameLocation":"960:10:108","nodeType":"VariableDeclaration","scope":54955,"src":"941:29:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54916,"name":"address","nodeType":"ElementaryTypeName","src":"941:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54917,"nodeType":"ArrayTypeName","src":"941:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"900:76:108"},"returnParameters":{"id":54920,"nodeType":"ParameterList","parameters":[],"src":"986:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55008,"nodeType":"FunctionDefinition","src":"1219:522:108","nodes":[],"body":{"id":55007,"nodeType":"Block","src":"1319:422:108","nodes":[],"statements":[{"assignments":[54967],"declarations":[{"constant":false,"id":54967,"mutability":"mutable","name":"custodians","nameLocation":"1474:10:108","nodeType":"VariableDeclaration","scope":55007,"src":"1457:27:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54965,"name":"address","nodeType":"ElementaryTypeName","src":"1457:7:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54966,"nodeType":"ArrayTypeName","src":"1457:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":54977,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":54971,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"1514:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":54973,"indexExpression":{"id":54972,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54957,"src":"1533:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1514:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":54974,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1541:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"1514:33:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":54975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1514:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54970,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1487:13:108","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":54968,"name":"address","nodeType":"ElementaryTypeName","src":"1491:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54969,"nodeType":"ArrayTypeName","src":"1491:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":54976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1487:72:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1457:102:108"},{"body":{"id":55003,"nodeType":"Block","src":"1635:73:108","statements":[{"expression":{"id":55001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":54992,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54967,"src":"1649:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":54994,"indexExpression":{"id":54993,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54979,"src":"1660:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1649:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":54999,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54979,"src":"1695:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":54995,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"1665:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":54997,"indexExpression":{"id":54996,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54957,"src":"1684:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1665:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":54998,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1692:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"1665:29:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1665:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1649:48:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55002,"nodeType":"ExpressionStatement","src":"1649:48:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54982,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54979,"src":"1589:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":54983,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"1593:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":54985,"indexExpression":{"id":54984,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54957,"src":"1612:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1593:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":54986,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1620:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"1593:33:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":54987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1593:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1589:39:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55004,"initializationExpression":{"assignments":[54979],"declarations":[{"constant":false,"id":54979,"mutability":"mutable","name":"i","nameLocation":"1582:1:108","nodeType":"VariableDeclaration","scope":55004,"src":"1574:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54978,"name":"uint256","nodeType":"ElementaryTypeName","src":"1574:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54981,"initialValue":{"hexValue":"30","id":54980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1586:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1574:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":54990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1630:3:108","subExpression":{"id":54989,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54979,"src":"1630:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54991,"nodeType":"ExpressionStatement","src":"1630:3:108"},"nodeType":"ForStatement","src":"1569:139:108"},{"expression":{"id":55005,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54967,"src":"1724:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":54962,"id":55006,"nodeType":"Return","src":"1717:17:108"}]},"baseFunctions":[56553],"functionSelector":"d5ca03de","implemented":true,"kind":"function","modifiers":[],"name":"getCustodiansByDomain","nameLocation":"1228:21:108","parameters":{"id":54958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54957,"mutability":"mutable","name":"domain","nameLocation":"1267:6:108","nodeType":"VariableDeclaration","scope":55008,"src":"1259:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54956,"name":"address","nodeType":"ElementaryTypeName","src":"1259:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1249:30:108"},"returnParameters":{"id":54962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54961,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55008,"src":"1301:16:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54959,"name":"address","nodeType":"ElementaryTypeName","src":"1301:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54960,"nodeType":"ArrayTypeName","src":"1301:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1300:18:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55061,"nodeType":"FunctionDefinition","src":"1747:387:108","nodes":[],"body":{"id":55060,"nodeType":"Block","src":"1846:288:108","nodes":[],"statements":[{"assignments":[55020],"declarations":[{"constant":false,"id":55020,"mutability":"mutable","name":"attesters","nameLocation":"1873:9:108","nodeType":"VariableDeclaration","scope":55060,"src":"1856:26:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55018,"name":"address","nodeType":"ElementaryTypeName","src":"1856:7:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55019,"nodeType":"ArrayTypeName","src":"1856:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":55030,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55024,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"1912:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55026,"indexExpression":{"id":55025,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55010,"src":"1930:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1912:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55027,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1938:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"1912:32:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1912:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55023,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1885:13:108","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":55021,"name":"address","nodeType":"ElementaryTypeName","src":"1889:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55022,"nodeType":"ArrayTypeName","src":"1889:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":55029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1885:71:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1856:100:108"},{"body":{"id":55056,"nodeType":"Block","src":"2031:71:108","statements":[{"expression":{"id":55054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55045,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55020,"src":"2045:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":55047,"indexExpression":{"id":55046,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55032,"src":"2055:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2045:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55052,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55032,"src":"2089:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55048,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"2060:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55050,"indexExpression":{"id":55049,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55010,"src":"2078:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2060:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55051,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2086:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"2060:28:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2060:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2045:46:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55055,"nodeType":"ExpressionStatement","src":"2045:46:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55035,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55032,"src":"1986:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55036,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"1990:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55038,"indexExpression":{"id":55037,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55010,"src":"2008:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1990:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55039,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2016:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"1990:32:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1990:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1986:38:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55057,"initializationExpression":{"assignments":[55032],"declarations":[{"constant":false,"id":55032,"mutability":"mutable","name":"i","nameLocation":"1979:1:108","nodeType":"VariableDeclaration","scope":55057,"src":"1971:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55031,"name":"uint256","nodeType":"ElementaryTypeName","src":"1971:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55034,"initialValue":{"hexValue":"30","id":55033,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1983:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1971:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2026:3:108","subExpression":{"id":55042,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55032,"src":"2026:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55044,"nodeType":"ExpressionStatement","src":"2026:3:108"},"nodeType":"ForStatement","src":"1966:136:108"},{"expression":{"id":55058,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55020,"src":"2118:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":55015,"id":55059,"nodeType":"Return","src":"2111:16:108"}]},"baseFunctions":[56561],"functionSelector":"2924b73b","implemented":true,"kind":"function","modifiers":[],"name":"getAttestersByDomain","nameLocation":"1756:20:108","parameters":{"id":55011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55010,"mutability":"mutable","name":"domain","nameLocation":"1794:6:108","nodeType":"VariableDeclaration","scope":55061,"src":"1786:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55009,"name":"address","nodeType":"ElementaryTypeName","src":"1786:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1776:30:108"},"returnParameters":{"id":55015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55014,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55061,"src":"1828:16:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55012,"name":"address","nodeType":"ElementaryTypeName","src":"1828:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55013,"nodeType":"ArrayTypeName","src":"1828:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1827:18:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55160,"nodeType":"FunctionDefinition","src":"2140:1187:108","nodes":[],"body":{"id":55159,"nodeType":"Block","src":"2180:1147:108","nodes":[],"statements":[{"assignments":[55065],"declarations":[{"constant":false,"id":55065,"mutability":"mutable","name":"domain","nameLocation":"2198:6:108","nodeType":"VariableDeclaration","scope":55159,"src":"2190:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55064,"name":"address","nodeType":"ElementaryTypeName","src":"2190:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55068,"initialValue":{"expression":{"id":55066,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2207:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2211:6:108","memberName":"sender","nodeType":"MemberAccess","src":"2207:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2190:27:108"},{"condition":{"baseExpression":{"id":55069,"name":"domainGenesisAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56342,"src":"2231:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55071,"indexExpression":{"id":55070,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2253:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2231:29:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55075,"nodeType":"IfStatement","src":"2227:66:108","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":55072,"name":"GenesisAlreadyAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56637,"src":"2269:22:108","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":55073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2269:24:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":55074,"nodeType":"RevertStatement","src":"2262:31:108"}},{"expression":{"id":55080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55076,"name":"domainGenesisAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56342,"src":"2303:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55078,"indexExpression":{"id":55077,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2325:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2303:29:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":55079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2335:4:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2303:36:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55081,"nodeType":"ExpressionStatement","src":"2303:36:108"},{"expression":{"id":55088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55082,"name":"currentEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56300,"src":"2418:20:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55084,"indexExpression":{"id":55083,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2439:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2418:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55086,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2469:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55085,"name":"getEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"2449:19:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2449:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2418:58:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55089,"nodeType":"ExpressionStatement","src":"2418:58:108"},{"body":{"id":55157,"nodeType":"Block","src":"2552:769:108","statements":[{"assignments":[55105],"declarations":[{"constant":false,"id":55105,"mutability":"mutable","name":"attester","nameLocation":"2574:8:108","nodeType":"VariableDeclaration","scope":55157,"src":"2566:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55104,"name":"address","nodeType":"ElementaryTypeName","src":"2566:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55112,"initialValue":{"arguments":[{"id":55110,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55091,"src":"2614:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55106,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"2585:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55108,"indexExpression":{"id":55107,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2603:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2585:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55109,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2611:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"2585:28:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2585:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2566:50:108"},{"body":{"id":55155,"nodeType":"Block","src":"2697:614:108","statements":[{"assignments":[55128],"declarations":[{"constant":false,"id":55128,"mutability":"mutable","name":"custodian","nameLocation":"2723:9:108","nodeType":"VariableDeclaration","scope":55155,"src":"2715:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55127,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55135,"initialValue":{"arguments":[{"id":55133,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55114,"src":"2765:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55129,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"2735:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55131,"indexExpression":{"id":55130,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2754:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2735:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55132,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2762:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"2735:29:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2735:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2715:52:108"},{"assignments":[55137],"declarations":[{"constant":false,"id":55137,"mutability":"mutable","name":"attesterStake","nameLocation":"2852:13:108","nodeType":"VariableDeclaration","scope":55155,"src":"2844:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55136,"name":"uint256","nodeType":"ElementaryTypeName","src":"2844:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55144,"initialValue":{"arguments":[{"id":55139,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2905:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":55140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2933:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":55141,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55128,"src":"2956:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55142,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55105,"src":"2987:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55138,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"2868:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2868:145:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2844:169:108"},{"expression":{"arguments":[{"id":55146,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"3131:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55148,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"3175:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55147,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"3159:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3159:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55150,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55128,"src":"3204:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55151,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55105,"src":"3235:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55152,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55137,"src":"3265:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55145,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55320,"src":"3100:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3100:196:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55154,"nodeType":"ExpressionStatement","src":"3100:196:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55117,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55114,"src":"2651:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55118,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"2655:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55120,"indexExpression":{"id":55119,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2674:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2655:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2682:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"2655:33:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2655:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2651:39:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55156,"initializationExpression":{"assignments":[55114],"declarations":[{"constant":false,"id":55114,"mutability":"mutable","name":"j","nameLocation":"2644:1:108","nodeType":"VariableDeclaration","scope":55156,"src":"2636:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55113,"name":"uint256","nodeType":"ElementaryTypeName","src":"2636:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55116,"initialValue":{"hexValue":"30","id":55115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2648:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2636:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2692:3:108","subExpression":{"id":55124,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55114,"src":"2692:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55126,"nodeType":"ExpressionStatement","src":"2692:3:108"},"nodeType":"ForStatement","src":"2631:680:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55094,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55091,"src":"2507:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55095,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"2511:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55097,"indexExpression":{"id":55096,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2529:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2511:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2537:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"2511:32:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2511:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2507:38:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55158,"initializationExpression":{"assignments":[55091],"declarations":[{"constant":false,"id":55091,"mutability":"mutable","name":"i","nameLocation":"2500:1:108","nodeType":"VariableDeclaration","scope":55158,"src":"2492:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55090,"name":"uint256","nodeType":"ElementaryTypeName","src":"2492:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55093,"initialValue":{"hexValue":"30","id":55092,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2504:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2492:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2547:3:108","subExpression":{"id":55101,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55091,"src":"2547:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55103,"nodeType":"ExpressionStatement","src":"2547:3:108"},"nodeType":"ForStatement","src":"2487:834:108"}]},"baseFunctions":[56418],"functionSelector":"92a2ebf3","implemented":true,"kind":"function","modifiers":[],"name":"acceptGenesisCeremony","nameLocation":"2149:21:108","parameters":{"id":55062,"nodeType":"ParameterList","parameters":[],"src":"2170:2:108"},"returnParameters":{"id":55063,"nodeType":"ParameterList","parameters":[],"src":"2180:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":55284,"nodeType":"FunctionDefinition","src":"3333:1270:108","nodes":[],"body":{"id":55283,"nodeType":"Block","src":"3486:1117:108","nodes":[],"statements":[{"assignments":[55173],"declarations":[{"constant":false,"id":55173,"mutability":"mutable","name":"domain","nameLocation":"3504:6:108","nodeType":"VariableDeclaration","scope":55283,"src":"3496:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55172,"name":"address","nodeType":"ElementaryTypeName","src":"3496:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55176,"initialValue":{"expression":{"id":55174,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3513:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3517:6:108","memberName":"sender","nodeType":"MemberAccess","src":"3513:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3496:27:108"},{"expression":{"id":55183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55177,"name":"currentEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56300,"src":"3533:20:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55179,"indexExpression":{"id":55178,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"3554:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3533:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55181,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"3584:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55180,"name":"getEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"3564:19:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3564:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3533:58:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55184,"nodeType":"ExpressionStatement","src":"3533:58:108"},{"body":{"id":55281,"nodeType":"Block","src":"3649:948:108","statements":[{"assignments":[55197],"declarations":[{"constant":false,"id":55197,"mutability":"mutable","name":"custodian","nameLocation":"3671:9:108","nodeType":"VariableDeclaration","scope":55281,"src":"3663:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55196,"name":"address","nodeType":"ElementaryTypeName","src":"3663:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55201,"initialValue":{"baseExpression":{"id":55198,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55163,"src":"3683:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55200,"indexExpression":{"id":55199,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"3694:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3683:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3663:33:108"},{"assignments":[55203],"declarations":[{"constant":false,"id":55203,"mutability":"mutable","name":"attesterStake","nameLocation":"3773:13:108","nodeType":"VariableDeclaration","scope":55281,"src":"3765:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55202,"name":"uint256","nodeType":"ElementaryTypeName","src":"3765:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55212,"initialValue":{"arguments":[{"id":55205,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"3822:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":55206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3846:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":55207,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55197,"src":"3865:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":55208,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"3892:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55210,"indexExpression":{"id":55209,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"3902:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3892:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55204,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"3789:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3789:129:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3765:153:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55213,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55203,"src":"4010:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"id":55214,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55169,"src":"4026:6:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":55216,"indexExpression":{"id":55215,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4033:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4026:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4010:25:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55221,"nodeType":"IfStatement","src":"4006:64:108","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":55218,"name":"StakeExceedsGenesisStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56633,"src":"4044:24:108","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":55219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4044:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":55220,"nodeType":"RevertStatement","src":"4037:33:108"}},{"expression":{"arguments":[{"baseExpression":{"id":55226,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"4158:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55228,"indexExpression":{"id":55227,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4168:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4158:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":55222,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"4128:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55224,"indexExpression":{"id":55223,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"4146:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4128:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55225,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4154:3:108","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":46678,"src":"4128:29:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$46651_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":55229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4128:43:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55230,"nodeType":"ExpressionStatement","src":"4128:43:108"},{"expression":{"id":55247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55231,"name":"epochStakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56320,"src":"4185:19:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55240,"indexExpression":{"id":55232,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"4205:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4185:27:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55241,"indexExpression":{"arguments":[{"id":55234,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"4229:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55233,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"4213:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4213:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4185:52:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55242,"indexExpression":{"id":55236,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55197,"src":"4238:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4185:63:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55243,"indexExpression":{"baseExpression":{"id":55237,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"4266:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55239,"indexExpression":{"id":55238,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4276:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4266:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4185:107:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":55244,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55169,"src":"4295:6:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":55246,"indexExpression":{"id":55245,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4302:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4295:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4185:119:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55248,"nodeType":"ExpressionStatement","src":"4185:119:108"},{"expression":{"id":55259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55249,"name":"epochTotalStakeByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56338,"src":"4318:23:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":55253,"indexExpression":{"id":55250,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"4342:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4318:31:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":55254,"indexExpression":{"hexValue":"30","id":55251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4350:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4318:34:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55255,"indexExpression":{"id":55252,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55197,"src":"4353:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4318:45:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":55256,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55169,"src":"4367:6:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":55258,"indexExpression":{"id":55257,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4374:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4367:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4318:58:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55260,"nodeType":"ExpressionStatement","src":"4318:58:108"},{"assignments":[55262],"declarations":[{"constant":false,"id":55262,"mutability":"mutable","name":"refundAmount","nameLocation":"4466:12:108","nodeType":"VariableDeclaration","scope":55281,"src":"4458:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55261,"name":"uint256","nodeType":"ElementaryTypeName","src":"4458:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55268,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":55263,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55169,"src":"4481:6:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":55265,"indexExpression":{"id":55264,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4488:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4481:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":55266,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55203,"src":"4493:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4481:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4458:48:108"},{"expression":{"arguments":[{"arguments":[{"id":55272,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4541:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":55271,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4533:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55270,"name":"address","nodeType":"ElementaryTypeName","src":"4533:7:108","typeDescriptions":{}}},"id":55273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4533:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":55274,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"4548:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55276,"indexExpression":{"id":55275,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4558:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4548:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55277,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55197,"src":"4562:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55278,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55262,"src":"4573:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55269,"name":"_payAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56203,"src":"4520:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":55279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4520:66:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55280,"nodeType":"ExpressionStatement","src":"4520:66:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55189,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"3622:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55190,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"3626:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3636:6:108","memberName":"length","nodeType":"MemberAccess","src":"3626:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3622:20:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55282,"initializationExpression":{"assignments":[55186],"declarations":[{"constant":false,"id":55186,"mutability":"mutable","name":"i","nameLocation":"3615:1:108","nodeType":"VariableDeclaration","scope":55282,"src":"3607:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55185,"name":"uint256","nodeType":"ElementaryTypeName","src":"3607:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55188,"initialValue":{"hexValue":"30","id":55187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3619:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3607:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3644:3:108","subExpression":{"id":55193,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"3644:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55195,"nodeType":"ExpressionStatement","src":"3644:3:108"},"nodeType":"ForStatement","src":"3602:995:108"}]},"baseFunctions":[56430],"functionSelector":"ff62787c","implemented":true,"kind":"function","modifiers":[],"name":"setGenesisCeremony","nameLocation":"3342:18:108","parameters":{"id":55170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55163,"mutability":"mutable","name":"custodians","nameLocation":"3389:10:108","nodeType":"VariableDeclaration","scope":55284,"src":"3370:29:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55161,"name":"address","nodeType":"ElementaryTypeName","src":"3370:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55162,"nodeType":"ArrayTypeName","src":"3370:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":55166,"mutability":"mutable","name":"attesters","nameLocation":"3428:9:108","nodeType":"VariableDeclaration","scope":55284,"src":"3409:28:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55164,"name":"address","nodeType":"ElementaryTypeName","src":"3409:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55165,"nodeType":"ArrayTypeName","src":"3409:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":55169,"mutability":"mutable","name":"stakes","nameLocation":"3466:6:108","nodeType":"VariableDeclaration","scope":55284,"src":"3447:25:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":55167,"name":"uint256","nodeType":"ElementaryTypeName","src":"3447:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55168,"nodeType":"ArrayTypeName","src":"3447:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3360:118:108"},"returnParameters":{"id":55171,"nodeType":"ParameterList","parameters":[],"src":"3486:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":55320,"nodeType":"FunctionDefinition","src":"4609:309:108","nodes":[],"body":{"id":55319,"nodeType":"Block","src":"4767:151:108","nodes":[],"statements":[{"expression":{"id":55307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55297,"name":"epochStakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56320,"src":"4777:19:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55302,"indexExpression":{"id":55298,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55286,"src":"4797:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4777:27:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55303,"indexExpression":{"id":55299,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55288,"src":"4805:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4777:34:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55304,"indexExpression":{"id":55300,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55290,"src":"4812:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4777:45:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55305,"indexExpression":{"id":55301,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55292,"src":"4823:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4777:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":55306,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55294,"src":"4836:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4777:65:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55308,"nodeType":"ExpressionStatement","src":"4777:65:108"},{"expression":{"id":55317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55309,"name":"epochTotalStakeByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56338,"src":"4852:23:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":55313,"indexExpression":{"id":55310,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55286,"src":"4876:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4852:31:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":55314,"indexExpression":{"id":55311,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55288,"src":"4884:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4852:38:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55315,"indexExpression":{"id":55312,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55290,"src":"4891:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4852:49:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":55316,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55294,"src":"4905:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4852:59:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55318,"nodeType":"ExpressionStatement","src":"4852:59:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_addStake","nameLocation":"4618:9:108","parameters":{"id":55295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55286,"mutability":"mutable","name":"domain","nameLocation":"4645:6:108","nodeType":"VariableDeclaration","scope":55320,"src":"4637:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55285,"name":"address","nodeType":"ElementaryTypeName","src":"4637:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55288,"mutability":"mutable","name":"epoch","nameLocation":"4669:5:108","nodeType":"VariableDeclaration","scope":55320,"src":"4661:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55287,"name":"uint256","nodeType":"ElementaryTypeName","src":"4661:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55290,"mutability":"mutable","name":"custodian","nameLocation":"4692:9:108","nodeType":"VariableDeclaration","scope":55320,"src":"4684:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55289,"name":"address","nodeType":"ElementaryTypeName","src":"4684:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55292,"mutability":"mutable","name":"attester","nameLocation":"4719:8:108","nodeType":"VariableDeclaration","scope":55320,"src":"4711:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55291,"name":"address","nodeType":"ElementaryTypeName","src":"4711:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55294,"mutability":"mutable","name":"amount","nameLocation":"4745:6:108","nodeType":"VariableDeclaration","scope":55320,"src":"4737:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55293,"name":"uint256","nodeType":"ElementaryTypeName","src":"4737:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4627:130:108"},"returnParameters":{"id":55296,"nodeType":"ParameterList","parameters":[],"src":"4767:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55356,"nodeType":"FunctionDefinition","src":"4924:312:108","nodes":[],"body":{"id":55355,"nodeType":"Block","src":"5085:151:108","nodes":[],"statements":[{"expression":{"id":55343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55333,"name":"epochStakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56320,"src":"5095:19:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55338,"indexExpression":{"id":55334,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55322,"src":"5115:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5095:27:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55339,"indexExpression":{"id":55335,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55324,"src":"5123:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5095:34:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55340,"indexExpression":{"id":55336,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55326,"src":"5130:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5095:45:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55341,"indexExpression":{"id":55337,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55328,"src":"5141:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5095:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":55342,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55330,"src":"5154:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5095:65:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55344,"nodeType":"ExpressionStatement","src":"5095:65:108"},{"expression":{"id":55353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55345,"name":"epochTotalStakeByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56338,"src":"5170:23:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":55349,"indexExpression":{"id":55346,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55322,"src":"5194:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5170:31:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":55350,"indexExpression":{"id":55347,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55324,"src":"5202:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5170:38:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55351,"indexExpression":{"id":55348,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55326,"src":"5209:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5170:49:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":55352,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55330,"src":"5223:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5170:59:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55354,"nodeType":"ExpressionStatement","src":"5170:59:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeStake","nameLocation":"4933:12:108","parameters":{"id":55331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55322,"mutability":"mutable","name":"domain","nameLocation":"4963:6:108","nodeType":"VariableDeclaration","scope":55356,"src":"4955:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55321,"name":"address","nodeType":"ElementaryTypeName","src":"4955:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55324,"mutability":"mutable","name":"epoch","nameLocation":"4987:5:108","nodeType":"VariableDeclaration","scope":55356,"src":"4979:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55323,"name":"uint256","nodeType":"ElementaryTypeName","src":"4979:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55326,"mutability":"mutable","name":"custodian","nameLocation":"5010:9:108","nodeType":"VariableDeclaration","scope":55356,"src":"5002:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55325,"name":"address","nodeType":"ElementaryTypeName","src":"5002:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55328,"mutability":"mutable","name":"attester","nameLocation":"5037:8:108","nodeType":"VariableDeclaration","scope":55356,"src":"5029:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55327,"name":"address","nodeType":"ElementaryTypeName","src":"5029:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55330,"mutability":"mutable","name":"amount","nameLocation":"5063:6:108","nodeType":"VariableDeclaration","scope":55356,"src":"5055:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55329,"name":"uint256","nodeType":"ElementaryTypeName","src":"5055:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4945:130:108"},"returnParameters":{"id":55332,"nodeType":"ParameterList","parameters":[],"src":"5085:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55382,"nodeType":"FunctionDefinition","src":"5242:244:108","nodes":[],"body":{"id":55381,"nodeType":"Block","src":"5402:84:108","nodes":[],"statements":[{"expression":{"id":55379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55369,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56330,"src":"5412:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55374,"indexExpression":{"id":55370,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55358,"src":"5434:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5412:29:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55375,"indexExpression":{"id":55371,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55360,"src":"5442:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5412:36:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55376,"indexExpression":{"id":55372,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55362,"src":"5449:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5412:47:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55377,"indexExpression":{"id":55373,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55364,"src":"5460:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5412:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":55378,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55366,"src":"5473:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5412:67:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55380,"nodeType":"ExpressionStatement","src":"5412:67:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_addUnstake","nameLocation":"5251:11:108","parameters":{"id":55367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55358,"mutability":"mutable","name":"domain","nameLocation":"5280:6:108","nodeType":"VariableDeclaration","scope":55382,"src":"5272:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55357,"name":"address","nodeType":"ElementaryTypeName","src":"5272:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55360,"mutability":"mutable","name":"epoch","nameLocation":"5304:5:108","nodeType":"VariableDeclaration","scope":55382,"src":"5296:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55359,"name":"uint256","nodeType":"ElementaryTypeName","src":"5296:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55362,"mutability":"mutable","name":"custodian","nameLocation":"5327:9:108","nodeType":"VariableDeclaration","scope":55382,"src":"5319:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55361,"name":"address","nodeType":"ElementaryTypeName","src":"5319:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55364,"mutability":"mutable","name":"attester","nameLocation":"5354:8:108","nodeType":"VariableDeclaration","scope":55382,"src":"5346:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55363,"name":"address","nodeType":"ElementaryTypeName","src":"5346:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55366,"mutability":"mutable","name":"amount","nameLocation":"5380:6:108","nodeType":"VariableDeclaration","scope":55382,"src":"5372:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55365,"name":"uint256","nodeType":"ElementaryTypeName","src":"5372:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5262:130:108"},"returnParameters":{"id":55368,"nodeType":"ParameterList","parameters":[],"src":"5402:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55408,"nodeType":"FunctionDefinition","src":"5492:247:108","nodes":[],"body":{"id":55407,"nodeType":"Block","src":"5655:84:108","nodes":[],"statements":[{"expression":{"id":55405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55395,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56330,"src":"5665:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55400,"indexExpression":{"id":55396,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55384,"src":"5687:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5665:29:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55401,"indexExpression":{"id":55397,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55386,"src":"5695:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5665:36:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55402,"indexExpression":{"id":55398,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55388,"src":"5702:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5665:47:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55403,"indexExpression":{"id":55399,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55390,"src":"5713:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5665:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":55404,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55392,"src":"5726:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5665:67:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55406,"nodeType":"ExpressionStatement","src":"5665:67:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeUnstake","nameLocation":"5501:14:108","parameters":{"id":55393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55384,"mutability":"mutable","name":"domain","nameLocation":"5533:6:108","nodeType":"VariableDeclaration","scope":55408,"src":"5525:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55383,"name":"address","nodeType":"ElementaryTypeName","src":"5525:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55386,"mutability":"mutable","name":"epoch","nameLocation":"5557:5:108","nodeType":"VariableDeclaration","scope":55408,"src":"5549:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55385,"name":"uint256","nodeType":"ElementaryTypeName","src":"5549:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55388,"mutability":"mutable","name":"custodian","nameLocation":"5580:9:108","nodeType":"VariableDeclaration","scope":55408,"src":"5572:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55387,"name":"address","nodeType":"ElementaryTypeName","src":"5572:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55390,"mutability":"mutable","name":"attester","nameLocation":"5607:8:108","nodeType":"VariableDeclaration","scope":55408,"src":"5599:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55389,"name":"address","nodeType":"ElementaryTypeName","src":"5599:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55392,"mutability":"mutable","name":"amount","nameLocation":"5633:6:108","nodeType":"VariableDeclaration","scope":55408,"src":"5625:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55391,"name":"uint256","nodeType":"ElementaryTypeName","src":"5625:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5515:130:108"},"returnParameters":{"id":55394,"nodeType":"ParameterList","parameters":[],"src":"5655:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55434,"nodeType":"FunctionDefinition","src":"5745:243:108","nodes":[],"body":{"id":55433,"nodeType":"Block","src":"5905:83:108","nodes":[],"statements":[{"expression":{"id":55431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55421,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56330,"src":"5915:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55426,"indexExpression":{"id":55422,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55410,"src":"5937:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5915:29:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55427,"indexExpression":{"id":55423,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55412,"src":"5945:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5915:36:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55428,"indexExpression":{"id":55424,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55414,"src":"5952:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5915:47:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55429,"indexExpression":{"id":55425,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55416,"src":"5963:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5915:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55430,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55418,"src":"5975:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5915:66:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55432,"nodeType":"ExpressionStatement","src":"5915:66:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setUnstake","nameLocation":"5754:11:108","parameters":{"id":55419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55410,"mutability":"mutable","name":"domain","nameLocation":"5783:6:108","nodeType":"VariableDeclaration","scope":55434,"src":"5775:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55409,"name":"address","nodeType":"ElementaryTypeName","src":"5775:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55412,"mutability":"mutable","name":"epoch","nameLocation":"5807:5:108","nodeType":"VariableDeclaration","scope":55434,"src":"5799:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55411,"name":"uint256","nodeType":"ElementaryTypeName","src":"5799:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55414,"mutability":"mutable","name":"custodian","nameLocation":"5830:9:108","nodeType":"VariableDeclaration","scope":55434,"src":"5822:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55413,"name":"address","nodeType":"ElementaryTypeName","src":"5822:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55416,"mutability":"mutable","name":"attester","nameLocation":"5857:8:108","nodeType":"VariableDeclaration","scope":55434,"src":"5849:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55415,"name":"address","nodeType":"ElementaryTypeName","src":"5849:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55418,"mutability":"mutable","name":"amount","nameLocation":"5883:6:108","nodeType":"VariableDeclaration","scope":55434,"src":"5875:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55417,"name":"uint256","nodeType":"ElementaryTypeName","src":"5875:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5765:130:108"},"returnParameters":{"id":55420,"nodeType":"ParameterList","parameters":[],"src":"5905:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55449,"nodeType":"FunctionDefinition","src":"6052:146:108","nodes":[],"body":{"id":55448,"nodeType":"Block","src":"6127:71:108","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":55441,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"6144:5:108","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":55442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6150:9:108","memberName":"timestamp","nodeType":"MemberAccess","src":"6144:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"id":55443,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56296,"src":"6162:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55445,"indexExpression":{"id":55444,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55436,"src":"6184:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6162:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6144:47:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55440,"id":55447,"nodeType":"Return","src":"6137:54:108"}]},"baseFunctions":[56437],"functionSelector":"c3471ff8","implemented":true,"kind":"function","modifiers":[],"name":"getEpochByBlockTime","nameLocation":"6061:19:108","parameters":{"id":55437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55436,"mutability":"mutable","name":"domain","nameLocation":"6089:6:108","nodeType":"VariableDeclaration","scope":55449,"src":"6081:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55435,"name":"address","nodeType":"ElementaryTypeName","src":"6081:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6080:16:108"},"returnParameters":{"id":55440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55439,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55449,"src":"6118:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55438,"name":"uint256","nodeType":"ElementaryTypeName","src":"6118:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6117:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55461,"nodeType":"FunctionDefinition","src":"6272:123:108","nodes":[],"body":{"id":55460,"nodeType":"Block","src":"6343:52:108","nodes":[],"statements":[{"expression":{"baseExpression":{"id":55456,"name":"currentEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56300,"src":"6360:20:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55458,"indexExpression":{"id":55457,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55451,"src":"6381:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6360:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55455,"id":55459,"nodeType":"Return","src":"6353:35:108"}]},"baseFunctions":[56444],"functionSelector":"4d3223a5","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentEpoch","nameLocation":"6281:15:108","parameters":{"id":55452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55451,"mutability":"mutable","name":"domain","nameLocation":"6305:6:108","nodeType":"VariableDeclaration","scope":55461,"src":"6297:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55450,"name":"address","nodeType":"ElementaryTypeName","src":"6297:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6296:16:108"},"returnParameters":{"id":55455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55454,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55461,"src":"6334:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55453,"name":"uint256","nodeType":"ElementaryTypeName","src":"6334:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6333:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55482,"nodeType":"FunctionDefinition","src":"6428:154:108","nodes":[],"body":{"id":55481,"nodeType":"Block","src":"6496:86:108","nodes":[],"statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55469,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55463,"src":"6529:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55468,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"6513:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6513:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6540:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6513:28:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55475,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55463,"src":"6564:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55474,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"6548:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6548:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6574:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6548:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6513:62:108","trueExpression":{"hexValue":"30","id":55473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6544:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55467,"id":55480,"nodeType":"Return","src":"6506:69:108"}]},"baseFunctions":[56451],"functionSelector":"8489e580","implemented":true,"kind":"function","modifiers":[],"name":"getNextEpoch","nameLocation":"6437:12:108","parameters":{"id":55464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55463,"mutability":"mutable","name":"domain","nameLocation":"6458:6:108","nodeType":"VariableDeclaration","scope":55482,"src":"6450:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55462,"name":"address","nodeType":"ElementaryTypeName","src":"6450:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6449:16:108"},"returnParameters":{"id":55467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55482,"src":"6487:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55465,"name":"uint256","nodeType":"ElementaryTypeName","src":"6487:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6486:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55503,"nodeType":"FunctionDefinition","src":"6588:195:108","nodes":[],"body":{"id":55502,"nodeType":"Block","src":"6681:102:108","nodes":[],"statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55490,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55484,"src":"6726:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55489,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"6710:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6710:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6737:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6710:28:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55496,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55484,"src":"6765:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55495,"name":"getEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"6745:19:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6745:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6775:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6745:31:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6710:66:108","trueExpression":{"hexValue":"30","id":55494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6741:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55488,"id":55501,"nodeType":"Return","src":"6691:85:108"}]},"baseFunctions":[56458],"functionSelector":"2c7785a8","implemented":true,"kind":"function","modifiers":[],"name":"getNextEpochByBlockTime","nameLocation":"6597:23:108","parameters":{"id":55485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55484,"mutability":"mutable","name":"domain","nameLocation":"6638:6:108","nodeType":"VariableDeclaration","scope":55503,"src":"6630:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55483,"name":"address","nodeType":"ElementaryTypeName","src":"6630:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6620:30:108"},"returnParameters":{"id":55488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55487,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55503,"src":"6672:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55486,"name":"uint256","nodeType":"ElementaryTypeName","src":"6672:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6671:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55527,"nodeType":"FunctionDefinition","src":"6849:240:108","nodes":[],"body":{"id":55526,"nodeType":"Block","src":"7010:79:108","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55516,"name":"epochStakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56320,"src":"7027:19:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55518,"indexExpression":{"id":55517,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55505,"src":"7047:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7027:27:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55520,"indexExpression":{"id":55519,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55507,"src":"7055:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7027:34:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55522,"indexExpression":{"id":55521,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55509,"src":"7062:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7027:45:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55524,"indexExpression":{"id":55523,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55511,"src":"7073:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7027:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55515,"id":55525,"nodeType":"Return","src":"7020:62:108"}]},"baseFunctions":[56471],"functionSelector":"8d908258","implemented":true,"kind":"function","modifiers":[],"name":"getStakeAtEpoch","nameLocation":"6858:15:108","parameters":{"id":55512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55505,"mutability":"mutable","name":"domain","nameLocation":"6891:6:108","nodeType":"VariableDeclaration","scope":55527,"src":"6883:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55504,"name":"address","nodeType":"ElementaryTypeName","src":"6883:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55507,"mutability":"mutable","name":"epoch","nameLocation":"6915:5:108","nodeType":"VariableDeclaration","scope":55527,"src":"6907:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55506,"name":"uint256","nodeType":"ElementaryTypeName","src":"6907:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55509,"mutability":"mutable","name":"custodian","nameLocation":"6938:9:108","nodeType":"VariableDeclaration","scope":55527,"src":"6930:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55508,"name":"address","nodeType":"ElementaryTypeName","src":"6930:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55511,"mutability":"mutable","name":"attester","nameLocation":"6965:8:108","nodeType":"VariableDeclaration","scope":55527,"src":"6957:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55510,"name":"address","nodeType":"ElementaryTypeName","src":"6957:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6873:106:108"},"returnParameters":{"id":55515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55514,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55527,"src":"7001:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55513,"name":"uint256","nodeType":"ElementaryTypeName","src":"7001:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7000:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55548,"nodeType":"FunctionDefinition","src":"7159:326:108","nodes":[],"body":{"id":55547,"nodeType":"Block","src":"7302:183:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":55539,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55529,"src":"7364:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55541,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55529,"src":"7404:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55540,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"7388:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7388:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55543,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55531,"src":"7429:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55544,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55533,"src":"7456:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55538,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"7331:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7331:147:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55537,"id":55546,"nodeType":"Return","src":"7312:166:108"}]},"baseFunctions":[56482],"functionSelector":"70224360","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentEpochStake","nameLocation":"7168:20:108","parameters":{"id":55534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55529,"mutability":"mutable","name":"domain","nameLocation":"7206:6:108","nodeType":"VariableDeclaration","scope":55548,"src":"7198:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55528,"name":"address","nodeType":"ElementaryTypeName","src":"7198:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55531,"mutability":"mutable","name":"custodian","nameLocation":"7230:9:108","nodeType":"VariableDeclaration","scope":55548,"src":"7222:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55530,"name":"address","nodeType":"ElementaryTypeName","src":"7222:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55533,"mutability":"mutable","name":"attester","nameLocation":"7257:8:108","nodeType":"VariableDeclaration","scope":55548,"src":"7249:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55532,"name":"address","nodeType":"ElementaryTypeName","src":"7249:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7188:83:108"},"returnParameters":{"id":55537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55536,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55548,"src":"7293:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55535,"name":"uint256","nodeType":"ElementaryTypeName","src":"7293:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7292:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55572,"nodeType":"FunctionDefinition","src":"7553:244:108","nodes":[],"body":{"id":55571,"nodeType":"Block","src":"7716:81:108","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55561,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56330,"src":"7733:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55563,"indexExpression":{"id":55562,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55550,"src":"7755:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7733:29:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55565,"indexExpression":{"id":55564,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55552,"src":"7763:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7733:36:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55567,"indexExpression":{"id":55566,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55554,"src":"7770:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7733:47:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55569,"indexExpression":{"id":55568,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55556,"src":"7781:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7733:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55560,"id":55570,"nodeType":"Return","src":"7726:64:108"}]},"baseFunctions":[56495],"functionSelector":"879b938b","implemented":true,"kind":"function","modifiers":[],"name":"getUnstakeAtEpoch","nameLocation":"7562:17:108","parameters":{"id":55557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55550,"mutability":"mutable","name":"domain","nameLocation":"7597:6:108","nodeType":"VariableDeclaration","scope":55572,"src":"7589:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55549,"name":"address","nodeType":"ElementaryTypeName","src":"7589:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55552,"mutability":"mutable","name":"epoch","nameLocation":"7621:5:108","nodeType":"VariableDeclaration","scope":55572,"src":"7613:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55551,"name":"uint256","nodeType":"ElementaryTypeName","src":"7613:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55554,"mutability":"mutable","name":"custodian","nameLocation":"7644:9:108","nodeType":"VariableDeclaration","scope":55572,"src":"7636:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55553,"name":"address","nodeType":"ElementaryTypeName","src":"7636:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55556,"mutability":"mutable","name":"attester","nameLocation":"7671:8:108","nodeType":"VariableDeclaration","scope":55572,"src":"7663:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55555,"name":"address","nodeType":"ElementaryTypeName","src":"7663:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7579:106:108"},"returnParameters":{"id":55560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55559,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55572,"src":"7707:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55558,"name":"uint256","nodeType":"ElementaryTypeName","src":"7707:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7706:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55593,"nodeType":"FunctionDefinition","src":"7869:330:108","nodes":[],"body":{"id":55592,"nodeType":"Block","src":"8014:185:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":55584,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55574,"src":"8078:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55586,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55574,"src":"8118:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55585,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"8102:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8102:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55588,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55576,"src":"8143:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55589,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55578,"src":"8170:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55583,"name":"getUnstakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55572,"src":"8043:17:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8043:149:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55582,"id":55591,"nodeType":"Return","src":"8024:168:108"}]},"baseFunctions":[56506],"functionSelector":"7667b76d","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentEpochUnstake","nameLocation":"7878:22:108","parameters":{"id":55579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55574,"mutability":"mutable","name":"domain","nameLocation":"7918:6:108","nodeType":"VariableDeclaration","scope":55593,"src":"7910:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55573,"name":"address","nodeType":"ElementaryTypeName","src":"7910:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55576,"mutability":"mutable","name":"custodian","nameLocation":"7942:9:108","nodeType":"VariableDeclaration","scope":55593,"src":"7934:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55575,"name":"address","nodeType":"ElementaryTypeName","src":"7934:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55578,"mutability":"mutable","name":"attester","nameLocation":"7969:8:108","nodeType":"VariableDeclaration","scope":55593,"src":"7961:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55577,"name":"address","nodeType":"ElementaryTypeName","src":"7961:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7900:83:108"},"returnParameters":{"id":55582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55581,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55593,"src":"8005:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55580,"name":"uint256","nodeType":"ElementaryTypeName","src":"8005:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8004:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55613,"nodeType":"FunctionDefinition","src":"8251:214:108","nodes":[],"body":{"id":55612,"nodeType":"Block","src":"8392:73:108","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55604,"name":"epochTotalStakeByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56338,"src":"8409:23:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":55606,"indexExpression":{"id":55605,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55595,"src":"8433:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8409:31:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":55608,"indexExpression":{"id":55607,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55597,"src":"8441:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8409:38:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55610,"indexExpression":{"id":55609,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55599,"src":"8448:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8409:49:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55603,"id":55611,"nodeType":"Return","src":"8402:56:108"}]},"baseFunctions":[56517],"functionSelector":"5cdf3155","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStakeForEpoch","nameLocation":"8260:21:108","parameters":{"id":55600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55595,"mutability":"mutable","name":"domain","nameLocation":"8299:6:108","nodeType":"VariableDeclaration","scope":55613,"src":"8291:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55594,"name":"address","nodeType":"ElementaryTypeName","src":"8291:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55597,"mutability":"mutable","name":"epoch","nameLocation":"8323:5:108","nodeType":"VariableDeclaration","scope":55613,"src":"8315:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55596,"name":"uint256","nodeType":"ElementaryTypeName","src":"8315:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55599,"mutability":"mutable","name":"custodian","nameLocation":"8346:9:108","nodeType":"VariableDeclaration","scope":55613,"src":"8338:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55598,"name":"address","nodeType":"ElementaryTypeName","src":"8338:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8281:80:108"},"returnParameters":{"id":55603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55602,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55613,"src":"8383:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55601,"name":"uint256","nodeType":"ElementaryTypeName","src":"8383:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8382:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55631,"nodeType":"FunctionDefinition","src":"8521:226:108","nodes":[],"body":{"id":55630,"nodeType":"Block","src":"8646:101:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":55623,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55615,"src":"8697:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55625,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55615,"src":"8721:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55624,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"8705:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8705:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55627,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55617,"src":"8730:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55622,"name":"getTotalStakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55613,"src":"8675:21:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view returns (uint256)"}},"id":55628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8675:65:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55621,"id":55629,"nodeType":"Return","src":"8656:84:108"}]},"baseFunctions":[56526],"functionSelector":"44198e4d","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStakeForCurrentEpoch","nameLocation":"8530:28:108","parameters":{"id":55618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55615,"mutability":"mutable","name":"domain","nameLocation":"8576:6:108","nodeType":"VariableDeclaration","scope":55631,"src":"8568:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55614,"name":"address","nodeType":"ElementaryTypeName","src":"8568:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55617,"mutability":"mutable","name":"custodian","nameLocation":"8600:9:108","nodeType":"VariableDeclaration","scope":55631,"src":"8592:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55616,"name":"address","nodeType":"ElementaryTypeName","src":"8592:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8558:57:108"},"returnParameters":{"id":55621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55620,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55631,"src":"8637:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55619,"name":"uint256","nodeType":"ElementaryTypeName","src":"8637:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8636:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55718,"nodeType":"FunctionDefinition","src":"8786:1661:108","nodes":[],"body":{"id":55717,"nodeType":"Block","src":"8915:1532:108","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":55648,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9008:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9012:6:108","memberName":"sender","nodeType":"MemberAccess","src":"9008:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":55644,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"8978:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55646,"indexExpression":{"id":55645,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55633,"src":"8996:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8978:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55647,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9004:3:108","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":46678,"src":"8978:29:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$46651_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":55650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8978:41:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55651,"nodeType":"ExpressionStatement","src":"8978:41:108"},{"assignments":[55653],"declarations":[{"constant":false,"id":55653,"mutability":"mutable","name":"balanceBefore","nameLocation":"9391:13:108","nodeType":"VariableDeclaration","scope":55717,"src":"9383:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55652,"name":"uint256","nodeType":"ElementaryTypeName","src":"9383:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55661,"initialValue":{"arguments":[{"arguments":[{"id":55658,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9431:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":55657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9423:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55656,"name":"address","nodeType":"ElementaryTypeName","src":"9423:7:108","typeDescriptions":{}}},"id":55659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9423:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":55654,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"9407:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":55655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9413:9:108","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43620,"src":"9407:15:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":55660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9407:30:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9383:54:108"},{"expression":{"arguments":[{"expression":{"id":55665,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9741:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9745:6:108","memberName":"sender","nodeType":"MemberAccess","src":"9741:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55669,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9761:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":55668,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9753:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55667,"name":"address","nodeType":"ElementaryTypeName","src":"9753:7:108","typeDescriptions":{}}},"id":55670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9753:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55671,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55638,"src":"9768:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":55662,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55636,"src":"9718:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":55664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9728:12:108","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43662,"src":"9718:22:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":55672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9718:57:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55673,"nodeType":"ExpressionStatement","src":"9718:57:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":55678,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9898:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":55677,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9890:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55676,"name":"address","nodeType":"ElementaryTypeName","src":"9890:7:108","typeDescriptions":{}}},"id":55679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9890:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":55674,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"9874:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":55675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9880:9:108","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43620,"src":"9874:15:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":55680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9874:30:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55681,"name":"balanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55653,"src":"9908:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":55682,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55638,"src":"9924:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9908:22:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9874:56:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55688,"nodeType":"IfStatement","src":"9870:114:108","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":55685,"name":"CustodianTransferAmountMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56635,"src":"9951:31:108","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":55686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9951:33:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":55687,"nodeType":"RevertStatement","src":"9944:40:108"}},{"expression":{"arguments":[{"id":55690,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55633,"src":"10074:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55692,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55633,"src":"10118:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55691,"name":"getNextEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55503,"src":"10094:23:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10094:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":55696,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55636,"src":"10147:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":55695,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10139:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55694,"name":"address","nodeType":"ElementaryTypeName","src":"10139:7:108","typeDescriptions":{}}},"id":55697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10139:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55698,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10171:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10175:6:108","memberName":"sender","nodeType":"MemberAccess","src":"10171:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55700,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55638,"src":"10195:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55689,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55320,"src":"10051:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10051:160:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55702,"nodeType":"ExpressionStatement","src":"10051:160:108"},{"eventCall":{"arguments":[{"id":55704,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55633,"src":"10314:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55706,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55633,"src":"10347:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55705,"name":"getNextEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55482,"src":"10334:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10334:20:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":55710,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55636,"src":"10376:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":55709,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10368:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55708,"name":"address","nodeType":"ElementaryTypeName","src":"10368:7:108","typeDescriptions":{}}},"id":55711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10368:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55712,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10400:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10404:6:108","memberName":"sender","nodeType":"MemberAccess","src":"10400:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55714,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55638,"src":"10424:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55703,"name":"AttesterStaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56601,"src":"10286:14:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10286:154:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55716,"nodeType":"EmitStatement","src":"10281:159:108"}]},"baseFunctions":[56536],"functionSelector":"bf6eac2f","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":55641,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56347,"src":"8899:14:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":55642,"kind":"modifierInvocation","modifierName":{"id":55640,"name":"onlyRole","nameLocations":["8890:8:108"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"8890:8:108"},"nodeType":"ModifierInvocation","src":"8890:24:108"}],"name":"stake","nameLocation":"8795:5:108","parameters":{"id":55639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55633,"mutability":"mutable","name":"domain","nameLocation":"8818:6:108","nodeType":"VariableDeclaration","scope":55718,"src":"8810:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55632,"name":"address","nodeType":"ElementaryTypeName","src":"8810:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55636,"mutability":"mutable","name":"custodian","nameLocation":"8841:9:108","nodeType":"VariableDeclaration","scope":55718,"src":"8834:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"},"typeName":{"id":55635,"nodeType":"UserDefinedTypeName","pathNode":{"id":55634,"name":"IERC20","nameLocations":["8834:6:108"],"nodeType":"IdentifierPath","referencedDeclaration":43663,"src":"8834:6:108"},"referencedDeclaration":43663,"src":"8834:6:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":55638,"mutability":"mutable","name":"amount","nameLocation":"8868:6:108","nodeType":"VariableDeclaration","scope":55718,"src":"8860:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55637,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8800:80:108"},"returnParameters":{"id":55643,"nodeType":"ParameterList","parameters":[],"src":"8915:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55753,"nodeType":"FunctionDefinition","src":"10498:786:108","nodes":[],"body":{"id":55752,"nodeType":"Block","src":"10630:654:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":55731,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55720,"src":"10986:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55733,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55720,"src":"11030:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55732,"name":"getNextEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55503,"src":"11006:23:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11006:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55735,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55722,"src":"11051:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55736,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11074:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11078:6:108","memberName":"sender","nodeType":"MemberAccess","src":"11074:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55738,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55724,"src":"11098:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55730,"name":"_addUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55382,"src":"10961:11:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10961:153:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55740,"nodeType":"ExpressionStatement","src":"10961:153:108"},{"eventCall":{"arguments":[{"id":55742,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55720,"src":"11160:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55744,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55720,"src":"11193:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55743,"name":"getNextEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55482,"src":"11180:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11180:20:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55746,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55722,"src":"11214:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55747,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11237:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11241:6:108","memberName":"sender","nodeType":"MemberAccess","src":"11237:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55749,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55724,"src":"11261:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55741,"name":"AttesterUnstaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56613,"src":"11130:16:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11130:147:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55751,"nodeType":"EmitStatement","src":"11125:152:108"}]},"baseFunctions":[56545],"functionSelector":"60829f8a","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":55727,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56347,"src":"10614:14:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":55728,"kind":"modifierInvocation","modifierName":{"id":55726,"name":"onlyRole","nameLocations":["10605:8:108"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"10605:8:108"},"nodeType":"ModifierInvocation","src":"10605:24:108"}],"name":"unstake","nameLocation":"10507:7:108","parameters":{"id":55725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55720,"mutability":"mutable","name":"domain","nameLocation":"10532:6:108","nodeType":"VariableDeclaration","scope":55753,"src":"10524:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55719,"name":"address","nodeType":"ElementaryTypeName","src":"10524:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55722,"mutability":"mutable","name":"custodian","nameLocation":"10556:9:108","nodeType":"VariableDeclaration","scope":55753,"src":"10548:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55721,"name":"address","nodeType":"ElementaryTypeName","src":"10548:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55724,"mutability":"mutable","name":"amount","nameLocation":"10583:6:108","nodeType":"VariableDeclaration","scope":55753,"src":"10575:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55723,"name":"uint256","nodeType":"ElementaryTypeName","src":"10575:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10514:81:108"},"returnParameters":{"id":55729,"nodeType":"ParameterList","parameters":[],"src":"10630:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55828,"nodeType":"FunctionDefinition","src":"11351:1340:108","nodes":[],"body":{"id":55827,"nodeType":"Block","src":"11499:1192:108","nodes":[],"statements":[{"assignments":[55765],"declarations":[{"constant":false,"id":55765,"mutability":"mutable","name":"stakeAmount","nameLocation":"11604:11:108","nodeType":"VariableDeclaration","scope":55827,"src":"11596:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55764,"name":"uint256","nodeType":"ElementaryTypeName","src":"11596:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55772,"initialValue":{"arguments":[{"id":55767,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55755,"src":"11647:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55768,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55757,"src":"11667:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55769,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55759,"src":"11692:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55770,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55761,"src":"11715:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55766,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"11618:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11618:115:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11596:137:108"},{"assignments":[55774],"declarations":[{"constant":false,"id":55774,"mutability":"mutable","name":"unstakeAmount","nameLocation":"11751:13:108","nodeType":"VariableDeclaration","scope":55827,"src":"11743:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55773,"name":"uint256","nodeType":"ElementaryTypeName","src":"11743:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55783,"initialValue":{"arguments":[{"id":55776,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55755,"src":"11798:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55777,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55757,"src":"11818:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11832:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11818:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55780,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55759,"src":"11847:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55781,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55761,"src":"11870:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55775,"name":"getUnstakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55572,"src":"11767:17:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11767:121:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11743:145:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55784,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55774,"src":"11902:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":55785,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55765,"src":"11918:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11902:27:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55792,"nodeType":"IfStatement","src":"11898:85:108","trueBody":{"id":55791,"nodeType":"Block","src":"11931:52:108","statements":[{"expression":{"id":55789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55787,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55774,"src":"11945:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55788,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55765,"src":"11961:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11945:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55790,"nodeType":"ExpressionStatement","src":"11945:27:108"}]}},{"assignments":[55794],"declarations":[{"constant":false,"id":55794,"mutability":"mutable","name":"remainder","nameLocation":"12000:9:108","nodeType":"VariableDeclaration","scope":55827,"src":"11992:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55793,"name":"uint256","nodeType":"ElementaryTypeName","src":"11992:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55798,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55795,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55765,"src":"12012:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":55796,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55774,"src":"12026:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12012:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11992:47:108"},{"expression":{"arguments":[{"id":55800,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55755,"src":"12060:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55801,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55757,"src":"12068:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12082:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12068:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55804,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55759,"src":"12085:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55805,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55761,"src":"12096:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55806,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55794,"src":"12106:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55799,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55320,"src":"12050:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12050:66:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55808,"nodeType":"ExpressionStatement","src":"12050:66:108"},{"expression":{"arguments":[{"arguments":[{"id":55812,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12471:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":55811,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12463:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55810,"name":"address","nodeType":"ElementaryTypeName","src":"12463:7:108","typeDescriptions":{}}},"id":55813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12463:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55814,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55761,"src":"12478:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55815,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55759,"src":"12488:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55816,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55774,"src":"12499:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55809,"name":"_payAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56203,"src":"12450:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":55817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12450:63:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55818,"nodeType":"ExpressionStatement","src":"12450:63:108"},{"eventCall":{"arguments":[{"id":55820,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55761,"src":"12566:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55821,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55757,"src":"12588:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55822,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55759,"src":"12613:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55823,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55765,"src":"12636:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55824,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55774,"src":"12661:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55819,"name":"AttesterEpochRolledOver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56625,"src":"12529:23:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,uint256,uint256)"}},"id":55825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12529:155:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55826,"nodeType":"EmitStatement","src":"12524:160:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_rollOverAttester","nameLocation":"11360:17:108","parameters":{"id":55762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55755,"mutability":"mutable","name":"domain","nameLocation":"11395:6:108","nodeType":"VariableDeclaration","scope":55828,"src":"11387:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55754,"name":"address","nodeType":"ElementaryTypeName","src":"11387:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55757,"mutability":"mutable","name":"epochNumber","nameLocation":"11419:11:108","nodeType":"VariableDeclaration","scope":55828,"src":"11411:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55756,"name":"uint256","nodeType":"ElementaryTypeName","src":"11411:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55759,"mutability":"mutable","name":"custodian","nameLocation":"11448:9:108","nodeType":"VariableDeclaration","scope":55828,"src":"11440:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55758,"name":"address","nodeType":"ElementaryTypeName","src":"11440:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55761,"mutability":"mutable","name":"attester","nameLocation":"11475:8:108","nodeType":"VariableDeclaration","scope":55828,"src":"11467:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55760,"name":"address","nodeType":"ElementaryTypeName","src":"11467:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11377:112:108"},"returnParameters":{"id":55763,"nodeType":"ParameterList","parameters":[],"src":"11499:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55906,"nodeType":"FunctionDefinition","src":"12697:761:108","nodes":[],"body":{"id":55905,"nodeType":"Block","src":"12767:691:108","nodes":[],"statements":[{"body":{"id":55890,"nodeType":"Block","src":"12986:318:108","statements":[{"assignments":[55850],"declarations":[{"constant":false,"id":55850,"mutability":"mutable","name":"attester","nameLocation":"13008:8:108","nodeType":"VariableDeclaration","scope":55890,"src":"13000:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55849,"name":"address","nodeType":"ElementaryTypeName","src":"13000:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55857,"initialValue":{"arguments":[{"id":55855,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55836,"src":"13048:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55851,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"13019:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55853,"indexExpression":{"id":55852,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13037:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13019:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55854,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13045:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"13019:28:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13019:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"13000:50:108"},{"body":{"id":55888,"nodeType":"Block","src":"13131:163:108","statements":[{"assignments":[55873],"declarations":[{"constant":false,"id":55873,"mutability":"mutable","name":"custodian","nameLocation":"13157:9:108","nodeType":"VariableDeclaration","scope":55888,"src":"13149:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55872,"name":"address","nodeType":"ElementaryTypeName","src":"13149:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55880,"initialValue":{"arguments":[{"id":55878,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55859,"src":"13199:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55874,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"13169:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55876,"indexExpression":{"id":55875,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13188:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13169:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55877,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13196:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"13169:29:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13169:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"13149:52:108"},{"expression":{"arguments":[{"id":55882,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13238:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55883,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55832,"src":"13246:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55884,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55873,"src":"13259:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55885,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55850,"src":"13270:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55881,"name":"_rollOverAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55828,"src":"13220:17:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,uint256,address,address)"}},"id":55886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13220:59:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55887,"nodeType":"ExpressionStatement","src":"13220:59:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55862,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55859,"src":"13085:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55863,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"13089:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55865,"indexExpression":{"id":55864,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13108:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13089:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13116:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"13089:33:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13089:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13085:39:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55889,"initializationExpression":{"assignments":[55859],"declarations":[{"constant":false,"id":55859,"mutability":"mutable","name":"j","nameLocation":"13078:1:108","nodeType":"VariableDeclaration","scope":55889,"src":"13070:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55858,"name":"uint256","nodeType":"ElementaryTypeName","src":"13070:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55861,"initialValue":{"hexValue":"30","id":55860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13082:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13070:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13126:3:108","subExpression":{"id":55869,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55859,"src":"13126:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55871,"nodeType":"ExpressionStatement","src":"13126:3:108"},"nodeType":"ForStatement","src":"13065:229:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55839,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55836,"src":"12941:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55840,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"12945:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55842,"indexExpression":{"id":55841,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"12963:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12945:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55843,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12971:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"12945:32:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12945:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12941:38:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55891,"initializationExpression":{"assignments":[55836],"declarations":[{"constant":false,"id":55836,"mutability":"mutable","name":"i","nameLocation":"12934:1:108","nodeType":"VariableDeclaration","scope":55891,"src":"12926:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55835,"name":"uint256","nodeType":"ElementaryTypeName","src":"12926:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55838,"initialValue":{"hexValue":"30","id":55837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12938:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12926:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12981:3:108","subExpression":{"id":55846,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55836,"src":"12981:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55848,"nodeType":"ExpressionStatement","src":"12981:3:108"},"nodeType":"ForStatement","src":"12921:383:108"},{"expression":{"id":55898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55892,"name":"currentEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56300,"src":"13353:20:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55894,"indexExpression":{"id":55893,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13374:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13353:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55895,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55832,"src":"13384:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13398:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13384:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13353:46:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55899,"nodeType":"ExpressionStatement","src":"13353:46:108"},{"eventCall":{"arguments":[{"id":55901,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13431:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55902,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55832,"src":"13439:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55900,"name":"EpochRolledOver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56631,"src":"13415:15:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":55903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13415:36:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55904,"nodeType":"EmitStatement","src":"13410:41:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_rollOverEpoch","nameLocation":"12706:14:108","parameters":{"id":55833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55830,"mutability":"mutable","name":"domain","nameLocation":"12729:6:108","nodeType":"VariableDeclaration","scope":55906,"src":"12721:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55829,"name":"address","nodeType":"ElementaryTypeName","src":"12721:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55832,"mutability":"mutable","name":"epochNumber","nameLocation":"12745:11:108","nodeType":"VariableDeclaration","scope":55906,"src":"12737:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55831,"name":"uint256","nodeType":"ElementaryTypeName","src":"12737:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12720:37:108"},"returnParameters":{"id":55834,"nodeType":"ParameterList","parameters":[],"src":"12767:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55919,"nodeType":"FunctionDefinition","src":"13464:106:108","nodes":[],"body":{"id":55918,"nodeType":"Block","src":"13498:72:108","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":55910,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13523:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13527:6:108","memberName":"sender","nodeType":"MemberAccess","src":"13523:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":55913,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13551:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13555:6:108","memberName":"sender","nodeType":"MemberAccess","src":"13551:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55912,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"13535:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13535:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55909,"name":"_rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55906,"src":"13508:14:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":55916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13508:55:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55917,"nodeType":"ExpressionStatement","src":"13508:55:108"}]},"baseFunctions":[56564],"functionSelector":"a887b71c","implemented":true,"kind":"function","modifiers":[],"name":"rollOverEpoch","nameLocation":"13473:13:108","parameters":{"id":55907,"nodeType":"ParameterList","parameters":[],"src":"13486:2:108"},"returnParameters":{"id":55908,"nodeType":"ParameterList","parameters":[],"src":"13498:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55969,"nodeType":"FunctionDefinition","src":"13877:803:108","nodes":[],"body":{"id":55968,"nodeType":"Block","src":"14037:643:108","nodes":[],"statements":[{"assignments":[55934],"declarations":[{"constant":false,"id":55934,"mutability":"mutable","name":"targetEpoch","nameLocation":"14108:11:108","nodeType":"VariableDeclaration","scope":55968,"src":"14100:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55933,"name":"uint256","nodeType":"ElementaryTypeName","src":"14100:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55936,"initialValue":{"id":55935,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55924,"src":"14122:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14100:27:108"},{"assignments":[55938],"declarations":[{"constant":false,"id":55938,"mutability":"mutable","name":"stakeForEpoch","nameLocation":"14145:13:108","nodeType":"VariableDeclaration","scope":55968,"src":"14137:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55937,"name":"uint256","nodeType":"ElementaryTypeName","src":"14137:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55945,"initialValue":{"arguments":[{"id":55940,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55922,"src":"14190:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55941,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55934,"src":"14210:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55942,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55926,"src":"14235:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55943,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55928,"src":"14258:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55939,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"14161:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14161:115:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14137:139:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55946,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55938,"src":"14369:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":55947,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"14385:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14369:22:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":55966,"nodeType":"Block","src":"14587:87:108","statements":[{"expression":{"arguments":[{"id":55959,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55922,"src":"14614:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55960,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55934,"src":"14622:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55961,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55926,"src":"14635:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55962,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55928,"src":"14646:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55963,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"14656:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55958,"name":"_removeStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55356,"src":"14601:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14601:62:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55965,"nodeType":"ExpressionStatement","src":"14601:62:108"}]},"id":55967,"nodeType":"IfStatement","src":"14365:309:108","trueBody":{"id":55957,"nodeType":"Block","src":"14393:188:108","statements":[{"expression":{"arguments":[{"id":55950,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55922,"src":"14437:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55951,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55934,"src":"14461:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55952,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55926,"src":"14490:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55953,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55928,"src":"14517:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55954,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55938,"src":"14543:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55949,"name":"_removeStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55356,"src":"14407:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14407:163:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55956,"nodeType":"ExpressionStatement","src":"14407:163:108"}]}}]},"documentation":{"id":55920,"nodeType":"StructuredDocumentation","src":"13576:296:108","text":" @dev Slash an attester's stake\n @param domain The domain of the attester\n @param epoch The epoch in which the slash is attempted\n @param custodian The custodian of the token\n @param attester The attester to slash\n @param amount The amount to slash"},"implemented":true,"kind":"function","modifiers":[],"name":"_slashStake","nameLocation":"13886:11:108","parameters":{"id":55931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55922,"mutability":"mutable","name":"domain","nameLocation":"13915:6:108","nodeType":"VariableDeclaration","scope":55969,"src":"13907:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55921,"name":"address","nodeType":"ElementaryTypeName","src":"13907:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55924,"mutability":"mutable","name":"epoch","nameLocation":"13939:5:108","nodeType":"VariableDeclaration","scope":55969,"src":"13931:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55923,"name":"uint256","nodeType":"ElementaryTypeName","src":"13931:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55926,"mutability":"mutable","name":"custodian","nameLocation":"13962:9:108","nodeType":"VariableDeclaration","scope":55969,"src":"13954:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55925,"name":"address","nodeType":"ElementaryTypeName","src":"13954:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55928,"mutability":"mutable","name":"attester","nameLocation":"13989:8:108","nodeType":"VariableDeclaration","scope":55969,"src":"13981:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55927,"name":"address","nodeType":"ElementaryTypeName","src":"13981:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55930,"mutability":"mutable","name":"amount","nameLocation":"14015:6:108","nodeType":"VariableDeclaration","scope":55969,"src":"14007:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55929,"name":"uint256","nodeType":"ElementaryTypeName","src":"14007:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13897:130:108"},"returnParameters":{"id":55932,"nodeType":"ParameterList","parameters":[],"src":"14037:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":56019,"nodeType":"FunctionDefinition","src":"15012:902:108","nodes":[],"body":{"id":56018,"nodeType":"Block","src":"15150:764:108","nodes":[],"statements":[{"assignments":[55982],"declarations":[{"constant":false,"id":55982,"mutability":"mutable","name":"stakeForEpoch","nameLocation":"15227:13:108","nodeType":"VariableDeclaration","scope":56018,"src":"15219:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55981,"name":"uint256","nodeType":"ElementaryTypeName","src":"15219:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55989,"initialValue":{"arguments":[{"id":55984,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55972,"src":"15272:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55985,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55974,"src":"15292:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55986,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55976,"src":"15311:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55987,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55978,"src":"15334:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55983,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"15243:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15243:109:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15219:133:108"},{"assignments":[55991],"declarations":[{"constant":false,"id":55991,"mutability":"mutable","name":"targetEpoch","nameLocation":"15370:11:108","nodeType":"VariableDeclaration","scope":56018,"src":"15362:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55990,"name":"uint256","nodeType":"ElementaryTypeName","src":"15362:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55995,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55992,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55974,"src":"15384:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15392:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15384:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15362:31:108"},{"assignments":[55997],"declarations":[{"constant":false,"id":55997,"mutability":"mutable","name":"unstakeForEpoch","nameLocation":"15411:15:108","nodeType":"VariableDeclaration","scope":56018,"src":"15403:23:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55996,"name":"uint256","nodeType":"ElementaryTypeName","src":"15403:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56004,"initialValue":{"arguments":[{"id":55999,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55972,"src":"15460:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56000,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55991,"src":"15480:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56001,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55976,"src":"15505:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56002,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55978,"src":"15528:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55998,"name":"getUnstakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55572,"src":"15429:17:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":56003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15429:117:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15403:143:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56005,"name":"unstakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55997,"src":"15561:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":56006,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"15579:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15561:31:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56017,"nodeType":"IfStatement","src":"15557:351:108","trueBody":{"id":56016,"nodeType":"Block","src":"15594:314:108","statements":[{"expression":{"arguments":[{"id":56009,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55972,"src":"15764:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56010,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55991,"src":"15788:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56011,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55976,"src":"15817:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56012,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55978,"src":"15844:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56013,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"15870:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56008,"name":"_setUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55434,"src":"15735:11:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":56014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15735:162:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56015,"nodeType":"ExpressionStatement","src":"15735:162:108"}]}}]},"documentation":{"id":55970,"nodeType":"StructuredDocumentation","src":"14686:321:108","text":" @dev Slash an attester's unstake\n @param domain The domain of the attester\n @param epoch The epoch in which the slash is attempted, i.e., epoch - 1 of the epoch where the unstake will be removed\n @param custodian The custodian of the token\n @param attester The attester to slash"},"implemented":true,"kind":"function","modifiers":[],"name":"_slashUnstake","nameLocation":"15021:13:108","parameters":{"id":55979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55972,"mutability":"mutable","name":"domain","nameLocation":"15052:6:108","nodeType":"VariableDeclaration","scope":56019,"src":"15044:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55971,"name":"address","nodeType":"ElementaryTypeName","src":"15044:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55974,"mutability":"mutable","name":"epoch","nameLocation":"15076:5:108","nodeType":"VariableDeclaration","scope":56019,"src":"15068:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55973,"name":"uint256","nodeType":"ElementaryTypeName","src":"15068:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55976,"mutability":"mutable","name":"custodian","nameLocation":"15099:9:108","nodeType":"VariableDeclaration","scope":56019,"src":"15091:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55975,"name":"address","nodeType":"ElementaryTypeName","src":"15091:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55978,"mutability":"mutable","name":"attester","nameLocation":"15126:8:108","nodeType":"VariableDeclaration","scope":56019,"src":"15118:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55977,"name":"address","nodeType":"ElementaryTypeName","src":"15118:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15034:106:108"},"returnParameters":{"id":55980,"nodeType":"ParameterList","parameters":[],"src":"15150:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":56125,"nodeType":"FunctionDefinition","src":"15920:1564:108","nodes":[],"body":{"id":56124,"nodeType":"Block","src":"16103:1381:108","nodes":[],"statements":[{"body":{"id":56122,"nodeType":"Block","src":"16160:1318:108","statements":[{"assignments":[56046],"declarations":[{"constant":false,"id":56046,"mutability":"mutable","name":"refundAmount","nameLocation":"16409:12:108","nodeType":"VariableDeclaration","scope":56122,"src":"16401:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56045,"name":"uint256","nodeType":"ElementaryTypeName","src":"16401:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56074,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":56050,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16487:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16491:6:108","memberName":"sender","nodeType":"MemberAccess","src":"16487:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":56053,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"16535:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56055,"indexExpression":{"id":56054,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16545:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16535:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56052,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"16519:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":56056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16519:29:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56057,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56022,"src":"16570:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56059,"indexExpression":{"id":56058,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16581:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16570:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56060,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"16605:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56062,"indexExpression":{"id":56061,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16615:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16605:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56049,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"16450:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":56063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16450:185:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"baseExpression":{"id":56066,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56028,"src":"16662:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56068,"indexExpression":{"id":56067,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16670:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16662:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56069,"name":"refundAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56031,"src":"16674:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56071,"indexExpression":{"id":56070,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16688:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16674:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56064,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46220,"src":"16653:4:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$46220_$","typeString":"type(library Math)"}},"id":56065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16658:3:108","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":45371,"src":"16653:8:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":56072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16653:38:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56047,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46220,"src":"16424:4:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$46220_$","typeString":"type(library Math)"}},"id":56048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16429:3:108","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":45371,"src":"16424:8:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":56073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16424:281:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16401:304:108"},{"expression":{"arguments":[{"arguments":[{"id":56078,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16757:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":56077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16749:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56076,"name":"address","nodeType":"ElementaryTypeName","src":"16749:7:108","typeDescriptions":{}}},"id":56079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16749:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56080,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"16858:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56082,"indexExpression":{"id":56081,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16868:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16858:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56083,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56022,"src":"16888:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56085,"indexExpression":{"id":56084,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16899:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16888:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56086,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56046,"src":"16919:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56075,"name":"_payAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56203,"src":"16719:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":56087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16719:226:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56088,"nodeType":"ExpressionStatement","src":"16719:226:108"},{"expression":{"arguments":[{"expression":{"id":56090,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17133:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17137:6:108","memberName":"sender","nodeType":"MemberAccess","src":"17133:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":56093,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17177:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17181:6:108","memberName":"sender","nodeType":"MemberAccess","src":"17177:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56092,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"17161:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":56095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17161:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56096,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56022,"src":"17206:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56098,"indexExpression":{"id":56097,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"17217:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17206:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56099,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"17237:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56101,"indexExpression":{"id":56100,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"17247:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17237:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56102,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56028,"src":"17267:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56104,"indexExpression":{"id":56103,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"17275:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17267:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56089,"name":"_slashStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55969,"src":"17104:11:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":56105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17104:187:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56106,"nodeType":"ExpressionStatement","src":"17104:187:108"},{"expression":{"arguments":[{"expression":{"id":56108,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17337:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17341:6:108","memberName":"sender","nodeType":"MemberAccess","src":"17337:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":56111,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17381:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17385:6:108","memberName":"sender","nodeType":"MemberAccess","src":"17381:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56110,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"17365:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":56113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17365:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56114,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56022,"src":"17410:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56116,"indexExpression":{"id":56115,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"17421:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17410:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56117,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"17441:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56119,"indexExpression":{"id":56118,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"17451:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17441:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56107,"name":"_slashUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56019,"src":"17306:13:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,uint256,address,address)"}},"id":56120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17306:161:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56121,"nodeType":"ExpressionStatement","src":"17306:161:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56038,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16133:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":56039,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"16137:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16147:6:108","memberName":"length","nodeType":"MemberAccess","src":"16137:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16133:20:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56123,"initializationExpression":{"assignments":[56035],"declarations":[{"constant":false,"id":56035,"mutability":"mutable","name":"i","nameLocation":"16126:1:108","nodeType":"VariableDeclaration","scope":56123,"src":"16118:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56034,"name":"uint256","nodeType":"ElementaryTypeName","src":"16118:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56037,"initialValue":{"hexValue":"30","id":56036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16130:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16118:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":56043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16155:3:108","subExpression":{"id":56042,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16155:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56044,"nodeType":"ExpressionStatement","src":"16155:3:108"},"nodeType":"ForStatement","src":"16113:1365:108"}]},"baseFunctions":[56579],"functionSelector":"a885c975","implemented":true,"kind":"function","modifiers":[],"name":"slash","nameLocation":"15929:5:108","parameters":{"id":56032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56022,"mutability":"mutable","name":"custodians","nameLocation":"15963:10:108","nodeType":"VariableDeclaration","scope":56125,"src":"15944:29:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56020,"name":"address","nodeType":"ElementaryTypeName","src":"15944:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56021,"nodeType":"ArrayTypeName","src":"15944:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":56025,"mutability":"mutable","name":"attesters","nameLocation":"16002:9:108","nodeType":"VariableDeclaration","scope":56125,"src":"15983:28:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56023,"name":"address","nodeType":"ElementaryTypeName","src":"15983:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56024,"nodeType":"ArrayTypeName","src":"15983:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":56028,"mutability":"mutable","name":"amounts","nameLocation":"16040:7:108","nodeType":"VariableDeclaration","scope":56125,"src":"16021:26:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":56026,"name":"uint256","nodeType":"ElementaryTypeName","src":"16021:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56027,"nodeType":"ArrayTypeName","src":"16021:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":56031,"mutability":"mutable","name":"refundAmounts","nameLocation":"16076:13:108","nodeType":"VariableDeclaration","scope":56125,"src":"16057:32:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":56029,"name":"uint256","nodeType":"ElementaryTypeName","src":"16057:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56030,"nodeType":"ArrayTypeName","src":"16057:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15934:161:108"},"returnParameters":{"id":56033,"nodeType":"ParameterList","parameters":[],"src":"16103:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56203,"nodeType":"FunctionDefinition","src":"17490:1535:108","nodes":[],"body":{"id":56202,"nodeType":"Block","src":"17626:1399:108","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":56141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56136,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56127,"src":"17640:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":56139,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"17656:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":56138,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17648:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56137,"name":"address","nodeType":"ElementaryTypeName","src":"17648:7:108","typeDescriptions":{}}},"id":56140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17648:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17640:21:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":56200,"nodeType":"Block","src":"18201:818:108","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":56179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":56176,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"18583:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":56175,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18575:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56174,"name":"address","nodeType":"ElementaryTypeName","src":"18575:7:108","typeDescriptions":{}}},"id":56177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18575:14:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":56178,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56131,"src":"18593:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18575:27:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":56198,"nodeType":"Block","src":"18761:248:108","statements":[{"expression":{"arguments":[{"id":56193,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56127,"src":"18914:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56194,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56129,"src":"18940:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56195,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"18970:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":56190,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56131,"src":"18860:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56189,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57304,"src":"18844:15:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICustodianToken_$57304_$","typeString":"type(contract ICustodianToken)"}},"id":56191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18844:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICustodianToken_$57304","typeString":"contract ICustodianToken"}},"id":56192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18871:21:108","memberName":"buyCustodialTokenFrom","nodeType":"MemberAccess","referencedDeclaration":57303,"src":"18844:48:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":56196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18844:150:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56197,"nodeType":"ExpressionStatement","src":"18844:150:108"}]},"id":56199,"nodeType":"IfStatement","src":"18571:438:108","trueBody":{"id":56188,"nodeType":"Block","src":"18604:151:108","statements":[{"expression":{"arguments":[{"id":56183,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56127,"src":"18690:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56184,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56129,"src":"18696:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56185,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"18706:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56180,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"18671:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":56182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18677:12:108","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43662,"src":"18671:18:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":56186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18671:42:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56187,"nodeType":"ExpressionStatement","src":"18671:42:108"}]}}]},"id":56201,"nodeType":"IfStatement","src":"17636:1383:108","trueBody":{"id":56173,"nodeType":"Block","src":"17663:532:108","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":56147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":56144,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"17741:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":56143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17733:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56142,"name":"address","nodeType":"ElementaryTypeName","src":"17733:7:108","typeDescriptions":{}}},"id":56145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17733:14:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":56146,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56131,"src":"17751:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17733:27:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":56171,"nodeType":"Block","src":"17909:276:108","statements":[{"expression":{"arguments":[{"id":56159,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56131,"src":"18006:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56160,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"18017:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56156,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"17992:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":56158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17998:7:108","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":43650,"src":"17992:13:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":56161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17992:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56162,"nodeType":"ExpressionStatement","src":"17992:32:108"},{"expression":{"arguments":[{"id":56167,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56129,"src":"18153:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56168,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"18163:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":56164,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56131,"src":"18124:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56163,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57304,"src":"18108:15:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICustodianToken_$57304_$","typeString":"type(contract ICustodianToken)"}},"id":56165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18108:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICustodianToken_$57304","typeString":"contract ICustodianToken"}},"id":56166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18135:17:108","memberName":"buyCustodialToken","nodeType":"MemberAccess","referencedDeclaration":57294,"src":"18108:44:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":56169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18108:62:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56170,"nodeType":"ExpressionStatement","src":"18108:62:108"}]},"id":56172,"nodeType":"IfStatement","src":"17729:456:108","trueBody":{"id":56155,"nodeType":"Block","src":"17762:141:108","statements":[{"expression":{"arguments":[{"id":56151,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56129,"src":"17844:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56152,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"17854:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56148,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"17829:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":56150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17835:8:108","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":43630,"src":"17829:14:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":56153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17829:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56154,"nodeType":"ExpressionStatement","src":"17829:32:108"}]}}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttester","nameLocation":"17499:12:108","parameters":{"id":56134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56127,"mutability":"mutable","name":"from","nameLocation":"17529:4:108","nodeType":"VariableDeclaration","scope":56203,"src":"17521:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56126,"name":"address","nodeType":"ElementaryTypeName","src":"17521:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56129,"mutability":"mutable","name":"attester","nameLocation":"17551:8:108","nodeType":"VariableDeclaration","scope":56203,"src":"17543:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56128,"name":"address","nodeType":"ElementaryTypeName","src":"17543:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56131,"mutability":"mutable","name":"custodian","nameLocation":"17577:9:108","nodeType":"VariableDeclaration","scope":56203,"src":"17569:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56130,"name":"address","nodeType":"ElementaryTypeName","src":"17569:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56133,"mutability":"mutable","name":"amount","nameLocation":"17604:6:108","nodeType":"VariableDeclaration","scope":56203,"src":"17596:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56132,"name":"uint256","nodeType":"ElementaryTypeName","src":"17596:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17511:105:108"},"returnParameters":{"id":56135,"nodeType":"ParameterList","parameters":[],"src":"17626:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":56243,"nodeType":"FunctionDefinition","src":"19031:451:108","nodes":[],"body":{"id":56242,"nodeType":"Block","src":"19173:309:108","nodes":[],"statements":[{"body":{"id":56240,"nodeType":"Block","src":"19354:122:108","statements":[{"expression":{"arguments":[{"expression":{"id":56227,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19413:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19417:6:108","memberName":"sender","nodeType":"MemberAccess","src":"19413:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56229,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56206,"src":"19425:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56231,"indexExpression":{"id":56230,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56216,"src":"19435:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19425:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56232,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56212,"src":"19439:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56234,"indexExpression":{"id":56233,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56216,"src":"19450:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19439:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56235,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56209,"src":"19454:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56237,"indexExpression":{"id":56236,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56216,"src":"19462:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19454:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56226,"name":"_payAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56203,"src":"19400:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":56238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19400:65:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56239,"nodeType":"ExpressionStatement","src":"19400:65:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56219,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56216,"src":"19327:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":56220,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56206,"src":"19331:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19341:6:108","memberName":"length","nodeType":"MemberAccess","src":"19331:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19327:20:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56241,"initializationExpression":{"assignments":[56216],"declarations":[{"constant":false,"id":56216,"mutability":"mutable","name":"i","nameLocation":"19320:1:108","nodeType":"VariableDeclaration","scope":56241,"src":"19312:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56215,"name":"uint256","nodeType":"ElementaryTypeName","src":"19312:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56218,"initialValue":{"hexValue":"30","id":56217,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19324:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"19312:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":56224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19349:3:108","subExpression":{"id":56223,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56216,"src":"19349:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56225,"nodeType":"ExpressionStatement","src":"19349:3:108"},"nodeType":"ForStatement","src":"19307:169:108"}]},"functionSelector":"da33ee7f","implemented":true,"kind":"function","modifiers":[],"name":"reward","nameLocation":"19040:6:108","parameters":{"id":56213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56206,"mutability":"mutable","name":"attesters","nameLocation":"19075:9:108","nodeType":"VariableDeclaration","scope":56243,"src":"19056:28:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56204,"name":"address","nodeType":"ElementaryTypeName","src":"19056:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56205,"nodeType":"ArrayTypeName","src":"19056:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":56209,"mutability":"mutable","name":"amounts","nameLocation":"19113:7:108","nodeType":"VariableDeclaration","scope":56243,"src":"19094:26:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":56207,"name":"uint256","nodeType":"ElementaryTypeName","src":"19094:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56208,"nodeType":"ArrayTypeName","src":"19094:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":56212,"mutability":"mutable","name":"custodians","nameLocation":"19149:10:108","nodeType":"VariableDeclaration","scope":56243,"src":"19130:29:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56210,"name":"address","nodeType":"ElementaryTypeName","src":"19130:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56211,"nodeType":"ArrayTypeName","src":"19130:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"19046:119:108"},"returnParameters":{"id":56214,"nodeType":"ParameterList","parameters":[],"src":"19173:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56257,"nodeType":"FunctionDefinition","src":"19488:140:108","nodes":[],"body":{"id":56256,"nodeType":"Block","src":"19580:48:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":56252,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56347,"src":"19600:14:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":56253,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56245,"src":"19616:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56251,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39213,"src":"19590:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":56254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19590:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56255,"nodeType":"ExpressionStatement","src":"19590:31:108"}]},"baseFunctions":[56584],"functionSelector":"41566585","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":56248,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"19560:18:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":56249,"kind":"modifierInvocation","modifierName":{"id":56247,"name":"onlyRole","nameLocations":["19551:8:108"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"19551:8:108"},"nodeType":"ModifierInvocation","src":"19551:28:108"}],"name":"whitelistAddress","nameLocation":"19497:16:108","parameters":{"id":56246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56245,"mutability":"mutable","name":"addr","nameLocation":"19531:4:108","nodeType":"VariableDeclaration","scope":56257,"src":"19523:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56244,"name":"address","nodeType":"ElementaryTypeName","src":"19523:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19513:28:108"},"returnParameters":{"id":56250,"nodeType":"ParameterList","parameters":[],"src":"19580:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":56271,"nodeType":"FunctionDefinition","src":"19634:151:108","nodes":[],"body":{"id":56270,"nodeType":"Block","src":"19736:49:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":56266,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56347,"src":"19757:14:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":56267,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56259,"src":"19773:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56265,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"19746:10:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":56268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19746:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56269,"nodeType":"ExpressionStatement","src":"19746:32:108"}]},"baseFunctions":[56589],"functionSelector":"286dd3f5","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":56262,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"19716:18:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":56263,"kind":"modifierInvocation","modifierName":{"id":56261,"name":"onlyRole","nameLocations":["19707:8:108"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"19707:8:108"},"nodeType":"ModifierInvocation","src":"19707:28:108"}],"name":"removeAddressFromWhitelist","nameLocation":"19643:26:108","parameters":{"id":56260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56259,"mutability":"mutable","name":"addr","nameLocation":"19687:4:108","nodeType":"VariableDeclaration","scope":56271,"src":"19679:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56258,"name":"address","nodeType":"ElementaryTypeName","src":"19679:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19669:28:108"},"returnParameters":{"id":56264,"nodeType":"ParameterList","parameters":[],"src":"19736:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":54888,"name":"MovementStakingStorage","nameLocations":["623:22:108"],"nodeType":"IdentifierPath","referencedDeclaration":56348,"src":"623:22:108"},"id":54889,"nodeType":"InheritanceSpecifier","src":"623:22:108"},{"baseName":{"id":54890,"name":"IMovementStaking","nameLocations":["651:16:108"],"nodeType":"IdentifierPath","referencedDeclaration":56638,"src":"651:16:108"},"id":54891,"nodeType":"InheritanceSpecifier","src":"651:16:108"},{"baseName":{"id":54892,"name":"BaseStaking","nameLocations":["673:11:108"],"nodeType":"IdentifierPath","referencedDeclaration":56403,"src":"673:11:108"},"id":54893,"nodeType":"InheritanceSpecifier","src":"673:11:108"}],"canonicalName":"MovementStaking","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[56272,56403,39821,42755,39385,41148,45166,41527,40653,39639,56638,56348],"name":"MovementStaking","nameLocation":"600:15:108","scope":56273,"usedErrors":[39402,39405,39666,39671,41454,41457,42965,42978,44073,44076,56633,56635,56637],"usedEvents":[39410,41466,41475,41484,42944,56601,56613,56625,56631]}],"license":"UNLICENSED"},"id":108} \ No newline at end of file diff --git a/protocol-units/post-confirmations/client/src/bin/e2e/test_client_settlement.rs b/protocol-units/post-confirmations/client/src/bin/e2e/test_client_settlement.rs new file mode 100644 index 00000000..08640fae --- /dev/null +++ b/protocol-units/post-confirmations/client/src/bin/e2e/test_client_settlement.rs @@ -0,0 +1,340 @@ +use alloy::providers::ProviderBuilder; +use alloy::signers::local::PrivateKeySigner; +use alloy_network::EthereumWallet; +use alloy_primitives::Address; +use alloy_primitives::U256; +use anyhow::Context; +use ffs_environment::{backend::config_file::ConfigFile, ffs_environment}; +use post_confirmations_settlement_client::eth_client::Client; +use post_confirmations_settlement_client::eth_client::{MOVEToken, MovementStaking, MCR}; +use post_confirmations_settlement_client::McrSettlementClientOperations; +use post_confirmations_config::Config; +use post_confirmations_types::block_commitment::{BlockCommitment, Commitment, Id}; +use std::str::FromStr; +use tokio_stream::StreamExt; +use tracing::info; + +async fn run_genesis_ceremony( + config: &Config, + governor: PrivateKeySigner, + rpc_url: &str, + move_token_address: Address, + staking_address: Address, + post_confirmations_address: Address, +) -> Result<(), anyhow::Error> { + // Build alice client for MOVEToken, MCR, and staking + info!("Creating alice client"); + let alice: PrivateKeySigner = config + .testing + .as_ref() + .context("Testing config not defined.")? + .well_known_account_private_keys + .get(1) + .context("No well known account")? + .parse()?; + let alice_address = alice.address(); + let alice_rpc_provider = ProviderBuilder::new() + .with_recommended_fillers() + .wallet(EthereumWallet::from(alice.clone())) + .on_builtin(&rpc_url) + .await?; + let alice_staking = MovementStaking::new(staking_address, &alice_rpc_provider); + let alice_move_token = MOVEToken::new(move_token_address, &alice_rpc_provider); + + // Build bob client for MOVEToken, MCR, and staking + info!("Creating bob client"); + let bob: PrivateKeySigner = config + .testing + .as_ref() + .context("Testing config not defined.")? + .well_known_account_private_keys + .get(2) + .context("No well known account")? + .parse()?; + let bob_address = bob.address(); + let bob_rpc_provider = ProviderBuilder::new() + .with_recommended_fillers() + .wallet(EthereumWallet::from(bob.clone())) + .on_builtin(&rpc_url) + .await?; + let bob_staking = MovementStaking::new(staking_address, &bob_rpc_provider); + let bob_move_token = MOVEToken::new(move_token_address, &bob_rpc_provider); + + // Build the MCR client for staking + info!("Creating governor client"); + let governor_rpc_provider = ProviderBuilder::new() + .with_recommended_fillers() + .wallet(EthereumWallet::from(governor.clone())) + .on_builtin(&rpc_url) + .await?; + let governor_token = MOVEToken::new(move_token_address, &governor_rpc_provider); + let governor_mcr = MCR::new(post_confirmations_address, &governor_rpc_provider); + let governor_staking = MovementStaking::new(staking_address, &governor_rpc_provider); + + // Allow Alice and Bod to stake by adding to white list. + governor_staking + .whitelistAddress(alice_address) + .send() + .await? + .watch() + .await + .context("Governor failed to whilelist alice")?; + governor_staking + .whitelistAddress(bob_address) + .send() + .await? + .watch() + .await + .context("Governor failed to whilelist Bod")?; + + // alice stakes for mcr + info!("Alice stakes for MCR"); + let token_name = governor_token.name().call().await.context("Failed to get token name")?; + info!("Token name: {}", token_name._0); + + // debug: this is showing up correctly + let has_minter_role = governor_token + .hasMinterRole(governor.address()) + .call() + .await + .context("Failed to check if governor has minter role")?; + info!("Has minter role: {}", has_minter_role._0); + + let has_minter_role_from_alice = alice_move_token + .hasMinterRole(governor.address()) + .call() + .await + .context("Failed to check if governor has minter role")?; + info!("Has minter role from Alice: {}", has_minter_role_from_alice._0); + + //info!("config chain_id: {}",config.eth_chain_id.clone().to_string()); + //info!("governor chain_id: {}", governor_rpc_provider.get_chain_id().await.context("Failed to get chain id")?.to_string()); + + // debug: this is showing up correctly + let alice_hash_minter_role = governor_token + .hasMinterRole(alice.address()) + .call() + .await + .context("Failed to check if alice has minter role")?; + info!("Alice has minter role: {}", alice_hash_minter_role._0); + + let governor_address = governor.address(); + info!("Governor address: {}", governor_address.clone().to_string()); + // debug: fails here + governor_token + .mint(alice_address, U256::from(100)) + .send() + .await? + .watch() + .await + .context("Governor failed to mint for alice")?; + + info!("staking_address: {}", staking_address.clone().to_string()); + + // debug: also fails here if you lift the restriction above; then it fails as if msg.sender = address(0) + alice_move_token + .approve(staking_address, U256::from(100)) + .send() + .await? + .watch() + .await + .context("Alice failed to approve MCR")?; + info!("Alice move approve"); + let callbuilder = alice_staking.stake(post_confirmations_address, move_token_address, U256::from(100)); + let rc = callbuilder.send().await; + match rc { + Ok(rc) => { + rc.watch().await.context("Alice failed to stake for MCR")?; + } + Err(err) => { + println!("err: {err:?}"); + panic!("{err:?}",); + } + }; + info!("Alice move staking"); + + // bob stakes for mcr + info!("Bob stakes for MCR"); + governor_token + .mint(bob.address(), U256::from(100)) + .send() + .await? + .watch() + .await + .context("Governor failed to mint for bob")?; + info!("governor mint"); + + let bob_balance = bob_move_token + .balanceOf(bob.address()) + .call() + .await + .context("Failed to get bob balance")?; + info!("Bob balance: {}", bob_balance._0); + bob_move_token + .approve(staking_address, U256::from(100)) + .send() + .await? + .watch() + .await + .context("Bob failed to approve MCR")?; + info!("Bob move approve"); + bob_staking + .stake(post_confirmations_address, move_token_address, U256::from(100)) + .send() + .await? + .watch() + .await + .context("Bob failed to stake for MCR")?; + info!("Bob move staking"); + + // let domain_time = governor_staking + // .epochDurationByDomain(post_confirmations_address.clone()) + // .call() + // .await.context("Failed to get domain registration time")?; + // info!("Domain registration time in MCR {:?}", domain_time); + // mcr accepts the genesis + info!("MCR accepts the genesis"); + governor_mcr + .acceptGenesisCeremony() + .send() + .await? + .watch() + .await + .context("Governor failed to accept genesis ceremony")?; + info!("mcr accepted"); + + Ok(()) +} + +#[tokio::main] +pub async fn main() -> Result<(), anyhow::Error> { + use tracing_subscriber::EnvFilter; + + tracing_subscriber::fmt() + .with_env_filter( + EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")), + ) + .init(); + + let dot_movement = dot_movement::DotMovement::try_from_env()?; + let config_file = dot_movement.try_get_or_create_config_file().await?; + + // get a matching ffs_environment object + let ffs_environment: ffs_environment = + ffs_environment::new(ConfigFile::new(config_file), vec!["post_confirmations_settlement".to_string()]); + let config: Config = ffs_environment.try_wait_for_ready().await?; + let rpc_url = config.eth_rpc_connection_url(); + + let testing_config = config.testing.as_ref().context("Testing config not defined.")?; + run_genesis_ceremony( + &config, + PrivateKeySigner::from_str(&testing_config.post_confirmations_testing_admin_account_private_key)?, + &rpc_url, + Address::from_str(&testing_config.move_token_contract_address)?, + Address::from_str(&testing_config.movement_staking_contract_address)?, + Address::from_str(&config.settle.post_confirmations_contract_address)?, + ) + .await?; + + // Build client 1 and send the first commitment. + //let settlement_config = + let config1 = Config { + settle: post_confirmations_config::common::settlement::Config { + signer_private_key: testing_config + .well_known_account_private_keys + .get(1) + .context("No well known account")? + .to_string(), + ..config.settle.clone() + }, + ..config.clone() + }; + let client1 = Client::build_with_config(&config1).await.unwrap(); + + let mut client1_stream = client1.stream_block_commitments().await.unwrap(); + // Client post a new commitment + let commitment = BlockCommitment::new(1, Id::new([2; 32]), Commitment::new([3; 32])); + + let res = client1.post_block_commitment(commitment.clone()).await; + assert!(res.is_ok()); + + // No notification, quorum is not reached + let res = + tokio::time::timeout(tokio::time::Duration::from_secs(5), client1_stream.next()).await; + assert!(res.is_err()); + + // Build client 2 and send the second commitment. + let config2 = Config { + settle: post_confirmations_config::common::settlement::Config { + signer_private_key: testing_config + .well_known_account_private_keys + .get(2) + .context("No well known account")? + .to_string(), + ..config.settle.clone() + }, + ..config.clone() + }; + let client2 = Client::build_with_config(&config2).await.unwrap(); + + let mut client2_stream = client2.stream_block_commitments().await.unwrap(); + + // Client post a new commitment + let res = client2.post_block_commitment(commitment).await; + assert!(res.is_ok()); + + // Now we move to block 2 and make some commitment just to trigger the epochRollover + let commitment2 = BlockCommitment::new(2, Id::new([4; 32]), Commitment::new([5; 32])); + + let res = client2.post_block_commitment(commitment2.clone()).await; + assert!(res.is_ok()); + + // Validate that the accepted commitment stream gets the event. + let event = tokio::time::timeout(tokio::time::Duration::from_secs(7), client1_stream.next()) + .await + .unwrap() + .unwrap() + .unwrap(); + assert_eq!(event.commitment().as_bytes()[0], 3); + assert_eq!(event.block_id().as_bytes()[0], 2); + + let event = tokio::time::timeout(tokio::time::Duration::from_secs(7), client2_stream.next()) + .await + .unwrap() + .unwrap() + .unwrap(); + assert_eq!(event.commitment().as_bytes()[0], 3); + assert_eq!(event.block_id().as_bytes()[0], 2); + + // Test post batch commitment + // Post the complementary batch on height 2 and one on height 3 + let commitment3 = BlockCommitment::new(3, Id::new([6; 32]), Commitment::new([7; 32])); + let res = client1.post_block_commitment_batch(vec![commitment2, commitment3]).await; + assert!(res.is_ok()); + // Validate that the commitments stream gets the event. + let event = tokio::time::timeout(tokio::time::Duration::from_secs(5), client1_stream.next()) + .await + .unwrap() + .unwrap() + .unwrap(); + assert_eq!(event.commitment().as_bytes()[0], 5); + assert_eq!(event.block_id().as_bytes()[0], 4); + let event = tokio::time::timeout(tokio::time::Duration::from_secs(7), client2_stream.next()) + .await + .unwrap() + .unwrap() + .unwrap(); + assert_eq!(event.commitment().as_bytes()[0], 5); + assert_eq!(event.block_id().as_bytes()[0], 4); + + // Test get_commitment_at_height + let commitment = client1.get_commitment_at_height(1).await?; + assert!(commitment.is_some()); + let commitment = commitment.unwrap(); + assert_eq!(commitment.commitment().as_bytes()[0], 3); + assert_eq!(commitment.block_id().as_bytes()[0], 2); + let commitment = client1.get_commitment_at_height(10).await?; + assert_eq!(commitment, None); + + Ok(()) +} diff --git a/protocol-units/post-confirmations/client/src/eth_client.rs b/protocol-units/post-confirmations/client/src/eth_client.rs new file mode 100644 index 00000000..d17cb4f1 --- /dev/null +++ b/protocol-units/post-confirmations/client/src/eth_client.rs @@ -0,0 +1,403 @@ +use crate::send_eth_transaction::InsufficentFunds; +use crate::send_eth_transaction::SendTransactionErrorRule; +use crate::send_eth_transaction::UnderPriced; +use crate::send_eth_transaction::VerifyRule; +use crate::{CommitmentStream, McrSettlementClientOperations}; +use alloy::providers::fillers::ChainIdFiller; +use alloy::providers::fillers::FillProvider; +use alloy::providers::fillers::GasFiller; +use alloy::providers::fillers::JoinFill; +use alloy::providers::fillers::NonceFiller; +use alloy::providers::fillers::WalletFiller; +use alloy::providers::{Provider, ProviderBuilder, RootProvider}; +use alloy::pubsub::PubSubFrontend; +use alloy::signers::Signer; +use alloy_network::Ethereum; +use alloy_network::EthereumWallet; +use alloy_primitives::Address; +use alloy_primitives::U256; +use alloy_sol_types::sol; +use alloy_transport::BoxTransport; +use alloy_transport_ws::WsConnect; +use anyhow::Context; +use post_confirmations_config::Config; +use post_confirmations_types::block_commitment::{Commitment, Id, SuperBlockCommitment}; +use secure_signer::cryptography::secp256k1::Secp256k1; +use secure_signer_loader::Load; +use secure_signing_eth::HsmSigner; +use serde_json::Value as JsonValue; +use std::array::TryFromSliceError; +use std::fs; +use std::path::Path; +use thiserror::Error; +use tokio_stream::StreamExt; +use tracing::info; + +#[derive(Error, Debug)] +pub enum McrEthConnectorError { + #[error( + "MCR Settlement Transaction fails because gas estimation is too high. Estimated gas:{0} gas limit:{1}" + )] + GasLimitExceed(u128, u128), + #[error("MCR Settlement Transaction fails because account funds are insufficient. error:{0}")] + InsufficientFunds(String), + #[error("MCR Settlement Transaction send failed because :{0}")] + SendTransactionError(#[from] alloy_contract::Error), + #[error("MCR Settlement Transaction send failed during its execution :{0}")] + RpcTransactionExecution(String), + #[error("MCR Settlement SuperBlockPostconfirmed event notification error :{0}")] + EventNotificationError(#[from] alloy_sol_types::Error), + #[error("MCR Settlement SuperBlockPostconfirmed event notification stream close")] + EventNotificationStreamClosed, +} + +// Note: we prefer using the ABI because the [`sol!`](alloy_sol_types::sol) macro, when used with smart contract code directly, will not handle inheritance. +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + MCR, + "abis/MCR.json" +); + +// Note: we prefer using the ABI because the [`sol!`](alloy_sol_types::sol) macro, when used with smart contract code directly, will not handle inheritance. +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + MovementStaking, + "abis/MovementStaking.json" +); + +// Note: we prefer using the ABI because the [`sol!`](alloy_sol_types::sol) macro, when used with smart contract code directly, will not handle inheritance. +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + MOVEToken, + "abis/MOVEToken.json" +); + +pub struct McrSettlementClient

{ + run_commitment_admin_mode: bool, + rpc_provider: P, + ws_provider: RootProvider, + pub signer_address: Address, + contract_address: Address, + send_transaction_error_rules: Vec>, + gas_limit: u64, + send_transaction_retries: u32, +} + +impl + McrSettlementClient< + FillProvider< + JoinFill< + JoinFill< + JoinFill, NonceFiller>, + ChainIdFiller, + >, + WalletFiller, + >, + RootProvider, + BoxTransport, + Ethereum, + >, + > +{ + pub async fn build_with_config(config: &Config) -> Result { + let signer_identifier: Box + Send> = + Box::new(config.settle.signer_identifier.clone()); + let signer_provider = signer_identifier.load().await?; + let signer = + HsmSigner::try_new(signer_provider, Some(config.eth_connection.eth_chain_id)).await?; + + let signer_address = signer.address(); + info!("Signer address: {}", signer_address); + let contract_address = config + .settle + .post_confirmations_contract_address + .parse() + .context("Failed to parse the contract address for the MCR settlement client")?; + let rpc_url = config.eth_rpc_connection_url(); + let ws_url = config.eth_ws_connection_url(); + let rpc_provider = ProviderBuilder::new() + .with_recommended_fillers() + .wallet(EthereumWallet::from(signer)) + .on_builtin(&rpc_url) + .await + .context("Failed to create the RPC provider for the MCR settlement client")?; + + let client = McrSettlementClient::build_with_provider( + config.settle.settlement_admin_mode, + rpc_provider, + ws_url, + signer_address, + contract_address, + config.transactions.gas_limit, + config.transactions.transaction_send_retries, + ) + .await + .context( + "Failed to create the MCR settlement client with the RPC provider and contract address", + )?; + Ok(client) + } +} + +impl

McrSettlementClient

{ + async fn build_with_provider( + run_commitment_admin_mode: bool, + rpc_provider: P, + ws_url: S, + signer_address: Address, + contract_address: Address, + gas_limit: u64, + send_transaction_retries: u32, + ) -> Result + where + P: Provider + Clone, + S: Into, + { + let ws = WsConnect::new(ws_url); + + let ws_provider = ProviderBuilder::new() + .on_ws(ws) + .await + .context("Failed to create the WebSocket provider for the MCR settlement client")?; + + let rule1: Box = Box::new(SendTransactionErrorRule::::new()); + let rule2: Box = + Box::new(SendTransactionErrorRule::::new()); + let send_transaction_error_rules = vec![rule1, rule2]; + + Ok(McrSettlementClient { + run_commitment_admin_mode, + rpc_provider, + ws_provider, + signer_address, + contract_address, + send_transaction_error_rules, + gas_limit, + send_transaction_retries, + }) + } +} + +#[async_trait::async_trait] +impl

McrSettlementClientOperations for McrSettlementClient

+where + P: Provider + Clone, +{ + async fn post_block_commitment( + &self, + block_commitment: SuperBlockCommitment, + ) -> Result<(), anyhow::Error> { + let contract = MCR::new(self.contract_address, &self.rpc_provider); + + let eth_block_commitment = MCR::SuperBlockCommitment { + // Currently, to simplify the API, we'll say 0 is uncommitted all other numbers are legitimate heights + height: U256::from(block_commitment.height()), + commitment: alloy_primitives::FixedBytes( + block_commitment.commitment().as_bytes().clone(), + ), + blockId: alloy_primitives::FixedBytes(block_commitment.block_id().as_bytes().clone()), + }; + + if self.run_commitment_admin_mode { + let call_builder = contract.forceLatestCommitment(eth_block_commitment); + crate::send_eth_transaction::send_transaction( + call_builder, + &self.send_transaction_error_rules, + self.send_transaction_retries, + self.gas_limit as u128, + ) + .await + } else { + let call_builder = contract.submitSuperBlockCommitment(eth_block_commitment); + crate::send_eth_transaction::send_transaction( + call_builder, + &self.send_transaction_error_rules, + self.send_transaction_retries, + self.gas_limit as u128, + ) + .await + } + } + + async fn post_block_commitment_batch( + &self, + block_commitments: Vec, + ) -> Result<(), anyhow::Error> { + let contract = MCR::new(self.contract_address, &self.rpc_provider); + + let eth_block_commitment: Vec<_> = block_commitments + .into_iter() + .map(|block_commitment| { + Ok(MCR::SuperBlockCommitment { + // Currently, to simplify the API, we'll say 0 is uncommitted all other numbers are legitimate heights + height: U256::from(block_commitment.height()), + commitment: alloy_primitives::FixedBytes( + block_commitment.commitment().as_bytes().clone(), + ), + blockId: alloy_primitives::FixedBytes( + block_commitment.block_id().as_bytes().clone(), + ), + }) + }) + .collect::, TryFromSliceError>>()?; + + let call_builder = contract.submitBatchSuperBlockCommitment(eth_block_commitment); + + crate::send_eth_transaction::send_transaction( + call_builder, + &self.send_transaction_error_rules, + self.send_transaction_retries, + self.gas_limit as u128, + ) + .await + } + + async fn force_block_commitment( + &self, + block_commitment: SuperBlockCommitment, + ) -> Result<(), anyhow::Error> { + let contract = MCR::new(self.contract_address, &self.rpc_provider); + + let eth_block_commitment = MCR::SuperBlockCommitment { + // Currently, to simplify the API, we'll say 0 is uncommitted all other numbers are legitimate heights + height: U256::from(block_commitment.height()), + commitment: alloy_primitives::FixedBytes( + block_commitment.commitment().as_bytes().clone(), + ), + blockId: alloy_primitives::FixedBytes(block_commitment.block_id().as_bytes().clone()), + }; + + let call_builder = contract.forceLatestCommitment(eth_block_commitment); + crate::send_eth_transaction::send_transaction( + call_builder, + &self.send_transaction_error_rules, + self.send_transaction_retries, + self.gas_limit as u128, + ) + .await + } + + async fn stream_block_commitments(&self) -> Result { + // Register to contract BlockCommitmentSubmitted event + + let contract = MCR::new(self.contract_address, &self.ws_provider); + let event_filter = contract.SuperBlockPostconfirmed_filter().watch().await?; + + let stream = event_filter.into_stream().map(|event| { + event + .and_then(|(commitment, _)| { + let height = commitment.height.try_into().map_err( + |err: alloy::primitives::ruint::FromUintError| { + alloy_sol_types::Error::Other(err.to_string().into()) + }, + )?; + Ok(SuperBlockCommitment::new( + height, + Id::new(commitment.blockHash.0), + Commitment::new(commitment.stateCommitment.0), + )) + }) + .map_err(|err| McrEthConnectorError::EventNotificationError(err).into()) + }); + Ok(Box::pin(stream) as CommitmentStream) + } + + async fn get_commitment_at_height( + &self, + height: u64, + ) -> Result, anyhow::Error> { + let contract = MCR::new(self.contract_address, &self.ws_provider); + let MCR::getPostconfirmedCommitmentReturn { _0: commitment } = + contract.getPostconfirmedCommitment(U256::from(height)).call().await?; + + let return_height: u64 = commitment + .height + .try_into() + .context("Failed to convert the commitment height from U256 to u64")?; + // Commitment with height 0 mean not found + Ok((return_height != 0).then_some(SuperBlockCommitment::new( + commitment + .height + .try_into() + .context("Failed to convert the commitment height from U256 to u64")?, + Id::new(commitment.blockId.into()), + Commitment::new(commitment.commitment.into()), + ))) + } + + async fn get_posted_commitment_at_height( + &self, + height: u64, + ) -> Result, anyhow::Error> { + let contract = MCR::new(self.contract_address, &self.ws_provider); + let MCR::getValidatorCommitmentAtSuperBlockHeightReturn { _0: commitment } = contract + .getValidatorCommitmentAtSuperBlockHeight(U256::from(height), self.signer_address) + .call() + .await?; + + let return_height: u64 = commitment + .height + .try_into() + .context("Failed to convert the commitment height from U256 to u64")?; + + Ok((return_height != 0).then_some(SuperBlockCommitment::new( + commitment + .height + .try_into() + .context("Failed to convert the commitment height from U256 to u64")?, + Id::new(commitment.blockId.into()), + Commitment::new(commitment.commitment.into()), + ))) + } + + async fn get_max_tolerable_block_height(&self) -> Result { + let contract = MCR::new(self.contract_address, &self.ws_provider); + let MCR::getMaxTolerableSuperBlockHeightReturn { _0: block_height } = + contract.getMaxTolerableSuperBlockHeight().call().await?; + Ok(block_height + .try_into() + .context("Failed to convert the max tolerable block height from U256 to u64")?) + } +} + +pub struct AnvilAddressEntry { + pub address: String, + pub private_key: String, +} + +/// Read the Anvil config file keys and return all address/private keys. +pub fn read_anvil_json_file_addresses>( + anvil_conf_path: P, +) -> Result, anyhow::Error> { + let file_content = fs::read_to_string(anvil_conf_path)?; + + let json_value: JsonValue = serde_json::from_str(&file_content)?; + + // Extract the available_accounts and private_keys fields. + let available_accounts_iter = json_value["available_accounts"] + .as_array() + .expect("Available_accounts should be an array") + .iter() + .map(|v| { + let s = v.as_str().expect("Available_accounts elements should be strings"); + s.to_owned() + }); + + let private_keys_iter = json_value["private_keys"] + .as_array() + .expect("Private_keys should be an array") + .iter() + .map(|v| { + let s = v.as_str().expect("Private_keys elements should be strings"); + s.to_owned() + }); + + let res = available_accounts_iter + .zip(private_keys_iter) + .map(|(address, private_key)| AnvilAddressEntry { address, private_key }) + .collect::>(); + Ok(res) +} diff --git a/protocol-units/post-confirmations/client/src/lib.rs b/protocol-units/post-confirmations/client/src/lib.rs new file mode 100644 index 00000000..12e5d2d6 --- /dev/null +++ b/protocol-units/post-confirmations/client/src/lib.rs @@ -0,0 +1,57 @@ +use post_confirmations_types::block_commitment::SuperBlockCommitment; +use tokio_stream::Stream; +pub mod mock; + +// FIXME: mock exports +// #[cfg(feature = "mock")] +// pub use mock::*; + +pub mod eth_client; + +#[cfg(feature = "eth")] +pub use eth_client::McrSettlementClient; + +pub mod send_eth_transaction; + +type CommitmentStream = + std::pin::Pin> + Send>>; + +#[async_trait::async_trait] +pub trait McrSettlementClientOperations { + /// Posts a block commitment to the settlement client. + async fn post_block_commitment( + &self, + block_commitment: SuperBlockCommitment, + ) -> Result<(), anyhow::Error>; + + /// Posts a batch of block commitments to the settlement client. + async fn post_block_commitment_batch( + &self, + block_commitment: Vec, + ) -> Result<(), anyhow::Error>; + + /// Forces a block commitment + /// This will only work in admin mode + async fn force_block_commitment( + &self, + block_commitment: SuperBlockCommitment, + ) -> Result<(), anyhow::Error>; + + /// Streams block commitments from the settlement client. + async fn stream_block_commitments(&self) -> Result; + + /// Gets the accepted commitment at the given height. + async fn get_commitment_at_height( + &self, + height: u64, + ) -> Result, anyhow::Error>; + + /// Gets the commitment this validator has made at a given height + async fn get_posted_commitment_at_height( + &self, + height: u64, + ) -> Result, anyhow::Error>; + + /// Gets the max tolerable block height. + async fn get_max_tolerable_block_height(&self) -> Result; +} diff --git a/protocol-units/post-confirmations/client/src/mock.rs b/protocol-units/post-confirmations/client/src/mock.rs new file mode 100644 index 00000000..5dab4be0 --- /dev/null +++ b/protocol-units/post-confirmations/client/src/mock.rs @@ -0,0 +1,247 @@ +use crate::{CommitmentStream, McrSettlementClientOperations}; +use post_confirmations_config::Config; +use post_confirmations_types::block_commitment::SuperBlockCommitment; +use std::collections::BTreeMap; +use std::sync::{Arc, Mutex}; +use tokio::sync::{mpsc, RwLock}; +use tokio_stream::wrappers::ReceiverStream; +use tracing::info; + +#[derive(Clone)] +pub struct McrSettlementClient { + commitments: Arc>>, + stream_sender: mpsc::Sender>, + stream_receiver: Arc>>>>, + pub current_height: Arc>, + pub block_lead_tolerance: u64, + paused_at_height: Arc>>, +} + +impl McrSettlementClient { + pub fn new() -> Self { + let (stream_sender, receiver) = mpsc::channel(10); + McrSettlementClient { + commitments: Arc::new(RwLock::new(BTreeMap::new())), + stream_sender, + stream_receiver: Arc::new(Mutex::new(Some(receiver))), + current_height: Arc::new(RwLock::new(0)), + block_lead_tolerance: 16, + paused_at_height: Arc::new(RwLock::new(None)), + } + } + + pub async fn build_with_config(_config: &Config) -> Result { + info!("Building with config."); + Ok(Self::new()) + } + + /// Overrides the commitment to settle on at given height. + /// + /// To have effect, this method needs to be called before a commitment is + /// posted for this height with the `McrSettlementClientOperations` API. + pub async fn override_block_commitment(&self, commitment: SuperBlockCommitment) { + let mut commitments = self.commitments.write().await; + commitments.insert(commitment.height(), commitment); + } + + /// Stop streaming commitments after the given height. + /// + /// Any posted commitments will be accumulated. + pub async fn pause_after(&self, height: u64) { + let mut paused_at_height = self.paused_at_height.write().await; + *paused_at_height = Some(height); + } + + /// Stream any commitments that have been posted following the height + /// at which `pause` was called, and resume streaming any newly posted + /// commitments + pub async fn resume(&self) { + let resume_height = { + let mut paused_at_height = self.paused_at_height.write().await; + paused_at_height.take().expect("not paused") + }; + { + let commitments = self.commitments.read().await; + for (_, commitment) in commitments.range(resume_height + 1..) { + println!("resume sends commitment for height {}", commitment.height()); + self.stream_sender.send(Ok(commitment.clone())).await.unwrap(); + } + } + } +} + +#[async_trait::async_trait] +impl McrSettlementClientOperations for McrSettlementClient { + async fn post_block_commitment( + &self, + block_commitment: SuperBlockCommitment, + ) -> Result<(), anyhow::Error> { + let height = block_commitment.height(); + + let settled = { + let mut commitments = self.commitments.write().await; + commitments.entry(block_commitment.height()).or_insert(block_commitment).clone() + }; + { + let paused_at_height = self.paused_at_height.read().await; + match *paused_at_height { + Some(ph) if ph < height => {} + _ => { + self.stream_sender.send(Ok(settled)).await?; + } + } + } + + { + let mut current_height = self.current_height.write().await; + if height > *current_height { + *current_height = height; + } + } + + Ok(()) + } + + async fn post_block_commitment_batch( + &self, + block_commitments: Vec, + ) -> Result<(), anyhow::Error> { + for commitment in block_commitments { + self.post_block_commitment(commitment).await?; + } + Ok(()) + } + + async fn force_block_commitment( + &self, + block_commitment: SuperBlockCommitment, + ) -> Result<(), anyhow::Error> { + unimplemented!() + } + + async fn get_posted_commitment_at_height( + &self, + height: u64, + ) -> Result, anyhow::Error> { + unimplemented!(); + } + + async fn stream_block_commitments(&self) -> Result { + let receiver = self + .stream_receiver + .lock() + .unwrap() + .take() + .expect("stream_block_commitments already called"); + Ok(Box::pin(ReceiverStream::new(receiver))) + } + + async fn get_commitment_at_height( + &self, + height: u64, + ) -> Result, anyhow::Error> { + let guard = self.commitments.read().await; + Ok(guard.get(&height).cloned()) + } + + async fn get_max_tolerable_block_height(&self) -> Result { + Ok(*self.current_height.read().await + self.block_lead_tolerance) + } +} + +#[cfg(test)] +pub mod test { + + use super::*; + use post_confirmations_types::block_commitment::Commitment; + + use futures::future; + use tokio::select; + use tokio_stream::StreamExt; + + #[tokio::test] + async fn test_post_block_commitment() -> Result<(), anyhow::Error> { + let client = McrSettlementClient::new(); + let commitment = SuperBlockCommitment::new(1, Default::default(), Commitment::test()); + client.post_block_commitment(commitment.clone()).await.unwrap(); + let guard = client.commitments.write().await; + assert_eq!(guard.get(&1), Some(&commitment)); + + assert_eq!(*client.current_height.read().await, 1); + assert_eq!(client.get_max_tolerable_block_height().await?, 17); + + Ok(()) + } + + #[tokio::test] + async fn test_post_block_commitment_batch() -> Result<(), anyhow::Error> { + let client = McrSettlementClient::new(); + let commitment = SuperBlockCommitment::new(1, Default::default(), Commitment::test()); + let commitment2 = SuperBlockCommitment::new(1, Default::default(), Commitment::test()); + client + .post_block_commitment_batch(vec![commitment.clone(), commitment2.clone()]) + .await + .unwrap(); + let guard = client.commitments.write().await; + assert_eq!(guard.get(&1), Some(&commitment)); + assert_eq!(guard.get(&2), Some(&commitment2)); + Ok(()) + } + + #[tokio::test] + async fn test_stream_block_commitments() -> Result<(), anyhow::Error> { + let client = McrSettlementClient::new(); + let commitment = SuperBlockCommitment::new(1, Default::default(), Commitment::test()); + client.post_block_commitment(commitment.clone()).await.unwrap(); + let mut stream = client.stream_block_commitments().await?; + assert_eq!(stream.next().await.unwrap().unwrap(), commitment); + Ok(()) + } + + #[tokio::test] + async fn test_override_block_commitments() -> Result<(), anyhow::Error> { + let client = McrSettlementClient::new(); + let commitment = SuperBlockCommitment::new(2, Default::default(), Commitment::test()); + client.override_block_commitment(commitment.clone()).await; + client + .post_block_commitment(SuperBlockCommitment::new(2, Default::default(), Commitment::test())) + .await + .unwrap(); + let mut stream = client.stream_block_commitments().await?; + assert_eq!(stream.next().await.expect("stream has ended")?, commitment); + Ok(()) + } + + #[tokio::test] + async fn test_pause() -> Result<(), anyhow::Error> { + let client = McrSettlementClient::new(); + let commitment = SuperBlockCommitment::new(2, Default::default(), Commitment::test()); + client.pause_after(1).await; + client.post_block_commitment(commitment.clone()).await?; + let commitment2 = SuperBlockCommitment::new(2, Default::default(), Commitment::test()); + client.post_block_commitment(commitment2).await?; + let mut stream = client.stream_block_commitments().await?; + assert_eq!(stream.next().await.expect("stream has ended")?, commitment); + select! { + biased; + _ = stream.next() => panic!("stream should be paused"), + _ = future::ready(()) => {} + } + Ok(()) + } + + #[tokio::test] + async fn test_resume() -> Result<(), anyhow::Error> { + let client = McrSettlementClient::new(); + let commitment = SuperBlockCommitment::new(2, Default::default(), Commitment::test()); + client.pause_after(1).await; + client.post_block_commitment(commitment.clone()).await?; + let commitment2 = SuperBlockCommitment::new(2, Default::default(), Commitment::test()); + client.post_block_commitment(commitment2.clone()).await?; + let mut stream = client.stream_block_commitments().await?; + assert_eq!(stream.next().await.expect("stream has ended")?, commitment); + client.resume().await; + assert_eq!(stream.next().await.expect("stream has ended")?, commitment2); + Ok(()) + } +} diff --git a/protocol-units/post-confirmations/client/src/send_eth_transaction.rs b/protocol-units/post-confirmations/client/src/send_eth_transaction.rs new file mode 100644 index 00000000..89d70a0d --- /dev/null +++ b/protocol-units/post-confirmations/client/src/send_eth_transaction.rs @@ -0,0 +1,148 @@ +use crate::eth_client::McrEthConnectorError; +use alloy::providers::Provider; +use alloy_contract::CallBuilder; +use alloy_contract::CallDecoder; +use alloy_network::Ethereum; +use alloy_transport::{Transport, TransportError}; +use std::marker::PhantomData; +use tracing::info; + +// Define a rule to verify the error generated when a transaction is send to determine if: +// * the Transaction must me resend with more gas: return Ok(true) +// * a specific error must be return: return Err(McrEthConnectorError::xxx); +// * the rule doesn't apply: return Ok(false) +pub trait VerifyRule: Sync + Send { + fn verify(&self, error: &alloy_contract::Error) -> Result; +} + +pub struct SendTransactionErrorRule { + _kind: PhantomData, +} + +impl SendTransactionErrorRule { + pub fn new() -> Self { + SendTransactionErrorRule { _kind: PhantomData } + } +} + +// Define the current 2 errors managed. +pub struct UnderPriced; +pub struct InsufficentFunds; + +impl VerifyRule for SendTransactionErrorRule { + fn verify(&self, error: &alloy_contract::Error) -> Result { + let alloy_contract::Error::TransportError(TransportError::ErrorResp(payload)) = error + else { + return Ok(false); + }; + + if payload.code == -32000 && payload.message.contains("transaction underpriced") { + Ok(true) + } else { + Ok(false) + } + } +} + +impl VerifyRule for SendTransactionErrorRule { + fn verify(&self, error: &alloy_contract::Error) -> Result { + let alloy_contract::Error::TransportError(TransportError::ErrorResp(payload)) = error + else { + return Ok(false); + }; + + if payload.code == -32000 && payload.message.contains("insufficient funds") { + Err(McrEthConnectorError::InsufficientFunds(payload.message.clone())) + } else { + Ok(false) + } + } +} + +pub async fn send_transaction< + P: Provider + Clone, + T: Transport + Clone, + D: CallDecoder + Clone, +>( + base_call_builder: CallBuilder, + send_transaction_error_rules: &[Box], + number_retry: u32, + gas_limit: u128, +) -> Result<(), anyhow::Error> { + info!("Sending transaction with gas limit: {}", gas_limit); + //validate gas price. + let mut estimate_gas = base_call_builder.estimate_gas().await.expect("Failed to estimate gas"); + // Add 20% because initial gas estimate are too low. + estimate_gas += (estimate_gas * 20) / 100; + + println!("estimated_gas: {}", estimate_gas); + + // Sending Transaction automatically can lead to errors that depend on the state for Eth. + // It's convenient to manage some of them automatically to avoid to fail commitment Transaction. + // I define a first one but other should be added depending on the test with mainnet. + for _ in 0..number_retry { + let call_builder = base_call_builder.clone().gas(estimate_gas); + + //detect if the gas price doesn't execeed the limit. + let gas_price = call_builder.provider.get_gas_price().await?; + let transaction_fee_wei = estimate_gas * gas_price; + if transaction_fee_wei > gas_limit { + return Err(McrEthConnectorError::GasLimitExceed(transaction_fee_wei, gas_limit).into()); + } + + info!("Sending transaction with gas: {}", estimate_gas); + + //send the Transaction and detect send error. + let pending_transaction = match call_builder.send().await { + Ok(pending_transaction) => pending_transaction, + Err(err) => { + //apply defined rules. + for rule in send_transaction_error_rules { + // Verify all rules. If one rule return true or an error stop verification. + // If true retry with more gas else return the error. + if rule.verify(&err)? { + //increase gas of 10% and retry + estimate_gas += (estimate_gas * 10) / 100; + tokio::time::sleep(tokio::time::Duration::from_secs(1)).await; + continue; + } + } + + return Err(McrEthConnectorError::from(err).into()); + } + }; + + match pending_transaction.get_receipt().await { + // Transaction execution fail + Ok(transaction_receipt) if !transaction_receipt.status() => { + tracing::debug!( + "transaction_receipt.gas_used: {} / estimate_gas: {estimate_gas}", + transaction_receipt.gas_used + ); + // Some valid Tx can abort cause of insufficient gas without consuming all its gas. + // Define a threshold a little less than estimated gas to detect them. + let tx_gas_consumption_threshold = estimate_gas - (estimate_gas * 10) / 100; + if transaction_receipt.gas_used >= tx_gas_consumption_threshold { + tracing::info!("Send commitment Transaction fail because of insufficient gas, receipt:{transaction_receipt:?} "); + estimate_gas += (estimate_gas * 30) / 100; + continue; + } else { + return Err(McrEthConnectorError::RpcTransactionExecution(format!( + "Send commitment Transaction fail, abort Transaction, receipt:{transaction_receipt:?}" + )) + .into()); + } + } + Ok(_) => return Ok(()), + Err(err) => { + return Err(McrEthConnectorError::RpcTransactionExecution(err.to_string()).into()) + } + }; + } + + //Max retry exceed + Err(McrEthConnectorError::RpcTransactionExecution( + "Send commitment Transaction fail because of exceed max retry".to_string(), + ) + .into()) +} diff --git a/protocol-units/post-confirmations/config/Cargo.toml b/protocol-units/post-confirmations/config/Cargo.toml new file mode 100644 index 00000000..036d54f2 --- /dev/null +++ b/protocol-units/post-confirmations/config/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "post-confirmationsconfig" +description = "Configuration of the MCR settlement client" +version.workspace = true +edition.workspace = true +license.workspace = true +authors.workspace = true +repository.workspace = true +homepage.workspace = true +publish.workspace = true +rust-version.workspace = true + +[dependencies] +serde = { workspace = true , features = ["derive"] } +alloy = { workspace = true } +ffs-environment = { workspace = true } +anyhow = { workspace = true } +secure-signer-loader = { workspace = true } +secure-signer = { workspace = true} + +[lints] +workspace = true diff --git a/protocol-units/post-confirmations/config/src/common/deploy.rs b/protocol-units/post-confirmations/config/src/common/deploy.rs new file mode 100644 index 00000000..fbc4b6e8 --- /dev/null +++ b/protocol-units/post-confirmations/config/src/common/deploy.rs @@ -0,0 +1,60 @@ +use alloy::signers::local::PrivateKeySigner; +use ffs_environment::env_short_default; +use secure_signer::key::TryFromCanonicalString; +use secure_signer_loader::identifiers::{local::Local, SignerIdentifier}; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Config { + #[serde(default = "post_confirmations_deployment_working_directory")] + pub post_confirmations_deployment_working_directory: String, + #[serde(default = "default_signer_identifier")] + pub signer_identifier: SignerIdentifier, +} + +env_short_default!( + post_confirmations_deployment_working_directory, + String, + "protocol-units/settlement/mcr/contracts" +); + +env_short_default!( + post_confirmations_local_anvil_account_private_key, + String, + PrivateKeySigner::random().to_bytes().to_string() +); + +pub fn default_signer_identifier() -> SignerIdentifier { + match std::env::var("post_confirmations_SIGNER_IDENTIFIER") { + Ok(str_value) => SignerIdentifier::try_from_canonical_string(&str_value).unwrap(), + Err(_) => SignerIdentifier::Local(Local { + // todo: validate this is a valid private key + private_key_hex_bytes: post_confirmations_local_anvil_account_private_key(), + }), + } +} + +pub fn maybe_deploy() -> Option { + match std::env::var("MAYBE_DEPLOY_MCR") { + Ok(str_value) => { + // if it parses as true then we want to deploy under the default config + let bool_value = str_value.parse::().unwrap_or(false); + + if bool_value { + Some(Config::default()) + } else { + None + } + } + Err(_) => None, + } +} + +impl Default for Config { + fn default() -> Self { + Config { + post_confirmations_deployment_working_directory: post_confirmations_deployment_working_directory(), + signer_identifier: default_signer_identifier(), + } + } +} diff --git a/protocol-units/post-confirmations/config/src/common/eth_connection.rs b/protocol-units/post-confirmations/config/src/common/eth_connection.rs new file mode 100644 index 00000000..437bee14 --- /dev/null +++ b/protocol-units/post-confirmations/config/src/common/eth_connection.rs @@ -0,0 +1,106 @@ +use ffs_environment::env_default; +use serde::{Deserialize, Serialize}; + +const DEFAULT_ETH_RPC_CONNECTION_HOSTNAME: &str = "ethereum-holesky-rpc.publicnode.com"; +const DEFAULT_ETH_RPC_CONNECTION_PORT: u16 = 443; +const DEFAULT_ETH_WS_CONNECTION_HOSTNAME: &str = "ethereum-holesky-rpc.publicnode.com"; +const DEFAULT_ETH_WS_CONNECTION_PORT: u16 = 443; // same as RPC + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Config { + #[serde(default = "default_eth_rpc_connection_protocol")] + pub eth_rpc_connection_protocol: String, + #[serde(default = "default_eth_rpc_connection_hostname")] + pub eth_rpc_connection_hostname: String, + #[serde(default = "default_eth_rpc_connection_port")] + pub eth_rpc_connection_port: u16, + + #[serde(default = "default_eth_ws_connection_protocol")] + pub eth_ws_connection_protocol: String, + #[serde(default = "default_eth_ws_connection_hostname")] + pub eth_ws_connection_hostname: String, + #[serde(default = "default_eth_ws_connection_port")] + pub eth_ws_connection_port: u16, + + #[serde(default)] + pub eth_chain_id: u64, +} + +env_default!( + default_eth_rpc_connection_protocol, + "ETH_RPC_CONNECTION_PROTOCOL", + String, + "https".to_string() +); + +env_default!( + default_eth_rpc_connection_hostname, + "ETH_RPC_CONNECTION_HOSTNAME", + String, + DEFAULT_ETH_RPC_CONNECTION_HOSTNAME.to_string() +); + +env_default!( + default_eth_rpc_connection_port, + "ETH_RPC_CONNECTION_PORT", + u16, + DEFAULT_ETH_RPC_CONNECTION_PORT +); + +env_default!( + default_eth_ws_connection_protocol, + "ETH_WS_CONNECTION_PROTOCOL", + String, + "ws".to_string() +); + +env_default!( + default_eth_ws_connection_hostname, + "ETH_WS_CONNECTION_HOSTNAME", + String, + DEFAULT_ETH_WS_CONNECTION_HOSTNAME.to_string() +); + +env_default!( + default_eth_ws_connection_port, + "ETH_WS_CONNECTION_PORT", + u16, + DEFAULT_ETH_WS_CONNECTION_PORT +); + +env_default!(default_eth_chain_id, "ETH_CHAIN_ID", u64, 0); + +impl Default for Config { + fn default() -> Self { + Config { + eth_rpc_connection_protocol: default_eth_rpc_connection_protocol(), + eth_rpc_connection_hostname: default_eth_rpc_connection_hostname(), + eth_rpc_connection_port: default_eth_rpc_connection_port(), + + eth_ws_connection_protocol: default_eth_ws_connection_protocol(), + eth_ws_connection_hostname: default_eth_ws_connection_hostname(), + eth_ws_connection_port: default_eth_ws_connection_port(), + eth_chain_id: default_eth_chain_id(), + } + } +} + +impl Config { + pub fn eth_rpc_connection_url(&self) -> String { + format!( + "{}://{}:{}", + self.eth_rpc_connection_protocol, + self.eth_rpc_connection_hostname, + self.eth_rpc_connection_port + ) + } + + pub fn eth_ws_connection_url(&self) -> String { + format!( + "{}://{}:{}", + self.eth_ws_connection_protocol, + self.eth_ws_connection_hostname, + self.eth_ws_connection_port + ) + } +} diff --git a/protocol-units/post-confirmations/config/src/common/mod.rs b/protocol-units/post-confirmations/config/src/common/mod.rs new file mode 100644 index 00000000..3c5c62d3 --- /dev/null +++ b/protocol-units/post-confirmations/config/src/common/mod.rs @@ -0,0 +1,6 @@ +pub mod deploy; +pub mod eth_connection; +pub mod settlement; +pub mod staking; +pub mod testing; +pub mod transactions; diff --git a/protocol-units/post-confirmations/config/src/common/settlement.rs b/protocol-units/post-confirmations/config/src/common/settlement.rs new file mode 100644 index 00000000..d6e83f58 --- /dev/null +++ b/protocol-units/post-confirmations/config/src/common/settlement.rs @@ -0,0 +1,55 @@ +use alloy::signers::local::PrivateKeySigner; +use ffs_environment::env_default; +use secure_signer_loader::identifiers::{local::Local, SignerIdentifier}; +use serde::{Deserialize, Serialize}; +use std::env; + +const DEFAULT_post_confirmations_CONTRACT_ADDRESS: &str = "0x5fc8d32690cc91d4c39d9d3abcbd16989f875707"; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Config { + #[serde(default = "default_should_settle")] + pub should_settle: bool, + #[serde(default = "default_signer_identifier")] + pub signer_identifier: SignerIdentifier, + #[serde(default = "default_post_confirmations_contract_address")] + pub post_confirmations_contract_address: String, + #[serde(default = "default_settlement_super_block_size")] + pub settlement_super_block_size: u64, + #[serde(default = "default_settlement_admin_mode")] + pub settlement_admin_mode: bool, +} + +pub fn default_signer_identifier() -> SignerIdentifier { + let random_wallet = PrivateKeySigner::random(); + let private_key_hex_bytes = random_wallet.to_bytes().to_string(); + let signer_identifier = SignerIdentifier::Local(Local { private_key_hex_bytes }); + signer_identifier +} + +env_default!( + default_post_confirmations_contract_address, + "post_confirmations_CONTRACT_ADDRESS", + String, + DEFAULT_post_confirmations_CONTRACT_ADDRESS.to_string() +); + +env_default!(default_settlement_admin_mode, "post_confirmations_SETTLEMENT_ADMIN_MODE", bool, false); + +env_default!(default_settlement_super_block_size, "post_confirmations_SETTLEMENT_SUPER_BLOCK_SIZE", u64, 1); + +pub fn default_should_settle() -> bool { + env::var("ETH_SIGNER_PRIVATE_KEY").is_ok() +} + +impl Default for Config { + fn default() -> Self { + Config { + should_settle: default_should_settle(), + signer_identifier: default_signer_identifier(), + post_confirmations_contract_address: default_post_confirmations_contract_address(), + settlement_admin_mode: default_settlement_admin_mode(), + settlement_super_block_size: default_settlement_super_block_size(), + } + } +} diff --git a/protocol-units/post-confirmations/config/src/common/staking.rs b/protocol-units/post-confirmations/config/src/common/staking.rs new file mode 100644 index 00000000..a872a95a --- /dev/null +++ b/protocol-units/post-confirmations/config/src/common/staking.rs @@ -0,0 +1,14 @@ +use ffs_environment::env_short_default; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Config { + #[serde(default = "default_move_token_contract_address")] + pub move_token_contract_address: String, + #[serde(default = "default_movement_staking_contract_address")] + pub movement_staking_contract_address: String, +} + +env_short_default!(default_move_token_contract_address, String, "0x0"); + +env_short_default!(default_movement_staking_contract_address, String, "0x0"); diff --git a/protocol-units/post-confirmations/config/src/common/testing.rs b/protocol-units/post-confirmations/config/src/common/testing.rs new file mode 100644 index 00000000..7e1dc169 --- /dev/null +++ b/protocol-units/post-confirmations/config/src/common/testing.rs @@ -0,0 +1,47 @@ +use ffs_environment::env_short_default; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Config { + #[serde(default = "Vec::new")] + pub well_known_account_private_keys: Vec, + + #[serde(default = "default_post_confirmations_testing_admin_account_private_key")] + pub post_confirmations_testing_admin_account_private_key: String, + + #[serde(default = "default_move_token_contract_address")] + pub move_token_contract_address: String, + + #[serde(default = "default_movement_staking_contract_address")] + pub movement_staking_contract_address: String, +} + +env_short_default!(default_post_confirmations_testing_admin_account_private_key, String, "0x0"); + +env_short_default!(default_move_token_contract_address, String, "0x0"); + +env_short_default!(default_movement_staking_contract_address, String, "0x0"); + +// env_or_none!( +// default_maybe_testing, +// Config, +// default_post_confirmations_testing_admin_account_private_key, +// default_move_token_contract_address, +// default_movement_staking_contract_address +// ); + +pub fn maybe_testing() -> Option { + std::env::var("MAYBE_TESTING_MCR").ok().map(|_| Config::default()) +} + +impl Default for Config { + fn default() -> Self { + Config { + well_known_account_private_keys: Vec::new(), + post_confirmations_testing_admin_account_private_key: + default_post_confirmations_testing_admin_account_private_key(), + move_token_contract_address: default_move_token_contract_address(), + movement_staking_contract_address: default_movement_staking_contract_address(), + } + } +} diff --git a/protocol-units/post-confirmations/config/src/common/transactions.rs b/protocol-units/post-confirmations/config/src/common/transactions.rs new file mode 100644 index 00000000..9b95ce17 --- /dev/null +++ b/protocol-units/post-confirmations/config/src/common/transactions.rs @@ -0,0 +1,29 @@ +use ffs_environment::env_short_default; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Config { + #[serde(default = "default_gas_limit")] + pub gas_limit: u64, + /// Timeout for batching blocks, in milliseconds + #[serde(default = "default_batch_timeout")] + pub batch_timeout: u64, + #[serde(default = "default_transaction_send_retries")] + pub transaction_send_retries: u32, +} + +env_short_default!(default_gas_limit, u64, 10_000_000_000_000_000 as u64); + +env_short_default!(default_batch_timeout, u64, 2000 as u64); + +env_short_default!(default_transaction_send_retries, u32, 10 as u32); + +impl Default for Config { + fn default() -> Self { + Config { + gas_limit: default_gas_limit(), + batch_timeout: default_batch_timeout(), + transaction_send_retries: default_transaction_send_retries(), + } + } +} diff --git a/protocol-units/post-confirmations/config/src/lib.rs b/protocol-units/post-confirmations/config/src/lib.rs new file mode 100644 index 00000000..d6282530 --- /dev/null +++ b/protocol-units/post-confirmations/config/src/lib.rs @@ -0,0 +1,67 @@ +//! This crate provides configuration parameters for the MCR settlement +//! component of a Movement node. +use serde::{Deserialize, Serialize}; +pub mod common; + +use common::deploy::maybe_deploy; +use common::testing::maybe_testing; +use ffs_environment::env_short_default; + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Config { + /// The ETH connection configuration. + /// This is mandatory for all possible operations. + #[serde(default)] + pub eth_connection: common::eth_connection::Config, + + #[serde(default)] + pub settle: common::settlement::Config, + + #[serde(default)] + pub transactions: common::transactions::Config, + + /// Whether or not to attempt to run locally. + #[serde(default = "maybe_run_local")] + pub maybe_run_local: bool, + + /// Optional deployment of contracts config + #[serde(default = "maybe_deploy")] + pub deploy: Option, + + /// Optional testing config + #[serde(default = "maybe_testing")] + pub testing: Option, +} + +env_short_default!(maybe_run_local, bool, false); + +impl Config { + pub fn eth_rpc_connection_url(&self) -> String { + self.eth_connection.eth_rpc_connection_url() + } + + pub fn eth_ws_connection_url(&self) -> String { + self.eth_connection.eth_ws_connection_url() + } + + pub fn should_settle(&self) -> bool { + self.settle.should_settle + } + + pub fn should_run_local(&self) -> bool { + self.maybe_run_local + } +} + +impl Default for Config { + fn default() -> Self { + Config { + eth_connection: common::eth_connection::Config::default(), + settle: common::settlement::Config::default(), + transactions: common::transactions::Config::default(), + maybe_run_local: maybe_run_local(), + deploy: maybe_deploy(), + testing: maybe_testing(), + } + } +} diff --git a/protocol-units/post-confirmations/contracts/.DS_Store b/protocol-units/post-confirmations/contracts/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..10f4d43063cf2afdea345ed0e8725c067b6d3ef7 GIT binary patch literal 6148 zcmeH~O=`nH427SXECStlndNM9fZkvT$q90S5(*^{5-7CmIeMRdHg&o#raXc4Mj8v- z-@;=7u>I%T3orrL&|R_fFf(Jm!W9>szfK>w>;3l5idTWBh?%i6VYXk}5)lvq5fA|p z5P<~|$Wt7f=LJ2J9z_I1U>OAb`_SmFy>z6;r-LCz0P33MFs@^kpf)d1d+A7Jg=RH9 zShZS=AzqJmYOCvd=}66XSPdUmcQ&75XqN4;#)M`)L_q{ZU`Ak-`Q+#Sk^bBKKWkAc z0wVCw2-x~?I_&vUb+$gdp4VTi>gz$L#^nq@egc^IQM{#xaliS3+Dk_&D>VHG1O^2W H_)`MkvH%f) literal 0 HcmV?d00001 diff --git a/protocol-units/post-confirmations/contracts/.github/workflows/test.yml b/protocol-units/post-confirmations/contracts/.github/workflows/test.yml new file mode 100644 index 00000000..9282e829 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/.github/workflows/test.yml @@ -0,0 +1,34 @@ +name: test + +on: workflow_dispatch + +env: + FOUNDRY_PROFILE: ci + +jobs: + check: + strategy: + fail-fast: true + + name: Foundry project + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + submodules: recursive + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: nightly + + - name: Run Forge build + run: | + forge --version + forge build --sizes + id: build + + - name: Run Forge tests + run: | + forge test -vvv + id: test diff --git a/protocol-units/post-confirmations/contracts/.gitignore b/protocol-units/post-confirmations/contracts/.gitignore new file mode 100644 index 00000000..d7f1b6d7 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/.gitignore @@ -0,0 +1,24 @@ +# Compiler files +cache/ +out/ +broadcast/ +artifacts/ +typechain-types/ +cache_hardhat/ +lib/ + +# Ignores development broadcast logs +!/broadcast +/broadcast/*/31337/ +/broadcast/**/dry-run/ +broadcast + +# Docs +docs/ + +# Dotenv file +.env + +.vscode/ + +node_modules/ \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/.prettierrc b/protocol-units/post-confirmations/contracts/.prettierrc new file mode 100644 index 00000000..35c04d5c --- /dev/null +++ b/protocol-units/post-confirmations/contracts/.prettierrc @@ -0,0 +1,16 @@ +{ + "printWidth": 120, + "singleQuote": true, + "trailingComma": "all", + "arrowParens": "avoid", + "overrides": [ + { + "files": "*.sol", + "options": { + "singleQuote": false + } + } + ], + "plugins": ["prettier-plugin-solidity"] + } + \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/README.md b/protocol-units/post-confirmations/contracts/README.md new file mode 100644 index 00000000..a053c95c --- /dev/null +++ b/protocol-units/post-confirmations/contracts/README.md @@ -0,0 +1,37 @@ +# MCR - L1 contract + +- **RFC**: [RFC MCR](https://github.com/movementlabsxyz/rfcs/pulls) +- **MIP**: [MIP-37](https://github.com/movementlabsxyz/MIP/blob/mip/postconfirmation/MIP/mip-37/README.md) + +This directory contains the implementation of the MRC settlement smart contract. To test the contract, run: + +```bash +forge test +``` + +There is a long-running test covering over 50 epochs. It will likely take a few seconds to run. + +## Implementation + +### Description + +For a given block height, MCR selects the earliest block commitment that matches the supermajority of stake for a given epoch by: + +1. Fixing the stake parameters for the epoch; all stake changes apply to the next epoch. +2. Tracking commitments for each block height until one exceeds the supermajority of stake. + +## Proof of Correctness + +The stake is fixed for an epoch, so only commitments for a specific block height are considered, allowing for a straightforward proof. + +**Commitment**. Let $v: C \to V$ map a commitment to its validator, where $C$ represent all possible commitments and $V$ is the set of validators. Since commitments are ordered by L1 in the L1-blocks, let $C'$ be an ordered subset of $C$ with $k$ elements (i.e. up to the $k$-th commitment). + +**Stake**. Let $s: V \to \mathbb{N}$ map a validator to their stake and $S(C',i) = \sum_{j = 1}^{i} s(v(c_j))$ the cumulative stake up to the $i$-th commitment. $S$ is non-decreasing as $S(C',i) = S(C',i - 1) + s(v(c_i))$. + +We require that + +$$ +S(C',i) > \frac{2}{3} TotalStake = \frac{2}{3} \times \sum_{u \in V} s(u), +$$ + +If $S(C', i)$ satisfies the condition, and $S(C',i-1)$ does not, then $c_i$ is returned by MCR. Due to the non-decreasing nature of $S$ with $i$, $c_i$ is the earliest commitment that can be returned. \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/deployments/local.json b/protocol-units/post-confirmations/contracts/deployments/local.json new file mode 100644 index 00000000..2665c509 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/deployments/local.json @@ -0,0 +1,15 @@ +{ + "ProxyAdmin": "0xB965D10739e19a9158e7f713720B0145D996E370", + "MoveToken": { + "implementation": "0x3A8C1bd531b5C1aeFBB9ebc3e021C1251cF4Ccb1", + "proxy": "0x80741a37E3644612F0465145C9709a90B6D77Ee3" + }, + "MovementStaking": { + "implementation": "0x38435Ac0E0e9Bd8737c476F8F39a24b0735e00dc", + "proxy": "0xE19dddcaF5dCb2Ec0Fe52229e3133B99396f22e2" + }, + "MCR": { + "implementation": "0x1430c9c2143F97aaE765197e744BaBa7e78acaf0", + "proxy": "0x2A3365C575a5Fc8fD2842B82D29f8035E7f71CeC" + } +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/foundry.toml b/protocol-units/post-confirmations/contracts/foundry.toml new file mode 100644 index 00000000..1b94acb3 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/foundry.toml @@ -0,0 +1,17 @@ +[profile.default] +src = "src" +out = "out" +libs = ["lib"] +ffi = true +gas_limit = 9223372036854775807 # this is only needed for the multiround settlement test +build_info = true +extra_output = ["storageLayout"] + +solc = "0.8.26" +evm_version = "cancun" + +fs_permissions = [{ access = "read-write", path = "./script/"}] + +[profile.dependencies] +openzeppelin = { git = "https://github.com/OpenZeppelin/openzeppelin-contracts", tag = "v4.7.0" } + diff --git a/protocol-units/post-confirmations/contracts/hardhat.config.ts b/protocol-units/post-confirmations/contracts/hardhat.config.ts new file mode 100644 index 00000000..1bc66477 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/hardhat.config.ts @@ -0,0 +1,31 @@ +import { task } from "hardhat/config"; +import "@nomicfoundation/hardhat-toolbox"; +import "@nomicfoundation/hardhat-ethers"; +import "./scripts/tasks/utils"; + +export default { + solidity: { + version: "0.8.22", + settings: { + optimizer: { + enabled: true, + runs: 200 + } + } + }, + paths: { + sources: "./src", // Point to src directory + tests: "./test", // Point to test directory + cache: "./cache_hardhat", // Use separate cache for Hardhat + artifacts: "./artifacts" // Where compiled contracts will go + }, + networks: { + localnet: { + url: "http://127.0.0.1:52603", // Updated Kurtosis RPC URL + accounts: [ + "bcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31", // deployer + "39725efee3fb28614de3bacaffe4cc4bd8c436257e2c8bb887c4b5c4be45e76d" // funded account + ] + }, + }, +}; diff --git a/protocol-units/post-confirmations/contracts/kurtosis_instructions.md b/protocol-units/post-confirmations/contracts/kurtosis_instructions.md new file mode 100644 index 00000000..46a82174 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/kurtosis_instructions.md @@ -0,0 +1,242 @@ +# Testing the MCR Contract with Kurtosis + +This guide provides step-by-step instructions for setting up and testing the MCR contract using Kurtosis. + +## 1. Prerequisites +- [Docker](https://docs.docker.com/get-docker/) +- [Kurtosis CLI](https://docs.kurtosis.com/install) +- [Node.js](https://nodejs.org/) with `yarn` +- [Foundry](https://book.getfoundry.sh/) for Solidity development +- [Hardhat](https://hardhat.org/) for testing + +## 2. Installation & Setup + +### 2.1 Install Kurtosis +```sh +brew install kurtosis-tech/tap/kurtosis-cli +``` + +Start Docker and verify installation: +```sh +docker image ls +``` + +### 2.2 Install Development Dependencies +```sh +# Initialize Foundry +cd mcr/contracts +forge init --force --no-git + +# Install dependencies +chmod +x script/install-deps.sh +./script/install-deps.sh + +# Install npm dependencies +yarn install +``` + +## 3. Setting Up Local Ethereum Testnet + +### 3.1 Start the Testnet +```sh +kurtosis --enclave local-eth-testnet run github.com/ethpandaops/ethereum-package +``` +check: maybe the following command is better: +```sh +kurtosis run github.com/ethpandaops/ethereum-package +``` + +Expected output: +```sh +INFO[2023-04-04T18:09:44-04:00] ====================================================== +INFO[2023-04-04T18:09:44-04:00] || Created enclave: local-eth-testnet || +INFO[2023-04-04T18:09:44-04:00] ====================================================== +``` + +To stop, run + +```sh +kurtosis clean -a +``` + +### 3.2 Verify Testnet Status +```sh +kurtosis enclave inspect local-eth-testnet +# or +kurtosis enclave ls +``` + +Note the `rpc` port from the `el-1-geth-lighthouse` output (e.g., `127.0.0.1:49653`). + +### 3.3 Note Default Funded Account + +The pre-funded accounts can be found in the Kurtosis output when starting the network. +Look for the "pre_funded_accounts" section which contains addresses and private keys. The first address is + +```json +{ + "address": "0x8943545177806ED17B9F23F0a21ee5948eCaa776", + "private_key": "bcdf20249abf0ed6d944c0288fad489e33f66b3960d9e6229c1cd214ed3bbe31" +} +``` + +## 4. Deploying Contracts + +There are two ways to deploy the contracts: + +1. Using Hardhat (recommended) +2. Using Foundry (currently not recommended) + +### 4.1 Option A: Development Deployment using `hardhat` + +Try some basic tests first to make sure we can apply transactions + +```sh +npx hardhat balance --network localnet --address 0x8943545177806ED17B9F23F0a21ee5948eCaa776 +npx hardhat sendTx --network localnet --to 0x1234567890abcdef1234567890abcdef12345678 --amount 0.1 +``` + +> ⚠️ **Note**: Version compatibility is important: +> - ethers: v6.0.0 +> - @nomicfoundation/hardhat-ethers: v3.0.4 +> - @typechain/ethers-v6: v0.5.0 + +Install all required dependencies: +```sh +yarn install + +# If you see any missing dependency errors, run yarn install again +# This may happen as some dependencies have peer dependencies +``` + +Update the [hardhat.config.ts](hardhat.config.ts) file with your RPC port: +```ts +localnet: { + url: 'http://127.0.0.1:', +... +``` + +Replace `` with the actual RPC port noted earlier and then test the connection: + +```sh +npx hardhat accounts --network localnet +``` + +**Deploy Contracts** +```sh +npx hardhat clean +npx hardhat compile +npx hardhat run scripts/deploy.ts --network localnet +``` + +**Run Tests** +```sh +npx hardhat test --network localnet +``` + +**Verify the deployment** +```sh +npx hardhat run scripts/test-deployment.ts --network localnet +``` + +#### 4.2 Option B: Development Deployment (with `forge`) + +> ⚠️ **Warning**: The forge deployment approach is currently not working reliably with Kurtosis. +> Development has been paused in favor of the Hardhat approach. The Foundry instructions below are kept for reference. + +**Setup** +First, ensure Foundry is initialized. You may have to run the following. +```sh +cd mcr/contracts +forge init --force --no-git +``` + +Then install dependencies using the provided script: +```sh +chmod +x script/install-deps.sh +./script/install-deps.sh +``` + +Install npm dependencies using the provided package.json: +```sh +yarn install +``` + +**Deployment Files** +The following files are required for deployment and need to be updated when deploying a Kurtosis enclave: + +1. The configuration settings are defined in `script/helpers/config.json` +2. The deployment addresses will be tracked in `script/helpers/deployments.json`. This file will be updated as contracts are deployed. + +**Deployment** +```sh +forge script script/DeployMCRDev.s.sol:DeployMCRDev \ + --rpc-url http://127.0.0.1: \ + --private-key \ + --broadcast +``` + +Run the automated verification script: + +```sh +chmod +x script/verify-mcr.sh +./script/verify-mcr.sh +``` + +#### 4.3 Option C: Production Deployment (with `forge`) + +Production-like Deployment (Optional, requires Safe contracts): + +```sh +# Only attempt this after testing with the development deployment +# This deploys MCR using previously deployed Safe contracts +forge script script/DeployMCR.s.sol:DeployMCR \ + --rpc-url http://127.0.0.1: \ + --private-key \ + --broadcast +``` + +### 5 Additional Deployment Steps + +### 5.1 Deploy Safe Contracts + +The MCR deployment requires Safe contracts for governance. Deploy them using the provided script: + +```sh +cd mcr/contracts +chmod +x script/deploy-safe.sh +./script/deploy-safe.sh http://127.0.0.1: +``` + +This will deploy all required Safe contracts and save their addresses to `script/helpers/safe-deployments.json`. + +Note: Keep track of the deployed addresses as they'll be needed for the MCR deployment. + +### 5.2 Verify Deployment + +```sh +chmod +x script/verify-mcr.sh +./script/verify-mcr.sh +``` + +## 5. Advanced Configuration (Optional) + +### 5.1 Custom Network Parameters +Create `eth-network-params.json`: +```json +{ + "participants": [ + { "el_client_type": "geth", "cl_client_type": "lighthouse" } + ], + "network_params": { + "network_id": "3151908", + "seconds_per_slot": 12, + "genesis_delay": 120 + } +} +``` + +### 5.2 Run with Custom Configuration +```sh +kurtosis clean -a && kurtosis run --enclave local-eth-testnet github.com/ethpandaops/ethereum-package --args-file eth-network-params.json +``` diff --git a/protocol-units/post-confirmations/contracts/package.json b/protocol-units/post-confirmations/contracts/package.json new file mode 100644 index 00000000..f0445d75 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/package.json @@ -0,0 +1,34 @@ +{ + "name": "hardhat-project", + "dependencies": { + "@openzeppelin/contracts": "^5.0.0", + "@openzeppelin/contracts-upgradeable": "^5.0.0" + }, + "devDependencies": { + "@ethersproject/abi": "5.7.0", + "@ethersproject/providers": "5.7.2", + "@nomicfoundation/hardhat-chai-matchers": "^2.0.0", + "@nomicfoundation/hardhat-ethers": "^3.0.0", + "@nomicfoundation/hardhat-ignition": "^0.15.10", + "@nomicfoundation/hardhat-ignition-ethers": "^0.15.0", + "@nomicfoundation/hardhat-network-helpers": "^1.0.0", + "@nomicfoundation/hardhat-toolbox": "^5.0.0", + "@nomicfoundation/hardhat-verify": "^2.0.0", + "@nomicfoundation/ignition-core": "^0.15.10", + "@nomiclabs/hardhat-ethers": "^2.2.3", + "@typechain/ethers-v5": "^10.0.0", + "@typechain/ethers-v6": "0.5.1", + "@typechain/hardhat": "^9.0.0", + "@types/chai": "^4.2.0", + "@types/mocha": ">=9.1.0", + "@types/node": "18.15.3", + "chai": "^4.2.0", + "ethers": "^6.0.0", + "hardhat": "^2.22.19", + "hardhat-gas-reporter": "^1.0.8", + "solidity-coverage": "^0.8.1", + "ts-node": "^10.9.2", + "typechain": "8.3.2", + "typescript": "4.9.5" + } +} diff --git a/protocol-units/post-confirmations/contracts/remappings.txt b/protocol-units/post-confirmations/contracts/remappings.txt new file mode 100644 index 00000000..f93fce20 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/remappings.txt @@ -0,0 +1,15 @@ +@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/ +@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/ +@createx/=lib/createx/src/ +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/ +murky/=lib/murky/ +openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/ +openzeppelin-contracts/=lib/openzeppelin-contracts/ +openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/ +openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/ +@safe-smart-account/=lib/safe-smart-account/ +solady/=lib/createx/lib/solady/ +solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/ +solmate/=lib/solmate/src/ diff --git a/protocol-units/post-confirmations/contracts/script/CoreDeployer.s.sol b/protocol-units/post-confirmations/contracts/script/CoreDeployer.s.sol new file mode 100644 index 00000000..52a1e67f --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/CoreDeployer.s.sol @@ -0,0 +1,65 @@ +pragma solidity ^0.8.13; + +import "forge-std/Script.sol"; +import {MOVEToken} from "../src/token/MOVEToken.sol"; +import { Helper } from "./helpers/Helper.sol"; +import { MCRDeployer } from "./MCRDeployer.s.sol"; +import { MovementStakingDeployer } from "./MovementStakingDeployer.s.sol"; +import { StlMoveDeployer } from "./StlMoveDeployer.s.sol"; +import { MOVETokenDeployer } from "./MOVETokenDeployer.s.sol"; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol"; + +contract CoreDeployer is MCRDeployer, MovementStakingDeployer, StlMoveDeployer, MOVETokenDeployer { + + function run() external override(MCRDeployer, MovementStakingDeployer, StlMoveDeployer, MOVETokenDeployer) { + + // load config and deployments data + _loadExternalData(); + + uint256 signer = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(signer); + + // Deploy CREATE3Factory, Safes and Timelock if not deployed + _deployDependencies(); + + // Deploy or upgrade contracts conditionally + deployment.moveAdmin == ZERO && deployment.move == ZERO ? + _deployMove() : deployment.moveAdmin != ZERO && deployment.move != ZERO ? + // if move is already deployed, upgrade it + _upgradeMove() : revert("MOVE: both admin and proxy should be registered"); + + // requires move to be deployed + deployment.stakingAdmin == ZERO && deployment.staking == ZERO && deployment.move != ZERO ? + _deployStaking() : deployment.stakingAdmin != ZERO && deployment.staking != ZERO ? + // if staking is already deployed, upgrade it + _upgradeStaking() : revert("STAKING: both admin and proxy should be registered"); + + // requires move to be deployed + deployment.stlMoveAdmin == ZERO && deployment.stlMove == ZERO && deployment.move != ZERO ? + _deployStlMove() : deployment.stlMoveAdmin != ZERO && deployment.stlMove != ZERO ? + // if stlMove is already deployed, upgrade it + _upgradeStlMove() : revert("STL: both admin and proxy should be registered"); + + // requires staking and move to be deployed + deployment.mcrAdmin == ZERO && deployment.mcr == ZERO && deployment.move != ZERO && deployment.staking != ZERO ? + _deployMCR() : deployment.mcrAdmin != ZERO && deployment.mcr != ZERO ? + // if mcr is already deployed, upgrade it + _upgradeMCR() : revert("MCR: both admin and proxy should be registered"); + + // Only write to file if chainid is not running a foundry local chain and if broadcasting + if (block.chainid == foundryChainId) { + _allowSameContract(); + _upgradeMove(); + _upgradeStaking(); + _upgradeStlMove(); + _upgradeMCR(); + } else { + if (vm.isContext(VmSafe.ForgeContext.ScriptBroadcast)) { + _writeDeployments(); + } + } + + vm.stopBroadcast(); + } +} diff --git a/protocol-units/post-confirmations/contracts/script/DeployMCR.s.sol b/protocol-units/post-confirmations/contracts/script/DeployMCR.s.sol new file mode 100644 index 00000000..37d76a8d --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/DeployMCR.s.sol @@ -0,0 +1,55 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.19; + +import "forge-std/Script.sol"; +import "../src/settlement/MCR.sol"; +import {IMintableToken, MintableToken} from "../src/token/base/MintableToken.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +contract DeployMCR is Script { + function run() public { + // Load Safe addresses from deployments.json + string memory root = vm.projectRoot(); + string memory path = string.concat(root, "/script/helpers/safe-deployments.json"); + string memory json = vm.readFile(path); + + address safe = abi.decode(vm.parseJson(json, ".Safe"), (address)); + address handler = abi.decode(vm.parseJson(json, ".FallbackHandler"), (address)); + address factory = abi.decode(vm.parseJson(json, ".SafeFactory"), (address)); + + vm.startBroadcast(); + + // Deploy MCR implementation and proxy + MCR mcrImplementation = new MCR(); + + // Get MOVE token and staking addresses from deployments + string memory deploymentsPath = string.concat(root, "/script/helpers/deployments.json"); + string memory deploymentsJson = vm.readFile(deploymentsPath); + address moveToken = abi.decode(vm.parseJson(deploymentsJson, ".3151908.move"), (address)); + address staking = abi.decode(vm.parseJson(deploymentsJson, ".3151908.staking"), (address)); + + // Initialize MCR with production settings + address[] memory custodians = new address[](1); + custodians[0] = moveToken; // The MOVE token is the custodian for rewards + + bytes memory mcrData = abi.encodeCall( + MCR.initialize, + ( + IMovementStaking(staking), // _stakingContract: address of staking contract + 0, // _lastPostconfirmedSuperBlockHeight: start from genesis + 5, // _leadingSuperBlockTolerance: max blocks ahead of last confirmed + 20 seconds, // _epochDuration: how long an epoch lasts + custodians, // _custodians: array with moveToken address for rewards + 10 seconds, // _postconfirmerDuration: how long a postconfirmer serves + moveToken // _moveTokenAddress: primary custodian for rewards in staking + ) + ); + address mcrProxy = address(new ERC1967Proxy(address(mcrImplementation), mcrData)); + + // Save MCR address to deployments + console.log("MCR implementation deployed to:", address(mcrImplementation)); + console.log("MCR proxy deployed to:", mcrProxy); + + vm.stopBroadcast(); + } +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/script/DeployMCRDev.s.sol b/protocol-units/post-confirmations/contracts/script/DeployMCRDev.s.sol new file mode 100644 index 00000000..dd02f1c9 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/DeployMCRDev.s.sol @@ -0,0 +1,160 @@ +pragma solidity ^0.8.19; + +/** + * Development deployment script for the Multi-Commit-Rollup (MCR) system. + * This deploys a test environment with short epochs and quick postconfirmer rotations. + * Includes MOVE token for staking, Movement Staking for managing attesters, and MCR for cross-chain settlement. + */ + +import "forge-std/Script.sol"; +import "../src/token/MOVEToken.sol"; +import "../src/staking/MovementStaking.sol"; +import "../src/settlement/MCR.sol"; +import {IMintableToken, MintableToken} from "../src/token/base/MintableToken.sol"; +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +contract DeployMCRDev is Script { + function run() external { + vm.startBroadcast(); + + console.log("hot: msg.sender: %s", msg.sender); + + // Deploy the implementation contracts that will be delegated to + MintableToken moveTokenImplementation = new MintableToken(); + MovementStaking stakingImplementation = new MovementStaking(); + MCR mcrImplementation = new MCR(); + + // Deploy MOVE token behind proxy and initialize with name and symbol + bytes memory moveTokenData = abi.encodeCall( + MintableToken.initialize, + ( + "Move Token", // name: Token name for display + "MOVE" // symbol: Token symbol for markets/exchanges + ) + ); + address moveTokenProxy = address( + new ERC1967Proxy(address(moveTokenImplementation), moveTokenData) + ); + + // Deploy staking contract behind proxy, using MOVE token for rewards + bytes memory movementStakingData = abi.encodeCall( + MovementStaking.initialize, + IMintableToken(address(moveTokenProxy)) // moveToken: Token used for staking and rewards + ); + address movementStakingProxy = address( + new ERC1967Proxy(address(stakingImplementation), movementStakingData) + ); + + // Set up MCR with MOVE token as the only custodian for rewards + address[] memory custodians = new address[](1); + custodians[0] = address(moveTokenProxy); + + // Deploy MCR behind proxy with test configuration + bytes memory mcrData = abi.encodeCall( + MCR.initialize, + ( + IMovementStaking(address(movementStakingProxy)), // stakingContract: Contract managing attesters' stakes + 0, // lastPostconfirmedSuperBlockHeight: Start from genesis + 5, // leadingSuperBlockTolerance: Max blocks ahead of last confirmed + 10 seconds, // epochDuration: How long each epoch lasts (short for testing) + custodians, // custodians: Array of tokens used for rewards [MOVE] + 5 seconds, // postconfirmerDuration: How long postconfirmer serves + address(moveTokenProxy) // moveTokenAddress: Primary token for staking rewards + ) + ); + address mcrProxy = address(new ERC1967Proxy(address(mcrImplementation), mcrData)); + + // Set up roles and permissions + MCR mcr = MCR(mcrProxy); + mcr.grantCommitmentAdmin(msg.sender); + + // Log the deployed addresses + console.log("Move Token Proxy: %s", moveTokenProxy); + console.log("MCR Proxy: %s", mcrProxy); + console.log("MCR custodian: %s", MovementStaking(movementStakingProxy).epochDurationByDomain(mcrProxy)); + + // Log initial state + console.log("\n=== Initial Setup ==="); + console.log("Deployer address: %s", msg.sender); + console.log("Move Token Proxy: %s", moveTokenProxy); + console.log("MCR Proxy: %s", mcrProxy); + console.log("Staking Proxy: %s", movementStakingProxy); + + // Set up initial token distribution and permissions + MintableToken moveToken = MintableToken(moveTokenProxy); + + // Log roles before minting + console.log("\n=== Roles ==="); + console.log("Deployer has minter role: %s", moveToken.hasMinterRole(msg.sender)); + console.log("Staking has minter role: %s", moveToken.hasMinterRole(address(movementStakingProxy))); + + // Log balances before minting + console.log("\n=== Balances Before Mint ==="); + // log if the deployer has enough Eth to pay for the deployment + uint256 ethbalance = address(msg.sender).balance; + console.log("Deployer has balance (ETH): %s", ethbalance); + console.log("Deployer balance (MOVE): %s", moveToken.balanceOf(msg.sender)); + console.log("Staking balance (MOVE): %s", moveToken.balanceOf(address(movementStakingProxy))); + + // Mint and grant roles + moveToken.mint(msg.sender, 100000 ether); // Mint initial tokens to deployer + moveToken.grantMinterRole(msg.sender); // Allow deployer to mint + moveToken.grantMinterRole(address(movementStakingProxy)); // Allow staking to mint rewards + + // Log final state + console.log("\n=== Final State ==="); + console.log("Deployer balance after mint (MOVE): %s", moveToken.balanceOf(msg.sender)); + console.log("Deployer balance after mint (ETH): %s", address(msg.sender).balance); + console.log("Deployer has spend (ETH): %s", ethbalance - address(msg.sender).balance); + console.log("Deployer has minter role: %s", moveToken.hasMinterRole(msg.sender)); + console.log("Staking has minter role: %s", moveToken.hasMinterRole(address(movementStakingProxy))); + + // Verify deployment + console.log("\n=== Verifying Deployment ==="); + + // Verify MCR configuration + console.log("MCR Configuration:"); + MovementStaking staking = MovementStaking(movementStakingProxy); + uint256 epochDuration = staking.getEpochDuration(mcrProxy); + uint256 postconfirmerDuration = mcr.getPostconfirmerDuration(); + console.log("- Epoch Duration: %s seconds", epochDuration); + console.log("- Postconfirmer Duration: %s seconds", postconfirmerDuration); + require(epochDuration == 10, "Incorrect epoch duration"); + require(postconfirmerDuration == 5, "Incorrect postconfirmer duration"); + + // Verify Staking configuration + console.log("\nStaking Configuration:"); + uint256 stakingEpochDuration = MovementStaking(movementStakingProxy).epochDurationByDomain(mcrProxy); + console.log("- Epoch Duration for MCR domain: %s seconds", stakingEpochDuration); + require(stakingEpochDuration == 10, "Incorrect staking epoch duration"); + + // Some simple sanity checks + console.log("\ngetAcceptingEpoch(mcrProxy): %s", staking.getAcceptingEpoch(mcrProxy)); + console.log("\ngetLastPostconfirmedSuperBlockHeight(): %s", mcr.getLastPostconfirmedSuperBlockHeight()); + console.log("\nList of active attesters:"); + address[] memory stakedAttesters = staking.getStakedAttestersForAcceptingEpoch(mcrProxy); + if (stakedAttesters.length > 0) { + for (uint256 i = 0; i < stakedAttesters.length; i++) { + console.log("- Attester %s: %s", i, stakedAttesters[i]); + } + } else { + console.log("No attesters staked"); + } + console.log("\nPostconfirmer: %s", mcr.getPostconfirmer()); + + // Verify token setup + console.log("\nToken Configuration:"); + uint256 deployerBalance = moveToken.balanceOf(msg.sender); + console.log("- Deployer Balance: %s", deployerBalance); + require(deployerBalance == 100000 ether, "Incorrect deployer balance"); + require(moveToken.hasMinterRole(msg.sender), "Deployer missing minter role"); + require(moveToken.hasMinterRole(address(movementStakingProxy)), "Staking missing minter role"); + + console.log("\nDeployment verified successfully!"); + + vm.stopBroadcast(); + } +} diff --git a/protocol-units/post-confirmations/contracts/script/DeployMOVETokenDev.s.sol b/protocol-units/post-confirmations/contracts/script/DeployMOVETokenDev.s.sol new file mode 100644 index 00000000..85a2911e --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/DeployMOVETokenDev.s.sol @@ -0,0 +1,29 @@ +pragma solidity ^0.8.19; + +import "forge-std/Script.sol"; +import "../src/token/MOVETokenDev.sol"; +import {IMintableToken, MintableToken} from "../src/token/base/MintableToken.sol"; +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol"; +import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; +import {Helper} from "./helpers/Helper.sol"; + +contract DeployMOVETokenDev is Helper { + address public manager = 0x5A368EDEbF574162B84f8ECFE48e9De4f520E087; + uint256 public signer = vm.envUint("TEST_1"); + function run() external { + vm.startBroadcast(signer); + + MOVETokenDev moveTokenImplementation = new MOVETokenDev(); + TransparentUpgradeableProxy moveTokenProxy = new TransparentUpgradeableProxy( + address(moveTokenImplementation), + manager, + abi.encodeWithSignature("initialize(address)", manager) + ); + + console.log("Move Token Proxy: %s", address(moveTokenProxy)); + + vm.stopBroadcast(); + } +} diff --git a/protocol-units/post-confirmations/contracts/script/MCRDeployer.s.sol b/protocol-units/post-confirmations/contracts/script/MCRDeployer.s.sol new file mode 100644 index 00000000..87d73dc1 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/MCRDeployer.s.sol @@ -0,0 +1,80 @@ +pragma solidity ^0.8.13; + +import "forge-std/Script.sol"; +import {MCR} from "../src/settlement/MCR.sol"; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol"; +import { Helper } from "./helpers/Helper.sol"; + +contract MCRDeployer is Helper { + + function run() external virtual { + + // load config and deployments data + _loadExternalData(); + + uint256 signer = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(signer); + + // Deploy CREATE3Factory, Safes and Timelock if not deployed + _deployDependencies(); + + deployment.mcrAdmin == ZERO && deployment.mcr == ZERO && deployment.move != ZERO && deployment.staking != ZERO ? + _deployMCR() : deployment.mcrAdmin != ZERO && deployment.mcr != ZERO ? + _upgradeMCR() : revert("MCR: both admin and proxy should be registered"); + + vm.stopBroadcast(); + + // Only write to file if chainid is not running a foundry local chain + if (vm.isContext(VmSafe.ForgeContext.ScriptBroadcast)) { + _writeDeployments(); + } + } + + // •☽────✧˖°˖DANGER ZONE˖°˖✧────☾• +// Modifications to the following functions have to be throughly tested + + function _deployMCR() internal { + console.log("MCR: deploying"); + MCR mcrImplementation = new MCR(); + vm.recordLogs(); + mcrProxy = new TransparentUpgradeableProxy( + address(mcrImplementation), + address(timelock), + abi.encodeWithSignature( + mcrSignature, + address(stakingProxy), + 128, + 100 ether, + 100 ether, + config.signersLabs + ) + ); + console.log("MCR deployment records:"); + console.log("proxy", address(mcrProxy)); + deployment.mcr = address(mcrProxy); + deployment.mcrAdmin = _storeAdminDeployment(); + } + + function _upgradeMCR() internal { + console.log("MCR: upgrading"); + MCR newMCRImplementation = new MCR(); + _checkBytecodeDifference(address(newMCRImplementation), deployment.mcr); + bytes memory data = abi.encodeWithSignature( + "schedule(address,uint256,bytes,bytes32,bytes32,uint256)", + address(deployment.mcrAdmin), + 0, + abi.encodeWithSignature( + "upgradeAndCall(address,address,bytes)", + address(mcrProxy), + address(newMCRImplementation), + "" + ), + bytes32(0), + bytes32(0), + config.minDelay + ); + _proposeUpgrade(data, "mcr.json"); + } + +} diff --git a/protocol-units/post-confirmations/contracts/script/MOVETokenDeployer.s.sol b/protocol-units/post-confirmations/contracts/script/MOVETokenDeployer.s.sol new file mode 100644 index 00000000..14cd23e9 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/MOVETokenDeployer.s.sol @@ -0,0 +1,95 @@ +pragma solidity ^0.8.13; + +import "forge-std/Script.sol"; +import {MOVEToken} from "../src/token/MOVEToken.sol"; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import { Helper, ProxyAdmin } from "./helpers/Helper.sol"; +import {ICREATE3Factory} from "./helpers/Create3/ICREATE3Factory.sol"; + +// Script intended to be used for deploying the MOVE token from an EOA +// Utilizies existing safes and sets them as proposers and executors. +// The MOVEToken contract takes in the Movement Foundation address and sets it as its own admin for future upgrades. +// The whole supply is minted to the Movement Foundation Safe. +// The script also verifies that the token has the correct balances, decimals and permissions. +contract MOVETokenDeployer is Helper { + // COMMANDS + // mainnet + // forge script MOVETokenDeployer --fork-url https://eth.llamarpc.com --verify --etherscan-api-key ETHERSCAN_API_KEY + // testnet + // forge script MOVETokenDeployer --fork-url https://eth-sepolia.api.onfinality.io/public + // Safes should be already deployed + bytes32 public salt = 0x0; + bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; + + function run() external virtual { + + // load config and deployments data + _loadExternalData(); + + uint256 signer = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(signer); + + // Deploy CREATE3Factory, Safes and Timelock if not deployed + _deployDependencies(); + + deployment.moveAdmin == ZERO && deployment.move == ZERO ? + _deployMove() : deployment.moveAdmin != ZERO && deployment.move != ZERO ? + // if move is already deployed, upgrade it + _upgradeMove() : revert("MOVE: both admin and proxy should be registered"); + + require(MOVEToken(deployment.move).balanceOf(address(deployment.movementAnchorage)) == 999999998000000000, "Movement Anchorage Safe balance is wrong"); + require(MOVEToken(deployment.move).decimals() == 8, "Decimals are expected to be 8"); + require(MOVEToken(deployment.move).totalSupply() == 1000000000000000000,"Total supply is wrong"); + require(MOVEToken(deployment.move).hasRole(DEFAULT_ADMIN_ROLE, address(deployment.movementFoundationSafe)),"Movement Foundation expected to have token admin role"); + require(!MOVEToken(deployment.move).hasRole(DEFAULT_ADMIN_ROLE, address(deployment.movementLabsSafe)),"Movement Labs not expected to have token admin role"); + require(!MOVEToken(deployment.move).hasRole(DEFAULT_ADMIN_ROLE, address(timelock)),"Timelock not expected to have token admin role"); + vm.stopBroadcast(); + + if (vm.isContext(VmSafe.ForgeContext.ScriptBroadcast)) { + _writeDeployments(); + } + } + + // •☽────✧˖°˖DANGER ZONE˖°˖✧────☾• +// Modifications to the following functions have to be throughly tested + + function _deployMove() internal { + console.log("MOVE: deploying"); + MOVEToken moveImplementation = new MOVEToken(); + // genetares bytecode for CREATE3 deployment + bytes memory bytecode = abi.encodePacked( + type(TransparentUpgradeableProxy).creationCode, + abi.encode(address(moveImplementation), address(timelock), abi.encodeWithSignature(moveSignature, deployment.movementFoundationSafe, deployment.movementAnchorage)) + ); + vm.recordLogs(); + // deploys the MOVE token proxy using CREATE3 + moveProxy = TransparentUpgradeableProxy(payable(ICREATE3Factory(create3).deploy(salt, bytecode))); + console.log("MOVEToken deployment records:"); + console.log("proxy", address(moveProxy)); + deployment.move = address(moveProxy); + deployment.moveAdmin = _storeAdminDeployment(); + } + + function _upgradeMove() internal { + console.log("MOVE: upgrading"); + MOVEToken newMoveImplementation = new MOVEToken(); + _checkBytecodeDifference(address(newMoveImplementation), deployment.move); + // Prepare the data for the upgrade + bytes memory data = abi.encodeWithSignature( + "schedule(address,uint256,bytes,bytes32,bytes32,uint256)", + address(deployment.moveAdmin), + 0, + abi.encodeWithSignature( + "upgradeAndCall(address,address,bytes)", + address(deployment.move), + address(newMoveImplementation), + "" + ), + bytes32(0), + bytes32(0), + config.minDelay + ); + + _proposeUpgrade(data, "movetoken.json"); + } +} diff --git a/protocol-units/post-confirmations/contracts/script/MovementStakingDeployer.s.sol b/protocol-units/post-confirmations/contracts/script/MovementStakingDeployer.s.sol new file mode 100644 index 00000000..b487be23 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/MovementStakingDeployer.s.sol @@ -0,0 +1,76 @@ +pragma solidity ^0.8.13; + +import "forge-std/Script.sol"; +import {MovementStaking} from "../src/staking/MovementStaking.sol"; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol"; +import { Helper } from "./helpers/Helper.sol"; + +contract MovementStakingDeployer is Helper { + + function run() external virtual { + + // load config and deployments data + _loadExternalData(); + + uint256 signer = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(signer); + + // Deploy CREATE3Factory, Safes and Timelock if not deployed + _deployDependencies(); + + deployment.stakingAdmin == ZERO && deployment.staking == ZERO && deployment.move != ZERO ? + _deployStaking() : deployment.stakingAdmin != ZERO && deployment.staking != ZERO ? + _upgradeStaking() : revert("STAKING: both admin and proxy should be registered"); + + vm.stopBroadcast(); + + // Only write to file if chainid is not running a foundry local chain + if (vm.isContext(VmSafe.ForgeContext.ScriptBroadcast)) { + _writeDeployments(); + } + } + + // •☽────✧˖°˖DANGER ZONE˖°˖✧────☾• +// Modifications to the following functions have to be throughly tested + + function _deployStaking() internal { + console.log("STAKING: deploying"); + MovementStaking stakingImplementation = new MovementStaking(); + vm.recordLogs(); + stakingProxy = new TransparentUpgradeableProxy( + address(stakingImplementation), + address(timelock), + abi.encodeWithSignature(stakingSignature, address(moveProxy)) + ); + console.log("STAKING deployment records:"); + console.log("proxy", address(stakingProxy)); + deployment.staking = address(stakingProxy); + deployment.stakingAdmin = _storeAdminDeployment(); + } + + function _upgradeStaking() internal { + console.log("STAKING: upgrading"); + MovementStaking newStakingImplementation = new MovementStaking(); + _checkBytecodeDifference(address(newStakingImplementation), deployment.staking); + // Prepare the data for the upgrade + bytes memory data = abi.encodeWithSignature( + "schedule(address,uint256,bytes,bytes32,bytes32,uint256)", + address(deployment.stakingAdmin), + 0, + abi.encodeWithSignature( + "upgradeAndCall(address,address,bytes)", + address(stakingProxy), + address(newStakingImplementation), + "" + ), + bytes32(0), + bytes32(0), + config.minDelay + ); + + _proposeUpgrade(data, "staking.json"); +} + + +} diff --git a/protocol-units/post-confirmations/contracts/script/MultisigMOVETokenDeployer.s.sol b/protocol-units/post-confirmations/contracts/script/MultisigMOVETokenDeployer.s.sol new file mode 100644 index 00000000..2261e22f --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/MultisigMOVETokenDeployer.s.sol @@ -0,0 +1,158 @@ +pragma solidity ^0.8.13; + +import "forge-std/Script.sol"; +import {MOVEToken} from "../src/token/MOVEToken.sol"; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {Helper, Safe} from "./helpers/Helper.sol"; +import {Vm} from "forge-std/Vm.sol"; +import {ICREATE3Factory} from "./helpers/Create3/ICREATE3Factory.sol"; +import {Enum} from "@safe-smart-account/contracts/common/Enum.sol"; +import {stdJson} from "forge-std/StdJson.sol"; + +// Script intended to be used for deploying the MOVE token from an EOA +// Utilizies existing safes and sets them as proposers and executors. +// The MOVEToken contract takes in the Movement Foundation address and sets it as its own admin for future upgrades. +// The whole supply is minted to the Movement Foundation Safe. +// The script also verifies that the token has the correct balances, decimals and permissions. +contract MultisigMOVETokenDeployer is Helper { + using stdJson for string; + // COMMANDS + // mainnet + // forge script MultisigMOVETokenDeployer --fork-url https://eth.llamarpc.com --verify --etherscan-api-key ETHERSCAN_API_KEY + // testnet + // forge script MultisigMOVETokenDeployer --fork-url https://eth-sepolia.api.onfinality.io/public + // Safes should be already deployed + + bytes32 public salt = 0x6c0000000000000000000000018eddf77afc0a5c6d05a564a44fe37b068922c3; + bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; + + function run() external virtual { + // load config and deployments data + _loadExternalData(); + + uint256 signer = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(signer); + + // Deploy CREATE3Factory, Safes and Timelock if not deployed + _deployDependencies(); + + // This deployer solely deploys a timelock and an implementation, it leaves to multisig to execute the deployment + // of the actual token. + _proposeMultisigMove(); + + vm.stopBroadcast(); + + if (vm.isContext(VmSafe.ForgeContext.ScriptBroadcast)) { + _writeDeployments(); + } + } + + // •☽────✧˖°˖DANGER ZONE˖°˖✧────☾• + // Modifications to the following functions have to be throughly tested + + function _proposeMultisigMove() internal { + console.log("MOVE: deploying"); + MOVEToken moveImplementation = new MOVEToken(); + // genetares bytecode for CREATE3 deployment + bytes memory create3Bytecode = abi.encodePacked( + type(TransparentUpgradeableProxy).creationCode, + abi.encode( + address(moveImplementation), + address(timelock), + abi.encodeWithSignature(moveSignature, deployment.movementFoundationSafe, deployment.movementAnchorage) + ) + ); + + deployment.move = create3.getDeployed(deployment.movementDeployerSafe, salt); + console.log("MOVE: deployment address", deployment.move); + + // check if the deployment address starts with 0x3073 so we can be sure CREATE3 deployed successfully + // this is a safety check to prevent deploying to an incorrect address + // starting and ending with 3073 is a deterministic address that can be reproduced on other networks and brands the token address + // users have an extra layer of security by easily identifying the address + require(_startsWith3073(deployment.move), "MOVE: deployment address does not start with 0x3073"); + + // create bytecode the MOVE token proxy using CREATE3 + bytes memory bytecode = abi.encodeWithSignature("deploy(bytes32,bytes)", salt, create3Bytecode); + + // NOTE: digest can be used if immediately signing and executing the transaction + // bytes32 digest = Safe(payable(deployment.movementFoundationSafe)).getTransactionHash( + // address(create3), 0, bytecode, Enum.Operation.Call, 0, 0, 0, ZERO, payable(ZERO), 0 + // ); + + string memory json = "safeCall"; + // Serialize the relevant fields into JSON format + json.serialize("to", address(create3)); + string memory zero = "0"; + json.serialize("value", zero); + json.serialize("data", bytecode); + string memory operation = "OperationType.Call"; + json.serialize("chainId", chainId); + json.serialize("safeAddress", deployment.movementDeployerSafe); + string memory serializedData = json.serialize("operation", operation); + // Log the serialized JSON for debugging + console.log("json |start|", serializedData, "|end|"); + // Write the serialized data to a file + if (vm.isContext(VmSafe.ForgeContext.ScriptBroadcast)) { + vm.writeFile(string.concat(root, upgradePath, "deploymove.json"), serializedData); + } + } + + function _deployMultisigMove() internal { + console.log("MOVE: deploying"); + MOVEToken moveImplementation = new MOVEToken(); + // genetares bytecode for CREATE3 deployment + bytes memory create3Bytecode = abi.encodePacked( + type(TransparentUpgradeableProxy).creationCode, + abi.encode( + address(moveImplementation), + address(timelock), + abi.encodeWithSignature(moveSignature, deployment.movementFoundationSafe, deployment.movementAnchorage) + ) + ); + vm.recordLogs(); + // craete bytecode the MOVE token proxy using CREATE3 + bytes memory bytecode = abi.encodeWithSignature("deploy(bytes32,bytes)", salt, create3Bytecode); + bytes32 digest = Safe(payable(deployment.movementDeployerSafe)).getTransactionHash( + address(create3), 0, bytecode, Enum.Operation.Call, 0, 0, 0, ZERO, payable(ZERO), 0 + ); + + // three signers for the deployment (this is mocked and only works in foundry chain) + uint256[] memory signers = new uint256[](3); + signers[0] = vm.envUint("PRIVATE_KEY"); + signers[1] = 1; + signers[2] = 2; + + bytes memory signatures = _generateSignatures(signers, digest); + + Safe(payable(deployment.movementFoundationSafe)).execTransaction( + address(create3), 0, bytecode, Enum.Operation.Call, 0, 0, 0, ZERO, payable(ZERO), signatures + ); + // moveProxy = + console.log("MOVEToken deployment records:"); + Vm.Log[] memory logs = vm.getRecordedLogs(); + deployment.move = logs[0].emitter; + deployment.moveAdmin = logs[logs.length - 3].emitter; + console.log("proxy", deployment.move); + console.log("admin", deployment.moveAdmin); + } + + // MULTISIG WILL NEVER BE USED WITHIN THE CONTRACT PIPELINE + function _upgradeMultisigMove() internal { + console.log("MOVE: upgrading"); + MOVEToken newMoveImplementation = new MOVEToken(); + timelock.schedule( + deployment.moveAdmin, + 0, + abi.encodeWithSignature( + "upgradeAndCall(address,address,bytes)", + deployment.move, + address(newMoveImplementation), + abi.encodeWithSignature("initialize(address)", deployment.movementFoundationSafe) + ), + bytes32(0), + bytes32(0), + config.minDelay + ); + } +} diff --git a/protocol-units/post-confirmations/contracts/script/StlMoveDeployer.s.sol b/protocol-units/post-confirmations/contracts/script/StlMoveDeployer.s.sol new file mode 100644 index 00000000..2c037951 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/StlMoveDeployer.s.sol @@ -0,0 +1,74 @@ +pragma solidity ^0.8.13; + +import "forge-std/Script.sol"; +import {stlMoveToken} from "../src/token/stlMoveToken.sol"; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol"; +import { Helper } from "./helpers/Helper.sol"; + +contract StlMoveDeployer is Helper { + + function run() external virtual { + + // load config and deployments data + _loadExternalData(); + + uint256 signer = vm.envUint("PRIVATE_KEY"); + vm.startBroadcast(signer); + + // Deploy CREATE3Factory, Safes and Timelock if not deployed + _deployDependencies(); + + deployment.stlMoveAdmin == ZERO && deployment.stlMove == ZERO && deployment.move != ZERO ? + _deployStlMove() : deployment.stlMoveAdmin != ZERO && deployment.stlMove != ZERO ? + _upgradeStlMove() : revert("STL: both admin and proxy should be registered"); + + vm.stopBroadcast(); + + // Only write to file if chainid is not running a foundry local chain + if (vm.isContext(VmSafe.ForgeContext.ScriptBroadcast)) { + _writeDeployments(); + } + } + + // •☽────✧˖°˖DANGER ZONE˖°˖✧────☾• +// Modifications to the following functions have to be throughly tested + + function _deployStlMove() internal { + console.log("STL: deploying"); + stlMoveToken stlMoveImplementation = new stlMoveToken(); + vm.recordLogs(); + stlMoveProxy = new TransparentUpgradeableProxy( + address(stlMoveImplementation), + address(timelock), + abi.encodeWithSignature(stlMoveSignature, "STL Move Token", "STL", address(moveProxy)) + ); + console.log("STL deployment records:"); + console.log("proxy", address(stlMoveProxy)); + deployment.stlMove = address(stlMoveProxy); + deployment.stlMoveAdmin = _storeAdminDeployment(); + } + + function _upgradeStlMove() internal { + console.log("STL: upgrading"); + stlMoveToken newStlMoveImplementation = new stlMoveToken(); + _checkBytecodeDifference(address(newStlMoveImplementation), deployment.stlMove); + // Prepare the data for the upgrade + bytes memory data = abi.encodeWithSignature( + "schedule(address,uint256,bytes,bytes32,bytes32,uint256)", + address(deployment.stlMoveAdmin), + 0, + abi.encodeWithSignature( + "upgradeAndCall(address,address,bytes)", + address(stlMoveProxy), + address(newStlMoveImplementation), + "" + ), + bytes32(0), + bytes32(0), + config.minDelay + ); + + _proposeUpgrade(data, "stlmove.json"); + } +} diff --git a/protocol-units/post-confirmations/contracts/script/VerifyMCRDev.s.sol b/protocol-units/post-confirmations/contracts/script/VerifyMCRDev.s.sol new file mode 100644 index 00000000..9bc3c820 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/VerifyMCRDev.s.sol @@ -0,0 +1,49 @@ +pragma solidity ^0.8.19; + +/** + * Verification script for the MCR deployment. + * Checks token balances, permissions, staking functionality, and basic MCR operations. + * Run this after DeployMCRDev.s.sol to verify the system is working correctly. + */ + +import "forge-std/Script.sol"; +import "../src/token/MOVEToken.sol"; +import "../src/staking/MovementStaking.sol"; +import "../src/settlement/MCR.sol"; +import {IMintableToken, MintableToken} from "../src/token/base/MintableToken.sol"; +import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol"; + +contract VerifyMCRDev is Script { + function run() external { + // Read deployment addresses + string memory json = vm.readFile("deployment.json"); + address moveTokenProxy = vm.parseJsonAddress(json, ".moveToken"); + address mcrProxy = vm.parseJsonAddress(json, ".mcr"); + address stakingProxy = vm.parseJsonAddress(json, ".staking"); + address deployer = vm.parseJsonAddress(json, ".deployer"); + + // Contract instances + MintableToken moveToken = MintableToken(moveTokenProxy); + MCR mcr = MCR(mcrProxy); + MovementStaking staking = MovementStaking(stakingProxy); + + console.log("\n=== Verifying MCR Configuration ==="); + console.log("Epoch duration: %s seconds", mcr.getEpochDuration()); + console.log("Postconfirmer duration: %s seconds", mcr.getPostconfirmerDuration()); + + console.log("\n=== Verifying Staking Setup ==="); + console.log("MCR epoch duration in staking: %s", staking.epochDurationByDomain(mcrProxy)); + // console.log("MOVE token in staking: %s", address(staking.moveToken())); + + console.log("\n=== Verifying Token Setup ==="); + console.log("Deployer balance: %s", moveToken.balanceOf(deployer)); + console.log("Deployer has minter role: %s", moveToken.hasMinterRole(deployer)); + console.log("Staking has minter role: %s", moveToken.hasMinterRole(stakingProxy)); + + vm.startBroadcast(); + + console.log("\n=== Verification Complete ==="); + + vm.stopBroadcast(); + } +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/script/deploy-safe.sh b/protocol-units/post-confirmations/contracts/script/deploy-safe.sh new file mode 100755 index 00000000..b2bd954b --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/deploy-safe.sh @@ -0,0 +1,72 @@ +#!/bin/bash + +# Require RPC URL and private key as parameters +if [ -z "$1" ] || [ -z "$2" ]; then + echo "Error: Both RPC URL and private key are required" + echo "Usage: $0 " + echo "Example: $0 http://127.0.0.1:60743 0123456789abcdef... (private key without 0x prefix)" + exit 1 +fi + +RPC_URL=$1 +PRIVATE_KEY=$2 +echo "Using RPC URL: $RPC_URL" + +# Get the address from the private key +ADDRESS=$(cast wallet address --private-key $PRIVATE_KEY) +echo "Using address: $ADDRESS" + +# Check balance +BALANCE=$(cast balance $ADDRESS --rpc-url $RPC_URL) +echo "Current balance: $BALANCE ETH" + +if [ "$BALANCE" = "0" ]; then + echo "Error: Account has no funds. Please fund it first using:" + echo "cast send --private-key $ADDRESS --value 1ether --rpc-url $RPC_URL" + exit 1 +fi + +# Create a file to store the addresses +DEPLOYMENT_FILE="script/helpers/safe-deployments.json" +echo "{}" > $DEPLOYMENT_FILE + +# Deploy Safe singleton +echo "Deploying Safe singleton..." +SAFE_OUTPUT=$(forge create lib/safe-contracts/contracts/Safe.sol:Safe \ + --rpc-url $RPC_URL \ + --private-key $PRIVATE_KEY \ + --gas-price 100000000000 \ + --legacy) +SAFE_ADDRESS=$(echo "$SAFE_OUTPUT" | grep "Deployed to:" | awk '{print $3}') +echo "Safe deployed to: $SAFE_ADDRESS" + +# Deploy Fallback Handler +echo "Deploying Fallback Handler..." +HANDLER_OUTPUT=$(forge create lib/safe-contracts/contracts/handler/CompatibilityFallbackHandler.sol:CompatibilityFallbackHandler \ + --rpc-url $RPC_URL \ + --private-key $PRIVATE_KEY \ + --gas-price 100000000000 \ + --legacy) +HANDLER_ADDRESS=$(echo "$HANDLER_OUTPUT" | grep "Deployed to:" | awk '{print $3}') +echo "Fallback Handler deployed to: $HANDLER_ADDRESS" + +# Deploy Safe Factory +echo "Deploying Safe Factory..." +FACTORY_OUTPUT=$(forge create lib/safe-contracts/contracts/proxies/SafeProxyFactory.sol:SafeProxyFactory \ + --rpc-url $RPC_URL \ + --private-key $PRIVATE_KEY \ + --gas-price 100000000000 \ + --legacy) +FACTORY_ADDRESS=$(echo "$FACTORY_OUTPUT" | grep "Deployed to:" | awk '{print $3}') +echo "Safe Factory deployed to: $FACTORY_ADDRESS" + +# Save addresses to JSON file +cat > $DEPLOYMENT_FILE << EOF +{ + "Safe": "$SAFE_ADDRESS", + "FallbackHandler": "$HANDLER_ADDRESS", + "SafeFactory": "$FACTORY_ADDRESS" +} +EOF + +echo "Deployment addresses saved to $DEPLOYMENT_FILE" \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/script/helpers/Create3/CREATE3Factory.sol b/protocol-units/post-confirmations/contracts/script/helpers/Create3/CREATE3Factory.sol new file mode 100644 index 00000000..9b501508 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/helpers/Create3/CREATE3Factory.sol @@ -0,0 +1,37 @@ +// SPDX-License-Identifier: AGPL-3.0 +pragma solidity ^0.8.13; + +import {CREATE3} from "solmate/utils/CREATE3.sol"; + +import {ICREATE3Factory} from "./ICREATE3Factory.sol"; + +/// @title Factory for deploying contracts to deterministic addresses via CREATE3 +/// @author zefram.eth +/// @notice Enables deploying contracts using CREATE3. Each deployer (msg.sender) has +/// its own namespace for deployed addresses. +contract CREATE3Factory is ICREATE3Factory { + /// @inheritdoc ICREATE3Factory + function deploy(bytes32 salt, bytes memory creationCode) + external + payable + override + returns (address deployed) + { + // hash salt with the deployer address to give each deployer its own namespace + salt = keccak256(abi.encodePacked(msg.sender, salt)); + return CREATE3.deploy(salt, creationCode, msg.value); + } + + /// @inheritdoc ICREATE3Factory + function getDeployed(address deployer, bytes32 salt) + external + view + override + returns (address deployed) + { + // https://github.com/ethereum/EIPs/pull/3171 + // hash salt with the deployer address to give each deployer its own namespace + salt = keccak256(abi.encodePacked(deployer, salt)); + return CREATE3.getDeployed(salt); + } +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/script/helpers/Create3/ICREATE3Factory.sol b/protocol-units/post-confirmations/contracts/script/helpers/Create3/ICREATE3Factory.sol new file mode 100644 index 00000000..a1b0063f --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/helpers/Create3/ICREATE3Factory.sol @@ -0,0 +1,28 @@ +// SPDX-License-Identifier: AGPL-3.0 +pragma solidity >=0.6.0; + +/// @title Factory for deploying contracts to deterministic addresses via CREATE3 +/// @author zefram.eth +/// @notice Enables deploying contracts using CREATE3. Each deployer (msg.sender) has +/// its own namespace for deployed addresses. +interface ICREATE3Factory { + /// @notice Deploys a contract using CREATE3 + /// @dev The provided salt is hashed together with msg.sender to generate the final salt + /// @param salt The deployer-specific salt for determining the deployed contract's address + /// @param creationCode The creation code of the contract to deploy + /// @return deployed The address of the deployed contract + function deploy(bytes32 salt, bytes memory creationCode) + external + payable + returns (address deployed); + + /// @notice Predicts the address of a deployed contract + /// @dev The provided salt is hashed together with the deployer address to generate the final salt + /// @param deployer The deployer account that will call deploy() + /// @param salt The deployer-specific salt for determining the deployed contract's address + /// @return deployed The address of the contract that will be deployed + function getDeployed(address deployer, bytes32 salt) + external + view + returns (address deployed); +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/script/helpers/Helper.sol b/protocol-units/post-confirmations/contracts/script/helpers/Helper.sol new file mode 100644 index 00000000..8036ede1 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/helpers/Helper.sol @@ -0,0 +1,382 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "forge-std/Script.sol"; +import {stdJson} from "forge-std/StdJson.sol"; +import { + TransparentUpgradeableProxy, + ERC1967Utils +} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol"; +import {SafeProxyFactory} from "@safe-smart-account/contracts/proxies/SafeProxyFactory.sol"; +import {CompatibilityFallbackHandler} from "@safe-smart-account/contracts/handler/CompatibilityFallbackHandler.sol"; +import {SafeProxy} from "@safe-smart-account/contracts/proxies/SafeProxy.sol"; +import {Safe} from "@safe-smart-account/contracts/Safe.sol"; +import {Vm} from "forge-std/Vm.sol"; +import {CREATE3Factory} from "./Create3/CREATE3Factory.sol"; + +contract Helper is Script { + using stdJson for string; + + TransparentUpgradeableProxy public moveProxy; + TransparentUpgradeableProxy public stlMoveProxy; + TransparentUpgradeableProxy public stakingProxy; + TransparentUpgradeableProxy public mcrProxy; + TimelockController public timelock; + // CREATE3 exists across all major chains, we only enforce it on the same address if not deployed yet + CREATE3Factory public create3 = CREATE3Factory(0x2Dfcc7415D89af828cbef005F0d072D8b3F23183); + string public mcrSignature = "initialize(address,uint256,uint256,uint256,address[])"; + string public stakingSignature = "initialize(address)"; + string public stlMoveSignature = "initialize(string,string,address)"; + string public moveSignature = "initialize(address,address)"; + string public safeSetupSignature = "setup(address[],uint256,address,bytes,address,address,uint256,address)"; + string public root = vm.projectRoot(); + string public deploymentsPath = "/script/helpers/deployments.json"; + string public upgradePath = "/script/helpers/upgrade/"; + string public configPath = "/script/helpers/config.json"; + address public ZERO = 0x0000000000000000000000000000000000000000; + string public chainId = _uint2str(block.chainid); + uint256 public foundryChainId = 31337; + string public storageJson; + bool public allowsSameContract; + + ConfigData public config; + + struct ConfigData { + uint256 minDelay; + address[] signersDeployer; + address[] signersFoundation; + address[] signersLabs; + uint256 thresholdDeployer; + uint256 thresholdFoundation; + uint256 thresholdLabs; + } + + Deployment public deployment; + + struct Deployment { + address mcr; + address mcrAdmin; + address move; + address moveAdmin; + address movementAnchorage; + address movementDeployerSafe; + address movementFoundationSafe; + address movementLabsSafe; + address staking; + address stakingAdmin; + address stlMove; + address stlMoveAdmin; + address timelock; + } + + function _loadConfig() internal { + string memory path = string.concat(root, configPath); + string memory json = vm.readFile(path); + bytes memory rawConfigData = json.parseRaw(string(abi.encodePacked("."))); + config = abi.decode(rawConfigData, (ConfigData)); + + if (config.signersLabs[0] == ZERO) { + config.signersLabs[0] = vm.addr(vm.envUint("PRIVATE_KEY")); + // populate multisigs with signers + for (uint256 i = 1; i < config.signersLabs.length; i++) { + if (config.signersLabs[i] == ZERO) { + config.signersLabs[i] = vm.addr(i); + } + } + } + if (config.signersFoundation[0] == ZERO) { + config.signersFoundation[0] = vm.addr(vm.envUint("PRIVATE_KEY")); + // populate multisigs with signers + for (uint256 i = 1; i < config.signersFoundation.length; i++) { + if (config.signersFoundation[i] == ZERO) { + config.signersFoundation[i] = vm.addr(i); + } + } + } + } + + function _loadDeployments() internal { + // load deployments + // Inspo https://github.com/traderjoe-xyz/joe-v2/blob/main/script/deploy-core.s.sol + string memory path = string.concat(root, deploymentsPath); + string memory json = vm.readFile(path); + bytes memory rawDeploymentData = json.parseRaw(string(abi.encodePacked(".", chainId))); + deployment = abi.decode(rawDeploymentData, (Deployment)); + storageJson = json; + } + + function _loadExternalData() internal { + _loadConfig(); + _loadDeployments(); + } + + function _deploySafes() internal { + console.log("Deploying Safes"); + if (deployment.movementLabsSafe == ZERO && block.chainid != foundryChainId) { + // use canonical v1.4.1 safe factory address 0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67 if: + // - chainid is not foundry + // - safe is not deployed + SafeProxyFactory safeFactory = SafeProxyFactory(0x4e1DCf7AD4e460CfD30791CCC4F9c8a4f820ec67); + deployment.movementDeployerSafe = _deploySafe( + safeFactory, + 0x41675C099F32341bf84BFc5382aF534df5C7461a, + 0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99, + config.signersDeployer, + config.thresholdDeployer + ); + deployment.movementLabsSafe = _deploySafe( + safeFactory, + 0x41675C099F32341bf84BFc5382aF534df5C7461a, + 0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99, + config.signersLabs, + config.thresholdLabs + ); + deployment.movementFoundationSafe = _deploySafe( + safeFactory, + 0x41675C099F32341bf84BFc5382aF534df5C7461a, + 0xfd0732Dc9E303f09fCEf3a7388Ad10A83459Ec99, + config.signersFoundation, + config.thresholdFoundation + ); + } else { + if (block.chainid == foundryChainId) { + SafeProxyFactory safeFactory = new SafeProxyFactory(); + Safe safeSingleton = new Safe(); + CompatibilityFallbackHandler fallbackHandler = new CompatibilityFallbackHandler(); + deployment.movementDeployerSafe = _deploySafe( + safeFactory, + address(safeSingleton), + address(fallbackHandler), + config.signersDeployer, + config.thresholdDeployer + ); + deployment.movementLabsSafe = _deploySafe( + safeFactory, + address(safeSingleton), + address(fallbackHandler), + config.signersLabs, + config.thresholdLabs + ); + deployment.movementFoundationSafe = _deploySafe( + safeFactory, + address(safeSingleton), + address(fallbackHandler), + config.signersFoundation, + config.thresholdFoundation + ); + // repeats foundation signers + deployment.movementAnchorage = _deploySafe( + safeFactory, + address(safeSingleton), + address(fallbackHandler), + config.signersFoundation, + config.thresholdLabs + ); + } + } + console.log("Safe addresses:"); + console.log("Deployer:", address(deployment.movementDeployerSafe)); + console.log("Labs:", address(deployment.movementLabsSafe)); + console.log("Foundation:", address(deployment.movementFoundationSafe)); + } + + function _deploySafe( + SafeProxyFactory safeFactory, + address safeSingleton, + address fallbackHandler, + address[] memory signers, + uint256 threshold + ) internal returns (address safe) { + safe = payable( + address( + safeFactory.createProxyWithNonce( + safeSingleton, + abi.encodeWithSignature( + safeSetupSignature, signers, threshold, ZERO, "0x", fallbackHandler, ZERO, 0, payable(ZERO) + ), + 0 + ) + ) + ); + } + + function _deployTimelock() internal { + if (deployment.timelock == ZERO) { + timelock = new TimelockController(config.minDelay, config.signersLabs, config.signersFoundation, ZERO); + deployment.timelock = address(timelock); + } + } + + function _deployCreate3() internal { + if (address(create3).code.length == 0) { + console.log("CREATE3: deploying"); + create3 = new CREATE3Factory(); + } + } + + function _deployDependencies() internal { + _deployCreate3(); + _deploySafes(); + _deployTimelock(); + } + + function _storeAdminDeployment() internal returns (address admin) { + Vm.Log[] memory logs = vm.getRecordedLogs(); + admin = logs[logs.length - 2].emitter; + console.log("admin", admin); + } + + function _writeDeployments() internal { + string memory path = string.concat(root, deploymentsPath); + string memory json = storageJson; + string memory base = "new"; + string memory newChainData = _serializer(json, deployment); + // take values from storageJson that were not updated (e.g. 3771) and serialize them + // since transaction reverts if writeDeployments does not contain all chain data, + // we need to serialize chain data for all valid chains besides the current one + uint256[] memory validChains = new uint256[](4); + validChains[0] = 1; // ethereum + validChains[1] = 11155111; // sepolia + validChains[2] = 17000; // holesky + validChains[3] = 31337; // foundry + for (uint256 i = 0; i < validChains.length; i++) { + if (validChains[i] != block.chainid) { + _serializeChainData(base, storageJson, validChains[i]); + } + } + // new chain data + string memory data = base.serialize(chainId, newChainData); + vm.writeFile(path, data); + } + + function _serializeChainData(string memory base, string storage sJson, uint256 chain) internal { + bytes memory rawDeploymentData = sJson.parseRaw(string(abi.encodePacked(".", _uint2str(chain)))); + Deployment memory deploymentData = abi.decode(rawDeploymentData, (Deployment)); + string memory json = _uint2str(chain); + string memory chainData = _serializer(json, deploymentData); + base.serialize(_uint2str(chain), chainData); + } + + function _serializer(string memory json, Deployment memory memoryDeployment) internal returns (string memory) { + json.serialize("mcr", memoryDeployment.mcr); + json.serialize("mcrAdmin", memoryDeployment.mcrAdmin); + json.serialize("move", memoryDeployment.move); + json.serialize("moveAdmin", memoryDeployment.moveAdmin); + json.serialize("movementAnchorage", memoryDeployment.movementAnchorage); + json.serialize("movementDeployerSafe", memoryDeployment.movementDeployerSafe); + json.serialize("movementFoundationSafe", memoryDeployment.movementFoundationSafe); + json.serialize("movementLabsSafe", memoryDeployment.movementLabsSafe); + json.serialize("staking", memoryDeployment.staking); + json.serialize("stakingAdmin", memoryDeployment.stakingAdmin); + json.serialize("stlMove", memoryDeployment.stlMove); + json.serialize("stlMoveAdmin", memoryDeployment.stlMoveAdmin); + return json.serialize("timelock", memoryDeployment.timelock); + } + + function _proposeUpgrade(bytes memory data, string memory fileName) internal { + string memory json = "safeCall"; + // Serialize the relevant fields into JSON format + json.serialize("to", address(timelock)); + string memory zero = "0"; + json.serialize("value", zero); + json.serialize("data", data); + string memory operation = "OperationType.Call"; + json.serialize("chainId", chainId); + json.serialize("safeAddress", deployment.movementLabsSafe); + string memory serializedData = json.serialize("operation", operation); + // Log the serialized JSON for debugging + console.log("json |start|", serializedData, "|end|"); + // Write the serialized data to a file + if (vm.isContext(VmSafe.ForgeContext.ScriptBroadcast)) { + vm.writeFile(string.concat(root, upgradePath, fileName), serializedData); + } + } + + // string to address + function s2a(bytes memory str) public returns (address addr) { + bytes32 data = keccak256(str); + assembly { + addr := data + } + } + + function _generateSignatures(uint256[] memory privKeys, bytes32 digest) + internal + returns (bytes memory signatures) + { + require(vm.addr(privKeys[0]) == vm.addr(vm.envUint("PRIVATE_KEY")), "First signer must be the sender"); + _sortByAddress(privKeys); + for (uint256 i = 0; i < privKeys.length; i++) { + (uint8 v, bytes32 r, bytes32 s) = vm.sign(privKeys[i], digest); + signatures = abi.encodePacked(signatures, r, s, v); + } + } + + function _sortByAddress(uint256[] memory privKeys) internal { + for (uint256 i = 0; i < privKeys.length - 1; i++) { + for (uint256 j = 0; j < privKeys.length - i - 1; j++) { + if (vm.addr(privKeys[j]) > vm.addr(privKeys[j + 1])) { + (privKeys[j], privKeys[j + 1]) = (privKeys[j + 1], privKeys[j]); + } + } + } + } + + function _uint2str(uint256 _i) internal pure returns (string memory _uintAsString) { + if (_i == 0) { + return "0"; + } + uint256 j = _i; + uint256 len; + while (j != 0) { + len++; + j /= 10; + } + bytes memory bstr = new bytes(len); + uint256 k = len; + while (_i != 0) { + k = k - 1; + uint8 temp = (48 + uint8(_i - _i / 10 * 10)); + bytes1 b1 = bytes1(temp); + bstr[k] = b1; + _i /= 10; + } + return string(bstr); + } + + function _startsWith3073(address addr) internal pure returns (bool) { + bytes20 addrBytes = bytes20(addr); + return (uint16(uint8(addrBytes[0])) << 8 | uint8(addrBytes[1])) == 0x3073; + } + + function _getBytecode(address _addr) internal view returns (bytes memory code) { + assembly { + let size := extcodesize(_addr) + code := mload(0x40) + mstore(0x40, add(code, add(size, 0x20))) + mstore(code, size) + extcodecopy(_addr, add(code, 0x20), 0, size) + } + } + + function _getImplementation(address proxy) internal view returns (address implementation) { + bytes32 IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc; + implementation = address(uint160(uint256(vm.load(proxy, IMPLEMENTATION_SLOT)))); + } + + function _checkBytecodeDifference(address newImplementation, address proxy) internal { + if (allowsSameContract) { + return; + } + address currentImplementation = _getImplementation(proxy); + bytes memory newCode = _getBytecode(newImplementation); + bytes memory currentCode = _getBytecode(currentImplementation); + require(keccak256(newCode) != keccak256(currentCode), "Helper: New implementation is the same as the current one"); + } + + function _allowSameContract() internal { + allowsSameContract = true; + } +} diff --git a/protocol-units/post-confirmations/contracts/script/helpers/config.json b/protocol-units/post-confirmations/contracts/script/helpers/config.json new file mode 100644 index 00000000..40ee71ba --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/helpers/config.json @@ -0,0 +1,9 @@ +{ + "minDelay": 0, + "signersLabs": ["0x8943545177806ED17B9F23F0a21ee5948eCaa776"], + "signersFoundation": ["0x8943545177806ED17B9F23F0a21ee5948eCaa776"], + "signersDeployer": ["0x8943545177806ED17B9F23F0a21ee5948eCaa776"], + "thresholdLabs": 1, + "thresholdFoundation": 1, + "thresholdDeployer": 1 +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/script/helpers/configOLD.json b/protocol-units/post-confirmations/contracts/script/helpers/configOLD.json new file mode 100644 index 00000000..7e8a2d73 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/helpers/configOLD.json @@ -0,0 +1,24 @@ +{ + "minDelay": "172800", + "signersDeployer": [ + "0xB2105464215716e1445367BEA5668F581eF7d063", + "0x3eB69Ef2DbEDD5d58AA5E074131Cd22D5e87Ff53" + ], + "signersFoundation": [ + "0x2801A777E451094c22abCF2c1bBfd0a9c1756831", + "0xCd87972D73C3eAC3b12dA31c089cE53DcC066812", + "0x5505070Cf73f8c92Cf79a23C53Be15F55Fb70923", + "0x9d7963F30C27d54e19faA679EF2F5Af105Ac1D75", + "0x89A4e685644E5fa0F137BBabc35b7A45a20a90bE" + ], + "signersLabs": [ + "0x49F86Aee2C2187870ece0e64570D0048EaF4C751", + "0xaFf3deeb13bD2B480751189808C16e9809EeBcce", + "0x12Cbb2C9F072E955b6B95ad46213aAa984A4434D", + "0xB2105464215716e1445367BEA5668F581eF7d063", + "0x0eEd12Ca165A962cd12420DfB38407637bcA4267" + ], + "thresholdDeployer": 1, + "thresholdFoundation": 3, + "thresholdLabs": 4 +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/script/helpers/deployments.json b/protocol-units/post-confirmations/contracts/script/helpers/deployments.json new file mode 100644 index 00000000..42d503ee --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/helpers/deployments.json @@ -0,0 +1,77 @@ +{ + "1": { + "mcr": "0x0000000000000000000000000000000000000000", + "mcrAdmin": "0x0000000000000000000000000000000000000000", + "move": "0x3073f7aAA4DB83f95e9FFf17424F71D4751a3073", + "moveAdmin": "0x8365AA031806A1ac2b31a5d3b8323020FC85DfEc", + "movementAnchorage": "0xe3e86E126fcCd071Af39a0899734Ca5C8E5F4F25", + "movementDeployerSafe": "0x7aE744e3b2816F660054EAbd1a1C4935DA34Ae28", + "movementFoundationSafe": "0x074C155f09cE5fC3B65b4a9Bbb01739459C7AD63", + "movementLabsSafe": "0xd7E22951DE7aF453aAc5400d6E072E3b63BeB7E2", + "staking": "0x0000000000000000000000000000000000000000", + "stakingAdmin": "0x0000000000000000000000000000000000000000", + "stlMove": "0x0000000000000000000000000000000000000000", + "stlMoveAdmin": "0x0000000000000000000000000000000000000000", + "timelock": "0xA649f6335828f070dDDd7A8c4F5bef2b6FF7Bd51" + }, + "11155111": { + "mcr": "0x0000000000000000000000000000000000000000", + "mcrAdmin": "0x0000000000000000000000000000000000000000", + "move": "0x0000000000000000000000000000000000000000", + "moveAdmin": "0x0000000000000000000000000000000000000000", + "movementAnchorage": "0x0000000000000000000000000000000000000000", + "movementDeployerSafe": "0xDfBe79c22944b25beDF690Af3FC7CC9289E946f1", + "movementFoundationSafe": "0x00db70A9e12537495C359581b7b3Bc3a69379A00", + "movementLabsSafe": "0x493516F6dB02c9b7f649E650c5de244646022Aa0", + "staking": "0x0000000000000000000000000000000000000000", + "stakingAdmin": "0x0000000000000000000000000000000000000000", + "stlMove": "0x0000000000000000000000000000000000000000", + "stlMoveAdmin": "0x0000000000000000000000000000000000000000", + "timelock": "0xC5B4Ca6E12144dE0e8e666F738A289476bebBc02" + }, + "17000": { + "mcr": "0x0000000000000000000000000000000000000000", + "mcrAdmin": "0x0000000000000000000000000000000000000000", + "move": "0x0000000000000000000000000000000000000000", + "moveAdmin": "0x0000000000000000000000000000000000000000", + "movementAnchorage": "0x0000000000000000000000000000000000000000", + "movementDeployerSafe": "0x0000000000000000000000000000000000000000", + "movementFoundationSafe": "0x0000000000000000000000000000000000000000", + "movementLabsSafe": "0x0000000000000000000000000000000000000000", + "staking": "0x0000000000000000000000000000000000000000", + "stakingAdmin": "0x0000000000000000000000000000000000000000", + "stlMove": "0x0000000000000000000000000000000000000000", + "stlMoveAdmin": "0x0000000000000000000000000000000000000000", + "timelock": "0x0000000000000000000000000000000000000000" + }, + "31337": { + "mcr": "0x0000000000000000000000000000000000000000", + "mcrAdmin": "0x0000000000000000000000000000000000000000", + "move": "0x703848F4c85f18e3acd8196c8eC91eb0b7Bd0797", + "moveAdmin": "0x0000000000000000000000000000000000000000", + "movementAnchorage": "0x0000000000000000000000000000000000000000", + "movementDeployerSafe": "0x0000000000000000000000000000000000000000", + "movementFoundationSafe": "0x0000000000000000000000000000000000000000", + "movementLabsSafe": "0x0000000000000000000000000000000000000000", + "staking": "0x422A3492e218383753D8006C7Bfa97815B44373F", + "stakingAdmin": "0x0000000000000000000000000000000000000000", + "stlMove": "0x0000000000000000000000000000000000000000", + "stlMoveAdmin": "0x0000000000000000000000000000000000000000", + "timelock": "0x0000000000000000000000000000000000000000" + }, + "3151908": { + "mcr": "0x0000000000000000000000000000000000000000", + "mcrAdmin": "0x0000000000000000000000000000000000000000", + "move": "0x703848F4c85f18e3acd8196c8eC91eb0b7Bd0797", + "moveAdmin": "0x0000000000000000000000000000000000000000", + "movementAnchorage": "0x0000000000000000000000000000000000000000", + "movementDeployerSafe": "0x0000000000000000000000000000000000000000", + "movementFoundationSafe": "0x0000000000000000000000000000000000000000", + "movementLabsSafe": "0x0000000000000000000000000000000000000000", + "staking": "0x422A3492e218383753D8006C7Bfa97815B44373F", + "stakingAdmin": "0x0000000000000000000000000000000000000000", + "stlMove": "0x0000000000000000000000000000000000000000", + "stlMoveAdmin": "0x0000000000000000000000000000000000000000", + "timelock": "0x0000000000000000000000000000000000000000" + } +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/script/helpers/deploymentsOLD.json b/protocol-units/post-confirmations/contracts/script/helpers/deploymentsOLD.json new file mode 100644 index 00000000..78a076cd --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/helpers/deploymentsOLD.json @@ -0,0 +1,62 @@ +{ + "1": { + "mcr": "0x0000000000000000000000000000000000000000", + "mcrAdmin": "0x0000000000000000000000000000000000000000", + "move": "0x3073f7aAA4DB83f95e9FFf17424F71D4751a3073", + "moveAdmin": "0x8365AA031806A1ac2b31a5d3b8323020FC85DfEc", + "movementAnchorage": "0xe3e86E126fcCd071Af39a0899734Ca5C8E5F4F25", + "movementDeployerSafe": "0x7aE744e3b2816F660054EAbd1a1C4935DA34Ae28", + "movementFoundationSafe": "0x074C155f09cE5fC3B65b4a9Bbb01739459C7AD63", + "movementLabsSafe": "0xd7E22951DE7aF453aAc5400d6E072E3b63BeB7E2", + "staking": "0x0000000000000000000000000000000000000000", + "stakingAdmin": "0x0000000000000000000000000000000000000000", + "stlMove": "0x0000000000000000000000000000000000000000", + "stlMoveAdmin": "0x0000000000000000000000000000000000000000", + "timelock": "0xA649f6335828f070dDDd7A8c4F5bef2b6FF7Bd51" + }, + "11155111": { + "mcr": "0x0000000000000000000000000000000000000000", + "mcrAdmin": "0x0000000000000000000000000000000000000000", + "move": "0x0000000000000000000000000000000000000000", + "moveAdmin": "0x0000000000000000000000000000000000000000", + "movementAnchorage": "0x0000000000000000000000000000000000000000", + "movementDeployerSafe": "0xDfBe79c22944b25beDF690Af3FC7CC9289E946f1", + "movementFoundationSafe": "0x00db70A9e12537495C359581b7b3Bc3a69379A00", + "movementLabsSafe": "0x493516F6dB02c9b7f649E650c5de244646022Aa0", + "staking": "0x0000000000000000000000000000000000000000", + "stakingAdmin": "0x0000000000000000000000000000000000000000", + "stlMove": "0x0000000000000000000000000000000000000000", + "stlMoveAdmin": "0x0000000000000000000000000000000000000000", + "timelock": "0xC5B4Ca6E12144dE0e8e666F738A289476bebBc02" + }, + "17000": { + "mcr": "0x0000000000000000000000000000000000000000", + "mcrAdmin": "0x0000000000000000000000000000000000000000", + "move": "0x0000000000000000000000000000000000000000", + "moveAdmin": "0x0000000000000000000000000000000000000000", + "movementAnchorage": "0x0000000000000000000000000000000000000000", + "movementDeployerSafe": "0x0000000000000000000000000000000000000000", + "movementFoundationSafe": "0x0000000000000000000000000000000000000000", + "movementLabsSafe": "0x0000000000000000000000000000000000000000", + "staking": "0x0000000000000000000000000000000000000000", + "stakingAdmin": "0x0000000000000000000000000000000000000000", + "stlMove": "0x0000000000000000000000000000000000000000", + "stlMoveAdmin": "0x0000000000000000000000000000000000000000", + "timelock": "0x0000000000000000000000000000000000000000" + }, + "31337": { + "mcr": "0x0000000000000000000000000000000000000000", + "mcrAdmin": "0x0000000000000000000000000000000000000000", + "move": "0x0000000000000000000000000000000000000000", + "moveAdmin": "0x0000000000000000000000000000000000000000", + "movementAnchorage": "0x0000000000000000000000000000000000000000", + "movementDeployerSafe": "0x0000000000000000000000000000000000000000", + "movementFoundationSafe": "0x0000000000000000000000000000000000000000", + "movementLabsSafe": "0x0000000000000000000000000000000000000000", + "staking": "0x0000000000000000000000000000000000000000", + "stakingAdmin": "0x0000000000000000000000000000000000000000", + "stlMove": "0x0000000000000000000000000000000000000000", + "stlMoveAdmin": "0x0000000000000000000000000000000000000000", + "timelock": "0x0000000000000000000000000000000000000000" + } +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/script/helpers/safe-deployments.json b/protocol-units/post-confirmations/contracts/script/helpers/safe-deployments.json new file mode 100644 index 00000000..9fcc4fbc --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/helpers/safe-deployments.json @@ -0,0 +1,5 @@ +{ + "Safe": "0xb4B46bdAA835F8E4b4d8e208B6559cD267851051", + "FallbackHandler": "0x17435ccE3d1B4fA2e5f8A08eD921D57C6762A180", + "SafeFactory": "0x703848F4c85f18e3acd8196c8eC91eb0b7Bd0797" +} diff --git a/protocol-units/post-confirmations/contracts/script/helpers/upgrade/deploymove.json b/protocol-units/post-confirmations/contracts/script/helpers/upgrade/deploymove.json new file mode 100644 index 00000000..c39345ec --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/helpers/upgrade/deploymove.json @@ -0,0 +1,8 @@ +{ + "chainId": "1", + "data": "0xcdcb760a6c0000000000000000000000018eddf77afc0a5c6d05a564a44fe37b068922c300000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000eb260a0604052604051610dd2380380610dd28339810160408190526100229161036a565b828161002e828261008c565b50508160405161003d9061032e565b6001600160a01b039091168152602001604051809103905ff080158015610066573d5f803e3d5ffd5b506001600160a01b031660805261008461007f60805190565b6100ea565b505050610451565b61009582610157565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156100de576100d982826101d5565b505050565b6100e6610248565b5050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6101295f80516020610db2833981519152546001600160a01b031690565b604080516001600160a01b03928316815291841660208301520160405180910390a161015481610269565b50565b806001600160a01b03163b5f0361019157604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc5b80546001600160a01b0319166001600160a01b039290921691909117905550565b60605f80846001600160a01b0316846040516101f1919061043b565b5f60405180830381855af49150503d805f8114610229576040519150601f19603f3d011682016040523d82523d5f602084013e61022e565b606091505b50909250905061023f8583836102a6565b95945050505050565b34156102675760405163b398979f60e01b815260040160405180910390fd5b565b6001600160a01b03811661029257604051633173bdd160e11b81525f6004820152602401610188565b805f80516020610db28339815191526101b4565b6060826102bb576102b682610305565b6102fe565b81511580156102d257506001600160a01b0384163b155b156102fb57604051639996b31560e01b81526001600160a01b0385166004820152602401610188565b50805b9392505050565b8051156103155780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b6104ef806108c383390190565b80516001600160a01b0381168114610351575f80fd5b919050565b634e487b7160e01b5f52604160045260245ffd5b5f805f6060848603121561037c575f80fd5b6103858461033b565b92506103936020850161033b565b60408501519092506001600160401b038111156103ae575f80fd5b8401601f810186136103be575f80fd5b80516001600160401b038111156103d7576103d7610356565b604051601f8201601f19908116603f011681016001600160401b038111828210171561040557610405610356565b60405281815282820160200188101561041c575f80fd5b8160208401602083015e5f602083830101528093505050509250925092565b5f82518060208501845e5f920191825250919050565b60805161045b6104685f395f6010015261045b5ff3fe608060405261000c61000e565b005b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316330361007a575f356001600160e01b03191663278f794360e11b14610070576040516334ad5dbb60e21b815260040160405180910390fd5b610078610082565b565b6100786100b0565b5f806100913660048184610303565b81019061009e919061033e565b915091506100ac82826100c0565b5050565b6100786100bb61011a565b610151565b6100c98261016f565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a28051156101125761010d82826101ea565b505050565b6100ac61025c565b5f61014c7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc546001600160a01b031690565b905090565b365f80375f80365f845af43d5f803e80801561016b573d5ff35b3d5ffd5b806001600160a01b03163b5f036101a957604051634c9c8ce360e01b81526001600160a01b03821660048201526024015b60405180910390fd5b7f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc80546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b031684604051610206919061040f565b5f60405180830381855af49150503d805f811461023e576040519150601f19603f3d011682016040523d82523d5f602084013e610243565b606091505b509150915061025385838361027b565b95945050505050565b34156100785760405163b398979f60e01b815260040160405180910390fd5b6060826102905761028b826102da565b6102d3565b81511580156102a757506001600160a01b0384163b155b156102d057604051639996b31560e01b81526001600160a01b03851660048201526024016101a0565b50805b9392505050565b8051156102ea5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f8085851115610311575f80fd5b8386111561031d575f80fd5b5050820193919092039150565b634e487b7160e01b5f52604160045260245ffd5b5f806040838503121561034f575f80fd5b82356001600160a01b0381168114610365575f80fd5b9150602083013567ffffffffffffffff811115610380575f80fd5b8301601f81018513610390575f80fd5b803567ffffffffffffffff8111156103aa576103aa61032a565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156103d9576103d961032a565b6040528181528282016020018710156103f0575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f82518060208501845e5f92019182525091905056fea26469706673582212207316aab519176ee304ec10e6d1292c57367ad6dcdd543d000aca2331bc7121f664736f6c634300081a0033608060405234801561000f575f80fd5b506040516104ef3803806104ef83398101604081905261002e916100bb565b806001600160a01b03811661005c57604051631e4fbdf760e01b81525f600482015260240160405180910390fd5b6100658161006c565b50506100e8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b5f602082840312156100cb575f80fd5b81516001600160a01b03811681146100e1575f80fd5b9392505050565b6103fa806100f55f395ff3fe608060405260043610610049575f3560e01c8063715018a61461004d5780638da5cb5b146100635780639623609d1461008e578063ad3cb1cc146100a1578063f2fde38b146100de575b5f80fd5b348015610058575f80fd5b506100616100fd565b005b34801561006e575f80fd5b505f546040516001600160a01b0390911681526020015b60405180910390f35b61006161009c366004610260565b610110565b3480156100ac575f80fd5b506100d1604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516100859190610365565b3480156100e9575f80fd5b506100616100f836600461037e565b61017b565b6101056101bd565b61010e5f6101e9565b565b6101186101bd565b60405163278f794360e11b81526001600160a01b03841690634f1ef2869034906101489086908690600401610399565b5f604051808303818588803b15801561015f575f80fd5b505af1158015610171573d5f803e3d5ffd5b5050505050505050565b6101836101bd565b6001600160a01b0381166101b157604051631e4fbdf760e01b81525f60048201526024015b60405180910390fd5b6101ba816101e9565b50565b5f546001600160a01b0316331461010e5760405163118cdaa760e01b81523360048201526024016101a8565b5f80546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146101ba575f80fd5b634e487b7160e01b5f52604160045260245ffd5b5f805f60608486031215610272575f80fd5b833561027d81610238565b9250602084013561028d81610238565b9150604084013567ffffffffffffffff8111156102a8575f80fd5b8401601f810186136102b8575f80fd5b803567ffffffffffffffff8111156102d2576102d261024c565b604051601f8201601f19908116603f0116810167ffffffffffffffff811182821017156103015761030161024c565b604052818152828201602001881015610318575f80fd5b816020840160208301375f602083830101528093505050509250925092565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6103776020830184610337565b9392505050565b5f6020828403121561038e575f80fd5b813561037781610238565b6001600160a01b03831681526040602082018190525f906103bc90830184610337565b94935050505056fea2646970667358221220def1ca9b5fe53ae7582cac45dc9f62f92e0f0d18509d044fe0ed34cd71f1407864736f6c634300081a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61030000000000000000000000001e1bf2adf28e2e0549ad2474f04f3e1b0de77e9c000000000000000000000000a649f6335828f070dddd7a8c4f5bef2b6ff7bd5100000000000000000000000000000000000000000000000000000000000000600000000000000000000000000000000000000000000000000000000000000044485cc955000000000000000000000000074c155f09ce5fc3b65b4a9bbb01739459c7ad63000000000000000000000000e3e86e126fccd071af39a0899734ca5c8e5f4f25000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "operation": "OperationType.Call", + "safeAddress": "0x7aE744e3b2816F660054EAbd1a1C4935DA34Ae28", + "to": "0x2Dfcc7415D89af828cbef005F0d072D8b3F23183", + "value": "0" +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/script/helpers/upgrade/mcr.json b/protocol-units/post-confirmations/contracts/script/helpers/upgrade/mcr.json new file mode 100644 index 00000000..77c5442b --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/helpers/upgrade/mcr.json @@ -0,0 +1,8 @@ +{ + "chainId": "31337", + "data": "0x01d5062a000000000000000000000000774f4a713148fa4120d60d2552ae55ecbe1eb6d1000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000849623609d0000000000000000000000004d5a88b35d7dd11d63ac85a3b9ff7ff2ec4f5d7a000000000000000000000000061447e81544e21ac6920e82f0fd9cca31c704e50000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "operation": "OperationType.Call", + "safeAddress": "0x55e1A8f7f5bFa23226115198f5Bc5Ba75D9257E4", + "to": "0x792123fcDe5d62d8316A665962f72F9722eA15Dd", + "value": "0" +} diff --git a/protocol-units/post-confirmations/contracts/script/helpers/upgrade/staking.json b/protocol-units/post-confirmations/contracts/script/helpers/upgrade/staking.json new file mode 100644 index 00000000..bd1051e4 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/helpers/upgrade/staking.json @@ -0,0 +1 @@ +{"chainId":"31337","data":"0x01d5062a0000000000000000000000002dbd88997c031fd7230639630889e843248e0e0b000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000849623609d000000000000000000000000255c57eb74ec1c20803e7562f77258d9020b387500000000000000000000000095fde926e53e388151b8694071a7ade283facc7d0000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","operation":"OperationType.Call","safeAddress":"0x55e1A8f7f5bFa23226115198f5Bc5Ba75D9257E4","to":"0x792123fcDe5d62d8316A665962f72F9722eA15Dd","value":"0"} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/script/helpers/upgrade/stlmove.json b/protocol-units/post-confirmations/contracts/script/helpers/upgrade/stlmove.json new file mode 100644 index 00000000..b80db95c --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/helpers/upgrade/stlmove.json @@ -0,0 +1 @@ +{"chainId":"31337","data":"0x01d5062a00000000000000000000000018b30fba961c78c46cab2a990f7fcc1fc23bc6f9000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000849623609d000000000000000000000000e87a1e3fab0bd7d89d3a734ee562422d87cfeddb000000000000000000000000a3fbe451ef7fb2326a7a2f4406e1b83a67af5ad40000000000000000000000000000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000","operation":"OperationType.Call","safeAddress":"0x55e1A8f7f5bFa23226115198f5Bc5Ba75D9257E4","to":"0x792123fcDe5d62d8316A665962f72F9722eA15Dd","value":"0"} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/script/install-deps.sh b/protocol-units/post-confirmations/contracts/script/install-deps.sh new file mode 100755 index 00000000..053a8e57 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/install-deps.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +echo "🧹 Cleaning up existing dependencies..." +rm -rf lib/openzeppelin-contracts +rm -rf lib/openzeppelin-contracts-upgradeable +rm -rf lib/safe-contracts +rm -rf lib/forge-std + +echo "📦 Installing core dependencies..." +forge install foundry-rs/forge-std --no-git +forge install OpenZeppelin/openzeppelin-contracts --no-git +forge install OpenZeppelin/openzeppelin-contracts-upgradeable --no-git + +echo "🔒 Installing Safe contracts with submodules..." +forge install safe-global/safe-contracts@v1.4.1 --no-git --recurse-submodules + +echo "🔨 Verifying installation..." +forge build + +echo "✅ Dependencies installed successfully!" \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/script/verify-mcr.sh b/protocol-units/post-confirmations/contracts/script/verify-mcr.sh new file mode 100755 index 00000000..f493881f --- /dev/null +++ b/protocol-units/post-confirmations/contracts/script/verify-mcr.sh @@ -0,0 +1,53 @@ +#!/bin/bash + +# Check if RPC URL is provided +if [ -z "$1" ]; then + echo "Usage: $0 " + echo "Example: $0 http://127.0.0.1:50955" + exit 1 +fi + +RPC_URL=$1 + +# Read the deployment addresses from the latest broadcast +LATEST_BROADCAST=$(ls -t broadcast/DeployMCRDev.s.sol/*/run-latest.json | head -n1) +# Get the proxy addresses (they're created after the implementations) +MOVE_TOKEN=$(cat $LATEST_BROADCAST | jq -r '.transactions[] | select(.contractName=="ERC1967Proxy") | .contractAddress' | sed -n '1p') +STAKING_PROXY=$(cat $LATEST_BROADCAST | jq -r '.transactions[] | select(.contractName=="ERC1967Proxy") | .contractAddress' | sed -n '2p') +MCR_PROXY=$(cat $LATEST_BROADCAST | jq -r '.transactions[] | select(.contractName=="ERC1967Proxy") | .contractAddress' | sed -n '3p') +DEPLOYER=$(cat $LATEST_BROADCAST | jq -r '.transactions[0].from') +PRIVATE_KEY="39725efee3fb28614de3bacaffe4cc4bd8c436257e2c8bb887c4b5c4be45e76d" + +echo "=== Verifying MCR Deployment ===" +echo "MOVE Token: $MOVE_TOKEN" +echo "MCR Proxy: $MCR_PROXY" +echo "Staking Proxy: $STAKING_PROXY" +echo "Deployer: $DEPLOYER"./ + +echo -e "\n=== Checking MCR Configuration ===" +echo "Epoch Duration:" +cast call --rpc-url $RPC_URL $MCR_PROXY "getEpochDuration()(uint256)" +echo "Postconfirmer Duration:" +cast call --rpc-url $RPC_URL $MCR_PROXY "getPostconfirmerDuration()(uint256)" + +echo -e "\n=== Checking Staking Setup ===" +echo "Epoch Duration for MCR domain:" +cast call --rpc-url $RPC_URL $STAKING_PROXY "epochDurationByDomain(address)(uint256)" $MCR_PROXY + +echo -e "\n=== Checking Token Setup ===" +echo "Deployer Balance:" +cast call --rpc-url $RPC_URL $MOVE_TOKEN "balanceOf(address)(uint256)" $DEPLOYER +echo "Staking Contract has Minter Role:" +cast call --rpc-url $RPC_URL $MOVE_TOKEN "hasMinterRole(address)(bool)" $STAKING_PROXY + +echo -e "\n=== Testing Staking ===" +echo "Approving tokens for staking..." +cast send --rpc-url $RPC_URL $MOVE_TOKEN "approve(address,uint256)" $STAKING_PROXY 1000ether --private-key $PRIVATE_KEY +echo "Staking tokens..." +cast send --rpc-url $RPC_URL $STAKING_PROXY "stake(address,uint256)" $MCR_PROXY 1000ether --private-key $PRIVATE_KEY + +echo -e "\n=== Testing MCR Attestation ===" +echo "Submitting test attestation..." +cast send --rpc-url $RPC_URL $MCR_PROXY "attest(uint256,bytes32)" 1 0x1234567890123456789012345678901234567890123456789012345678901234 --private-key $PRIVATE_KEY + +echo -e "\n=== Verification Complete ===" \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/scripts/README.md b/protocol-units/post-confirmations/contracts/scripts/README.md new file mode 100644 index 00000000..90927e69 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/scripts/README.md @@ -0,0 +1,3 @@ +In this directory we attempt the same as with the deploy script for foundry. + +We use hardhat to deploy the contracts, since with Kurtosis, foundry did not work. diff --git a/protocol-units/post-confirmations/contracts/scripts/deploy.ts b/protocol-units/post-confirmations/contracts/scripts/deploy.ts new file mode 100644 index 00000000..5ec03b0d --- /dev/null +++ b/protocol-units/post-confirmations/contracts/scripts/deploy.ts @@ -0,0 +1,154 @@ +import { ethers } from "hardhat"; +import * as fs from 'fs'; +import * as path from 'path'; + +async function main() { + try { + console.log("Starting MCR Dev deployment..."); + const [deployer] = await ethers.getSigners(); + console.log("Deploying contracts with account:", deployer.address); + + const deployments = { + ProxyAdmin: "", + MoveToken: { implementation: "", proxy: "" }, + MovementStaking: { implementation: "", proxy: "" }, + MCR: { implementation: "", proxy: "" } + }; + + // Deploy ProxyAdmin + const ProxyAdmin = await ethers.getContractFactory("ProxyAdmin"); + const proxyAdmin = await ProxyAdmin.deploy(deployer.address); + await proxyAdmin.waitForDeployment(); + console.log("Deployed ProxyAdmin at:", await proxyAdmin.getAddress()); + deployments.ProxyAdmin = await proxyAdmin.getAddress(); + + // Deploy MintableToken implementation + console.log("Deploying MintableToken implementation..."); + const MoveToken = await ethers.getContractFactory("MintableToken"); + const moveTokenImpl = await MoveToken.deploy(); + await moveTokenImpl.waitForDeployment(); + console.log("Deployed MintableToken implementation at:", await moveTokenImpl.getAddress()); + deployments.MoveToken.implementation = await moveTokenImpl.getAddress(); + + // Deploy other implementations + const MovementStaking = await ethers.getContractFactory("MovementStaking"); + const MCR = await ethers.getContractFactory("MCR"); + const TransparentProxy = await ethers.getContractFactory("TransparentUpgradeableProxy"); + + const stakingImpl = await MovementStaking.deploy(); + await stakingImpl.waitForDeployment(); + console.log("Deployed MovementStaking implementation at:", await stakingImpl.getAddress()); + deployments.MovementStaking.implementation = await stakingImpl.getAddress(); + + const mcrImpl = await MCR.deploy(); + await mcrImpl.waitForDeployment(); + console.log("Deployed MCR implementation at:", await mcrImpl.getAddress()); + deployments.MCR.implementation = await mcrImpl.getAddress(); + + // Prepare MOVE token proxy deployment + console.log("Preparing MOVE token proxy deployment..."); + const moveTokenData = MoveToken.interface.encodeFunctionData("initialize", [ + "Move Token", + "MOVE" + ]); + + console.log("Deploying MOVE token proxy..."); + const moveTokenProxy = await TransparentProxy.deploy( + await moveTokenImpl.getAddress(), + await proxyAdmin.getAddress(), + moveTokenData + ); + await moveTokenProxy.waitForDeployment(); + console.log("Deployed MOVE token proxy at:", await moveTokenProxy.getAddress()); + deployments.MoveToken.proxy = await moveTokenProxy.getAddress(); + + // Deploy staking proxy + console.log("Deploying staking proxy..."); + // const stakingData = MovementStaking.interface.encodeFunctionData("initialize", [ + // await moveTokenProxy.getAddress() + // ]); + const stakingData = MovementStaking.interface.encodeFunctionData( + "initialize(address)", + [await moveTokenProxy.getAddress()] + ); + + + const stakingProxy = await TransparentProxy.deploy( + await stakingImpl.getAddress(), + await proxyAdmin.getAddress(), + stakingData + ); + await stakingProxy.waitForDeployment(); + console.log("Deployed staking proxy at:", await stakingProxy.getAddress()); + deployments.MovementStaking.proxy = await stakingProxy.getAddress(); + + // Deploy MCR proxy + console.log("Deploying MCR proxy..."); + const custodians = [await moveTokenProxy.getAddress()]; + console.log("Custodian Address:", custodians[0]); // Debugging output + + const mcrData = MCR.interface.encodeFunctionData( + "initialize(address,uint256,uint256,uint256,address[],uint256,address)", + [ + await stakingProxy.getAddress(), // stakingContract + 0, // lastPostconfirmedSuperBlockHeight + 5, // leadingSuperBlockTolerance + 10, // epochDuration (10 seconds) + custodians, // custodians array + 5, // postconfirmerDuration (5 seconds) + await moveTokenProxy.getAddress() // moveTokenAddress + ] + ); + + const mcrProxy = await TransparentProxy.deploy( + await mcrImpl.getAddress(), + await proxyAdmin.getAddress(), + mcrData + ); + await mcrProxy.waitForDeployment(); + console.log("Deployed MCR proxy at:", await mcrProxy.getAddress()); + deployments.MCR.proxy = await mcrProxy.getAddress(); + + // Set up roles and initial token distribution + console.log("Setting up roles and minting initial tokens..."); + const moveToken = MoveToken.attach(await moveTokenProxy.getAddress()); + const mcr = MCR.attach(await mcrProxy.getAddress()); + + // Mint initial tokens and set up roles + await moveToken.mint(deployer.address, ethers.parseEther("100000")); + await moveToken.grantMinterRole(deployer.address); + await moveToken.grantMinterRole(await stakingProxy.getAddress()); + await mcr.grantCommitmentAdmin(deployer.address); + + // Log deployment addresses and configuration + console.log("\n=== Deployment Complete ==="); + console.log("MOVE Token Proxy:", await moveTokenProxy.getAddress()); + console.log("Staking Proxy:", await stakingProxy.getAddress()); + console.log("MCR Proxy:", await mcrProxy.getAddress()); + + // Verify deployment + const deployerBalance = await moveToken.balanceOf(deployer.address); + console.log("\n=== Verification ==="); + console.log("Deployer MOVE Balance:", ethers.formatEther(deployerBalance)); + console.log("Epoch Duration:", await mcr.getEpochDuration()); + console.log("Postconfirmer Duration:", await mcr.getPostconfirmerDuration()); + + // Save deployments + const deploymentsPath = path.join(__dirname, '../deployments/local.json'); + fs.writeFileSync(deploymentsPath, JSON.stringify(deployments, null, 2)); + } catch (error) { + console.error("Detailed error:", error); + if (error instanceof Error) { + console.error("Error message:", error.message); + console.error("Error stack:", error.stack); + } + throw error; + } +} + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); diff --git a/protocol-units/post-confirmations/contracts/scripts/tasks/utils.ts b/protocol-units/post-confirmations/contracts/scripts/tasks/utils.ts new file mode 100644 index 00000000..7497fc72 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/scripts/tasks/utils.ts @@ -0,0 +1,44 @@ +import { task } from "hardhat/config"; + +// Task to check balance of an address +// Example: npx hardhat balance --network localnet --address 0x8943545177806ED17B9F23F0a21ee5948eCaa776 +task("balance", "Gets the balance of an address") + .addParam("address", "The account address") + .setAction(async (taskArgs, hre) => { + const balance = await hre.ethers.provider.getBalance(taskArgs.address); + console.log(`Balance: ${hre.ethers.formatEther(balance)} ETH`); + }); + +// Task to send ETH and show sender & recipient balances before and after +// Example: npx hardhat sendTx --network localnet --to 0x1234567890abcdef1234567890abcdef12345678 --amount 0.1 +task("sendTx", "Sends ETH and shows sender & recipient balances before and after") + .addParam("to", "The recipient address") + .addParam("amount", "The amount in ETH") + .setAction(async (taskArgs, hre) => { + const [signer] = await hre.ethers.getSigners(); + + // Fetch initial balances + const senderBalanceBefore = await hre.ethers.provider.getBalance(signer.address); + const recipientBalanceBefore = await hre.ethers.provider.getBalance(taskArgs.to); + + console.log(`Sender (${signer.address}) balance before: ${hre.ethers.formatEther(senderBalanceBefore)} ETH`); + console.log(`Recipient (${taskArgs.to}) balance before: ${hre.ethers.formatEther(recipientBalanceBefore)} ETH`); + + console.log(`Sending ${taskArgs.amount} ETH from ${signer.address} to ${taskArgs.to}...`); + + const tx = await signer.sendTransaction({ + to: taskArgs.to, + value: hre.ethers.parseEther(taskArgs.amount), + }); + + console.log("Transaction sent! Hash:", tx.hash); + await tx.wait(); + console.log("Transaction confirmed."); + + // Fetch updated balances + const senderBalanceAfter = await hre.ethers.provider.getBalance(signer.address); + const recipientBalanceAfter = await hre.ethers.provider.getBalance(taskArgs.to); + + console.log(`Sender (${signer.address}) balance after: ${hre.ethers.formatEther(senderBalanceAfter)} ETH`); + console.log(`Recipient (${taskArgs.to}) balance after: ${hre.ethers.formatEther(recipientBalanceAfter)} ETH`); + }); \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/scripts/test-deployment.ts b/protocol-units/post-confirmations/contracts/scripts/test-deployment.ts new file mode 100644 index 00000000..b450bb52 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/scripts/test-deployment.ts @@ -0,0 +1,283 @@ +import { ethers, type Wallet } from "ethers"; +import { ethers as hreEthers } from "hardhat"; +import * as fs from 'fs'; +import * as path from 'path'; +import { IMovementStaking, MCR } from "../typechain-types"; // Make sure types are generated +import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20"; // Add at top with other imports +import { AccessControl } from "@openzeppelin/contracts/access/AccessControl"; +import { IMCR } from "../typechain-types"; // Make sure types are generated +import { MCRStorage } from "../typechain-types"; // Add MCRStorage import + + + + +// - - - - - - - - - - Main - - - - - - - - - - + +async function main() { + try { + console.log("\n=== Starting Deployment Verification ===\n"); + + // Get contract addresses + const deployments = JSON.parse(fs.readFileSync( + path.join(__dirname, '../deployments/local.json'), + 'utf8' + )); + + // Setup contracts + const moveToken = await hreEthers.getContractAt("MintableToken", deployments.MoveToken.proxy) as unknown as IERC20; + const staking = await hreEthers.getContractAt("MovementStaking", deployments.MovementStaking.proxy) as unknown as IMovementStaking & AccessControl; + const mcrContract = await hreEthers.getContractAt("MCR", deployments.MCR.proxy) as unknown as MCR; + const mcr = await hreEthers.getContractAt("MCR", deployments.MCR.proxy) as unknown as IMCR; + const { deployer, staker } = await setupAccounts(); + // await testEthTransfers(staker as unknown as ethers.Wallet); + + // Fund staker with MOVE first + console.log("Funding staker with MOVE tokens..."); + const fundMoveTx = await moveToken.connect(deployer).transfer(staker.address, ethers.parseEther("3")); + await fundMoveTx.wait(); + console.log("Staker MOVE balance:", ethers.formatEther(await moveToken.balanceOf(staker.address))); + // await testMoveTransfers(moveToken, staker as unknown as ethers.Wallet); + + // Test Staking and MCR + await testStaking(staking, moveToken, deployments.MCR.proxy, staker as unknown as ethers.Wallet); + await testMCR(mcr, mcrContract, moveToken, staker as unknown as ethers.Wallet, deployer); + await testUnstaking(staking, moveToken, deployments.MCR.proxy, staker as unknown as ethers.Wallet, mcr); + + + console.log("\n=== Verification Complete ==="); + } catch (error) { + console.error("Verification failed:", error); + throw error; + } +} + +// - - - - - - - - - - The Functions - - - - - - - - - - + +// This function sets up the deployer and staker accounts +async function setupAccounts() { + const [deployer] = await hreEthers.getSigners(); + const staker = ethers.Wallet.createRandom().connect(hreEthers.provider); + console.log("Deployer account:", deployer.address); + console.log("Staker account:", staker.address); + + // Fund staker with ETH + const fundTx = await deployer.sendTransaction({ + to: staker.address, + value: ethers.parseEther("10") + }); + await fundTx.wait(); + + return { deployer, staker }; +} + +// This function tests the ETH transfers +async function testEthTransfers(staker: ethers.Wallet) { + console.log("---------- Testing ETH transfers -------------------"); + const randomAddress = ethers.Wallet.createRandom().address; + console.log("Staker sends 1 ETH to random address..."); + const tx = await staker.sendTransaction({ + to: randomAddress, + value: ethers.parseEther("1") + }); + await tx.wait(); + + const balance = await hreEthers.provider.getBalance(randomAddress); + if (balance !== ethers.parseEther("1")) { + throw new Error("ETH transfer failed"); + } + console.log("ETH transfer successful"); +} + +// This function tests the MOVE token transfers +async function testMoveTransfers(moveToken: IERC20, staker: ethers.Wallet) { + console.log("---------- Testing MOVE transfers -------------------"); + const randomAddress = ethers.Wallet.createRandom().address; + console.log("Staker sends 1 MOVE to random address..."); + + const tx = await moveToken.connect(staker).transfer(randomAddress, ethers.parseEther("1")); + await tx.wait(); + + const balance = await moveToken.balanceOf(randomAddress); + if (balance !== ethers.parseEther("1")) { + throw new Error("MOVE transfer failed"); + } + console.log("MOVE transfer successful"); +} + +// This function tests the staking functionality +async function testStaking( + staking: IMovementStaking & AccessControl, + moveToken: IERC20, + mcrAddress: string, + staker: ethers.Wallet +) { + console.log("\n=== Testing Staking Functionality ==="); + const stakeAmount = ethers.parseEther("1"); + + // Whitelist and verify + const txWhitelist = await staking.whitelistAddress(staker.address); + await txWhitelist.wait(); + if (!await staking.hasRole(await staking.WHITELIST_ROLE(), staker.address)) { + throw new Error("Whitelisting failed"); + } + + // Approve and verify + const txApprove = await moveToken.connect(staker).approve(staking.target, stakeAmount); + await txApprove.wait(); + if (await moveToken.allowance(staker.address, staking.target) !== stakeAmount) { + throw new Error("Token approval failed"); + } + + // Stake and verify + const txStake = await staking.connect(staker).stake(mcrAddress, moveToken.target, stakeAmount); + await txStake.wait(); + if (await staking.getAttesterStakeForAcceptingEpoch(mcrAddress, staker.address) !== stakeAmount) { + throw new Error("Staking failed"); + } + + console.log("Staking successful - amount:", ethers.formatEther(stakeAmount)); + + const registeredAttesters = await staking.getRegisteredAttesters(mcrAddress); + console.log("Registered Attesters:", registeredAttesters); + const stakedAttesters = await staking.getStakedAttestersForAcceptingEpoch(mcrAddress); + console.log("Staked Attesters:", stakedAttesters); +} + +// This function tests the MCR functionality +async function testMCR( + mcr: IMCR, + mcrContract: MCR, + moveToken: IERC20, + staker: ethers.Wallet, + deployer: ethers.Wallet +) { + console.log("\n=== Testing MCR Functionality ==="); + + // Grant COMMITMENT_ADMIN role to deployer + const COMMITMENT_ADMIN = await mcrContract.COMMITMENT_ADMIN(); + const txGrantAdminRole = await mcrContract.grantRole(COMMITMENT_ADMIN, deployer.address); + await txGrantAdminRole.wait(); + console.log("Commitment admin role granted to deployer"); + + const TRUSTED_ATTESTER = await mcrContract.TRUSTED_ATTESTER(); + const txGrantRole = await mcrContract.grantRole(TRUSTED_ATTESTER, staker.address); + await txGrantRole.wait(); + const hasRole = await mcrContract.hasRole(TRUSTED_ATTESTER, staker.address); + if (!hasRole) { + throw new Error("TRUSTED_ATTESTER role not granted"); + } + console.log("Attester role granted to staker: ", hasRole); + const stakerBalance = await moveToken.balanceOf(staker.address); + console.log("Staker balance:", ethers.formatEther(stakerBalance)); + + const epochDuration = await mcr.connect(staker).getEpochDuration(); + console.log("Epoch duration (seconds):", Number(epochDuration)); + const acceptingEpoch = await mcr.connect(staker).getAcceptingEpoch(); + console.log("Accepting epoch:", acceptingEpoch); + // mcr contract should set the accepting epoch to the present epoch + const presentEpoch = await mcr.connect(deployer).getPresentEpoch(); + console.log("Present epoch:", presentEpoch); + const txSetAcceptingEpoch = await mcr.connect(deployer).setAcceptingEpoch(presentEpoch - 2n); + await txSetAcceptingEpoch.wait(); + const acceptingEpoch2 = await mcr.connect(staker).getAcceptingEpoch(); + console.log("Accepting epoch after setting to present epoch:", acceptingEpoch2); + if (presentEpoch > acceptingEpoch) { + console.log("Present epoch is greater than accepting epoch, so rollover should update the accepting epoch."); + } + + // rollover the epoch + const txRollover = await mcr.connect(staker).postconfirmSuperBlocksAndRollover(); + await txRollover.wait(); + const acceptingEpoch3 = await mcr.connect(staker).getAcceptingEpoch(); + console.log("New accepting epoch after rollover:", acceptingEpoch3); + + // submit a dummy commitment + const initialPostconfirmedSuperblockHeight = await mcr.getLastPostconfirmedSuperBlockHeight(); + console.log("Initial postconfirmed superblock height:", initialPostconfirmedSuperblockHeight); + const dummyCommitment = { + height: initialPostconfirmedSuperblockHeight + 1n, + commitment: ethers.randomBytes(32), + blockId: ethers.randomBytes(32) + } as const; + const txCommit = await mcr.connect(staker).submitSuperBlockCommitment(dummyCommitment); + await txCommit.wait(); + const lastPostconfirmedSuperblockHeight = await mcr.getLastPostconfirmedSuperBlockHeight(); + console.log("Last postconfirmed superblock height:", lastPostconfirmedSuperblockHeight); + const newAcceptingEpoch = await mcr.getAcceptingEpoch(); + console.log("Accepting epoch:", newAcceptingEpoch); + + // postconfirm + const txPostconfirm = await mcr.connect(staker).postconfirmSuperBlocksAndRollover(); + await txPostconfirm.wait(); + const newPostconfirmedSuperblockHeight = await mcr.getLastPostconfirmedSuperBlockHeight(); + if (newPostconfirmedSuperblockHeight !== dummyCommitment.height) { + throw new Error("Last postconfirmed superblock height mismatch"); + } + console.log("Last postconfirmed superblock height:", newPostconfirmedSuperblockHeight); + const newAcceptingEpoch2 = await mcr.getAcceptingEpoch(); + console.log("Accepting epoch:", newAcceptingEpoch2); + const newStakerBalance = await moveToken.balanceOf(staker.address); + console.log("Staker balance:", ethers.formatEther(newStakerBalance)); + + // wait for the epoch duration time to ensure at least one rollover + await new Promise(resolve => setTimeout(resolve, Number(epochDuration))); + const txRollOverEpoch = await mcr.connect(staker).postconfirmSuperBlocksAndRollover(); + await txRollOverEpoch.wait(); + const newStakerBalance3 = await moveToken.balanceOf(staker.address); + console.log("Staker balance (latest point where it should be rewarded):", ethers.formatEther(newStakerBalance3)); +} + + +// This function tests if the staker can unstake and if the stake is removed from the attester list +async function testUnstaking( + staking: IMovementStaking & AccessControl, + moveToken: IERC20, + mcrAddress: string, + staker: ethers.Wallet, + mcr: IMCR +) { + console.log("\n=== Testing Unstaking Functionality ==="); + + // initial list of active attesters + const initialActiveAttesters = await staking.getStakedAttestersForAcceptingEpoch(mcrAddress); + console.log("Initial active attesters:", initialActiveAttesters); + + // get stake amount + const stakeAmount = await staking.getAttesterStakeForAcceptingEpoch(mcrAddress, staker.address); + console.log("Stake amount:", ethers.formatEther(stakeAmount)); + + // unstake + const txUnstake = await staking.connect(staker).unstake(mcrAddress, moveToken.target, stakeAmount); + await txUnstake.wait(); + if (await staking.getAttesterStakeForAcceptingEpoch(mcrAddress, staker.address) !== 0n) { + throw new Error("Unstaking failed"); + } + console.log("Unstaking successful"); + + // warp time into next epoch + const epochDuration = await mcr.getEpochDuration(); + await new Promise(resolve => setTimeout(resolve, Number(epochDuration))); + const txRollOverEpoch2 = await mcr.connect(staker).postconfirmSuperBlocksAndRollover(); + await txRollOverEpoch2.wait(); + if (await mcr.getAcceptingEpoch() !== 3n) { + throw new Error("Epoch rollover failed"); + } + const stakerBalance4 = await moveToken.balanceOf(staker.address); + console.log("Staker balance:", ethers.formatEther(stakerBalance4)); + + // check that the staker is removed from the active attesters list + const activeAttesters = await staking.getStakedAttestersForAcceptingEpoch(mcrAddress); + console.log("Active attesters:", activeAttesters); + if (activeAttesters.includes(staker.address)) { + throw new Error("Staker is still in the active attesters list"); + } +} + + + +main() + .then(() => process.exit(0)) + .catch((error) => { + console.error(error); + process.exit(1); + }); \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/src/proxy/ERC1967Proxy.sol b/protocol-units/post-confirmations/contracts/src/proxy/ERC1967Proxy.sol new file mode 100644 index 00000000..7b831d7e --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/proxy/ERC1967Proxy.sol @@ -0,0 +1,10 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.20; + +import "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; + +contract CustomERC1967Proxy is ERC1967Proxy { + constructor(address implementation, bytes memory _data) + ERC1967Proxy(implementation, _data) + {} +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/src/proxy/ProxyAdmin.sol b/protocol-units/post-confirmations/contracts/src/proxy/ProxyAdmin.sol new file mode 100644 index 00000000..5a374987 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/proxy/ProxyAdmin.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/src/proxy/TransparentUpgradeableProxy.sol b/protocol-units/post-confirmations/contracts/src/proxy/TransparentUpgradeableProxy.sol new file mode 100644 index 00000000..741ea676 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/proxy/TransparentUpgradeableProxy.sol @@ -0,0 +1,4 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/src/settlement/MCR.sol b/protocol-units/post-confirmations/contracts/src/settlement/MCR.sol new file mode 100644 index 00000000..b6824595 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/settlement/MCR.sol @@ -0,0 +1,681 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {MovementStaking, IMovementStaking} from "../staking/MovementStaking.sol"; +import {MCRStorage} from "./MCRStorage.sol"; +import {BaseSettlement} from "./settlement/BaseSettlement.sol"; +import {IMCR} from "./interfaces/IMCR.sol"; +import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; + +contract MCR is Initializable, BaseSettlement, MCRStorage, IMCR { + + // A role for setting commitments + bytes32 public constant COMMITMENT_ADMIN = keccak256("COMMITMENT_ADMIN"); + + // Trusted attesters admin + bytes32 public constant TRUSTED_ATTESTER = keccak256("TRUSTED_ATTESTER"); + + /// @notice Error thrown when postconfirmer term is greater than 256 blocks + error PostconfirmerDurationTooLong(); + + /// @notice Error thrown when postconfirmer term is too large for epoch duration + error PostconfirmerDurationTooLongForEpoch(); + + /// @notice Error thrown when minimum commitment age is greater than epoch duration + error minCommitmentAgeForPostconfirmationTooLong(); + + /// @notice Error thrown when maximum postconfirmer non-reactivity time is greater than epoch duration + error postconfirmerPrivilegeDurationTooLong(); + + // ---------------------------------------------------------------- + // -------- 1. Role & Permission Management ----------------------- + // ---------------------------------------------------------------- + + function grantCommitmentAdmin(address account) public { + require( + hasRole(DEFAULT_ADMIN_ROLE, msg.sender), + "ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY" + ); + grantRole(COMMITMENT_ADMIN, account); + } + + function batchGrantCommitmentAdmin(address[] memory accounts) public { + require( + hasRole(DEFAULT_ADMIN_ROLE, msg.sender), + "ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY" + ); + for (uint256 i = 0; i < accounts.length; i++) { + grantRole(COMMITMENT_ADMIN, accounts[i]); + } + } + + function grantTrustedAttester(address attester) public onlyRole(COMMITMENT_ADMIN) { + grantRole(TRUSTED_ATTESTER, attester); + } + + function batchGrantTrustedAttester(address[] memory attesters) public onlyRole(COMMITMENT_ADMIN) { + for (uint256 i = 0; i < attesters.length; i++) { + grantRole(TRUSTED_ATTESTER, attesters[i]); + } + } + + // ---------------------------------------------------------------- + // -------- 2. Contract Initialization & Configuration ------------ + // ---------------------------------------------------------------- + + function initialize( + IMovementStaking _stakingContract, + uint256 _lastPostconfirmedSuperBlockHeight, + uint256 _leadingSuperBlockTolerance, + uint256 _epochDuration, // in time units + address[] memory _custodians, + uint256 _postconfirmerDuration, // in time units + address _moveTokenAddress // the primary custodian for rewards in the staking contract + ) public initializer { + __BaseSettlement_init_unchained(); + stakingContract = _stakingContract; + leadingSuperBlockTolerance = _leadingSuperBlockTolerance; + lastPostconfirmedSuperBlockHeight = _lastPostconfirmedSuperBlockHeight; + stakingContract.registerDomain(_epochDuration, _custodians); + grantCommitmentAdmin(msg.sender); + grantTrustedAttester(msg.sender); + postconfirmerDuration = _postconfirmerDuration; + moveTokenAddress = _moveTokenAddress; + + // Set default values to 1/10th of epoch duration + // NOTE since epochduration divided by 10 may not be an exact integer, the start and end of these windows may drift within an epoch over time. + // NOTE Consequently to remain on the safe side, these values should remain a small fraction of the epoch duration. + // NOTE If they are small at most only the last fraction within an epoch will behave differently. + // TODO Examine the effects of the above. + minCommitmentAgeForPostconfirmation = _epochDuration / 10; + postconfirmerPrivilegeDuration = _epochDuration / 10; + rewardPerAttestationPoint = 1; + rewardPerPostconfirmationPoint = 1; + } + + /// @notice Accepts the genesis ceremony. + function acceptGenesisCeremony() public { + require(hasRole(DEFAULT_ADMIN_ROLE, msg.sender), "ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY"); + stakingContract.acceptGenesisCeremony(); + } + + /// @notice Sets the postconfirmer term duration, must be less than epoch duration + /// @param _postconfirmerDuration New postconfirmer term duration in time units + function setPostconfirmerDuration(uint256 _postconfirmerDuration) public onlyRole(COMMITMENT_ADMIN) { + // Ensure postconfirmer term is sufficiently small compared to epoch duration + uint256 epochDuration = stakingContract.getEpochDuration(address(this)); + + // TODO If we would use block heights instead of timestamps we could handle everything much smoother. + if (2 * _postconfirmerDuration >= epochDuration ) { + revert PostconfirmerDurationTooLongForEpoch(); + } + postconfirmerDuration = _postconfirmerDuration; + } + + function getPostconfirmerDuration() public view returns (uint256) { + return postconfirmerDuration; + } + + /// @notice Sets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment + /// @param _postconfirmerPrivilegeDuration maximum time the postconfirmer is permitted to be non-reactive to an honest superBlock commitment + function setPostconfirmerPrivilegeDuration(uint256 _postconfirmerPrivilegeDuration) public onlyRole(COMMITMENT_ADMIN) { + // Ensure max privilege time is not too large + if (_postconfirmerPrivilegeDuration >= stakingContract.getEpochDuration(address(this)) - getMinCommitmentAgeForPostconfirmation()) { + revert postconfirmerPrivilegeDurationTooLong(); + } + postconfirmerPrivilegeDuration = _postconfirmerPrivilegeDuration; + } + + /// @notice Gets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment + /// @return The maximum time the postconfirmer can be non-reactive to an honest superBlock commitment + function getPostconfirmerPrivilegeDuration() public view returns (uint256) { + return postconfirmerPrivilegeDuration; + } + + /// @notice Sets the minimum time that must pass before a commitment can be postconfirmed + /// @param _minCommitmentAgeForPostconfirmation New minimum commitment age + // TODO we also require a check when setting the epoch length that it is larger than the min commitment age + // TODO we need to set these values such that it works for postconfirmer Term and postconfirmerPrivilegeDuration, etc... there are many constraints here. + function setMinCommitmentAgeForPostconfirmation(uint256 _minCommitmentAgeForPostconfirmation) public onlyRole(COMMITMENT_ADMIN) { + // Ensure min age is less than epoch duration to allow postconfirmation within same epoch + if (_minCommitmentAgeForPostconfirmation >= stakingContract.getEpochDuration(address(this)) - getPostconfirmerPrivilegeDuration()) { + revert minCommitmentAgeForPostconfirmationTooLong(); + } + minCommitmentAgeForPostconfirmation = _minCommitmentAgeForPostconfirmation; + } + + function getMinCommitmentAgeForPostconfirmation() public view returns (uint256) { + return minCommitmentAgeForPostconfirmation; + } + + function setOpenAttestationEnabled(bool enabled) public onlyRole(COMMITMENT_ADMIN) { + openAttestationEnabled = enabled; + } + + // ---------------------------------------------------------------- + // -------- 3. Epoch & Time Management --------------------------- + // ---------------------------------------------------------------- + + /// @notice Gets the epoch duration + function getEpochDuration() public view returns (uint256) { + return stakingContract.getEpochDuration(address(this)); + } + + /// @notice Gets the time at which the current epoch started + function getEpochStartTime() public view returns (uint256) { + uint256 currentTime = block.timestamp; + return currentTime - (currentTime % stakingContract.getEpochDuration(address(this))); + } + + // gets the present epoch + function getPresentEpoch() public view returns (uint256) { + return stakingContract.getEpochByL1BlockTime(address(this)); + } + + // gets the accepting epoch + function getAcceptingEpoch() public view returns (uint256) { + return stakingContract.getAcceptingEpoch(address(this)); + } + + // gets the next accepting epoch (unless we are at genesis) + function getNextAcceptingEpochWithException() public view returns (uint256) { + return stakingContract.getNextAcceptingEpochWithException(address(this)); + } + + /// @notice Gets the time at which the current postconfirmer's term started + function getPostconfirmerStartTime() public view returns (uint256) { + uint256 currentTime = block.timestamp; + // We reset the times to match the start of epochs. This ensures every epoch has the same setup. + uint256 currentTimeCorrected = currentTime % stakingContract.getEpochDuration(address(this)); + return currentTimeCorrected - (currentTimeCorrected % postconfirmerDuration); + } + + /// @notice Determines the postconfirmer in the accepting epoch using L1 block hash as a source of randomness + // At the border between epochs this is not ideal as getPostconfirmer works on blocks and epochs works with time. + // Thus we must consider the edge cases where the postconfirmer is only active for a short time. + function getPostconfirmer() public view returns (address) { + // TODO unless we swap with everything, including epochs, we must use block.timestamp. + // However, to get easy access to L1 randomness we need to know the block at which the postconfirmer started, which is expensive (unless we count in blocks instead of time) + // TODO as long as we do not swap to block.number, the randomness below is precictable. + uint256 randSeed1 = getPostconfirmerStartTime(); + uint256 randSeed2 = getEpochStartTime(); + address[] memory attesters = stakingContract.getStakedAttestersForAcceptingEpoch(address(this)); + if (attesters.length == 0) { + return address(0); + } + uint256 postconfirmerIndex = uint256(keccak256(abi.encodePacked(randSeed1, randSeed2))) % attesters.length; // randomize the order of the attesters + return attesters[postconfirmerIndex]; + } + + /// @notice Sets the accepting epoch to a new value (must be higher than current) + /// @param newEpoch The new accepting epoch value + function setAcceptingEpoch(uint256 newEpoch) external onlyRole(COMMITMENT_ADMIN) { + // the domain which is the mcr contract must make the call to set the accepting epoch + stakingContract.setAcceptingEpoch(address(this), newEpoch); + } + + // ---------------------------------------------------------------- + // -------- 4. Commitment Management ---------- + // ---------------------------------------------------------------- + + // creates a commitment + function createSuperBlockCommitment( + uint256 height, + bytes32 commitment, + bytes32 blockId + ) public pure returns (SuperBlockCommitment memory) { + return SuperBlockCommitment(height, commitment, blockId); + } + + /// @dev submits a superBlock commitment for an attester. + function submitSuperBlockCommitmentForAttester( + address attester, + SuperBlockCommitment memory superBlockCommitment + ) internal { + // Attester has already committed to a superBlock at this height + if (commitments[superBlockCommitment.height][attester].height != 0) + revert AttesterAlreadyCommitted(); + + // note: do no uncomment the below, we want to allow this in case we have lagging attesters + // Attester has committed to an already postconfirmed superBlock + // if ( lastPostconfirmedSuperBlockHeight > superBlockCommitment.height) revert AlreadyAcceptedSuperBlock(); + // Attester has committed to a superBlock too far ahead of the last postconfirmed superBlock + if (lastPostconfirmedSuperBlockHeight + leadingSuperBlockTolerance < superBlockCommitment.height) { + revert AttesterAlreadyCommitted(); + } + + // assign the superBlock height to the present epoch if it hasn't been assigned yet + // since any attester can submit a comittment for a superBlock height, the epoch assignment could differ + // from when the superBlock gets actually postconfirmed. This is limited by by leadingSuperBlockTolerance + if (superBlockHeightAssignedEpoch[superBlockCommitment.height] == 0) { + superBlockHeightAssignedEpoch[superBlockCommitment.height] = getPresentEpoch(); + } + + // register the attester's commitment + commitments[superBlockCommitment.height][attester] = superBlockCommitment; + + // Record first seen timestamp if not already set + TrySetCommitmentFirstSeenAt(superBlockCommitment.height, superBlockCommitment.commitment, block.timestamp); + + // increment the commitment count by stake + uint256 attesterStakeForAcceptingEpoch = getAttesterStakeForAcceptingEpoch(attester); + commitmentStake[superBlockCommitment.height][superBlockCommitment.commitment] += attesterStakeForAcceptingEpoch; + + emit SuperBlockCommitmentSubmitted( + superBlockCommitment.blockId, + superBlockCommitment.commitment, + attesterStakeForAcceptingEpoch + ); + } + function submitSuperBlockCommitment(SuperBlockCommitment memory commitment) external { + require( + openAttestationEnabled || hasRole(TRUSTED_ATTESTER, msg.sender), + "UNAUTHORIZED_SUPERBLOCK_COMMITMENT" + ); + submitSuperBlockCommitmentForAttester(msg.sender, commitment); + } + + function submitBatchSuperBlockCommitment(SuperBlockCommitment[] memory superBlockCommitments) public { + require( + openAttestationEnabled || hasRole(TRUSTED_ATTESTER, msg.sender), + "UNAUTHORIZED_SUPERBLOCK_COMMITMENT" + ); + for (uint256 i = 0; i < superBlockCommitments.length; i++) { + submitSuperBlockCommitmentForAttester(msg.sender, superBlockCommitments[i]); + } + } + function getValidatorCommitmentAtSuperBlockHeight( + uint256 height, + address attester + ) public view returns (SuperBlockCommitment memory) { + return commitments[height][attester]; + } + + // gets the max tolerable superBlock height + function getMaxTolerableSuperBlockHeight() public view returns (uint256) { + return lastPostconfirmedSuperBlockHeight + leadingSuperBlockTolerance; + } + /// @notice Gets the commitment submitted by an attester for a given height + function getCommitmentByAttester(uint256 height, address attester) public view returns (SuperBlockCommitment memory) { + return commitments[height][attester]; + } + + /// @notice Gets the epoch assigned to a superblock height + function getSuperBlockHeightAssignedEpoch(uint256 height) public view returns (uint256) { + return superBlockHeightAssignedEpoch[height]; + } + + // TODO use this to limit the postconfirmations on new commits ( we need to give time to attesters to submit their commitments ) + /// @notice get the timestamp when a commitment was first seen + function getCommitmentFirstSeenAt(SuperBlockCommitment memory superBlockCommitment) public view returns (uint256) { + return commitmentFirstSeenAt[superBlockCommitment.height][superBlockCommitment.commitment]; + } + + /// @notice Sets the timestamp when a commitment was first seen + function TrySetCommitmentFirstSeenAt(uint256 height, bytes32 commitment, uint256 timestamp) internal { + if (commitmentFirstSeenAt[height][commitment] != 0) { + // do not set if already set + return; + } else if (timestamp == 0) { + // no need to set if timestamp is 0. This if may be redundant though. + return; + } + commitmentFirstSeenAt[height][commitment] = timestamp; + } + + // ---------------------------------------------------------------- + // -------- 5. Postconfirmation and Rollover Management ---------- + // ---------------------------------------------------------------- + + /// @notice Gets the height of the last postconfirmed superblock + function getLastPostconfirmedSuperBlockHeight() public view returns (uint256) { + return lastPostconfirmedSuperBlockHeight; + } + + function postconfirmSuperBlocksAndRollover() public { + postconfirmAndRolloverWithAttester(msg.sender); + } + + /// @notice The current postconfirmer can postconfirm a superBlock height, given there is a supermajority of stake on a commitment + /// @notice If the current postconfirmer is live, we should not accept postconfirmations from voluntary attesters + // TODO: this will be improved, such that voluntary attesters can postconfirm but will not be rewarded before the liveness period has ended + /// @notice If the current postconfirmer is not live, we should accept postconfirmations from any attester + // TODO: this will be improved, such that the first voluntary attester to do sowill be rewarded + function postconfirmAndRolloverWithAttester(address /* attester */) internal { + + // keep ticking through postconfirmations and rollovers as long as the postconfirmer is permitted to do + // ! rewards need to be + // ! - at least the cost for gas cost of postconfirmation + // ! - reward the postconfirmer well to incentivize postconfirmation at every height + while (attemptPostconfirmOrRollover(lastPostconfirmedSuperBlockHeight + 1)) { + } + } + + // Sets the postconfirmed commitment at a given superBlock height + function setPostconfirmedCommitmentAtBlockHeight(SuperBlockCommitment memory superBlockCommitment) public { + require( + hasRole(COMMITMENT_ADMIN, msg.sender), + "SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY" + ); + versionedPostconfirmedSuperBlocks[postconfirmedSuperBlocksVersion][superBlockCommitment.height] = superBlockCommitment; + } + + // Forces the latest attestation by setting the superBlock height + // Note: this only safe when we are running with a single validator as it does not zero out follow-on commitments. + function forceLatestCommitment(SuperBlockCommitment memory superBlockCommitment) public { + require( + hasRole(COMMITMENT_ADMIN, msg.sender), + "FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY" + ); + setPostconfirmedCommitmentAtBlockHeight(superBlockCommitment); + } + + function getPostconfirmedCommitment(uint256 height) public view returns (SuperBlockCommitment memory) { + return versionedPostconfirmedSuperBlocks[postconfirmedSuperBlocksVersion][height]; + } + /// @dev Postconfirms a superBlock commitment. + /// @dev This function and attemptPostconfirmOrRollover() could call each other recursively, so we must ensure it's safe from re-entrancy + function _postconfirmSuperBlockCommitment(SuperBlockCommitment memory superBlockCommitment, address attester) internal { + uint256 currentAcceptingEpoch = getAcceptingEpoch(); + + // get the epoch for the superBlock commitment + // SuperBlock commitment is not in the current epoch, it cannot be postconfirmed. + // TODO: double check liveness conditions for the following critera + if (superBlockHeightAssignedEpoch[superBlockCommitment.height] != currentAcceptingEpoch) { + revert UnacceptableSuperBlockCommitment(); + } + + // ensure that the lastPostconfirmedSuperBlockHeight is exactly the superBlock height - 1 + if (lastPostconfirmedSuperBlockHeight != superBlockCommitment.height - 1) { + revert UnacceptableSuperBlockCommitment(); + } + + // Record reward points for all attesters who committed to the winning commitment + address[] memory attesters = getStakedAttestersForAcceptingEpoch(); + for (uint256 i = 0; i < attesters.length; i++) { + if (commitments[superBlockCommitment.height][attesters[i]].commitment == superBlockCommitment.commitment) { + attesterRewardPoints[currentAcceptingEpoch][attesters[i]]++; + } + } + + // Award points to postconfirmer + if (!isWithinPostconfirmerPrivilegeDuration(superBlockCommitment)) { + // if we are outside the privilege window, for the postconfirmer reward anyone who postconfirms + postconfirmerRewardPoints[currentAcceptingEpoch][attester] += 1; + } else { + // if we are within the privilege window, only award points to the postconfirmer + // TODO optimization: even if the height has been volunteer postconfirmed we need to allow that that postconfirmer gets rewards, + // TODO otherwise weak postconfirmers may could get played (rich volunteer postconfirmers pay the fees and poor postconfirmers never get any reward) + // TODO but check if this is really required game theoretically. + if (getPostconfirmer() == attester) { + postconfirmerRewardPoints[currentAcceptingEpoch][attester] += 1; + } + } + + versionedPostconfirmedSuperBlocks[postconfirmedSuperBlocksVersion][superBlockCommitment.height] = superBlockCommitment; + lastPostconfirmedSuperBlockHeight = superBlockCommitment.height; + postconfirmedBy[superBlockCommitment.height] = attester; + postconfirmedAtL1BlockHeight[superBlockCommitment.height] = block.number; + postconfirmedAtL1BlockTimestamp[superBlockCommitment.height] = block.timestamp; + + // emit the superBlock postconfirmed event + emit SuperBlockPostconfirmed( + superBlockCommitment.blockId, + superBlockCommitment.commitment, + superBlockCommitment.height + ); + } + + /// @dev nonReentrant because there is no need to reenter this function. It should be called iteratively. + /// @dev Marked on the internal method to simplify risks from complex calling patterns. This also calls an external contract. + function rollOverEpoch() internal { + // Get all attesters who earned points in the current epoch + uint256 acceptingEpoch = getAcceptingEpoch(); + address[] memory attesters = getStakedAttestersForAcceptingEpoch(); + + // reward + for (uint256 i = 0; i < attesters.length; i++) { + if (attesterRewardPoints[acceptingEpoch][attesters[i]] > 0) { + // TODO: make this configurable and set it on instance creation + uint256 reward = attesterRewardPoints[acceptingEpoch][attesters[i]] * rewardPerAttestationPoint * getAttesterStakeForAcceptingEpoch(attesters[i]); + // the staking contract is the custodian + // rewards are currently paid out from the mcr domain + stakingContract.rewardFromDomain(attesters[i], reward, moveTokenAddress); + // TODO : check if we really have to keep attesterRewardPoints per epoch, or whether we could simply delete the points here for a given attester. + } + + // Add postconfirmation rewards + if (postconfirmerRewardPoints[acceptingEpoch][attesters[i]] > 0) { + uint256 reward = postconfirmerRewardPoints[acceptingEpoch][attesters[i]] * rewardPerPostconfirmationPoint * getAttesterStakeForAcceptingEpoch(attesters[i]); + stakingContract.rewardFromDomain(attesters[i], reward, moveTokenAddress); + // TODO : check if we really have to keep postconfirmerRewardPoints per epoch, or whether we could simply delete the points here for a given postconfirmer. + // TODO also the postconfirmer list is super short. typically for a given height only the postconfirmer and at most the postconfirmer and a volunteer postconfirmer. + // TODO So this can be heavily optimized. + } + } + + stakingContract.rollOverEpoch(); + } + + /// @notice Checks, for a given superBlock commitment, if the current L1 block time is within the postconfirmer's privilege window + /// @dev The postconfirmer's privilege window is the time period when only the postconfirmer will get rewarded for postconfirmation + function isWithinPostconfirmerPrivilegeDuration(SuperBlockCommitment memory superBlockCommitment) public view returns (bool) { + if (getCommitmentFirstSeenAt(superBlockCommitment) == 0) { + return false; + } + // based on the first timestamp for the commitment we can determine if the postconfirmer has been live sufficiently recently + // use getCommitmentFirstSeenAt, and the mappings + if (getCommitmentFirstSeenAt(superBlockCommitment) + + getMinCommitmentAgeForPostconfirmation() + + getPostconfirmerPrivilegeDuration() + < block.timestamp) { + return false; + } + return true; + } + + /// @dev it is possible if the accepting epoch is behind the presentEpoch that heights dont obtain enough votes in the assigned epoch. + /// @dev Moreover, due to the leadingBlockTolerance, the assigned epoch for a height could be ahead of the actual epoch. + /// @dev solution is to move to the next epoch and count votes there + function attemptPostconfirmOrRollover(uint256 superBlockHeight) internal returns (bool) { + uint256 superBlockEpoch = superBlockHeightAssignedEpoch[superBlockHeight]; + if (getLastPostconfirmedSuperBlockHeight() == 0) { + // if there is no postconfirmed superblock we are at genesis + } else { + // ensure that the superBlock height is equal or above the lastPostconfirmedSuperBlockHeight + uint256 previousSuperBlockEpoch = superBlockHeightAssignedEpoch[superBlockHeight-1]; + if (superBlockEpoch < previousSuperBlockEpoch ) { + address[] memory stakedAttesters = getStakedAttestersForAcceptingEpoch(); + // if there is at least one commitment at this superBlock height, we need to update once + for (uint256 i = 0; i < stakedAttesters.length; i++) { + if (commitments[superBlockHeight][stakedAttesters[i]].height != 0) { + superBlockHeightAssignedEpoch[superBlockHeight] = previousSuperBlockEpoch; + break; + } + } + superBlockEpoch = previousSuperBlockEpoch; + } + } + + // if the accepting epoch is far behind the superBlockEpoch (which is determined by commitments measured in L1 block time), then the protocol was not live for a while + // We keep rolling over the epoch (i.e. update stakes) until we catch up with the present epoch + while (getAcceptingEpoch() < superBlockEpoch) { + // TODO only permit rollover after some liveness criteria for the postconfirmer, as this is related to the reward model (rollovers should be rewarded) + rollOverEpoch(); + } + + // TODO only permit postconfirmation after some liveness criteria for the postconfirmer, as this is related to the reward model (postconfirmation should be rewarded) + + uint256 supermajority = (2 * getTotalStake(superBlockEpoch)) / 3 + 1; + address[] memory attesters = getStakedAttestersForAcceptingEpoch(); + + // iterate over the attester set + // TODO: randomize the order in which we check the attesters, which helps against spam of commitments. + // TODO: it may be more elegant to go through the commitments rather than the attesters.. + bool successfulPostconfirmation = false; + for (uint256 i = 0; i < attesters.length; i++) { + address attester = attesters[i]; + SuperBlockCommitment memory superBlockCommitment = commitments[superBlockHeight][attester]; + // check if the commitment has committed to the correct superBlock height + // TODO: possibly this is not needed and we can remove the height from the commitment? + if (superBlockCommitment.height != superBlockHeight) continue; + + // check the total stake on the commitment + uint256 totalStakeOnCommitment = commitmentStake[superBlockCommitment.height][superBlockCommitment.commitment]; + + if (totalStakeOnCommitment >= supermajority) { + // Check if enough time has passed since commitment was first seen + // if not enough time has passed, then no postconfirmation at this height can yet happen + uint256 firstSeen = getCommitmentFirstSeenAt(superBlockCommitment); + // we should jump out of the for loop entirely + if (block.timestamp < firstSeen + minCommitmentAgeForPostconfirmation) break; + + _postconfirmSuperBlockCommitment(superBlockCommitment, msg.sender); + successfulPostconfirmation = true; + + // TODO: for rewards we have to run through all the attesters, as we need to acknowledge that they get rewards. + + // TODO: if the attester is the current postconfirmer, we need to record that the postconfirmer has shown liveness. + // TODO: this liveness needs to be discoverable by isWithinPostconfirmerPrivilegeDuration() + + return true; + } + } + // if there was no supermajority for any commitment at that height it means that the attesters were not sufficiently live + // we rollover the epoch to give the next attesters a chance + if (!successfulPostconfirmation && getPresentEpoch() > getAcceptingEpoch()) { + rollOverEpoch(); + return true; // we have to retry the postconfirmation at the next epoch again + } + return false; + } + + // ---------------------------------------------------------------- + // -------- 6. Stake, Rewards & Slashing Mechanisms -------------- + // ---------------------------------------------------------------- + + /// @notice Gets the stake for a given tuple (custodian, attester) at a given epoch + function getStake( + uint256 epoch, + address custodian, + address attester + ) public view returns (uint256) { + return + stakingContract.getStake( + address(this), + epoch, + custodian, + attester + ); + } + + /// @notice Gets the stake for a given tuple (custodian, attester) at the accepting epoch + function getStakeForAcceptingEpoch( + address custodian, + address attester + ) public view returns (uint256) { + return getStake(getAcceptingEpoch(), custodian, attester); + } + + /// @notice Gets the stake for a given attester at a given epoch + // TODO: memorize this (<-- ? as in create a mapping?) + function getAttesterStake( + uint256 epoch, + address attester + ) public view returns (uint256) { + address[] memory custodians = stakingContract.getRegisteredCustodians( + address(this) + ); + uint256 totalStake = 0; + for (uint256 i = 0; i < custodians.length; i++) { + // for now, each custodian has weight of 1 + totalStake += getStake(epoch, custodians[i], attester); + } + return totalStake; + } + + /// @notice Gets the stake for a given attester at the accepting epoch + function getAttesterStakeForAcceptingEpoch( + address attester + ) public view returns (uint256) { + return getAttesterStake(getAcceptingEpoch(), attester); + } + + /// @notice Gets the stake for a given custodian for a given epoch + function getCustodianStake( + uint256 epoch, + address custodian + ) public view returns (uint256) { + return + stakingContract.getCustodianStake( + address(this), // domain + epoch, + custodian + ); + } + + function getTotalStake( + uint256 epoch + ) public view returns (uint256) { + // we can either use the attesterStake or the custodianStake + // the sums of attesterStake and custodianStake should equal the same value + address[] memory custodians = stakingContract.getRegisteredCustodians( + address(this) + ); + uint256 totalStake = 0; + for (uint256 i = 0; i < custodians.length; i++) { + // for now, each custodian has weight of 1 + totalStake += getCustodianStake(epoch, custodians[i]); + } + return totalStake; + } + + // gets the total stake for the current epoch for a given custodian + function getCustodianStakeForAcceptingEpoch( + address custodian + ) public view returns (uint256) { + return getCustodianStake(getAcceptingEpoch(), custodian); + } + + function getTotalStakeForAcceptingEpoch() + public + view + returns (uint256) + { + return getTotalStake(getAcceptingEpoch()); + } + + function setRewardPerAttestationPoint(uint256 rewardPerPoint) public onlyRole(COMMITMENT_ADMIN) { + rewardPerAttestationPoint = rewardPerPoint; + } + + function setRewardPerPostconfirmationPoint(uint256 rewardPerPoint) public onlyRole(COMMITMENT_ADMIN) { + rewardPerPostconfirmationPoint = rewardPerPoint; + } + + /// @notice Gets the reward points for an attester in a given epoch + function getAttesterRewardPoints(uint256 epoch, address attester) public view returns (uint256) { + return attesterRewardPoints[epoch][attester]; + } + + /// @notice Gets the reward points for a postconfirmer in a given epoch + function getPostconfirmerRewardPoints(uint256 epoch, address postconfirmer) public view returns (uint256) { + return postconfirmerRewardPoints[epoch][postconfirmer]; + } + + /// @notice Gets the attesters who have stake in the current accepting epoch + function getStakedAttestersForAcceptingEpoch() public view returns (address[] memory) { + return stakingContract.getStakedAttestersForAcceptingEpoch(address(this)); + } + + function isCommitted(uint256 height) external view returns (bool) { + return commitments[height][msg.sender].height != 0; + } + + function isPostconfirmed(uint256 height) external view returns (bool) { + return versionedPostconfirmedSuperBlocks[postconfirmedSuperBlocksVersion][height].height != 0; + } + +} diff --git a/protocol-units/post-confirmations/contracts/src/settlement/MCRStorage.sol b/protocol-units/post-confirmations/contracts/src/settlement/MCRStorage.sol new file mode 100644 index 00000000..4a3782c8 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/settlement/MCRStorage.sol @@ -0,0 +1,103 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; +import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; +import {MovementStaking, IMovementStaking} from "../staking/MovementStaking.sol"; + +contract MCRStorage { + + IMovementStaking public stakingContract; + + // The MOVE token address, which is the primary custodian for rewards in the staking contract + address public moveTokenAddress; + + // the number of superBlocks that can be submitted ahead of the lastPostconfirmedSuperBlockHeight + // this allows for things like batching to take place without some attesters locking down the attester set by pushing too far ahead + // ? this could be replaced by a 2/3 stake vote on the superBlock height to epoch assignment + // ? however, this protocol becomes more complex as you to take steps to ensure that... + // ? 1. superBlock heights have a non-decreasing mapping to epochs + // ? 2. Votes get accumulated reasonable near the end of the epoch (i.e., your vote is cast for the epoch you vote fore and the next) + // ? if howevever, you simply allow a race with the tolerance below, both of these are satisfied without the added complexity + // TODO the above explanation is not clear and needs to be rephrased or further explained + // TODO unless this is clarified or becomes relevant in the future, this comment should be removed + uint256 public leadingSuperBlockTolerance; + + // track the last postconfirmed superBlock height, so that we can require superBlocks are submitted in order and handle staking effectively + uint256 public lastPostconfirmedSuperBlockHeight; + + /// Postconfirmer term time in seconds. The postconfirmer remains the same for postconfirmerDuration period. + // The Postconfirmer term can be minimal, but it should not be too small as the postconfirmer should have some time + // to prepare and post L1-transactions that will start the validation of attestations. + uint256 public postconfirmerDuration; + + /// @notice Minimum time that must pass before a commitment can be postconfirmed + uint256 public minCommitmentAgeForPostconfirmation; + + /// @notice Max time the postconfirmer can be non-reactive to an honest superBlock commitment + uint256 public postconfirmerPrivilegeDuration; + + // TODO i added these param descriptions. are these correct? + /// Struct to store block commitment details + /// @param height The height of the block + /// @param commitment The hash of the committment + /// @param blockId The unique identifier of the block (hash of the block) + struct SuperBlockCommitment { + // currently, to simplify the api, we'll say 0 is uncommitted all other numbers are legitimate heights + uint256 height; + bytes32 commitment; + bytes32 blockId; + } + + // map each superBlock height to an epoch + mapping(uint256 superBlockHeight => uint256 epoch) public superBlockHeightAssignedEpoch; + + // track each commitment from each attester for each superBlock height + mapping(uint256 superBlockHeight => mapping(address attester => SuperBlockCommitment)) public commitments; + + // track the total stake accumulate for each commitment for each superBlock height + mapping(uint256 superBlockHeight => mapping(bytes32 commitement => uint256 stake)) public commitmentStake; + + // track when each commitment was first seen for each superBlock height + mapping(uint256 superBlockHeight => mapping(bytes32 commitment => uint256 timestamp)) public commitmentFirstSeenAt; + + // Track which attester postconfirmed a given superBlock height + mapping(uint256 superBlockHeight => address attester) public postconfirmedBy; + + // Track if postconfirmer postconfirmed a given superBlock height + // TODO this may be redundant due to one of the mappings below + mapping(uint256 superBlockHeight => bool) public postconfirmedByPostconfirmer; + + // Track the L1Block height when a superBlock height was postconfirmed + mapping(uint256 superBlockHeight => uint256 L1BlockHeight) public postconfirmedAtL1BlockHeight; + + // TODO: either the L1Block timestamp or L1Block height should be tracked, both are not needed, but keep both until we know which one is not needed + // Track the L1Block timestamp when a superBlock height was postconfirmed + mapping(uint256 superBlockHeight => uint256 L1BlockTimestamp) public postconfirmedAtL1BlockTimestamp; + + // Track the L1Block height when a superBlock height was postconfirmed by the postconfirmer + mapping(uint256 superBlockHeight => uint256 L1BlockHeight) public postconfirmedAtL1BlockHeightByPostconfirmer; + + // map superBlock height to postconfirmed superBlock hash + mapping(uint256 superBlockHeight => SuperBlockCommitment) public postconfirmedSuperBlocks; + + // whether we allow open attestation + bool public openAttestationEnabled; + + // versioned scheme for postconfirmed superBlocks + mapping(uint256 => mapping(uint256 superBlockHeight => SuperBlockCommitment)) public versionedPostconfirmedSuperBlocks; + uint256 public postconfirmedSuperBlocksVersion; + + // track reward points for attesters + mapping(uint256 epoch => mapping(address attester => uint256 points)) public attesterRewardPoints; + + // track reward points for postconfirmers + mapping(uint256 epoch => mapping(address postconfirmer => uint256 points)) public postconfirmerRewardPoints; + + // track the reward per point for attesters + uint256 public rewardPerAttestationPoint; + + // track the reward per point for postconfirmers + uint256 public rewardPerPostconfirmationPoint; + + uint256[45] internal __gap; // Reduced by 1 for new mapping + +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/src/settlement/interfaces/IMCR.sol b/protocol-units/post-confirmations/contracts/src/settlement/interfaces/IMCR.sol new file mode 100644 index 00000000..b5123876 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/settlement/interfaces/IMCR.sol @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; + +import {MCRStorage} from "../MCRStorage.sol"; + +interface IMCR { + + event SuperBlockPostconfirmed( + bytes32 indexed blockHash, + bytes32 stateCommitment, + uint256 height + ); + event SuperBlockCommitmentSubmitted( + bytes32 indexed blockHash, + bytes32 stateCommitment, + uint256 attesterStake + ); + error UnacceptableSuperBlockCommitment(); + error AttesterAlreadyCommitted(); + + /// @notice Gets the epoch duration + function getEpochDuration() external view returns (uint256); + + /// @notice Gets the postconfirmer duration + function getPostconfirmerDuration() external view returns (uint256); + + /// @notice Gets the postconfirmer + function getPostconfirmer() external view returns (address); + + /// @notice submit a superblock commitment + function submitSuperBlockCommitment(MCRStorage.SuperBlockCommitment memory commitment) external; + + /// @notice get the last postconfirmed superblock height + function getLastPostconfirmedSuperBlockHeight() external view returns (uint256); + + /// @notice get the accepting epoch + function getAcceptingEpoch() external view returns (uint256); + + /// @notice get the present epoch + function getPresentEpoch() external view returns (uint256); + + /// @notice get the postconfirmed commitment for a given height + function getPostconfirmedCommitment(uint256 height) external view returns (MCRStorage.SuperBlockCommitment memory); + + /// @notice postconfirm superblocks and rollover + function postconfirmSuperBlocksAndRollover() external; + + /// @notice Sets the accepting epoch to a new value (must be higher than current) + function setAcceptingEpoch(uint256 newEpoch) external; + + /// @notice The role that allows attesters to submit commitments + function TRUSTED_ATTESTER() external pure returns (bytes32); + + /// @notice The role that allows the commitment admin to set the accepting epoch + function COMMITMENT_ADMIN() external pure returns (bytes32); +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/src/settlement/settlement/BaseSettlement.sol b/protocol-units/post-confirmations/contracts/src/settlement/settlement/BaseSettlement.sol new file mode 100644 index 00000000..867ee5bb --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/settlement/settlement/BaseSettlement.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; + +contract BaseSettlement is + Initializable, + AccessControlUpgradeable, + UUPSUpgradeable +{ + /** + * @dev Initialize the contract + */ + function initialize() public virtual initializer { + __BaseSettlement_init(); + } + + function __BaseSettlement_init() internal onlyInitializing { + __BaseSettlement_init_unchained(); + } + + function __BaseSettlement_init_unchained() internal onlyInitializing { + _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); + } + + /** + * @dev Authorize an upgrade + * @param newImplementation The address of the new implementation + */ + function _authorizeUpgrade( + address newImplementation + ) internal override onlyRole(DEFAULT_ADMIN_ROLE) {} +} diff --git a/protocol-units/post-confirmations/contracts/src/staking/MovementStaking.sol b/protocol-units/post-confirmations/contracts/src/staking/MovementStaking.sol new file mode 100644 index 00000000..475db281 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/staking/MovementStaking.sol @@ -0,0 +1,716 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; +import {BaseStaking} from "./base/BaseStaking.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol"; +import {Address} from "@openzeppelin/contracts/utils/Address.sol"; +import {ICustodianToken} from "../token/custodian/CustodianToken.sol"; +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; +import {MovementStakingStorage, EnumerableSet} from "./MovementStakingStorage.sol"; +import {IMovementStaking} from "./interfaces/IMovementStaking.sol"; +import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; + +// TODO Error: "Contract "MovementStaking" should be marked as abstract.(3656)" +contract MovementStaking is + MovementStakingStorage, + IMovementStaking, + BaseStaking, + ReentrancyGuard +{ + using EnumerableSet for EnumerableSet.AddressSet; + + /// @notice Error thrown when trying to get epoch but duration not set + error EpochDurationNotSet(); + + function initialize(IERC20 _token) public initializer { + __BaseStaking_init_unchained(); + token = _token; + } + + /// @notice Registers a domain and sets the epoch duration + function registerDomain( + uint256 epochDuration, + address[] calldata custodians + ) external nonReentrant { + address domain = msg.sender; + epochDurationByDomain[domain] = epochDuration; + + for (uint256 i = 0; i < custodians.length; i++) { + registeredCustodiansByDomain[domain].add(custodians[i]); + } + } + + /// @notice Gets all custodians who are registered for the given domain + function getRegisteredCustodians( + address domain + ) public view returns (address[] memory) { + // todo: we probably want to figure out a better API which still allows domains to interpret custodians as they see fit + address[] memory custodians = new address[]( + registeredCustodiansByDomain[domain].length() + ); + for (uint256 i = 0; i < registeredCustodiansByDomain[domain].length(); i++) { + custodians[i] = registeredCustodiansByDomain[domain].at(i); + } + return custodians; + } + + /// @notice Gets all attesters who are registered for the given domain + function getRegisteredAttesters( + address domain + ) public view returns (address[] memory) { + address[] memory attesters = new address[]( + registeredAttestersByDomain[domain].length() + ); + for (uint256 i = 0; i < registeredAttestersByDomain[domain].length(); i++) { + attesters[i] = registeredAttestersByDomain[domain].at(i); + } + return attesters; + } + + /// @notice Gets all attesters who have stake in the current accepting epoch + function getStakedAttestersForAcceptingEpoch( + address domain + ) public view returns (address[] memory) { + // First get all registered attesters + uint256 totalAttesters = registeredAttestersByDomain[domain].length(); + + // Count attesters with stake + uint256 activeAttesterCount = 0; + for (uint256 i = 0; i < totalAttesters; i++) { + address attester = registeredAttestersByDomain[domain].at(i); + if (getAttesterStakeForAcceptingEpoch(domain, attester) > 0) { + activeAttesterCount++; + } + } + + // Create array of active attesters + address[] memory activeAttesters = new address[](activeAttesterCount); + uint256 activeIndex = 0; + for (uint256 i = 0; i < totalAttesters; i++) { + address attester = registeredAttestersByDomain[domain].at(i); + if (getAttesterStakeForAcceptingEpoch(domain, attester) > 0) { + activeAttesters[activeIndex] = attester; + activeIndex++; + } + } + + return activeAttesters; + } + + /// @notice Gets the epoch duration for the given domain + function getEpochDuration(address domain) public view returns (uint256) { + return epochDurationByDomain[domain]; + } + + /// @notice Sets the accepting epoch for a given domain + /// @param domain The domain address + /// @param newEpoch The new accepting epoch value + function setAcceptingEpoch(address domain, uint256 newEpoch) external { + require(newEpoch <= getEpochByL1BlockTime(address(domain)), "NEW_EPOCH_MUST_BE_LESS_THAN_PRESENT_EPOCH"); + require(newEpoch > getAcceptingEpoch(domain), "NEW_EPOCH_MUST_BE_HIGHER_THAN_CURRENT_EPOCH"); + require(msg.sender == domain, "UNAUTHORIZED"); + currentAcceptingEpochByDomain[domain] = newEpoch; + } + + function acceptGenesisCeremony() public nonReentrant { + address domain = msg.sender; + + if (domainGenesisAccepted[domain]) revert GenesisAlreadyAccepted(); + domainGenesisAccepted[domain] = true; + + assert(epochDurationByDomain[domain] > 0); + + // roll over from 0 (genesis) to current epoch by L1Block time + currentAcceptingEpochByDomain[domain] = getEpochByL1BlockTime(domain); + + for (uint256 i = 0; i < registeredAttestersByDomain[domain].length(); i++) { + address attester = registeredAttestersByDomain[domain].at(i); + + for (uint256 j = 0; j < registeredCustodiansByDomain[domain].length(); j++) { + address custodian = registeredCustodiansByDomain[domain].at(j); + + // get the genesis stake for the attester + uint256 attesterStake = getStake( + domain, + 0, + custodian, + attester + ); + + // roll over the genesis stake to the current epoch + // except if the current epoch is 0, because we are already in the first epoch + if (getAcceptingEpoch(domain) > 0) { + if (getAcceptingEpoch(domain) > 0) { + _addStake( + domain, + getAcceptingEpoch(domain), + custodian, + attester, + attesterStake + ); + } + } + } + } + } + + function _addStake( + address domain, + uint256 epoch, + address custodian, + address attester, + uint256 amount + ) internal { + stakesByDomainEpochCustodianAttester[domain][epoch][custodian][attester] += amount; + stakesByDomainEpochCustodian[domain][epoch][custodian] += amount; + } + + function _removeStake( + address domain, + uint256 epoch, + address custodian, + address attester, + uint256 amount + ) internal { + stakesByDomainEpochCustodianAttester[domain][epoch][custodian][attester] -= amount; + stakesByDomainEpochCustodian[domain][epoch][custodian] -= amount; + } + + function _addUnstake( + address domain, + uint256 epoch, + address custodian, + address attester, + uint256 amount + ) internal { + unstakesByDomainEpochCustodianAttester[domain][epoch][custodian][attester] += amount; + } + + function _removeUnstake( + address domain, + uint256 epoch, + address custodian, + address attester, + uint256 amount + ) internal { + unstakesByDomainEpochCustodianAttester[domain][epoch][custodian][attester] -= amount; + } + + function _setUnstake( + address domain, + uint256 epoch, + address custodian, + address attester, + uint256 amount + ) internal { + unstakesByDomainEpochCustodianAttester[domain][epoch][custodian][attester] = amount; + } + + // gets the would be epoch for the current L1-block time. + // TODO: for liveness of the protocol it should be possible that newer epochs can accept L2-block-batches that are before the current epoch (IF the previous epoch has stopped being live) + function getEpochByL1BlockTime(address domain) public view returns (uint256) { + if (epochDurationByDomain[domain] == 0) revert EpochDurationNotSet(); + return block.timestamp / epochDurationByDomain[domain]; + } + + // gets the current epoch up to which superBlocks have been accepted + function getAcceptingEpoch(address domain) public view returns (uint256) { + return currentAcceptingEpochByDomain[domain]; + } + + /// @notice Gets the next accepting epoch number + /// @dev Special handling for genesis state (epoch 0): + /// @dev If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes + function getNextAcceptingEpochWithException(address domain) public view returns (uint256) { + return getAcceptingEpoch(domain) == 0 ? 0 : getAcceptingEpoch(domain) + 1; + } + + /// @notice Gets the next present epoch number + /// @dev Special handling for genesis state (accepting epoch 0): + /// @dev If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes + function getNextPresentEpochWithException(address domain) public view returns (uint256) { + return getAcceptingEpoch(domain) == 0 ? 0 : getEpochByL1BlockTime(domain) + 1; + } + + /// @dev gets the stake for a given epoch for a given {attester,custodian} tuple + function getStake( + address domain, + uint256 epoch, + address custodian, + address attester + ) public view returns (uint256) { + return stakesByDomainEpochCustodianAttester[domain][epoch][custodian][attester]; + } + + /// @dev gets the stake for the accepting epoch for a given {attester,custodian} tuple + function getStakeForAcceptingEpoch( + address domain, + address custodian, + address attester + ) public view returns (uint256) { + return + getStake( + domain, + getAcceptingEpoch(domain), + custodian, + attester + ); + } + + /// @dev gets the unstake for a given epoch for a given {attester,custodian} tuple + + function getUnstake( + address domain, + uint256 epoch, + address custodian, + address attester + ) public view returns (uint256) { + return unstakesByDomainEpochCustodianAttester[domain][epoch][custodian][attester]; + } + + /// @dev gets the unstake for the accepting epoch for a given {attester,custodian} tuple + function getUnstakeForAcceptingEpoch( + address domain, + address custodian, + address attester + ) public view returns (uint256) { + return + getUnstake( + domain, + getAcceptingEpoch(domain), + custodian, + attester + ); + } + + /// @dev gets the total stake for a given epoch for a given custodian + function getCustodianStake( + address domain, + uint256 epoch, + address custodian + ) public view returns (uint256) { + return stakesByDomainEpochCustodian[domain][epoch][custodian]; + } + + /// @dev gets the total stake for the accepting epoch for a given custodian + function getCustodianStakeForAcceptingEpoch( + address domain, + address custodian + ) public view returns (uint256) { + return + getCustodianStake(domain, getAcceptingEpoch(domain), custodian); + } + + function getAttesterStake(address domain, uint256 epoch, address attester) public view returns (uint256) { + uint256 attesterStake = 0; + for (uint256 i = 0; i < registeredCustodiansByDomain[domain].length(); i++) { + attesterStake += getStake(domain, epoch, registeredCustodiansByDomain[domain].at(i), attester); + } + return attesterStake; + } + + function getAttesterStakeForAcceptingEpoch(address domain, address attester) public view returns (uint256) { + return getAttesterStake(domain, getAcceptingEpoch(domain), attester); + } + + /// @notice Stakes for the next epoch + function stake( + address domain, + IERC20 custodian, + uint256 amount + ) external onlyRole(WHITELIST_ROLE) nonReentrant { + // add the attester to the list of attesters + registeredAttestersByDomain[domain].add(msg.sender); + + // add the custodian to the list of custodians + // registeredCustodiansByDomain[domain].add(address(custodian)); // Note: we don't want this to take place by default as it opens up an opportunity for a gas attack by generating a large number of custodians for the domain contract to track + + // check the balance of the token before transfer + uint256 balanceBefore = token.balanceOf(address(this)); + + // transfer the stake to the staking contract + // if the transfer is not using a custodian, the custodian is the token itself + // hence this works + // ! In general with this pattern, the custodian must be careful about not over-approving the token. + custodian.transferFrom(msg.sender, address(this), amount); + + // require that the balance of the actual token has increased by the amount + if (token.balanceOf(address(this)) != balanceBefore + amount) + revert CustodianTransferAmountMismatch(); + + // set the attester to stake for the next accepting epoch + _addStake( + domain, + // TODO should this not be getNextAcceptingEpochWithException(domain)? + // getNextPresentEpochWithException(domain), + getNextAcceptingEpochWithException(domain), + address(custodian), + msg.sender, + amount + ); + + // Let the world know that the attester has staked + emit AttesterStaked( + domain, + getNextAcceptingEpochWithException(domain), + address(custodian), + msg.sender, + amount + ); + } + + // unstakes an amount for the next epoch + function unstake( + address domain, + address custodian, + uint256 amount + ) external onlyRole(WHITELIST_ROLE) nonReentrant { + // indicate that we are going to unstake this amount in the next epoch + // ! this doesn't actually happen until we roll over the epoch + // note: by tracking in the next epoch we need to make sure when we roll over an epoch we check the amount rolled over from stake by the unstake in the next epoch + _addUnstake( + domain, + // TODO should this not be getNextAcceptingEpochWithException(domain)? + // getNextPresentEpochWithException(domain), + getNextAcceptingEpochWithException(domain), + custodian, + msg.sender, + amount + ); + + emit AttesterUnstaked( + domain, + getNextAcceptingEpochWithException(domain), + custodian, + msg.sender, + amount + ); + } + + // rolls over the stake and unstake for a given attester + function _rollOverAttester( + address domain, + uint256 epochNumber, + address custodian, + address attester + ) internal { + // the amount of stake rolled over is stake[currentAcceptingEpoch] - unstake[nextEpoch] + uint256 stakeAmount = getStake( + domain, + epochNumber, + custodian, + attester + ); + uint256 unstakeAmount = getUnstake( + domain, + epochNumber + 1, + custodian, + attester + ); + if (unstakeAmount > stakeAmount) { + unstakeAmount = stakeAmount; + } + uint256 remainder = stakeAmount - unstakeAmount; + + _addStake(domain, epochNumber + 1, custodian, attester, remainder); + + // the unstake is paid out from the staking contract (all stakes are collected in the staking contract) + // note: this is the only place this takes place + // there's not risk of double payout, so long as rollOverattester is only called once per epoch + // this should be guaranteed by the implementation, but we may want to create a withdrawal mapping to ensure this + if (unstakeAmount > 0) { + _payAttesterFromContractDirectly(address(this), attester, custodian, unstakeAmount); + } + + emit AttesterEpochRolledOver( + attester, + epochNumber, + custodian, + stakeAmount, + unstakeAmount + ); + } + + function _rollOverEpoch(address domain, uint256 epochNumber) internal { + // iterate over the attester set + // * complexity here can be reduced by actually mapping attesters to their token and custodian + for (uint256 i = 0; i < registeredAttestersByDomain[domain].length(); i++) { + address attester = registeredAttestersByDomain[domain].at(i); + + for (uint256 j = 0; j < registeredCustodiansByDomain[domain].length(); j++) { + address custodian = registeredCustodiansByDomain[domain].at(j); + + _rollOverAttester(domain, epochNumber, custodian, attester); + } + } + + // increment the current epoch + currentAcceptingEpochByDomain[domain] = epochNumber + 1; + + emit EpochRolledOver(domain, epochNumber); + } + + function rollOverEpoch() external { + _rollOverEpoch(msg.sender, getAcceptingEpoch(msg.sender)); + } + + /** + * @dev Slash an attester's stake + * @param domain The domain of the attester + * @param epoch The epoch in which the slash is attempted + * @param custodian The custodian of the token + * @param attester The attester to slash + * @param amount The amount to slash + */ + function _slashStake( + address domain, + uint256 epoch, + address custodian, + address attester, + uint256 amount + ) internal { + // stake slash will always target this epoch + uint256 targetEpoch = epoch; + uint256 stakeForEpoch = getStake( + domain, + targetEpoch, + custodian, + attester + ); + + // deduct the amount from the attester's stake, account for underflow + if (stakeForEpoch < amount) { + _removeStake( + domain, + targetEpoch, + custodian, + attester, + stakeForEpoch + ); + } else { + _removeStake(domain, targetEpoch, custodian, attester, amount); + } + } + + /** + * @dev Slash an attester's unstake + * @param domain The domain of the attester + * @param epoch The epoch in which the slash is attempted, i.e., epoch - 1 of the epoch where the unstake will be removed + * @param custodian The custodian of the token + * @param attester The attester to slash + */ + function _slashUnstake( + address domain, + uint256 epoch, + address custodian, + address attester + ) internal { + // unstake slash will always target the next epoch + uint256 stakeForEpoch = getStake( + domain, + epoch, + custodian, + attester + ); + uint256 targetEpoch = epoch + 1; + uint256 unstakeForEpoch = getUnstake( + domain, + targetEpoch, + custodian, + attester + ); + + if (unstakeForEpoch > stakeForEpoch) { + // if you are trying to unstake more than is staked + + // set the unstake to the maximum possible amount + _setUnstake( + domain, + targetEpoch, + custodian, + attester, + stakeForEpoch + ); + } + } + + function slash( + address[] calldata custodians, + address[] calldata attesters, + uint256[] calldata amounts, + uint256[] calldata refundAmounts + ) public nonReentrant { + for (uint256 i = 0; i < attesters.length; i++) { + // issue a refund that is the min of the stake balance, the amount to be slashed, and the refund amount + // this is to prevent a Domain from trying to have this contract pay out more than has been staked + uint256 refundAmount = Math.min( + getStake( + msg.sender, + getAcceptingEpoch(attesters[i]), + custodians[i], + attesters[i] + ), + Math.min(amounts[i], refundAmounts[i]) + ); + _payAttesterWithSelector( + address(this), // this contract is paying the attester, it should always have enough balance + attesters[i], + custodians[i], + refundAmount + ); + + // slash both stake and unstake so that the weight of the attester is reduced and they can't withdraw the unstake at the next epoch + _slashStake( + msg.sender, + getAcceptingEpoch(msg.sender), + custodians[i], + attesters[i], + amounts[i] + ); + + _slashUnstake( + msg.sender, + getAcceptingEpoch(msg.sender), + custodians[i], + attesters[i] + ); + } + } + + /// @notice Routes attester payment to appropriate function based on conditions + /// @param from The address initiating the payment (this contract or external) + /// @param attester The address receiving the payment + /// @param custodian The custodian token address (or base token if direct payment) + /// @param amount The amount to pay + function _payAttesterWithSelector( + address from, + address attester, + address custodian, + uint256 amount + ) internal { + if (from == address(this)) { + // this contract is paying the attester + if (address(token) == custodian) { + // if there isn't a custodian, just transfer the base token + _payAttesterFromContractDirectly(from, attester, custodian, amount); + } else { + // approve the custodian to spend the base token and purchase custodial token + _payAttesterFromContractViaCustodian(from, attester, custodian, amount); + } + } else { + // This can be used by the domain to pay the attester, but it's just as convenient for the domain to reward the attester directly. + // This is, currently, there is no added benefit of issuing a reward through this contract--other than Riccardian clarity. + + // somebody else is trying to pay the attester, e.g., the domain + if (address(token) == custodian) { + // if there isn't a custodian, transfer from the sender + _payAttesterFromExternalDirectly(from, attester, custodian, amount); + } else { + // purchase the custodial token for the attester from sender + _payAttesterFromExternalViaCustodian(from, attester, custodian, amount); + } + } + } + + /// @notice Contract pays attester directly with base token + // if there isn't a custodian, just transfer the base token + function _payAttesterFromContractDirectly(address from, address attester, address custodian, uint256 amount) internal { + require(from == address(this), "Only contract can call directly 1"); + require(address(token) == custodian, "Must use base token"); + token.transfer(attester, amount); + } + + /// @notice Contract pays attester through custodian token + function _payAttesterFromContractViaCustodian(address from, address attester, address custodian, uint256 amount) internal { + require(from == address(this), "Only contract can call directly 2"); + require(address(token) != custodian, "Must use custodian token"); + token.approve(custodian, amount); + ICustodianToken(custodian).buyCustodialToken(attester, amount); + } + + /// @notice External account pays attester directly with base token + // somebody else is trying to pay the attester, e.g., the domain + // This can be used by the domain to pay the attester, but it's just as convenient for the domain to reward the attester directly. + // This is, currently, there is no added benefit of issuing a reward through this contract--other than Riccardian clarity. + function _payAttesterFromExternalDirectly(address from, address attester, address custodian, uint256 amount) internal { + require(msg.sender != address(this), "Only external calls"); + require(address(token) == custodian, "Must use base token"); + token.transferFrom(from, attester, amount); + } + + /// @notice External account pays attester through custodian token + function _payAttesterFromExternalViaCustodian(address from, address attester, address custodian, uint256 amount) internal { + require(msg.sender != address(this), "Only external calls"); + require(address(token) != custodian, "Must use custodian token"); + ICustodianToken(custodian).buyCustodialTokenFrom(from, attester, amount); + } + + /// @notice Domain rewards an attester + /// @param attester The attester to reward + /// @param amount The amount to reward + /// @param custodian The custodian of the token from which to reward the attester, here it is the domain + function rewardFromDomain( + address attester, + uint256 amount, + address custodian // here it is the domain + ) public nonReentrant { + _payAttesterFromExternalDirectly(msg.sender, attester, custodian, amount); + } + + /// @notice An array of custodians reward an array of attesters + /// @param attesters The attesters to reward + /// @param amounts The amounts to reward + /// @param custodians The custodians of the token from which to reward the attesters + function rewardArray( + address[] calldata attesters, + uint256[] calldata amounts, + address[] calldata custodians + ) public nonReentrant { + // note: you may want to apply this directly to the attester's stake if the Domain sets an automatic restake policy + for (uint256 i = 0; i < attesters.length; i++) { + _payAttesterFromExternalDirectly(msg.sender, attesters[i], custodians[i], amounts[i]); + } + } + + + + /// @notice Whitelist an address to be used as an attester or custodian. + /// @notice Whitelisting means that the address is allowed to stake and unstake + function whitelistAddress( + address addr + ) external onlyRole(DEFAULT_ADMIN_ROLE) { + grantRole(WHITELIST_ROLE, addr); + } + + function removeAddressFromWhitelist( + address addr + ) external onlyRole(DEFAULT_ADMIN_ROLE) { + revokeRole(WHITELIST_ROLE, addr); + } + + /// @notice Computes total stake across all custodians and attesters for an epoch + function computeAllStake( + address domain, + uint256 epoch + ) public view returns (uint256) { + address[] memory custodians = getRegisteredCustodians(domain); + address[] memory attesters = getRegisteredAttesters(domain); + uint256 totalStake = 0; + + for (uint256 i = 0; i < custodians.length; i++) { + for (uint256 j = 0; j < attesters.length; j++) { + totalStake += getStake(domain, epoch, custodians[i], attesters[j]); + } + } + return totalStake; + } + + /// @notice Computes total stake across all custodians and attesters for the current accepting epoch + /// @param domain The domain to compute total stake for + function computeAllStakeForAcceptingEpoch( + address domain + ) public view returns (uint256) { + return computeAllStake(domain, getAcceptingEpoch(domain)); + } + +} diff --git a/protocol-units/post-confirmations/contracts/src/staking/MovementStakingStorage.sol b/protocol-units/post-confirmations/contracts/src/staking/MovementStakingStorage.sol new file mode 100644 index 00000000..7e84282e --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/staking/MovementStakingStorage.sol @@ -0,0 +1,50 @@ +// SPDX-License-Identifier: UNLICENSED +pragma solidity ^0.8.13; +import { SafeERC20 } from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import { IERC20 } from "@openzeppelin/contracts/interfaces/IERC20.sol"; +import { EnumerableSet } from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; + +contract MovementStakingStorage { + + using SafeERC20 for IERC20; + using EnumerableSet for EnumerableSet.AddressSet; + + // the token used for staking + IERC20 public token; + + /// @dev the duration of each epoch in seconds. + /// The stakes are organized into epochs, and where epochs are measured in L1-block timestamps. + mapping(address domain => uint256 epochDuration) public epochDurationByDomain; + /// @dev the current epoch for each domain. Commitments are submitted only for the current epoch + /// and validators may not submit commitments to epochs that are far in the past. + /// Hence, we need to treat each epoch separately. + mapping(address domain => uint256 currentAcceptingEpoch) public currentAcceptingEpochByDomain; + // Track registered attesters for each domain + mapping(address domain => EnumerableSet.AddressSet attester) internal registeredAttestersByDomain; + mapping(address domain => EnumerableSet.AddressSet custodian) internal registeredCustodiansByDomain; + + // preserved records of stake by address per epoch + /// @dev this is a mapping of domain => epoch => custodian => attester => stake + mapping(address domain => + mapping(uint256 epoch => + mapping(address custodian => + mapping(address attester => uint256 stake)))) public stakesByDomainEpochCustodianAttester; + + // preserved records of unstake by address per epoch + /// @dev this is a mapping of domain => epoch => custodian => attester => unstake + mapping(address domain => + mapping(uint256 epoch => + mapping(address custodian => + mapping(address attester => uint256 stake)))) public unstakesByDomainEpochCustodianAttester; + + // track the total stake of the epoch (computed at rollover) + /// @dev this is a mapping of domain => epoch => custodian => stake + mapping(address domain => + mapping(uint256 epoch => + mapping(address custodian => uint256 stake))) public stakesByDomainEpochCustodian; + + mapping(address domain => bool) public domainGenesisAccepted; + + // the whitelist role needed to stake/unstake + bytes32 public constant WHITELIST_ROLE = keccak256("WHITELIST_ROLE"); +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/src/staking/base/BaseStaking.sol b/protocol-units/post-confirmations/contracts/src/staking/base/BaseStaking.sol new file mode 100644 index 00000000..beae0e53 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/staking/base/BaseStaking.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; + +contract BaseStaking is Initializable, AccessControlUpgradeable, UUPSUpgradeable { + + /** + * @dev Initialize the contract + */ + function initialize() public virtual initializer { + __BaseStaking_init(); + } + + function __BaseStaking_init() internal onlyInitializing { + __BaseStaking_init_unchained(); + } + + function __BaseStaking_init_unchained() internal onlyInitializing { + _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); + } + + /** + * @dev Authorize an upgrade + * @param newImplementation The address of the new implementation + */ + function _authorizeUpgrade(address newImplementation) internal override onlyRole(DEFAULT_ADMIN_ROLE) {} + +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/src/staking/interfaces/IMovementStaking.sol b/protocol-units/post-confirmations/contracts/src/staking/interfaces/IMovementStaking.sol new file mode 100644 index 00000000..f4479e2e --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/staking/interfaces/IMovementStaking.sol @@ -0,0 +1,110 @@ +pragma solidity ^0.8.13; + +import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol"; + +// canonical order: domain, epoch, custodian, attester, stake =? decas +interface IMovementStaking { + function registerDomain( + uint256 epochDuration, + address[] calldata custodians + ) external; + function acceptGenesisCeremony() external; + function getEpochByL1BlockTime(address) external view returns (uint256); + function getAcceptingEpoch(address) external view returns (uint256); + function getNextAcceptingEpochWithException(address) external view returns (uint256); + function getNextPresentEpochWithException(address) external view returns (uint256); + function getStake( + address domain, + uint256 epoch, + address custodian, + address attester + ) external view returns (uint256); + function getStakeForAcceptingEpoch( + address domain, + address custodian, + address attester + ) external view returns (uint256); + function getUnstake( + address domain, + uint256 epoch, + address custodian, + address attester + ) external view returns (uint256); + function getUnstakeForAcceptingEpoch( + address domain, + address custodian, + address attester + ) external view returns (uint256); + function getCustodianStake( + address domain, + uint256 epoch, + address custodian + ) external view returns (uint256); + function getCustodianStakeForAcceptingEpoch( + address domain, + address custodian + ) external view returns (uint256); + function stake(address domain, IERC20 custodian, uint256 amount) external; + function unstake( + address domain, + address custodian, + uint256 amount + ) external; + function getRegisteredCustodians( + address domain + ) external view returns (address[] memory); + function getRegisteredAttesters( + address domain + ) external view returns (address[] memory); + function rollOverEpoch() external; + function slash( + address[] calldata custodians, + address[] calldata attesters, + uint256[] calldata amounts, + uint256[] calldata refundAmounts + ) external; + + function whitelistAddress(address addr) external; + function removeAddressFromWhitelist(address addr) external; + + event AttesterStaked( + address indexed domain, + uint256 indexed epoch, + address indexed custodian, + address attester, + uint256 stake + ); + + event AttesterUnstaked( + address indexed domain, + uint256 indexed epoch, + address indexed custodian, + address attester, + uint256 stake + ); + + event AttesterEpochRolledOver( + address indexed attester, + uint256 indexed epoch, + address indexed custodian, + uint256 stake, + uint256 unstake + ); + + event EpochRolledOver(address indexed domain, uint256 epoch); + + error StakeExceedsGenesisStake(); + error CustodianTransferAmountMismatch(); + error GenesisAlreadyAccepted(); + + function getStakedAttestersForAcceptingEpoch(address domain) external view returns (address[] memory); + function computeAllStakeForAcceptingEpoch(address attester) external view returns (uint256); + function getAttesterStakeForAcceptingEpoch(address domain, address attester) external view returns (uint256); + + function rewardFromDomain(address attester, uint256 amount, address custodian) external; + function rewardArray(address[] calldata attesters, uint256[] calldata amounts, address[] calldata custodians) external; + + function getEpochDuration(address domain) external view returns (uint256); + + function setAcceptingEpoch(address domain, uint256 newEpoch) external; +} diff --git a/protocol-units/post-confirmations/contracts/src/token/MOVEToken.sol b/protocol-units/post-confirmations/contracts/src/token/MOVEToken.sol new file mode 100644 index 00000000..955b118c --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/token/MOVEToken.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {ERC20PermitUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol"; +import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; + +contract MOVEToken is ERC20PermitUpgradeable, AccessControlUpgradeable { + + /** + * @dev Disables potential implementation exploit + */ + constructor() {_disableInitializers();} + + /** + * @dev Initializes the contract with initial parameters. + * @param _owner The address of the owner who receives default admin role. + * @param _custody The address of the custody account. + * @notice The ERC20 token is named "Movement" with symbol "MOVE". + * @notice EIP712 domain version is set to "1" for signatures. + * @notice The owner is granted the `DEFAULT_ADMIN_ROLE`. + * @notice 10 billion MOVE tokens are minted to the owner's address. + */ + function initialize(address _owner, address _custody) public initializer { + require(_owner != address(0) && _custody != address(0)); + __ERC20_init("Movement", "MOVE"); + __EIP712_init_unchained("Movement", "1"); + _grantRole(DEFAULT_ADMIN_ROLE, _owner); + _mint(_custody, 10000000000 * 10 ** decimals()); + } + + /** + * @dev Returns the number of decimals + * @notice decimals is set to 8, following the Movement network standard decimals + */ + function decimals() public pure override returns (uint8) { + return 8; + } +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/src/token/MOVETokenDev.sol b/protocol-units/post-confirmations/contracts/src/token/MOVETokenDev.sol new file mode 100644 index 00000000..f5c20413 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/token/MOVETokenDev.sol @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "./base/MintableToken.sol"; + +contract MOVETokenDev is MintableToken { + + /** + * @dev Initialize the contract + */ + function initialize(address manager) public initializer { + __MintableToken_init("Movement", "MOVE"); + _mint(manager, 10000000000 * 10 ** decimals()); + _grantRole(MINTER_ADMIN_ROLE, manager); + _grantRole(MINTER_ROLE, manager); + } + + function grantRoles(address account) public onlyRole(DEFAULT_ADMIN_ROLE) { + _grantRole(MINTER_ADMIN_ROLE, account); + _grantRole(MINTER_ROLE, account); + + } + + function decimals() public pure override returns (uint8) { + return 8; + } +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/src/token/MOVETokenV1.sol b/protocol-units/post-confirmations/contracts/src/token/MOVETokenV1.sol new file mode 100644 index 00000000..955b118c --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/token/MOVETokenV1.sol @@ -0,0 +1,38 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {ERC20PermitUpgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/extensions/ERC20PermitUpgradeable.sol"; +import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; + +contract MOVEToken is ERC20PermitUpgradeable, AccessControlUpgradeable { + + /** + * @dev Disables potential implementation exploit + */ + constructor() {_disableInitializers();} + + /** + * @dev Initializes the contract with initial parameters. + * @param _owner The address of the owner who receives default admin role. + * @param _custody The address of the custody account. + * @notice The ERC20 token is named "Movement" with symbol "MOVE". + * @notice EIP712 domain version is set to "1" for signatures. + * @notice The owner is granted the `DEFAULT_ADMIN_ROLE`. + * @notice 10 billion MOVE tokens are minted to the owner's address. + */ + function initialize(address _owner, address _custody) public initializer { + require(_owner != address(0) && _custody != address(0)); + __ERC20_init("Movement", "MOVE"); + __EIP712_init_unchained("Movement", "1"); + _grantRole(DEFAULT_ADMIN_ROLE, _owner); + _mint(_custody, 10000000000 * 10 ** decimals()); + } + + /** + * @dev Returns the number of decimals + * @notice decimals is set to 8, following the Movement network standard decimals + */ + function decimals() public pure override returns (uint8) { + return 8; + } +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/src/token/base/BaseToken.sol b/protocol-units/post-confirmations/contracts/src/token/base/BaseToken.sol new file mode 100644 index 00000000..eb8a802a --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/token/base/BaseToken.sol @@ -0,0 +1,36 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; +import {UUPSUpgradeable} from "@openzeppelin/contracts-upgradeable/proxy/utils/UUPSUpgradeable.sol"; +import {AccessControlUpgradeable} from "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol"; + +contract BaseToken is Initializable, ERC20Upgradeable, AccessControlUpgradeable, UUPSUpgradeable { + /** + * @dev Initialize the contract + * @param name The name of the token + * @param symbol The symbol of the token + */ + function initialize(string memory name, string memory symbol) public virtual initializer { + __BaseToken_init(name, symbol); + } + /** + * @dev Initialize the contract + */ + + function __BaseToken_init(string memory name, string memory symbol) internal onlyInitializing { + __ERC20_init_unchained(name, symbol); + __BaseToken_init_unchained(); + } + + function __BaseToken_init_unchained() internal onlyInitializing { + _grantRole(DEFAULT_ADMIN_ROLE, msg.sender); + } + + /** + * @dev Authorize an upgrade + * @param newImplementation The address of the new implementation + */ + function _authorizeUpgrade(address newImplementation) internal override onlyRole(DEFAULT_ADMIN_ROLE) {} +} diff --git a/protocol-units/post-confirmations/contracts/src/token/base/MintableToken.sol b/protocol-units/post-confirmations/contracts/src/token/base/MintableToken.sol new file mode 100644 index 00000000..4d78e27a --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/token/base/MintableToken.sol @@ -0,0 +1,98 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {BaseToken} from "./BaseToken.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol"; + +interface IMintableToken is IERC20 { + function mint(address to, uint256 amount) external; + function grantMinterRole(address account) external; + function revokeMinterRole(address account) external; +} + +contract MintableToken is IMintableToken, BaseToken { + using SafeERC20 for IERC20; + + bytes32 public constant MINTER_ROLE = keccak256("MINTER_ROLE"); + bytes32 public constant MINTER_ADMIN_ROLE = keccak256("MINTER_ADMIN_ROLE"); + + /** + * @dev Initialize the contract + * @param name The name of the token + * @param symbol The symbol of the token + */ + function initialize( + string memory name, + string memory symbol + ) public virtual override initializer { + __MintableToken_init(name, symbol); + } + + function __MintableToken_init( + string memory name, + string memory symbol + ) internal onlyInitializing { + __ERC20_init_unchained(name, symbol); + __BaseToken_init_unchained(); + __MintableToken_init_unchained(); + } + + function __MintableToken_init_unchained() internal onlyInitializing { + _grantRole(MINTER_ADMIN_ROLE, msg.sender); + _grantRole(MINTER_ROLE, msg.sender); + } + + /** + * @dev Set minter role + * @param account The address to set minter role + */ + function grantMinterRole( + address account + ) public onlyRole(MINTER_ADMIN_ROLE) { + _grantRole(MINTER_ROLE, account); + } + + /** + * @dev Check if an account has minter role + * @param account The address to check + * @return True if the account has minter role + */ + function hasMinterRole( + address account + ) public view returns (bool) { + return hasRole(MINTER_ROLE, account); + } + + /** + * @dev Revoke minter admin role + * @param account The address to revoke minter admin role from + */ + function revokeMinterAdminRole( + address account + ) public onlyRole(MINTER_ADMIN_ROLE) { + _revokeRole(MINTER_ADMIN_ROLE, account); + } + + /** + * @dev Revoke minter role + * @param account The address to revoke minter role from + */ + function revokeMinterRole( + address account + ) public onlyRole(MINTER_ADMIN_ROLE) { + _revokeRole(MINTER_ROLE, account); + } + + /** + * @dev Mint new tokens + * @param to The address to mint tokens to + * @param amount The amount of tokens to mint + */ + function mint( + address to, + uint256 amount + ) public virtual onlyRole(MINTER_ROLE) { + _mint(to, amount); + } +} diff --git a/protocol-units/post-confirmations/contracts/src/token/base/WrappedToken.sol b/protocol-units/post-confirmations/contracts/src/token/base/WrappedToken.sol new file mode 100644 index 00000000..96e0ae5e --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/token/base/WrappedToken.sol @@ -0,0 +1,61 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol"; +import "./MintableToken.sol"; +import "./WrappedTokenStorage.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; + +contract WrappedToken is WrappedTokenStorage, MintableToken { + using SafeERC20 for IERC20; + + /** + * @dev Initialize the contract + * @param name The name of the token + * @param symbol The symbol of the token + * @param _underlyingToken The underlying token to wrap + */ + function initialize( + string memory name, + string memory symbol, + IMintableToken _underlyingToken + ) public virtual initializer { + __WrappedToken_init(name, symbol, _underlyingToken); + } + + /** + * @dev Initialize the contract + * @param _underlyingToken The underlying token to wrap + */ + function __WrappedToken_init( + string memory name, + string memory symbol, + IMintableToken _underlyingToken + ) internal onlyInitializing { + __ERC20_init_unchained(name, symbol); + __BaseToken_init_unchained(); + __MintableToken_init_unchained(); + __WrappedToken_init_unchained(_underlyingToken); + } + + /** + * @dev Initialize the contract unchained avoiding reinitialization + * @param _underlyingToken The underlying token to wrap + */ + function __WrappedToken_init_unchained( + IMintableToken _underlyingToken + ) internal onlyInitializing { + underlyingToken = _underlyingToken; + } + + /** + * @dev Mint new tokens + * @param account The address to mint tokens to + * @param amount The amount of tokens to mint + */ + function mint(address account, uint256 amount) public virtual override { + super.mint(account, amount); + underlyingToken.mint(address(this), amount); + } +} diff --git a/protocol-units/post-confirmations/contracts/src/token/base/WrappedTokenStorage.sol b/protocol-units/post-confirmations/contracts/src/token/base/WrappedTokenStorage.sol new file mode 100644 index 00000000..f3a8dc8a --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/token/base/WrappedTokenStorage.sol @@ -0,0 +1,15 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol"; +import "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import "./MintableToken.sol"; + +contract WrappedTokenStorage { + using SafeERC20 for IERC20; + + IMintableToken public underlyingToken; + + uint256[50] internal __gap; +} diff --git a/protocol-units/post-confirmations/contracts/src/token/custodian/CustodianToken.sol b/protocol-units/post-confirmations/contracts/src/token/custodian/CustodianToken.sol new file mode 100644 index 00000000..8609d28e --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/token/custodian/CustodianToken.sol @@ -0,0 +1,177 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol"; +import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; +import {IMintableToken} from "../base/MintableToken.sol"; +import {WrappedToken} from "../base/WrappedToken.sol"; + +interface ICustodianToken is IERC20 { + function grantTransferSinkRole(address account) external; + function revokeTransferSinkRole(address account) external; + + function grantBuyerRole(address account) external; + function revokeBuyerRole(address account) external; + + function buyCustodialToken(address account, uint256 amount) external; + function buyCustodialTokenFrom( + address buyer, + address account, + uint256 amount + ) external; +} + +contract CustodianToken is ICustodianToken, WrappedToken { + using SafeERC20 for IERC20; + + bytes32 public constant TRANSFER_SINK_ROLE = + keccak256("TRANSFER_SINK_ROLE"); + bytes32 public constant TRANSFER_SINK_ADMIN_ROLE = + keccak256("TRANSFER_SINK_ADMIN_ROLE"); + + bytes32 public constant BUYER_ROLE = keccak256("BUYER_ROLE"); + bytes32 public constant BUYER_ADMIN_ROLE = keccak256("BUYER_ADMIN_ROLE"); + + error RestrictedToTransferSinkRole(); + error RestrictedToBuyerRole(); + + /** + * @dev Initialize the contract + * @param name The name of the token + * @param symbol The symbol of the token + * @param _underlyingToken The underlying token to wrap + */ + function initialize( + string memory name, + string memory symbol, + IMintableToken _underlyingToken + ) public virtual override initializer { + __CustodianToken_init(name, symbol, _underlyingToken); + } + + function __CustodianToken_init( + string memory name, + string memory symbol, + IMintableToken _underlyingToken + ) internal onlyInitializing { + __ERC20_init_unchained(name, symbol); + __BaseToken_init_unchained(); + __MintableToken_init_unchained(); + __WrappedToken_init_unchained(_underlyingToken); + __CustodianToken_init_unchained(); + } + + function __CustodianToken_init_unchained() internal onlyInitializing { + _grantRole(TRANSFER_SINK_ADMIN_ROLE, msg.sender); + _grantRole(TRANSFER_SINK_ROLE, msg.sender); + _grantRole(BUYER_ADMIN_ROLE, msg.sender); + _grantRole(BUYER_ROLE, msg.sender); + } + + function grantTransferSinkRole( + address account + ) public onlyRole(TRANSFER_SINK_ADMIN_ROLE) { + _grantRole(TRANSFER_SINK_ROLE, account); + } + + function revokeTransferSinkRole( + address account + ) public onlyRole(TRANSFER_SINK_ADMIN_ROLE) { + _revokeRole(TRANSFER_SINK_ROLE, account); + } + + /** + * @dev Approve tokens + * @param spender The address to approve tokens for + * @param amount The amount of tokens to approve + * @return A boolean indicating whether the approval was successful + */ + function approve( + address spender, + uint256 amount + ) public virtual override(IERC20, ERC20Upgradeable) returns (bool) { + // require the spender is a transfer sink + if (!hasRole(TRANSFER_SINK_ROLE, spender)) + revert RestrictedToTransferSinkRole(); + + return underlyingToken.approve(spender, amount); + } + + /** + * @dev Transfer tokens from + * @param from The address to transfer tokens from + * @param to The address to transfer tokens to + * @param amount The amount of tokens to transfer + * @return A boolean indicating whether the transfer was successful + */ + function transferFrom( + address from, + address to, + uint256 amount + ) public virtual override(IERC20, ERC20Upgradeable) returns (bool) { + // require the destination is a transfer sink + if (!hasRole(TRANSFER_SINK_ROLE, to)) + revert RestrictedToTransferSinkRole(); + + // burn the tokens from the sender + super.transferFrom(from, address(this), amount); + + // also perform a safe transfer from this contract to the recipient + return underlyingToken.transfer(to, amount); + } + + /** + * @dev Transfer tokens + * @param to The address to transfer tokens to + * @param amount The amount of tokens to transfer + * @return A boolean indicating whether the transfer was successful + */ + function transfer( + address to, + uint256 amount + ) public virtual override(IERC20, ERC20Upgradeable) returns (bool) { + // require the destination is a transfer sink + if (!hasRole(TRANSFER_SINK_ROLE, to)) + revert RestrictedToTransferSinkRole(); + + // burn the tokens from the sender + super.transfer(address(this), amount); + + // also perform a safe transfer from this contract to the recipient + return underlyingToken.transfer(to, amount); + } + + function grantBuyerRole(address account) public onlyRole(BUYER_ADMIN_ROLE) { + _grantRole(BUYER_ROLE, account); + } + + function revokeBuyerRole( + address account + ) public onlyRole(BUYER_ADMIN_ROLE) { + _revokeRole(BUYER_ROLE, account); + } + + function buyCustodialToken( + address account, + uint256 amount + ) public override { + buyCustodialTokenFrom(msg.sender, account, amount); + } + + function buyCustodialTokenFrom( + address buyer, + address account, + uint256 amount + ) public override { + // todo: this might need to check msg.sender instead or in addition to buyer + if (!hasRole(BUYER_ROLE, buyer)) revert RestrictedToBuyerRole(); + + // transfer the approved value from the buyer to this contract + underlyingToken.transferFrom(buyer, address(this), amount); + + // mint the custodial token for the buyer at their desired address + // ! maybe this should also be managed through the minter role, so the buyer would have to be buyer and minter + super._mint(account, amount); + } +} diff --git a/protocol-units/post-confirmations/contracts/src/token/faucet/MOVEFaucet.sol b/protocol-units/post-confirmations/contracts/src/token/faucet/MOVEFaucet.sol new file mode 100644 index 00000000..edd7b52b --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/token/faucet/MOVEFaucet.sol @@ -0,0 +1,46 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +interface IERC20 { + function balanceOf(address account) external view returns (uint256); + function transfer(address to, uint256 value) external returns (bool); + function decimals() external view returns (uint8); +} + +contract MOVEFaucet { + + IERC20 public move; + uint256 public rateLimit = 1 days; + uint256 public amount = 10; + uint256 public maxBalance = 1; + address public owner; + mapping(address => uint256) public lastFaucetClaim; + + constructor(IERC20 _move) { + move = _move; + owner = msg.sender; + } + + function faucet() external payable { + require(msg.value == 10 ** 17, "MOVEFaucet: eth invalid amount"); + require(move.balanceOf(msg.sender) < maxBalance * 10 ** move.decimals(), "MOVEFaucet: balance must be less than determine amount of MOVE"); + require(block.timestamp - lastFaucetClaim[msg.sender] >= rateLimit, "MOVEFaucet: rate limit exceeded"); + lastFaucetClaim[msg.sender] = block.timestamp; + require(move.transfer(msg.sender, amount * 10 ** move.decimals()), "MOVEFaucet: transfer failed"); + } + + function setConfig(uint256 _rateLimit, uint256 _amount, uint256 _maxBalance, address _owner) external { + require(msg.sender == owner, "MOVEFaucet: only owner can set config"); + rateLimit = _rateLimit; + amount = _amount; + maxBalance = _maxBalance; + owner = _owner; + + } + + function withdraw() external { + require(msg.sender == owner, "MOVEFaucet: only owner can retrieve funds"); + (bool status,) = owner.call{value: address(this).balance}(""); + require(status == true, "error during transaction"); + } +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/src/token/locked/LockedToken.sol b/protocol-units/post-confirmations/contracts/src/token/locked/LockedToken.sol new file mode 100644 index 00000000..2ae5ba97 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/token/locked/LockedToken.sol @@ -0,0 +1,128 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {WrappedToken} from "../base/WrappedToken.sol"; +import {IMintableToken} from "../base/MintableToken.sol"; +import {Math} from "@openzeppelin/contracts/utils/math/Math.sol"; +import {LockedTokenStorage} from "./LockedTokenStorage.sol"; + +contract LockedToken is WrappedToken, LockedTokenStorage { + /** + * @dev Initialize the contract + * @param name The name of the token + * @param symbol The symbol of the token + * @param _underlyingToken The underlying token to wrap + */ + function initialize( + string memory name, + string memory symbol, + IMintableToken _underlyingToken + ) public virtual override initializer { + __LockedToken_init(name, symbol, _underlyingToken); + } + + function __LockedToken_init( + string memory name, + string memory symbol, + IMintableToken _underlyingToken + ) internal onlyInitializing { + __ERC20_init_unchained(name, symbol); + __BaseToken_init_unchained(); + __MintableToken_init_unchained(); + __WrappedToken_init_unchained(_underlyingToken); + __LockedToken_init_unchained(); + } + + function __LockedToken_init_unchained() internal onlyInitializing { + _grantRole(MINT_LOCKER_ADMIN_ROLE, msg.sender); + _grantRole(MINT_LOCKER_ROLE, msg.sender); + } + + /** + * @dev Mint and lock tokens + * @param addresses The addresses to mint and lock tokens for + * @param mintAmounts The amounts to mint. + * @param lockAmounts The amount up to which the user is allowed to be unlock, respective of balance + * @param lockTimes The times to lock the tokens for + */ + function mintAndLock( + address[] calldata addresses, + uint256[] calldata mintAmounts, + uint256[] calldata lockAmounts, + uint256[] calldata lockTimes + ) external onlyRole(MINT_LOCKER_ROLE) { + if (addresses.length != mintAmounts.length) + revert AddressesAndMintLengthMismatch(); + if (addresses.length != lockAmounts.length) + revert AddressesAndLockLengthMismatch(); + if (addresses.length != lockTimes.length) + revert AddressesAndTimeLengthMismatch(); + + for (uint256 i = 0; i < addresses.length; i++) { + underlyingToken.mint(address(this), mintAmounts[i]); + _mint(addresses[i], mintAmounts[i]); + _lock(addresses[i], lockAmounts[i], lockTimes[i]); + } + } + + /** + * @dev Lock tokens + * @param account The address to lock tokens for + * @param amount The amount of tokens to lock + * @param lockTime The time to lock the tokens for + */ + function _lock(address account, uint256 amount, uint256 lockTime) internal { + locks[account].push(Lock(amount, lockTime)); + } + + /** + * @dev Release unlocked tokens + */ + function release() external { + uint256 totalUnlocked = 0; + Lock[] storage userLocks = locks[msg.sender]; + for (uint256 i; i < userLocks.length;) { + if (block.timestamp > userLocks[i].releaseTime) { + // compute the max possible amount to withdraw + uint256 amount = Math.min( + userLocks[i].amount, + balanceOf(msg.sender) + ); + + // burn the amount so that the user can't overdraw + _transfer(msg.sender, address(this), amount); + + // add to the total unlocked amount + totalUnlocked += amount; + + // deduct the amount from the lock + userLocks[i].amount -= amount; + + // if the amount on the lock is now 0, remove the lock + if (userLocks[i].amount == 0) { + userLocks[i] = userLocks[userLocks.length - 1]; + userLocks.pop(); + continue; + } + } + i++; + } + + // transfer the underlying token + underlyingToken.transfer(msg.sender, totalUnlocked); + } + + /** + * @dev Get the total locked balance of an account + * @param account The address to get the total locked balance of + * @return The total locked balance of the account + */ + function balanceOfLocked(address account) external view returns (uint256) { + uint256 totalLocked = 0; + Lock[] memory userLocks = locks[account]; + for (uint256 i = 0; i < userLocks.length; i++) { + totalLocked += userLocks[i].amount; + } + return totalLocked; + } +} diff --git a/protocol-units/post-confirmations/contracts/src/token/locked/LockedTokenStorage.sol b/protocol-units/post-confirmations/contracts/src/token/locked/LockedTokenStorage.sol new file mode 100644 index 00000000..d361612b --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/token/locked/LockedTokenStorage.sol @@ -0,0 +1,19 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; +import {LockedTokenStorage} from "./LockedTokenStorage.sol"; + +contract LockedTokenStorage { + bytes32 public constant MINT_LOCKER_ROLE = keccak256("MINT_LOCKER_ROLE"); + bytes32 public constant MINT_LOCKER_ADMIN_ROLE = + keccak256("MINT_LOCKER_ADMIN_ROLE"); + + struct Lock { + uint256 amount; + uint256 releaseTime; + } + mapping(address => Lock[]) public locks; + + error AddressesAndMintLengthMismatch(); + error AddressesAndLockLengthMismatch(); + error AddressesAndTimeLengthMismatch(); +} diff --git a/protocol-units/post-confirmations/contracts/src/token/stlMoveToken.sol b/protocol-units/post-confirmations/contracts/src/token/stlMoveToken.sol new file mode 100644 index 00000000..0a819c5e --- /dev/null +++ b/protocol-units/post-confirmations/contracts/src/token/stlMoveToken.sol @@ -0,0 +1,69 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import {LockedToken} from "./locked/LockedToken.sol"; +import {CustodianToken} from "./custodian/CustodianToken.sol"; +import {SafeERC20} from "@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol"; +import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol"; +import {IMintableToken} from "./base/MintableToken.sol"; +import {ERC20Upgradeable} from "@openzeppelin/contracts-upgradeable/token/ERC20/ERC20Upgradeable.sol"; + +contract stlMoveToken is LockedToken, CustodianToken { + using SafeERC20 for IERC20; + + /** + * @dev Initialize the contract + * @param _underlyingToken The underlying token to wrap + */ + function initialize(IMintableToken _underlyingToken) public { + initialize("Stakable Locked Move Token", "stlMOVE", _underlyingToken); + } + + function initialize(string memory name, string memory symbol, IMintableToken _underlyingToken) + public + override(CustodianToken, LockedToken) + initializer + { + __ERC20_init_unchained(name, symbol); + __BaseToken_init_unchained(); + __MintableToken_init_unchained(); + __WrappedToken_init_unchained(_underlyingToken); + __LockedToken_init_unchained(); + __CustodianToken_init_unchained(); + } + + function transfer(address to, uint256 amount) + public + override(CustodianToken, ERC20Upgradeable, IERC20) + returns (bool) + { + return CustodianToken.transfer(to, amount); + } + + function transferFrom(address from, address to, uint256 amount) + public + override(CustodianToken, ERC20Upgradeable, IERC20) + returns (bool) + { + return CustodianToken.transferFrom(from, to, amount); + } + + function approve(address spender, uint256 amount) + public + override(CustodianToken, ERC20Upgradeable, IERC20) + returns (bool) + { + return CustodianToken.approve(spender, amount); + } +} + +// Flow for staking +// StakingContract: signer call stake +// StakingContract: signer approves StakingContract to spend their stlkMOVE tokens. +// StakingContract: calls transferFrom on stlkMOVE to move both stlkMOVE and MOVE tokens to the staking contract +// StakingContract: staking contract confirms it received the tokens and records balance for the signer with the custodian + +// Flow for unstaking +// StakingContract: signer calls unstake with the custodian +// StakingContract: staking contract transfers stlkMOVE and MOVE tokens back to the custodian via calling transfer on the stlkMOVE contract +// StakingContract: staking contract confirms it transferred the tokens back to the custodian and updates the signer's balance to 0 diff --git a/protocol-units/post-confirmations/contracts/test/Deployer.t.sol b/protocol-units/post-confirmations/contracts/test/Deployer.t.sol new file mode 100644 index 00000000..f66c39aa --- /dev/null +++ b/protocol-units/post-confirmations/contracts/test/Deployer.t.sol @@ -0,0 +1,12 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "forge-std/Test.sol"; +import "../../src/token/MOVEToken.sol"; + +contract DeployerTest is Test { + + function setUp() public { + // Set the sender address + } +} diff --git a/protocol-units/post-confirmations/contracts/test/settlement/MCR.t.sol b/protocol-units/post-confirmations/contracts/test/settlement/MCR.t.sol new file mode 100644 index 00000000..a94ac148 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/test/settlement/MCR.t.sol @@ -0,0 +1,1084 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "forge-std/Test.sol"; +import "../../src/staking/MovementStaking.sol"; +import "../../src/token/MOVETokenDev.sol"; +import "../../src/settlement/MCR.sol"; +import "../../src/settlement/MCRStorage.sol"; +import "../../src/settlement/interfaces/IMCR.sol"; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import "@openzeppelin/contracts/utils/Strings.sol"; + +contract MCRTest is Test { + MOVETokenDev public moveToken; + MovementStaking public staking; + MCR public mcr; + ProxyAdmin public admin; + string public moveSignature = "initialize(address)"; + string public stakingSignature = "initialize(address)"; + string public mcrSignature = "initialize(address,uint256,uint256,uint256,address[],uint256,address)"; + uint256 epochDuration = 7200 seconds; + uint256 postconfirmerDuration = epochDuration/4; + bytes32 honestCommitmentTemplate = keccak256(abi.encodePacked(uint256(1), uint256(2), uint256(3))); + bytes32 honestBlockIdTemplate = keccak256(abi.encodePacked(uint256(1), uint256(2), uint256(3))); + bytes32 dishonestCommitmentTemplate = keccak256(abi.encodePacked(uint256(3), uint256(2), uint256(1))); + bytes32 dishonestBlockIdTemplate = keccak256(abi.encodePacked(uint256(3), uint256(2), uint256(1))); + + // make an honest commitment + function makeHonestCommitment(uint256 height) internal view returns (MCRStorage.SuperBlockCommitment memory) { + return MCRStorage.SuperBlockCommitment({ + height: height, + commitment: honestCommitmentTemplate, + blockId: honestBlockIdTemplate + }); + } + + // make a dishonest commitment + function makeDishonestCommitment(uint256 height) internal view returns (MCRStorage.SuperBlockCommitment memory) { + return MCRStorage.SuperBlockCommitment({ + height: height, + commitment: dishonestCommitmentTemplate, + blockId: dishonestBlockIdTemplate + }); + } + + + // ---------------------------------------------------------------- + // -------- Helper functions -------------------------------------- + // ---------------------------------------------------------------- + + function setUp() public { + MOVETokenDev moveTokenImplementation = new MOVETokenDev(); + MovementStaking stakingImplementation = new MovementStaking(); + MCR mcrImplementation = new MCR(); + + // Contract MCRTest is the admin + admin = new ProxyAdmin(address(this)); + + // Deploy proxies + bytes memory initData = abi.encodeWithSignature(moveSignature, address(this)); + TransparentUpgradeableProxy moveProxy = new TransparentUpgradeableProxy( + address(moveTokenImplementation), + address(admin), + initData + ); + // Set up the moveToken variable to interact with the proxy + moveToken = MOVETokenDev(address(moveProxy)); + + bytes memory stakingInitData = abi.encodeWithSignature(stakingSignature, IMintableToken(address(moveProxy))); + TransparentUpgradeableProxy stakingProxy = new TransparentUpgradeableProxy( + address(stakingImplementation), + address(admin), + stakingInitData + ); + // Set up the staking variable to interact with the proxy + staking = MovementStaking(address(stakingProxy)); + + address[] memory custodians = new address[](1); + // TODO while this works it is hard to access that this is the moveToken. We should not rely on the custodian array + custodians[0] = address(moveProxy); + + bytes memory mcrInitData = abi.encodeWithSignature( + mcrSignature, + stakingProxy, // _stakingContract, address of staking contract + 0, // _lastPostconfirmedSuperBlockHeight, start from genesis + 5, // _leadingSuperBlockTolerance, max blocks ahead of last confirmed + epochDuration, // _epochDuration, how long an epoch lasts, constant stakes in that time + custodians, // _custodians, array with moveProxy address + postconfirmerDuration, // _postconfirmerDuration, how long an postconfirmer serves + // TODO can we replace the following line with the moveToken address? + address(moveProxy) // _moveTokenAddress, the primary custodian for rewards in the staking contract + ); + TransparentUpgradeableProxy mcrProxy = new TransparentUpgradeableProxy( + address(mcrImplementation), + address(admin), + mcrInitData + ); + + mcr = MCR(address(mcrProxy)); + mcr.setOpenAttestationEnabled(true); + + assertEq(staking.getEpochDuration(address(mcr)), epochDuration, "Epoch duration not set correctly"); + // set the min commitment age for postconfirmation to 0 to make the tests easier + mcr.setMinCommitmentAgeForPostconfirmation(0); + assertEq(mcr.getMinCommitmentAgeForPostconfirmation(), 0, "The default min commitment age for tests is set to 0"); + // set the max postconfirmer non-reactivity time to 0 to make the tests easier + mcr.setPostconfirmerPrivilegeDuration(0); + assertEq(mcr.getPostconfirmerPrivilegeDuration(), 0, "The default max postconfirmer non-reactivity time for tests is set to 0"); + } + + // Helper function to setup genesis with 1 attester and their stake + function setupGenesisWithOneAttester(uint256 stakeAmount) internal returns (address attester) { + moveToken.mint(address(mcr), stakeAmount*100); // MCR needs tokens to pay rewards + // MCR needs to approve staking contract to spend its tokens + vm.prank(address(mcr)); + moveToken.approve(address(staking), type(uint256).max); + + attester = payable(vm.addr(1)); + staking.whitelistAddress(attester); + moveToken.mint(attester, stakeAmount); + vm.prank(attester); + moveToken.approve(address(staking), stakeAmount); + vm.prank(attester); + staking.stake(address(mcr), moveToken, stakeAmount); + assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), attester), stakeAmount); + assertEq(mcr.getTotalStakeForAcceptingEpoch(), stakeAmount); + + // TODO check why the registering did not work in the setup function + // setup the epoch duration + address[] memory custodians = new address[](1); + custodians[0] = address(moveToken); + staking.registerDomain(epochDuration, custodians); + + // TODO this seems odd that we need to do this here.. check for correctnes of this approach + mcr.grantRole(mcr.DEFAULT_ADMIN_ROLE(), address(mcr)); + + // attempt genesis when L1 chain has already advanced into the future + // vm.warp(3*epochDuration); + + // End genesis ceremony + vm.prank(address(mcr)); + mcr.acceptGenesisCeremony(); + + // Verify stakes + assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), attester), stakeAmount, "Alice's stake not correct"); + assertEq(mcr.getTotalStakeForAcceptingEpoch(), stakeAmount, "Total stake not correct"); + } + + + // Helper function to setup genesis with 3 attesters and their stakes + function setupGenesisWithThreeAttesters( + uint256 aliceStakeAmount, + uint256 bobStakeAmount, + uint256 carolStakeAmount + ) internal returns (address alice, address bob, address carol) { + uint256 totalStakeAmount = aliceStakeAmount + bobStakeAmount + carolStakeAmount; + + moveToken.mint(address(mcr), totalStakeAmount*100); // MCR needs tokens to pay rewards + // MCR needs to approve staking contract to spend its tokens + vm.prank(address(mcr)); + moveToken.approve(address(staking), type(uint256).max); + + // Create attesters + alice = payable(vm.addr(1)); + bob = payable(vm.addr(2)); + carol = payable(vm.addr(3)); + address[] memory attesters = new address[](3); + attesters[0] = alice; + attesters[1] = bob; + attesters[2] = carol; + + // Setup attesters + for (uint i = 0; i < attesters.length; i++) { + staking.whitelistAddress(attesters[i]); + moveToken.mint(attesters[i], totalStakeAmount); // we mint the total stake amount for each attester, just so we have some buffer + vm.prank(attesters[i]); + moveToken.approve(address(staking), totalStakeAmount); + } + + // Stake + vm.prank(alice); + staking.stake(address(mcr), moveToken, aliceStakeAmount); + vm.prank(bob); + staking.stake(address(mcr), moveToken, bobStakeAmount); + vm.prank(carol); + staking.stake(address(mcr), moveToken, carolStakeAmount); + + // Verify stakes + assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), alice), aliceStakeAmount, "Alice's stake not correct"); + assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), bob), bobStakeAmount, "Bob's stake not correct"); + assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), carol), carolStakeAmount, "Carol's stake not correct"); + assertEq(mcr.getTotalStakeForAcceptingEpoch(), totalStakeAmount, "Total stake not correct"); + + // TODO check why the registering did not work in the setup function + // setup the epoch duration + address[] memory custodians = new address[](1); + custodians[0] = address(moveToken); + staking.registerDomain(epochDuration, custodians); + + // TODO this seems odd that we need to do this here.. check for correctnes of this approach + mcr.grantRole(mcr.DEFAULT_ADMIN_ROLE(), address(mcr)); + + // attempt genesis when L1 chain has already advanced into the future + // vm.warp(3*epochDuration); + + // End genesis ceremony + vm.prank(address(mcr)); + mcr.acceptGenesisCeremony(); + + // Verify stakes + assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), alice), aliceStakeAmount, "Alice's stake not correct"); + assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), bob), bobStakeAmount, "Bob's stake not correct"); + assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), carol), carolStakeAmount, "Carol's stake not correct"); + assertEq(mcr.getTotalStakeForAcceptingEpoch(), totalStakeAmount, "Total stake not correct"); + } + + /// @notice Helper function to setup a new signer with staking + /// @param seed used to generate signer address + /// @param stakeAmount Amount of tokens to stake + /// @return newStakedAttester Address of the newly setup signer + function newStakedAttester(uint256 seed, uint256 stakeAmount) internal returns (address) { + address payable newAttester = payable(vm.addr(seed)); + staking.whitelistAddress(newAttester); + moveToken.mint(newAttester, stakeAmount * 3); // Mint 3x for flexibility + vm.prank(newAttester); + moveToken.approve(address(staking), stakeAmount); + vm.prank(newAttester); + staking.stake(address(mcr), moveToken, stakeAmount); + assert(mcr.getStakeForAcceptingEpoch(address(moveToken), newAttester) == stakeAmount); + + return newAttester; + } + + // we need this function to print the commitment in a readable format, e.g. for logging purposes + function commitmentToHexString(bytes32 commitment) public pure returns (string memory) { + bytes memory alphabet = "0123456789abcdef"; + bytes memory str = new bytes(2 + 32 * 2); + str[0] = "0"; + str[1] = "x"; + for (uint i = 0; i < 32; i++) { + str[2+i*2] = alphabet[uint8(commitment[i] >> 4)]; + str[2+i*2+1] = alphabet[uint8(commitment[i] & 0x0f)]; + } + return string(str); + } + + // this function checks if the honest attesters have a supermajority of the stake + function logStakeInfo(address[] memory _honestAttesters, address[] memory _dishonestAttesters) internal view returns (bool) { + // calculate the honest attesters stake + uint256 honestStake = 0; + for (uint256 k = 0; k < _honestAttesters.length; k++) { + honestStake += mcr.getStakeForAcceptingEpoch(address(moveToken), _honestAttesters[k]); + } + + // calculate the dishonest attesters stake + uint256 dishonestStake = 0; + for (uint256 k = 0; k < _dishonestAttesters.length; k++) { + dishonestStake += mcr.getStakeForAcceptingEpoch(address(moveToken), _dishonestAttesters[k]); + } + + uint256 supermajorityStake = 2 * (honestStake + dishonestStake) / 3 + 1; + return honestStake >= supermajorityStake; + } + + // remove an attester from the attesters array + function removeAttester(address attester, address[] storage attesters, uint256 attesterStake) internal { + vm.prank(attester); + staking.unstake(address(mcr), address(moveToken), attesterStake); + + // Find and remove attester from array using swap and pop + for (uint i = 0; i < attesters.length; i++) { + if (attesters[i] == attester) { + attesters[i] = attesters[attesters.length - 1]; + attesters.pop(); + break; + } + } + } + + // ---------------------------------------------------------------- + // -------- General tests ---------------------------------------- + // ---------------------------------------------------------------- + + function testCannotInitializeTwice() public { + address[] memory custodians = new address[](1); + custodians[0] = address(moveToken); + // Attempt to initialize again should fail + vm.expectRevert(bytes4(0xf92ee8a9)); + mcr.initialize(staking, 0, 5, 10 seconds, custodians,120 seconds, address(moveToken)); + } + + function testSetAcceptingEpochOnlyDomain() public { + address alice = setupGenesisWithOneAttester(1000); + vm.warp(mcr.getEpochDuration()*2); + + // Try to set accepting epoch from a non-domain address + vm.prank(alice); + assertEq(mcr.hasRole(mcr.COMMITMENT_ADMIN(), alice), false); + vm.prank(alice); + vm.expectRevert("UNAUTHORIZED"); + staking.setAcceptingEpoch(address(mcr), 1); + console.log("Unauthorized attempt failed as expected"); + + // Ensure the MCR contract has the COMMITMENT_ADMIN role + uint256 presentEpoch = mcr.getPresentEpoch(); + assertEq(mcr.hasRole(mcr.COMMITMENT_ADMIN(), address(this)), true); + mcr.grantRole(mcr.COMMITMENT_ADMIN(), address(this)); + // check that mcr has the COMMITMENT_ADMIN role + assertEq(mcr.hasRole(mcr.COMMITMENT_ADMIN(), address(this)), true); + mcr.setAcceptingEpoch(presentEpoch - 1); + assertEq(staking.getAcceptingEpoch(address(mcr)), presentEpoch - 1); + } + + /// @notice Test that an attester cannot submit multiple commitments for the same height + function testAttesterCannotCommitTwice() public { + // three well-funded signers + (, , address carol) = setupGenesisWithThreeAttesters(1, 1, 1); + + // carol will be dishonest + vm.prank(carol); + mcr.submitSuperBlockCommitment(makeDishonestCommitment(1)); + + // carol will try to sign again + vm.prank(carol); + vm.expectRevert(IMCR.AttesterAlreadyCommitted.selector); + mcr.submitSuperBlockCommitment(makeDishonestCommitment(1)); + } + + /// @notice Test that honest supermajority succeeds despite dishonest attesters + function testHonestSupermajoritySucceeds() public { + // Setup with alice+bob having supermajority (67%) + (address alice, address bob, address carol) = setupGenesisWithThreeAttesters(2, 1, 1); + + // Dishonest carol submits first + vm.prank(carol); + mcr.submitSuperBlockCommitment(makeDishonestCommitment(1)); + + // Honest majority submits + vm.prank(alice); + mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + vm.prank(bob); + mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + + // Trigger postconfirmation with majority + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + + // Verify honest commitment was postconfirmed + MCRStorage.SuperBlockCommitment memory retrievedCommitment = mcr.getPostconfirmedCommitment(1); + assertEq(retrievedCommitment.commitment, honestCommitmentTemplate); + assertEq(retrievedCommitment.blockId, honestBlockIdTemplate); + assertEq(retrievedCommitment.height, 1); + } + + + /// @notice Test that no postconfirmation happens when stakes are equal + function testNoPostconfirmationWithEqualStakes() public { + // Setup with equal stakes (no possible supermajority) + (address alice, address bob, address carol) = setupGenesisWithThreeAttesters(1, 1, 1); + + // Honnest commitments + vm.prank(alice); + mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + vm.prank(bob); + mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + // Dishonest commitment + vm.prank(carol); + mcr.submitSuperBlockCommitment(makeDishonestCommitment(1)); + + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 0, "Height should not advance - Alice"); + // Verify no commitment was postconfirmed + MCRStorage.SuperBlockCommitment memory retrievedCommitment = mcr.getPostconfirmedCommitment(1); + assertEq(retrievedCommitment.height, 0, "No commitment should be postconfirmed"); + assertEq(retrievedCommitment.commitment, bytes32(0), "No commitment should be postconfirmed"); + } + + /// @notice Test that rollover handling works with dishonesty + function testRolloverHandlingWithDishonesty() public { + uint256 L1BlockTimeStart = 30 * epochDuration; // TODO why though? + vm.warp(L1BlockTimeStart); + + (address alice, address bob, address carol) = setupGenesisWithThreeAttesters(2, 1, 1); + + // dishonest carol + vm.prank(carol); + mcr.submitSuperBlockCommitment(makeDishonestCommitment(1)); + + // honest majority + vm.prank(alice); + mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + vm.prank(bob); + mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + + // now we move to next epoch + vm.warp(L1BlockTimeStart + epochDuration); + + // postconfirm and rollover + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + + // check that roll over happened + assertEq(mcr.getAcceptingEpoch(), mcr.getPresentEpoch()); + assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), alice), 2); + assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), bob), 1); + assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), carol), 1); + MCRStorage.SuperBlockCommitment memory retrievedCommitment = mcr.getPostconfirmedCommitment(1); + assert(retrievedCommitment.commitment == honestCommitmentTemplate); + assert(retrievedCommitment.blockId == honestBlockIdTemplate); + assert(retrievedCommitment.height == 1); + } + + // State variable (at contract level) + // dynamic array defined as state variable to permit to use push + address[] honestAttesters = new address[](0); + address[] dishonestAttesters = new address[](0); + + /// @notice Tests the MCR system's resilience with changing Attester sets by: + /// 1. Starting with honest majority (2/3 honest, 1/3 dishonest) + /// 2. Adding new attester periodically + /// 3. Removing attester periodically + /// 4. Verifying honest commitments prevail over 50 reorganizations + // TODO i am not convinced we need such a complicated unit test here. Consider what this is trying to achieve and break it up. + function testChangingAttesterSet() public { + // TODO explain why we need to pause gas metering here + vm.pauseGasMetering(); + uint256 attesterStake = 1; + uint256 L1BlockTimeStart = 30 * epochDuration; // TODO why though? + uint256 L1BlockTime = L1BlockTimeStart; + vm.warp(L1BlockTime); + uint256 changingAttesterSetEvents = 10; // number of times we change the attester set + uint256 commitmentHeights = 1; // number of commitments after each change event + + // alice needs to have attesterStake + 1 so we reach supermajority + (address alice, address bob, address carol) = setupGenesisWithThreeAttesters(attesterStake+1, attesterStake, attesterStake); + moveToken.mint(address(mcr), 100); // MCR needs tokens to pay rewards + + // honest attesters + honestAttesters.push(alice); + honestAttesters.push(bob); + + // dishonest attesters + dishonestAttesters.push(carol); + + for (uint256 i = 0; i < changingAttesterSetEvents; i++) { + for (uint256 j = 0; j < commitmentHeights; j++) { + uint256 superBlockHeightNow = i * commitmentHeights + j + 1; + + L1BlockTime += epochDuration; + vm.warp(L1BlockTime); + // alice triggers rollover + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + + // get the assigned epoch for the superblock height + // commit roughly half of dishones attesters + MCRStorage.SuperBlockCommitment memory dishonestCommitment = makeDishonestCommitment(superBlockHeightNow); + for (uint256 k = 0; k < dishonestAttesters.length / 2; k++) { + vm.prank(dishonestAttesters[k]); + mcr.submitSuperBlockCommitment(dishonestCommitment); + } + + // commit honestly + MCRStorage.SuperBlockCommitment memory honestCommitment = makeHonestCommitment(superBlockHeightNow); + for (uint256 k = 0; k < honestAttesters.length; k++) { + vm.prank(honestAttesters[k]); + mcr.submitSuperBlockCommitment(honestCommitment); + } + + // TODO: The following does not serve any purpose, as enough attesters are already committed + // commit dishonestly the rest + // for (uint256 k = dishonestAttesters.length / 2; k < dishonestAttesters.length; k++) { + // vm.prank(dishonestAttesters[k]); + // mcr.submitSuperBlockCommitment(dishonestCommitment); + // } + + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + + MCRStorage.SuperBlockCommitment memory retrievedCommitment = mcr.getPostconfirmedCommitment(superBlockHeightNow); + assert(retrievedCommitment.commitment == honestCommitment.commitment); + assert(retrievedCommitment.blockId == honestCommitment.blockId); + assert(retrievedCommitment.height == superBlockHeightNow); + + } + + uint256 honestStakedAttesterLength = honestAttesters.length; + uint256 dishonestStakedAttesterLength = dishonestAttesters.length; + + // TODO replace the below with this function call + // address newAttester = newStakedAttester(4 + i, attesterStake); // TODO why 4 not 3? + + // add a new attester + address payable newAttester = payable(vm.addr(4 + i)); + + staking.whitelistAddress(newAttester); + moveToken.mint(newAttester, 3*attesterStake); + vm.prank(newAttester); + moveToken.approve(address(staking), attesterStake); + vm.prank(newAttester); + staking.stake(address(mcr), moveToken, attesterStake); + + L1BlockTime += epochDuration; + vm.warp(L1BlockTime); + + // Force rollover by having alice (who has majority stake) call postconfirmSuperBlocksAndRollover + vm.prank(alice); // alice has attesterStake+1 from setup + mcr.postconfirmSuperBlocksAndRollover(); + // confirm that the new attester has stake + assert(mcr.getStakeForAcceptingEpoch(address(moveToken), newAttester) == attesterStake); + + // push every third signer to dishonest attesters. If pushed earlier we fail a super majority test. + if (i % 3 == 2) { + dishonestAttesters.push(newAttester); + assert(dishonestAttesters.length == dishonestStakedAttesterLength + 1); + } else { + honestAttesters.push(newAttester); + assert(honestAttesters.length == honestStakedAttesterLength + 1); + } + + // TODO explain here why we do the following + if (i % 5 == 4) { + // removeAttester(dishonestAttesters[0], dishonestAttesters, attesterStake); + } + // TODO only having this but not the above is a more complex interesting scenario that would fail the line as we rollover in the postconfirmation: + // assert(retrievedCommitment.commitment == honestCommitment.commitment); (above) + // this is interesting but it requires moving this upwards in the code and maybe not applying both + if (i % 8 == 7) { + // remove an honest attester + // removeAttester(honestAttesters[0], honestAttesters, attesterStake); + } + + assert(logStakeInfo(honestAttesters, dishonestAttesters)); + + // L1BlockTime += 5; + // vm.warp(L1BlockTime); + // assert the time here + assertEq(L1BlockTime, L1BlockTimeStart + (i+1) * (commitmentHeights + 1) * epochDuration); + } + assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), changingAttesterSetEvents * commitmentHeights); + } + + function testForcedAttestation() public { + vm.pauseGasMetering(); + + uint256 blockTime = 300; + vm.warp(blockTime); + + // default signer should be able to force commitment + MCRStorage.SuperBlockCommitment memory forcedCommitment = makeDishonestCommitment(1); + mcr.forceLatestCommitment(forcedCommitment); + + // get the latest commitment + MCRStorage.SuperBlockCommitment memory retrievedCommitment = mcr.getPostconfirmedCommitment(1); + assertEq(retrievedCommitment.blockId, forcedCommitment.blockId); + assertEq(retrievedCommitment.commitment, forcedCommitment.commitment); + assertEq(retrievedCommitment.height, forcedCommitment.height); + + // create an unauthorized signer + address payable alice = payable(vm.addr(1)); + + // try to force a different commitment with unauthorized user + MCRStorage.SuperBlockCommitment memory badForcedCommitment = makeHonestCommitment(1); + + // Alice should not have COMMITMENT_ADMIN role + assertEq(mcr.hasRole(mcr.COMMITMENT_ADMIN(), alice), false); + + vm.prank(alice); + vm.expectRevert("FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY"); + mcr.forceLatestCommitment(badForcedCommitment); + } + + /// @notice Test that a confirmation and postconfirmation by single attester works + function testSimplePostconfirmation() public { + // Setup - single attester + address payable alice = payable(vm.addr(1)); + staking.whitelistAddress(alice); + moveToken.mint(alice, 100); + + // Stake + vm.prank(alice); + moveToken.approve(address(staking), 100); + vm.prank(alice); + staking.stake(address(mcr), moveToken, 100); + + // End genesis ceremony + // vm.prank(address(mcr)); // TODO is this needed? + mcr.acceptGenesisCeremony(); + + // confirm current superblock height + uint256 currentHeight = mcr.getLastPostconfirmedSuperBlockHeight(); + + // Create and submit commitment + uint256 targetHeight = 1; + MCRStorage.SuperBlockCommitment memory commitment = MCRStorage.SuperBlockCommitment({ + height: targetHeight, + commitment: keccak256(abi.encodePacked(uint256(1))), + blockId: keccak256(abi.encodePacked(uint256(1))) + }); + + // Submit commitment + vm.prank(alice); + mcr.submitSuperBlockCommitment(commitment); + + // Verify commitment was stored + MCRStorage.SuperBlockCommitment memory stored = mcr.getCommitmentByAttester(targetHeight, alice); + assert(stored.commitment == commitment.commitment); + + // Attempt postconfirmation + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + + // Verify postconfirmation worked + MCRStorage.SuperBlockCommitment memory postconfirmed = mcr.getPostconfirmedCommitment(targetHeight); + assert(postconfirmed.commitment == commitment.commitment); + + // confirm current superblock height + uint256 currentHeightNew = mcr.getLastPostconfirmedSuperBlockHeight(); + assertEq(currentHeightNew, currentHeight + 1); + + } + + + /// @notice Test that a confirmation and postconfirmation by single attester works if they have majority stake + function testPostconfirmationWithMajorityStake() public { + // Setup with alice having majority + (address alice, address bob, ) = setupGenesisWithThreeAttesters(34, 33, 33); + + // Create commitment for height 1 + uint256 targetHeight = 1; + + MCRStorage.SuperBlockCommitment memory commitment = makeHonestCommitment(targetHeight); + + // Submit commitments + vm.prank(alice); + mcr.submitSuperBlockCommitment(commitment); + vm.prank(bob); + mcr.submitSuperBlockCommitment(commitment); + + // Verify commitments were stored + MCRStorage.SuperBlockCommitment memory aliceCommitment = mcr.getCommitmentByAttester(targetHeight, alice); + MCRStorage.SuperBlockCommitment memory bobCommitment = mcr.getCommitmentByAttester(targetHeight, bob); + assert(aliceCommitment.commitment == commitment.commitment); + assert(bobCommitment.commitment == commitment.commitment); + + // Verify postconfirmer state + assert(mcr.isWithinPostconfirmerPrivilegeDuration(commitment)); + assertEq(mcr.getSuperBlockHeightAssignedEpoch(targetHeight), mcr.getAcceptingEpoch()); + + // Attempt postconfirmation + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + + // Verify postconfirmation + MCRStorage.SuperBlockCommitment memory postconfirmed = mcr.getPostconfirmedCommitment(targetHeight); + assert(postconfirmed.commitment == commitment.commitment); + assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), targetHeight); + } + + /// @notice Test that a confirmation and postconfirmation by single attester fails if they have majority stake + function testPostconfirmationWithoutMajorityStake() public { + // Setup with no one having majority + (address alice, address bob, ) = setupGenesisWithThreeAttesters(33, 33, 34); + + // Create commitment for height 1 + uint256 targetHeight = 1; + + MCRStorage.SuperBlockCommitment memory commitment = makeHonestCommitment(targetHeight); + + // Submit commitments + vm.prank(alice); + mcr.submitSuperBlockCommitment(commitment); + vm.prank(bob); + mcr.submitSuperBlockCommitment(commitment); + + // Verify commitments were stored + MCRStorage.SuperBlockCommitment memory aliceCommitment = mcr.getCommitmentByAttester(targetHeight, alice); + MCRStorage.SuperBlockCommitment memory bobCommitment = mcr.getCommitmentByAttester(targetHeight, bob); + assert(aliceCommitment.commitment == commitment.commitment); + assert(bobCommitment.commitment == commitment.commitment); + + // Verify postconfirmer state + assert(mcr.isWithinPostconfirmerPrivilegeDuration(commitment)); + assertEq(mcr.getSuperBlockHeightAssignedEpoch(targetHeight), mcr.getAcceptingEpoch()); + + // Attempt postconfirmation - this should fail because there's no supermajority + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + + // Verify height hasn't changed (postconfirmation didn't succeed) + assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 0); + } + + /// @notice Test that stake activation and postconfirmation works away from the Genesis. + /// TODO at genesis this behaves different and we should test this, specifically. unstake and stake are directly applied to epoch 0 until it is rolled over + function testStakeActivationAndPostconfirmation() public { + // Setup initial attesters with equal stakes, but Carol hasn't staked yet + (address alice, address bob, address carol) = setupGenesisWithThreeAttesters(1, 1, 0); + + // Create commitment for height 1 by the only stable attester + MCRStorage.SuperBlockCommitment memory commitment = makeHonestCommitment(1); + vm.prank(bob); + mcr.submitSuperBlockCommitment(commitment); + + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 0, "Last postconfirmed superblock height should be 0, as no supermajority was reached (2/3 < threshold)"); + assertEq(mcr.getAcceptingEpoch(),0, "Accepting epoch should be 0"); + + vm.warp(epochDuration); + assertEq(mcr.getPresentEpoch(),1, "Present epoch should be 1"); + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getAcceptingEpoch(),1, "Accepting epoch should be 1"); + + vm.prank(carol); + staking.stake(address(mcr), moveToken, 1); + assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), carol), 0, "Carol's stake is still 0."); + // Alice unstakes so her commitment is not counted in the next accepting epoch + vm.prank(alice); + staking.unstake(address(mcr), address(moveToken), 1); + assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), alice), 1, "Alice's stake should still be 1"); + assertEq(staking.getUnstake(address(mcr), 2, address(moveToken), alice), 1, "Alice's unstake in epoch 2 should be 1"); + + // Warp to next epoch + vm.warp(2*epochDuration); + assertEq(mcr.getPresentEpoch(), 2, "Present epoch should be 2"); + assertEq(mcr.getAcceptingEpoch(), 1, "Accepting epoch should be 1"); + + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getAcceptingEpoch(), 2, "Accepting epoch should be 2"); + + assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), carol), 1, "Carol's stake should already be active"); + assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), alice), 0, "Alice's stake should be 0"); + assertEq(moveToken.balanceOf(alice), 2, "Alice's balance should be 2"); + + // Carol commits to height 1 + vm.prank(carol); + mcr.submitSuperBlockCommitment(commitment); + + // perform postconfirmation + vm.prank(carol); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 1, "Last postconfirmed superblock height should be 1, as supermajority was reached (2/2 > threshold)"); + } + + function testSetMinCommitmentAge() public { + // Set min commitment age to a too long value + vm.expectRevert(MCR.minCommitmentAgeForPostconfirmationTooLong.selector); + mcr.setMinCommitmentAgeForPostconfirmation(epochDuration); + + // Set min commitment age to 1/10 of epochDuration + uint256 minAge = epochDuration/10; + mcr.setMinCommitmentAgeForPostconfirmation(minAge); + assertEq(mcr.minCommitmentAgeForPostconfirmation(), minAge, "Min commitment age should be updated to 1/10 of epochDuration"); + } + + function testMinCommitmentAge() public { + // Setup with Alice having supermajority stake + address alice = setupGenesisWithOneAttester(1); + assertEq(mcr.getMinCommitmentAgeForPostconfirmation(), 0, "The unset min commitment age should be 0"); + uint256 minAge = 1 minutes; + mcr.setMinCommitmentAgeForPostconfirmation(minAge); + assertEq(mcr.getMinCommitmentAgeForPostconfirmation(), minAge, "Min commitment age should be updated to 1 minutes"); + + vm.prank(alice); + mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 0, "Immediate postconfirmation should fail."); + + vm.warp(block.timestamp + minAge); // note that time starts at 1, not 0 + // Now postconfirmation should succeed + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 1); + } + + + // ---------------------------------------------------------------- + // -------- Postconfirmer tests -------------------------------------- + // ---------------------------------------------------------------- + + /// @notice Test that getPostconfirmerStartTime correctly calculates term start times + function testPostconfirmerStartTime() public { + // Test at block 0 + assertEq(block.timestamp, 1, "Current time should be 1"); // TODO why is it 1? and not 0? + assertEq(postconfirmerDuration, mcr.getPostconfirmerDuration(), "Postconfirmer term should be correctly set"); + assertEq(mcr.getPostconfirmerStartTime(), 0, "Postconfirmer term should start at (1) time 0"); + + // Test at half an postconfirmer term + vm.warp(postconfirmerDuration-1); + assertEq(mcr.getPostconfirmerStartTime(), 0, "Postconfirmer term should start at (2) time 0"); + + // Test at an postconfirmer term boundary + vm.warp(postconfirmerDuration); + assertEq(mcr.getPostconfirmerStartTime(), postconfirmerDuration, "Postconfirmer term should start at (3) time postconfirmerDuration"); + + // Test at an postconfirmer term boundary + vm.warp(postconfirmerDuration+1); + assertEq(mcr.getPostconfirmerStartTime(), postconfirmerDuration, "Postconfirmer term should start at (4) time postconfirmerDuration"); + + // Test at 1.5 postconfirmer terms + vm.warp(2 * postconfirmerDuration ); + assertEq(mcr.getPostconfirmerStartTime(), 2 * postconfirmerDuration, "Postconfirmer term should start at (5) time 2 * postconfirmerDuration"); + } + + /// @notice Test setting postconfirmer duration with validation + function testSetPostconfirmerDuration() public { + // Check the epoch duration is set correctly + assertEq(epochDuration, staking.getEpochDuration(address(mcr))); + // Test valid duration (less than half epoch duration) + uint256 validDuration = epochDuration / 2 - 1; + mcr.setPostconfirmerDuration(validDuration); + assertEq(mcr.getPostconfirmerDuration(), validDuration, "Duration should be updated to valid value"); + + // Test duration too long compared to epoch (>= epochDuration/2) + uint256 invalidDuration = epochDuration / 2; + vm.expectRevert(MCR.PostconfirmerDurationTooLongForEpoch.selector); + mcr.setPostconfirmerDuration(invalidDuration); + assertEq(mcr.getPostconfirmerDuration(), validDuration, "Duration should remain at previous valid value"); + + // Test duration equal to epoch duration (should fail) + vm.expectRevert(MCR.PostconfirmerDurationTooLongForEpoch.selector); + mcr.setPostconfirmerDuration(epochDuration); + assertEq(mcr.getPostconfirmerDuration(), validDuration, "Duration should remain at previous valid value"); + } + + /// @notice Test that getPostconfirmer correctly selects an postconfirmer based on block hash + function testGetPostconfirmer() public { + // Setup with three attesters with equal stakes + (, address bob, address carol) = setupGenesisWithThreeAttesters(1, 1, 1); + uint256 myPostconfirmerDuration = 13; + mcr.setPostconfirmerDuration(myPostconfirmerDuration); + assertEq(myPostconfirmerDuration,mcr.getPostconfirmerDuration(),"Postconfirmer duration not set correctly"); + + address initialPostconfirmer = mcr.getPostconfirmer(); + assertEq(initialPostconfirmer, bob, "Postconfirmer should be bob"); + + vm.warp(myPostconfirmerDuration-1); + assertEq(mcr.getPostconfirmer(), initialPostconfirmer, "Postconfirmer should not change within term"); + + // Move two postconfirmer terms (moving one resulted still in bob as postconfirmer with current randomness) + vm.warp(2*myPostconfirmerDuration); + address newPostconfirmer = mcr.getPostconfirmer(); + assertEq(mcr.getPostconfirmerStartTime(),2*myPostconfirmerDuration,"Postconfirmer start time should be myPostconfirmerDuration"); + assertEq(newPostconfirmer, carol, "New postconfirmer should be Carol"); + } + + + // ---------------------------------------------------------------- + // -------- Attester reward tests -------------------------------------- + // ---------------------------------------------------------------- + + function testAttesterRewardPoints() public { + // Setup with Alice having supermajority-enabling stake + (address alice, address bob, address carol) = setupGenesisWithThreeAttesters(2, 1, 1); + uint256 aliceInitialBalance = moveToken.balanceOf(alice); + uint256 bobInitialBalance = moveToken.balanceOf(bob); + uint256 carolInitialBalance = moveToken.balanceOf(carol); + mcr.setRewardPerPostconfirmationPoint(0); + + // Exit genesis epoch + vm.warp(epochDuration); + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getAcceptingEpoch(), 1, "Should have exited genesis"); + + // Submit commitments for height 1 honestly (Alice and Bob > 2/3) + vm.prank(alice); + mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + vm.prank(bob); + mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + vm.prank(carol); + mcr.submitSuperBlockCommitment(makeDishonestCommitment(1)); + + // Check initial reward points + assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), alice), 0, "Alice should have no points yet"); + assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), bob), 0, "Bob should have no points yet"); + assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), carol), 0, "Carol should have no points yet"); + + // Trigger postconfirmation + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + + // New reward points + assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), alice), 1, "Alice should have 1 points"); + assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), bob), 1, "Bob should have 1 point"); + assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), carol), 0, "Carol should have 0 point"); + + // Alice and Carol commit to height 2 honestly (Alice + Carol > 2/3) + vm.prank(alice); + mcr.submitSuperBlockCommitment(makeHonestCommitment(2)); + vm.prank(bob); + mcr.submitSuperBlockCommitment(makeDishonestCommitment(2)); + vm.prank(carol); + mcr.submitSuperBlockCommitment(makeHonestCommitment(2)); + + // Trigger postconfirmation, reward distribution by rolling over to next epoch + vm.warp(2*epochDuration); + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getAcceptingEpoch(), 2, "Should be in epoch 2"); + + // Verify rewards were distributed and points were cleared + assertEq(mcr.attesterRewardPoints(mcr.getAcceptingEpoch(), alice), 0, "Alice's points should be cleared"); + assertEq(mcr.attesterRewardPoints(mcr.getAcceptingEpoch(), bob), 0, "Bob's points should be cleared"); + assertEq(mcr.attesterRewardPoints(mcr.getAcceptingEpoch(), carol), 0, "Carol's points should be cleared"); + assertEq(moveToken.balanceOf(alice), aliceInitialBalance + mcr.getStakeForAcceptingEpoch(address(moveToken), alice) * 2, "Alice reward not correct."); + assertEq(moveToken.balanceOf(bob), bobInitialBalance + mcr.getStakeForAcceptingEpoch(address(moveToken), bob), "Bob reward not correct."); + assertEq(moveToken.balanceOf(carol), carolInitialBalance + mcr.getStakeForAcceptingEpoch(address(moveToken), carol), "Carol reward not correct."); + } + + /// @notice Test that postconfirmation rewards are distributed correctly when the postconfirmer is live + function testPostconfirmationRewardsLivePostconfirmer() public { + uint256 stake = 7; + // alice has supermajority stake + uint256 aliceStake = 3*stake; + uint256 bobStake = stake; + (address alice, address bob, ) = setupGenesisWithThreeAttesters(aliceStake, bobStake, 0); + uint256 aliceInitialBalance = moveToken.balanceOf(alice); + uint256 bobInitialBalance = moveToken.balanceOf(bob); + // set the max postconfirmer non-reactivity time to 1/4 epochDuration + mcr.setPostconfirmerPrivilegeDuration(epochDuration/4); + + vm.prank(alice); + mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + // check that the first seen timestamp is set + assertGt(mcr.getCommitmentFirstSeenAt(makeHonestCommitment(1)), 0, "Commitment first seen at should be set"); + + assertEq(mcr.getPostconfirmer(), bob, "Bob should be the postconfirmer but its not"); + assertEq(mcr.isWithinPostconfirmerPrivilegeDuration(makeHonestCommitment(1)), true, "Postconfirmer should be live"); + + // postconfirmer postconfirms while postconfirmer is live + vm.prank(bob); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getAcceptingEpoch(), 0, "Should be in epoch 0"); + assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 1, "Last postconfirmed superblock height should be 1"); + assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), alice), 1, "Alice should have 1 attester points"); + assertEq(mcr.getPostconfirmerRewardPoints(mcr.getAcceptingEpoch(), bob), 1, "Bob should have 1 postconfirmer points"); + assertEq(moveToken.balanceOf(alice), aliceInitialBalance, "Alice should have not received any rewards yet"); + assertEq(moveToken.balanceOf(bob), bobInitialBalance, "Bob should not have received any rewards yet"); + + // warp to next epoch + vm.warp(epochDuration); + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 1); + assertEq(mcr.getAcceptingEpoch(), 1, "Should be in epoch 1"); + + // Verify rewards: + assertEq(moveToken.balanceOf(alice), aliceInitialBalance + aliceStake, "Alice should have received the rewards"); + assertEq(moveToken.balanceOf(bob), bobInitialBalance + bobStake, "Bob should have received the rewards"); + } + + /// @notice Test that volunteer postconfirmation rewards are not distributed to volunteer postconfirmer when postconfirmer is live + // TODO once the postconfirmer can get postconfirm points within the postconfirmer privilege window, whether or not the height has previously been postconfirmed, this test should be updated + function testVolunteerPostconfirmationRewardsLivePostconfirmer() public { + uint256 aliceStake = 9; + // alice has supermajority stake + (address alice, address bob, ) = setupGenesisWithThreeAttesters(aliceStake, 0, 0); + uint256 aliceInitialBalance = moveToken.balanceOf(alice); + uint256 bobInitialBalance = moveToken.balanceOf(bob); + + vm.prank(alice); + mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + + assertEq(mcr.getPostconfirmer(), alice, "Alice should be the postconfirmer since it is the only staked attester."); + assertEq(mcr.isWithinPostconfirmerPrivilegeDuration(makeHonestCommitment(1)), true, "Postconfirmer should be live"); + + // volunteer postconfirmer postconfirms while postconfirmer is live + vm.prank(bob); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 1); + + // bob should not get any postconfirmer rewards + assertEq(moveToken.balanceOf(bob), bobInitialBalance, "Bob should not have received any rewards"); + assertEq(mcr.getPostconfirmerRewardPoints(mcr.getAcceptingEpoch(), bob), 0, "Bob should have 0 postconfirmer points"); + assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), alice), 1, "Alice should have 1 attester points"); + assertEq(mcr.getPostconfirmerRewardPoints(mcr.getAcceptingEpoch(), alice), 0, "Alice should have 0 postconfirmer points"); + + vm.warp(epochDuration); + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getAcceptingEpoch(), 1, "Should be in epoch 1"); + + // alice should get the postconfirmer rewards + assertEq(moveToken.balanceOf(bob), bobInitialBalance, "Bob should not have received any rewards"); + assertEq(moveToken.balanceOf(alice), aliceInitialBalance + aliceStake, "Alice should have received the attester rewards"); + } + + /// @notice Test that postconfirmation rewards are distributed to volunteer postconfirmer when postconfirmer is not live + // TODO this test should probably be merged with the above test + function testVolunteerPostconfirmationRewardsNotLivePostconfirmer() public { + // alice has supermajority stake + uint256 stake =13; + uint256 aliceStake = 3*stake; + uint256 bobStake = stake; + (address alice, address bob, ) = setupGenesisWithThreeAttesters(aliceStake, bobStake, 0); + uint256 aliceInitialBalance = moveToken.balanceOf(alice); + uint256 bobInitialBalance = moveToken.balanceOf(bob); + uint256 thisPostconfirmerDuration = mcr.getPostconfirmerDuration(); + + // set the time windows + assertEq(mcr.getMinCommitmentAgeForPostconfirmation(), 0, "Min commitment age should be 0"); + uint256 thisPostconfirmerPriviledgeWindow = epochDuration/100; + mcr.setPostconfirmerPrivilegeDuration(thisPostconfirmerPriviledgeWindow); + assertEq(mcr.getPostconfirmerPrivilegeDuration(), thisPostconfirmerPriviledgeWindow, "Max postconfirmer non-reactivity time should be 1/100 epochDuration"); + assertGt(thisPostconfirmerDuration, thisPostconfirmerPriviledgeWindow, "Postconfirmer term should be greater than thisPostconfirmerPriviledgeWindow"); + + vm.prank(alice); + mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + + assertEq(mcr.getPostconfirmer(), bob, "bob should be the postconfirmer"); + assertEq(mcr.isWithinPostconfirmerPrivilegeDuration(makeHonestCommitment(1)), true, "Postconfirmer should be live"); + + // warp out of postconfirmer privilege window + vm.warp(block.timestamp + thisPostconfirmerPriviledgeWindow + 1 ); // TODO check why + 1 is needed + assertEq(mcr.isWithinPostconfirmerPrivilegeDuration(makeHonestCommitment(1)), false, "Postconfirmer should not be live"); + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getAcceptingEpoch(), 0, "Should be in epoch 0"); + assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 1, "Last postconfirmed superblock height should be 1"); + assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), alice), 1, "Alice should have 1 attester points"); + assertEq(mcr.getPostconfirmerRewardPoints(mcr.getAcceptingEpoch(), alice), 1, "Alice should have 1 postconfirmer points"); + + // warp to next epoch + vm.warp(epochDuration); + vm.prank(bob); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getAcceptingEpoch(), 1, "Should be in epoch 1"); + + assertEq(moveToken.balanceOf(alice), aliceInitialBalance + aliceStake + aliceStake, "Alice should have received the attester and postconfirmer rewards"); + assertEq(moveToken.balanceOf(bob), bobInitialBalance, "Bob should have received no rewards"); + } + + // ---------------------------------------------------------------- + // -------- Postconfirmer reward tests -------------------------------------- + // ---------------------------------------------------------------- + + + // An postconfirmer that is in place for postconfirmerDuration time should be replaced by a new postconfirmer after their term ended. + // TODO reward logic is not yet implemented + function testPostconfirmerRewards() public { + (address alice, address bob, ) = setupGenesisWithThreeAttesters(1, 1, 0); + assertEq(mcr.getPostconfirmer(), bob, "Bob should be the postconfirmer"); + + // make superBlock commitments + MCRStorage.SuperBlockCommitment memory initCommitment = makeHonestCommitment(1); + vm.prank(alice); + mcr.submitSuperBlockCommitment(initCommitment); + vm.prank(bob); + mcr.submitSuperBlockCommitment(initCommitment); + + // bob postconfirms and gets a reward + vm.prank(bob); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 1); + + // make second superblock commitment + MCRStorage.SuperBlockCommitment memory secondCommitment = makeHonestCommitment(2); + vm.prank(alice); + mcr.submitSuperBlockCommitment(secondCommitment); + vm.prank(bob); + mcr.submitSuperBlockCommitment(secondCommitment); + + // alice can postconfirm, but does not get the reward + // TODO check that bob did not get the reward + vm.prank(alice); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 2); + + // bob tries to postconfirm, but already done by alice + // TODO: bob should still get the reward + vm.prank(bob); + mcr.postconfirmSuperBlocksAndRollover(); + assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 2); + } + + +} diff --git a/protocol-units/post-confirmations/contracts/test/staking/MovementStaking.t.sol b/protocol-units/post-confirmations/contracts/test/staking/MovementStaking.t.sol new file mode 100644 index 00000000..bba4caea --- /dev/null +++ b/protocol-units/post-confirmations/contracts/test/staking/MovementStaking.t.sol @@ -0,0 +1,441 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "forge-std/Test.sol"; +import "../../src/staking/MovementStaking.sol"; +import "../../src/token/MOVETokenDev.sol"; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; + +contract MovementStakingTest is Test { + bytes32 public constant WHITELIST_ROLE = keccak256("WHITELIST_ROLE"); + address public multisig = address(this); + MOVETokenDev public moveToken; + MovementStaking public staking; + + function setUp() public { + MOVETokenDev moveTokenImpl = new MOVETokenDev(); + TransparentUpgradeableProxy moveProxy = new TransparentUpgradeableProxy( + address(moveTokenImpl), + address(this), + abi.encodeWithSignature("initialize(address)", multisig) + ); + + MovementStaking stakingImpl = new MovementStaking(); + TransparentUpgradeableProxy stakingProxy = new TransparentUpgradeableProxy( + address(stakingImpl), + address(this), + abi.encodeWithSignature("initialize(address)", address(moveProxy)) + ); + moveToken = MOVETokenDev(address(moveProxy)); + staking = MovementStaking(address(stakingProxy)); + } + + function testCannotInitializeTwice() public { + // Attempt to initialize again should fail + vm.expectRevert(bytes4(0xf92ee8a9)); + staking.initialize(moveToken); + } + + function testRegister() public { + + // Register a new domain + address payable domain = payable(vm.addr(1)); + address[] memory custodians = new address[](1); + custodians[0] = address(moveToken); + vm.prank(domain); + staking.registerDomain(1 seconds, custodians); + + assertEq(staking.getAcceptingEpoch(domain), 0); + } + + function testWhitelist() public { + + // Our whitelister + address whitelister = vm.addr(1); + // Whitelist them + staking.whitelistAddress(whitelister); + assertEq(staking.hasRole(WHITELIST_ROLE, whitelister), true); + // Remove them from the whitelist + staking.removeAddressFromWhitelist(whitelister); + assertEq(staking.hasRole(WHITELIST_ROLE, whitelister), false); + // As a whitelister let's see if I can whitelist myself + vm.prank(whitelister); + vm.expectRevert(); + staking.whitelistAddress(whitelister); + } + + function testSimpleStaker() public { + // Register a new staker + address payable domain = payable(vm.addr(1)); + + address[] memory custodians = new address[](1); + custodians[0] = address(moveToken); + + vm.prank(domain); + staking.registerDomain(3600 seconds, custodians); + assertEq(staking.getEpochDuration(domain), 3600 seconds, "Epoch duration not set correctly"); + + // stake at the domain + address payable staker = payable(vm.addr(2)); + + staking.whitelistAddress(staker); + moveToken.mint(staker, 100); + + vm.prank(staker); + moveToken.approve(address(staking), 100); + + vm.prank(staker); + staking.stake(domain, moveToken, 100); + + assertEq(moveToken.balanceOf(staker), 0); + assertEq(staking.getStake(domain, 0, address(moveToken), staker), 100); + } + + function testSimpleGenesisCeremony() public { + // Register a new staker + address payable domain = payable(vm.addr(1)); + address[] memory custodians = new address[](1); + custodians[0] = address(moveToken); + vm.prank(domain); + staking.registerDomain(1 seconds, custodians); + assertEq(staking.getEpochDuration(domain), 1 seconds, "Epoch duration not set correctly"); + + // genesis ceremony + address payable staker = payable(vm.addr(2)); + staking.whitelistAddress(staker); + moveToken.mint(staker, 100); + vm.prank(staker); + moveToken.approve(address(staking), 100); + vm.prank(staker); + staking.stake(domain, moveToken, 100); + vm.prank(domain); + staking.acceptGenesisCeremony(); + + assertNotEq(staking.currentAcceptingEpochByDomain(domain), 0); + assertEq(staking.getStakeForAcceptingEpoch(domain, address(moveToken), staker), 100); + + vm.expectRevert(IMovementStaking.GenesisAlreadyAccepted.selector); + vm.prank(domain); + staking.acceptGenesisCeremony(); + } + + function testSimpleRolloverEpoch() public { + + + // Register a new staker + address payable domain = payable(vm.addr(1)); + address[] memory custodians = new address[](1); + custodians[0] = address(moveToken); + vm.prank(domain); + staking.registerDomain(1 seconds, custodians); + + // genesis ceremony + address payable staker = payable(vm.addr(2)); + staking.whitelistAddress(staker); + moveToken.mint(staker, 100); + staking.whitelistAddress(staker); + vm.prank(staker); + moveToken.approve(address(staking), 100); + vm.prank(staker); + staking.stake(domain, moveToken, 100); + vm.prank(domain); + staking.acceptGenesisCeremony(); + + // rollover epoch + for (uint256 i = 0; i < 10; i++) { + vm.warp((i + 1) * 1 seconds); + uint256 epochBefore = staking.getAcceptingEpoch(domain); + vm.prank(domain); + staking.rollOverEpoch(); + uint256 epochAfter = staking.getAcceptingEpoch(domain); + assertEq(epochAfter, epochBefore + 1); + assertEq(staking.getStakeForAcceptingEpoch(domain, address(moveToken), staker), 100); + } + } + + function testUnstakeRolloverEpoch() public { + + + // Register a new staker + address payable domain = payable(vm.addr(1)); + address[] memory custodians = new address[](1); + custodians[0] = address(moveToken); + vm.prank(domain); + staking.registerDomain(1 seconds, custodians); + + // genesis ceremony + address payable staker = payable(vm.addr(2)); + staking.whitelistAddress(staker); + moveToken.mint(staker, 100); + vm.prank(staker); + moveToken.approve(address(staking), 100); + vm.prank(staker); + staking.stake(domain, moveToken, 100); + vm.prank(domain); + staking.acceptGenesisCeremony(); + + for (uint256 i = 0; i < 10; i++) { + vm.warp((i + 1) * 1 seconds); + uint256 epochBefore = staking.getAcceptingEpoch(domain); + + // unstake + vm.prank(staker); + staking.unstake(domain, address(moveToken), 10); + assertEq(staking.getStakeForAcceptingEpoch(domain, address(moveToken), staker), 100 - (i * 10)); + assertEq(moveToken.balanceOf(staker), i * 10); + + // roll over + vm.prank(domain); + staking.rollOverEpoch(); + uint256 epochAfter = staking.getAcceptingEpoch(domain); + assertEq(epochAfter, epochBefore + 1); + } + } + + function testUnstakeAndStakeRolloverEpoch() public { + + + // Register a new staker + address payable domain = payable(vm.addr(1)); + address[] memory custodians = new address[](1); + custodians[0] = address(moveToken); + vm.prank(domain); + staking.registerDomain(1 seconds, custodians); + + // genesis ceremony + address payable staker = payable(vm.addr(2)); + staking.whitelistAddress(staker); + moveToken.mint(staker, 150); + vm.prank(staker); + moveToken.approve(address(staking), 100); + vm.prank(staker); + staking.stake(domain, moveToken, 100); + vm.prank(domain); + staking.acceptGenesisCeremony(); + + for (uint256 i = 0; i < 10; i++) { + vm.warp((i + 1) * 1 seconds); + uint256 epochBefore = staking.getAcceptingEpoch(domain); + + // unstake + vm.prank(staker); + staking.unstake(domain, address(moveToken), 10); + + // stake + vm.prank(staker); + moveToken.approve(address(staking), 5); + vm.prank(staker); + staking.stake(domain, moveToken, 5); + + // check stake + assertEq(staking.getStakeForAcceptingEpoch(domain, address(moveToken), staker), (100 - (i * 10)) + (i * 5)); + assertEq(moveToken.balanceOf(staker), (50 - (i + 1) * 5) + (i * 10)); + + // roll over + vm.prank(domain); + staking.rollOverEpoch(); + uint256 epochAfter = staking.getAcceptingEpoch(domain); + assertEq(epochAfter, epochBefore + 1); + } + } + + function testUnstakeStakeAndSlashRolloverEpoch() public { + + + // Register a new staker + address payable domain = payable(vm.addr(1)); + address[] memory custodians = new address[](1); + custodians[0] = address(moveToken); + vm.prank(domain); + staking.registerDomain(1 seconds, custodians); + + // genesis ceremony + address payable staker = payable(vm.addr(2)); + staking.whitelistAddress(staker); + moveToken.mint(staker, 150); + vm.prank(staker); + moveToken.approve(address(staking), 100); + vm.prank(staker); + staking.stake(domain, moveToken, 100); + vm.prank(domain); + staking.acceptGenesisCeremony(); + + for (uint256 i = 0; i < 5; i++) { + vm.warp((i + 1) * 1 seconds); + uint256 epochBefore = staking.getAcceptingEpoch(domain); + + // unstake + vm.prank(staker); + staking.unstake(domain, address(moveToken), 10); + + // stake + vm.prank(staker); + moveToken.approve(address(staking), 5); + vm.prank(staker); + staking.stake(domain, moveToken, 5); + + // check stake + assertEq( + staking.getStakeForAcceptingEpoch(domain, address(moveToken), staker), (100 - (i * 10)) + (i * 5) - (i * 1) + ); + assertEq(moveToken.balanceOf(staker), (50 - (i + 1) * 5) + (i * 10)); + + // slash + vm.prank(domain); + address[] memory custodians1 = new address[](1); + custodians1[0] = address(moveToken); + address[] memory attesters1 = new address[](1); + attesters1[0] = staker; + uint256[] memory amounts1 = new uint256[](1); + amounts1[0] = 1; + uint256[] memory refundAmounts1 = new uint256[](1); + refundAmounts1[0] = 0; + staking.slash(custodians1, attesters1, amounts1, refundAmounts1); + + // slash immediately takes effect + assertEq( + staking.getStakeForAcceptingEpoch(domain, address(moveToken), staker), + (100 - (i * 10)) + (i * 5) - ((i + 1) * 1) + ); + + // roll over + vm.prank(domain); + staking.rollOverEpoch(); + uint256 epochAfter = staking.getAcceptingEpoch(domain); + assertEq(epochAfter, epochBefore + 1); + } + } + + function testHalbornReward() public { + + // Register a domain + address payable domain = payable(vm.addr(1)); + address[] memory custodians = new address[](1); + custodians[0] = address(moveToken); + vm.prank(domain); + staking.registerDomain(1 seconds, custodians); + + // Alice stakes 1000 tokens + address payable alice = payable(vm.addr(2)); + staking.whitelistAddress(alice); + moveToken.mint(alice, 1000); + vm.prank(alice); + moveToken.approve(address(staking), 1000); + vm.prank(alice); + staking.stake(domain, moveToken, 1000); + + // Bob stakes 100 tokens + address payable bob = payable(vm.addr(3)); + staking.whitelistAddress(bob); + moveToken.mint(bob, 100); + vm.prank(bob); + moveToken.approve(address(staking), 100); + vm.prank(bob); + staking.stake(domain, moveToken, 100); + + // Assertions on stakes and balances + assertEq(moveToken.balanceOf(alice), 0); + assertEq(moveToken.balanceOf(bob), 0); + assertEq(moveToken.balanceOf(address(staking)), 1100); + assertEq(staking.getCustodianStake(domain, 0, address(moveToken)), 1100); + assertEq(staking.getStake(domain, 0, address(moveToken), alice), 1000); + assertEq(staking.getStake(domain, 0, address(moveToken), bob), 100); + + // Charlie calls reward with himself only to steal tokens + address charlie = vm.addr(4); + address[] memory attesters = new address[](1); + attesters[0] = charlie; + uint256[] memory amounts = new uint256[](1); + amounts[0] = 1000; + vm.prank(charlie); + vm.expectRevert( + abi.encodeWithSignature( + "ERC20InsufficientAllowance(address,uint256,uint256)", + address(staking), // should be called by the staking contract + 0, + 1000 + ) + ); + staking.rewardArray(attesters, amounts, custodians); + } + + function testRewardSingleAttester() public { + // Register a domain + address domain = address(this); + address[] memory custodians = new address[](1); + custodians[0] = address(moveToken); + staking.registerDomain(7200 seconds, custodians); + // Setup domain to pay rewards + // moveToken.mint(domain, 100); // Domain has already funds + moveToken.approve(address(staking), 100); // Domain approves staking + + + // Alice stakes 1000 tokens + address payable alice = payable(vm.addr(2)); + staking.whitelistAddress(alice); + moveToken.mint(alice, 1000); + vm.prank(alice); + moveToken.approve(address(staking), 1000); + vm.prank(alice); + staking.stake(domain, moveToken, 1000); + + // Assertions on stakes and balances + assertEq(moveToken.balanceOf(alice), 0, "Alice should have 0 tokens"); + assertEq(moveToken.balanceOf(address(staking)), 1000, "Staking contract should have 1000 tokens"); + assertEq(staking.getCustodianStake(domain, 0, address(moveToken)), 1000, "Custodian stake should be 1000"); + assertEq(staking.getStake(domain, 0, address(moveToken), alice), 1000, "Alice stake should be 1000"); + + // Reward alice + console.log("This is moveToken:", address(moveToken)); + console.log("This is staking:", address(staking)); + console.log("This is alice:", alice); + console.log("This is domain:", domain); + vm.prank(domain); // Domain calls reward + staking.rewardFromDomain(alice, 100, address(moveToken)); + + // Verify reward was received + assertEq(moveToken.balanceOf(alice), 100, "Alice should have received 100 tokens"); + } + + function testSetAcceptingEpoch() public { + // Setup + address domain = makeAddr("domain"); + vm.startPrank(domain); + + // Register domain + address[] memory custodians = new address[](1); + custodians[0] = address(moveToken); + staking.registerDomain(10, custodians); + staking.acceptGenesisCeremony(); + + // Test setting accepting epoch + uint256 currentEpoch = staking.getAcceptingEpoch(domain); + uint256 epochDuration = staking.getEpochDuration(domain); + vm.warp(block.timestamp + 10 * epochDuration); + uint256 presentEpoch = staking.getEpochByL1BlockTime(domain); + + // Should succeed when newEpoch is between current and present + uint256 newEpoch = currentEpoch + 1; + vm.assume(newEpoch <= presentEpoch); + staking.setAcceptingEpoch(domain, newEpoch); + assertEq(staking.getAcceptingEpoch(domain), newEpoch); + + // Should fail when caller is not domain + vm.stopPrank(); + vm.expectRevert("UNAUTHORIZED"); + staking.setAcceptingEpoch(domain, newEpoch + 1); + + // Should fail when newEpoch > present epoch + vm.startPrank(domain); + vm.expectRevert("NEW_EPOCH_MUST_BE_LESS_THAN_PRESENT_EPOCH"); + staking.setAcceptingEpoch(domain, presentEpoch + 1); + + // Should fail when newEpoch <= current epoch + vm.expectRevert("NEW_EPOCH_MUST_BE_HIGHER_THAN_CURRENT_EPOCH"); + staking.setAcceptingEpoch(domain, newEpoch); + } + +} + + + diff --git a/protocol-units/post-confirmations/contracts/test/staking/base/BaseStaking.t.sol b/protocol-units/post-confirmations/contracts/test/staking/base/BaseStaking.t.sol new file mode 100644 index 00000000..b1a32cdc --- /dev/null +++ b/protocol-units/post-confirmations/contracts/test/staking/base/BaseStaking.t.sol @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "forge-std/Test.sol"; +import "../../../src/staking/base/BaseStaking.sol"; + +contract BaseStakingTest is Test { + + function testInitialize() public { + + BaseStaking staking = new BaseStaking(); + staking.initialize(); + + } + + function testCannotInitializeTwice() public { + + BaseStaking staking = new BaseStaking(); + staking.initialize(); + + // Attempt to initialize again should fail + vm.expectRevert(bytes4(0xf92ee8a9)); + staking.initialize(); + + } +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/test/token/Faucet.t.sol b/protocol-units/post-confirmations/contracts/test/token/Faucet.t.sol new file mode 100644 index 00000000..b56ff324 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/test/token/Faucet.t.sol @@ -0,0 +1,58 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "forge-std/Test.sol"; +import {MOVEFaucet, IERC20} from '../../src/token/faucet/MOVEFaucet.sol'; +import {MOVETokenDev} from '../../src/token/MOVETokenDev.sol'; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; + +contract MOVEFaucetTest is Test { + MOVEFaucet public faucet; + MOVETokenDev public token; + + receive() external payable {} + fallback() external payable {} + + function setUp() public { + MOVETokenDev tokenImpl = new MOVETokenDev(); + TransparentUpgradeableProxy tokenProxy = new TransparentUpgradeableProxy(address(tokenImpl), address(this), abi.encodeWithSignature("initialize(address)", address(this))); + token = MOVETokenDev(address(tokenProxy)); + faucet = new MOVEFaucet(IERC20(address(token))); + } + + function testFaucet() public { + vm.warp(1 days); + + token.balanceOf(address(this)); + + token.transfer(address(faucet), 20 * 10 ** token.decimals()); + + vm.deal(address(0x1337), 2* 10**17); + + vm.startPrank(address(0x1337)); + vm.expectRevert("MOVEFaucet: eth invalid amount"); + faucet.faucet{value: 10**16}(); + + faucet.faucet{value: 10**17}(); + assertEq(token.balanceOf(address(0x1337)), 10 * 10 ** token.decimals()); + + vm.expectRevert("MOVEFaucet: balance must be less than determine amount of MOVE"); + faucet.faucet{value: 10**17}(); + + token.transfer(address(0xdead), token.balanceOf(address(0x1337))); + + vm.expectRevert("MOVEFaucet: rate limit exceeded"); + faucet.faucet{value: 10**17}(); + + vm.warp(block.timestamp + 1 days); + faucet.faucet{value: 10**17}(); + vm.stopPrank(); + vm.prank(address(this)); + uint256 balance = address(this).balance; + faucet.withdraw(); + assertEq(address(faucet).balance, 0); + assertEq(address(this).balance, balance + 2*10**17); + } + + +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/test/token/MOVEToken.t.sol b/protocol-units/post-confirmations/contracts/test/token/MOVEToken.t.sol new file mode 100644 index 00000000..f958ee7c --- /dev/null +++ b/protocol-units/post-confirmations/contracts/test/token/MOVEToken.t.sol @@ -0,0 +1,319 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "forge-std/Test.sol"; +import "forge-std/console2.sol"; +import {MOVEToken} from "../../src/token/MOVEToken.sol"; +import {MOVETokenDev} from "../../src/token/MOVETokenDev.sol"; +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol"; +import {CompatibilityFallbackHandler} from "@safe-smart-account/contracts/handler/CompatibilityFallbackHandler.sol"; +import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol"; +import {ERC1967Utils} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Utils.sol"; + +function string2Address(bytes memory str) pure returns (address addr) { + bytes32 data = keccak256(str); + assembly { + mstore(0, data) + addr := mload(0) + } +} + +contract MOVETokenTest is Test { + MOVEToken public token; + TransparentUpgradeableProxy public tokenProxy; + ProxyAdmin public admin; + MOVEToken public moveTokenImplementation; + MOVETokenDev public moveTokenImplementation2; + TimelockController public timelock; + string public moveSignature = "initialize(address,address)"; + address public multisig = address(0x00db70A9e12537495C359581b7b3Bc3a69379A00); + address public anchorage = address(0xabc); + bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; + + function setUp() public { + moveTokenImplementation = new MOVEToken(); + moveTokenImplementation2 = new MOVETokenDev(); + + uint256 minDelay = 1 days; + address[] memory proposers = new address[](5); + address[] memory executors = new address[](1); + + proposers[0] = string2Address("Andy"); + proposers[1] = string2Address("Bob"); + proposers[2] = string2Address("Charlie"); + proposers[3] = string2Address("David"); + proposers[4] = string2Address("Eve"); + executors[0] = multisig; + + timelock = new TimelockController(minDelay, proposers, executors, address(0x0)); + + vm.recordLogs(); + // Deploy proxy + tokenProxy = new TransparentUpgradeableProxy( + address(moveTokenImplementation), + address(timelock), + abi.encodeWithSignature(moveSignature, multisig, anchorage) + ); + Vm.Log[] memory entries = vm.getRecordedLogs(); + + admin = ProxyAdmin(entries[entries.length - 2].emitter); + + token = MOVEToken(address(tokenProxy)); + } + + function testCannotInitializeTwice() public { + // Initialize the contract + vm.expectRevert(bytes4(0xf92ee8a9)); + token.initialize(multisig, anchorage); + } + + function testDecimals() public view { + assertEq(token.decimals(), 8); + } + + function testTotalSupply() public view { + assertEq(token.totalSupply(), 10000000000 * 10 ** 8); + } + + function testMultisigBalance() public view { + assertEq(token.balanceOf(anchorage), 10000000000 * 10 ** 8); + } + + /// @notice Fuzzing test to verify admin role permissions + /// @param other Any address to test against + function testAdminRoleFuzz(address other) public { + // Verify multisig has admin role (primary admin) + assertEq(token.hasRole(DEFAULT_ADMIN_ROLE, multisig), true); + + // Verify other addresses only have admin if they are the multisig + assertEq(token.hasRole(DEFAULT_ADMIN_ROLE, other), other == multisig); + + // Verify custody address (anchorage) does not have admin role + assertEq(token.hasRole(DEFAULT_ADMIN_ROLE, anchorage), false); + + // Test role granting permissions (skip multisig since it should succeed) + vm.assume(other != multisig); + vm.expectRevert( + abi.encodeWithSelector(IAccessControl.AccessControlUnauthorizedAccount.selector, address(this), DEFAULT_ADMIN_ROLE) + ); + token.grantRole(DEFAULT_ADMIN_ROLE, other); + } + + function testUpgradeFromTimelock() public { + assertEq(admin.owner(), address(timelock)); + + vm.prank(string2Address("Andy")); + timelock.schedule( + address(admin), + 0, + abi.encodeWithSignature( + "upgradeAndCall(address,address,bytes)", + address(tokenProxy), + address(moveTokenImplementation2), + "" + ), + bytes32(0), + bytes32(0), + block.timestamp + 1 days + ); + + vm.warp(block.timestamp + 1 days + 1); + + vm.prank(multisig); + timelock.execute( + address(admin), + 0, + abi.encodeWithSignature( + "upgradeAndCall(address,address,bytes)", + address(tokenProxy), + address(moveTokenImplementation2), + "" + ), + bytes32(0), + bytes32(0) + ); + + // Check the token details + assertEq(token.decimals(), 8); + assertEq(token.totalSupply(), 10000000000 * 10 ** 8); + assertEq(token.balanceOf(anchorage), 10000000000 * 10 ** 8); + } + + function testTransferToNewTimelock() public { + assertEq(admin.owner(), address(timelock)); + + uint256 minDelay = 1 days; + address[] memory proposers = new address[](5); + address[] memory executors = new address[](1); + + // Andy has been compromised, Albert will be the new proposer + // we need to transfer the proxyAdmin ownership to a new timelock + proposers[0] = string2Address("Albert"); + proposers[1] = string2Address("Bob"); + proposers[2] = string2Address("Charlie"); + proposers[3] = string2Address("David"); + proposers[4] = string2Address("Eve"); + + executors[0] = multisig; + + TimelockController newTimelock = new TimelockController(minDelay, proposers, executors, address(0x0)); + vm.prank(string2Address("Bob")); + timelock.schedule( + address(admin), + 0, + abi.encodeWithSignature("transferOwnership(address)", address(newTimelock)), + bytes32(0), + bytes32(0), + block.timestamp + 1 days + ); + + vm.warp(block.timestamp + 1 days + 1); + vm.prank(multisig); + timelock.execute( + address(admin), + 0, + abi.encodeWithSignature("transferOwnership(address)", address(newTimelock)), + bytes32(0), + bytes32(0) + ); + + assertEq(admin.owner(), address(newTimelock)); + } + + function testGrants() public { + testUpgradeFromTimelock(); + + vm.prank(multisig); + MOVETokenDev(address(token)).grantRoles(multisig); + + // Check the token details + assertEq(MOVETokenDev(address(token)).hasRole(MOVETokenDev(address(token)).MINTER_ROLE(), multisig), true); + } + + function testMint() public { + testUpgradeFromTimelock(); + + vm.prank(multisig); + MOVETokenDev(address(token)).grantRoles(multisig); + uint256 intialBalance = MOVETokenDev(address(token)).balanceOf(address(0x1337)); + // Mint tokens + vm.prank(multisig); + MOVETokenDev(address(token)).mint(address(0x1337), 100); + + // Check the token details + assertEq(MOVETokenDev(address(token)).balanceOf(address(0x1337)), intialBalance + 100); + } + + function testRevokeMinterRole() public { + testUpgradeFromTimelock(); + + vm.prank(multisig); + MOVETokenDev(address(token)).grantRoles(multisig); + + assertEq(MOVETokenDev(address(token)).hasRole(MOVETokenDev(address(token)).MINTER_ROLE(), multisig), true); + + vm.startPrank(multisig); + MOVETokenDev(address(token)).mint(address(0x1337), 100); + // Revoke minter role + MOVETokenDev(address(token)).revokeMinterRole(multisig); + + // Check the token details + assertEq(MOVETokenDev(address(token)).hasRole(MOVETokenDev(address(token)).MINTER_ROLE(), multisig), false); + + vm.expectRevert( + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, + multisig, + MOVETokenDev(address(token)).MINTER_ROLE() + ) + ); + MOVETokenDev(address(token)).mint(address(0x1337), 100); + vm.stopPrank(); + } + + function testGrantRevokeMinterAdminRole() public { + testUpgradeFromTimelock(); + vm.prank(multisig); + MOVETokenDev(address(token)).grantRoles(multisig); + assertEq(MOVETokenDev(address(token)).hasRole(MOVETokenDev(address(token)).MINTER_ROLE(), multisig), true); + vm.startPrank(multisig); + + MOVETokenDev(address(token)).mint(address(0x1337), 100); + // Revoke minter role + MOVETokenDev(address(token)).revokeMinterRole(multisig); + + // Check the token details + assertEq(MOVETokenDev(address(token)).hasRole(MOVETokenDev(address(token)).MINTER_ROLE(), multisig), false); + + vm.expectRevert( + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, + multisig, + MOVETokenDev(address(token)).MINTER_ROLE() + ) + ); + MOVETokenDev(address(token)).mint(address(0x1337), 100); + + assertEq( + MOVETokenDev(address(token)).hasRole(MOVETokenDev(address(token)).MINTER_ROLE(), address(0x1337)), false + ); + // Grant minter role + MOVETokenDev(address(token)).grantMinterRole(address(0x1337)); + vm.stopPrank(); + vm.prank(address(0x1337)); + MOVETokenDev(address(token)).mint(address(0x1337), 100); + + // Check the token details + assertEq( + MOVETokenDev(address(token)).hasRole(MOVETokenDev(address(token)).MINTER_ROLE(), address(0x1337)), true + ); + + // Revoke minter role + vm.prank(multisig); + MOVETokenDev(address(token)).revokeMinterRole(address(0x1337)); + + assertEq( + MOVETokenDev(address(token)).hasRole(MOVETokenDev(address(token)).MINTER_ROLE(), address(0x1337)), false + ); + + vm.expectRevert( + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, + address(0x1337), + MOVETokenDev(address(token)).MINTER_ROLE() + ) + ); + vm.prank(address(0x1337)); + MOVETokenDev(address(token)).mint(address(0x1337), 100); + + assertEq(MOVETokenDev(address(token)).hasRole(MOVETokenDev(address(token)).MINTER_ADMIN_ROLE(), multisig), true); + // Revoke minter admin role + vm.startPrank(multisig); + MOVETokenDev(address(token)).revokeMinterAdminRole(multisig); + + assertEq( + MOVETokenDev(address(token)).hasRole(MOVETokenDev(address(token)).MINTER_ADMIN_ROLE(), multisig), false + ); + + vm.expectRevert( + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, + multisig, + MOVETokenDev(address(token)).MINTER_ADMIN_ROLE() + ) + ); + MOVETokenDev(address(token)).grantMinterRole(multisig); + + vm.expectRevert( + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, + multisig, + MOVETokenDev(address(token)).MINTER_ROLE() + ) + ); + MOVETokenDev(address(token)).mint(address(0x1337), 100); + vm.stopPrank(); + } +} diff --git a/protocol-units/post-confirmations/contracts/test/token/MOVETokenV2.t.sol b/protocol-units/post-confirmations/contracts/test/token/MOVETokenV2.t.sol new file mode 100644 index 00000000..f333e39a --- /dev/null +++ b/protocol-units/post-confirmations/contracts/test/token/MOVETokenV2.t.sol @@ -0,0 +1,166 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "forge-std/Test.sol"; +import "../../src/token/MOVETokenDev.sol"; +import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; +import {IAccessControl} from "@openzeppelin/contracts/access/IAccessControl.sol"; +import {console} from "forge-std/console.sol"; +import {AccessControl} from "@openzeppelin/contracts/access/AccessControl.sol"; + +contract MOVETokenDevTest is Test { + MOVETokenDev public token; + ProxyAdmin public admin; + string public moveSignature = "initialize(address)"; + address public multisig = 0x00db70A9e12537495C359581b7b3Bc3a69379A00; + bytes32 public MINTER_ROLE; + bytes32 public constant DEFAULT_ADMIN_ROLE = 0x00; + + function setUp() public { + MOVETokenDev moveTokenImplementation = new MOVETokenDev(); + + // Deploy proxies + TransparentUpgradeableProxy moveProxy = new TransparentUpgradeableProxy( + address(moveTokenImplementation), address(multisig), abi.encodeWithSignature(moveSignature, multisig) + ); + token = MOVETokenDev(address(moveProxy)); + MINTER_ROLE = token.MINTER_ROLE(); + } + + function testCannotInitializeTwice() public { + vm.startPrank(multisig); + // Initialize the contract + vm.expectRevert(); + token.initialize(multisig); + vm.stopPrank(); + } + + function testGrants() public view { + // Check the token details + assertEq(token.hasRole(MINTER_ROLE, multisig), true); + } + + function testMint() public { + vm.startPrank(multisig); + uint256 intialBalance = token.balanceOf(address(0x1337)); + // Mint tokens + token.mint(address(0x1337), 100); + + // Check the token details + assertEq(token.balanceOf(address(0x1337)), intialBalance + 100); + vm.stopPrank(); + } + + function testRevokeMinterRole() public { + vm.startPrank(multisig); + assertEq(token.hasRole(MINTER_ROLE, multisig), true); + + token.mint(address(0x1337), 100); + // Revoke minter role + token.revokeMinterRole(multisig); + + // Check the token details + assertEq(token.hasRole(MINTER_ROLE, multisig), false); + + vm.expectRevert( + abi.encodeWithSelector(IAccessControl.AccessControlUnauthorizedAccount.selector, multisig, MINTER_ROLE) + ); + token.mint(address(0x1337), 100); + vm.stopPrank(); + } + + function testGrantRevokeMinterAdminRole() public { + vm.startPrank(multisig); + assertEq(token.hasRole(MINTER_ROLE, multisig), true); + + token.mint(address(0x1337), 100); + // Revoke minter role + token.revokeMinterRole(multisig); + + // Check the token details + assertEq(token.hasRole(MINTER_ROLE, multisig), false); + + vm.expectRevert( + abi.encodeWithSelector(IAccessControl.AccessControlUnauthorizedAccount.selector, multisig, MINTER_ROLE) + ); + token.mint(address(0x1337), 100); + + assertEq(token.hasRole(MINTER_ROLE, address(0x1337)), false); + // Grant minter role + token.grantMinterRole(address(0x1337)); + vm.stopPrank(); + vm.prank(address(0x1337)); + token.mint(address(0x1337), 100); + + // Check the token details + assertEq(token.hasRole(MINTER_ROLE, address(0x1337)), true); + vm.startPrank(multisig); + // Revoke minter role + token.revokeMinterRole(address(0x1337)); + + assertEq(token.hasRole(MINTER_ROLE, address(0x1337)), false); + vm.stopPrank(); + vm.expectRevert( + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, address(0x1337), MINTER_ROLE + ) + ); + vm.prank(address(0x1337)); + token.mint(address(0x1337), 100); + vm.startPrank(multisig); + assertEq(token.hasRole(token.MINTER_ADMIN_ROLE(), multisig), true); + // Revoke minter admin role + token.revokeMinterAdminRole(multisig); + + assertEq(token.hasRole(token.MINTER_ADMIN_ROLE(), multisig), false); + + vm.expectRevert( + abi.encodeWithSelector( + IAccessControl.AccessControlUnauthorizedAccount.selector, multisig, token.MINTER_ADMIN_ROLE() + ) + ); + token.grantMinterRole(multisig); + + vm.expectRevert( + abi.encodeWithSelector(IAccessControl.AccessControlUnauthorizedAccount.selector, multisig, MINTER_ROLE) + ); + token.mint(address(0x1337), 100); + vm.stopPrank(); + } + + // Tests that non-admin accounts cannot grant roles by checking for the expected revert + function testCannotGrantRoleFuzz(address messenger, address receiver) public { + // repeat with new test if messenger is multisig or 0 + vm.assume(messenger != multisig); + vm.assume(messenger != address(0)); + console.log("............................"); // TODO : if the console logs are modified, the test fail sometimes, why? + console.log("messenger", messenger); + console.log("multisig", multisig); + + // impersonate the messenger address for all subsequent calls + vm.startPrank(messenger); + + // Expect the call to revert with AccessControlUnauthorizedAccount error + // - messenger: the account trying to grant the role + // - DEFAULT_ADMIN_ROLE (0x00): the role needed to grant any role + console.log("... messenger", messenger); + console.logBytes32(DEFAULT_ADMIN_ROLE); + vm.expectRevert( + abi.encodeWithSelector(IAccessControl.AccessControlUnauthorizedAccount.selector, messenger, DEFAULT_ADMIN_ROLE) + ); + + // Attempt to grant MINTER_ROLE to receiver address + // This should fail since messenger doesn't have DEFAULT_ADMIN_ROLE + try token.grantRole(MINTER_ROLE, receiver) { + fail(); + } catch Error(string memory reason) { + console.log("Revert reason:", reason); + } catch (bytes memory returnData) { + console.logBytes(returnData); + } + + vm.stopPrank(); + } + +} diff --git a/protocol-units/post-confirmations/contracts/test/token/base/BaseToken.t.sol b/protocol-units/post-confirmations/contracts/test/token/base/BaseToken.t.sol new file mode 100644 index 00000000..c6e90fa0 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/test/token/base/BaseToken.t.sol @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "forge-std/Test.sol"; +import "../../../src/token/base/BaseToken.sol"; + +contract BaseTokenTest is Test { + function testInitialize() public { + BaseToken token = new BaseToken(); + + // Call the initialize function + token.initialize("Base Token", "BASE"); + + // Check the token details + assertEq(token.name(), "Base Token"); + assertEq(token.symbol(), "BASE"); + } + + function testCannotInitializeTwice() public { + BaseToken token = new BaseToken(); + + // Initialize the contract + token.initialize("Base Token", "BASE"); + + // Attempt to initialize again should fail + vm.expectRevert(bytes4(0xf92ee8a9)); + token.initialize("Base Token", "BASE"); + } +} diff --git a/protocol-units/post-confirmations/contracts/test/token/base/MintableToken.t.sol b/protocol-units/post-confirmations/contracts/test/token/base/MintableToken.t.sol new file mode 100644 index 00000000..d7716063 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/test/token/base/MintableToken.t.sol @@ -0,0 +1,32 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "forge-std/Test.sol"; +import "../../../src/token/base/MintableToken.sol"; + +contract MintableTokenTest is Test { + + function testInitialize() public { + + MintableToken token = new MintableToken(); + + // Call the initialize function + token.initialize("Base Token", "BASE"); + + // Check the token details + assertEq(token.name(), "Base Token"); + assertEq(token.symbol(), "BASE"); + } + + function testCannotInitializeTwice() public { + + MintableToken token = new MintableToken(); + + // Initialize the contract + token.initialize("Base Token", "BASE"); + + // Attempt to initialize again should fail + vm.expectRevert(bytes4(0xf92ee8a9)); + token.initialize("Base Token", "BASE"); + } +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/test/token/base/WrappedToken.t.sol b/protocol-units/post-confirmations/contracts/test/token/base/WrappedToken.t.sol new file mode 100644 index 00000000..7508f080 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/test/token/base/WrappedToken.t.sol @@ -0,0 +1,64 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "forge-std/Test.sol"; +import "../../../src/token/base/MintableToken.sol"; +import "../../../src/token/base/WrappedToken.sol"; +// import base access control instead of upgradeable access control + + +contract WrappedTokenTest is Test { + + function testInitialize() public { + + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + WrappedToken token = new WrappedToken(); + token.initialize("Base Token", "BASE", underlyingToken); + + // Check the token details + assertEq(token.name(), "Base Token"); + assertEq(token.symbol(), "BASE"); + + } + + function testCannotInitializeTwice() public { + + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + WrappedToken token = new WrappedToken(); + token.initialize("Base Token", "BASE", underlyingToken); + + // Attempt to initialize again should fail + vm.expectRevert(bytes4(0xf92ee8a9)); + token.initialize("Base Token", "BASE", underlyingToken); + + } + + function testGrants() public { + + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + WrappedToken token = new WrappedToken(); + token.initialize("Base Token", "BASE", underlyingToken); + + underlyingToken.grantMinterRole(address(token)); + assert(underlyingToken.hasRole(underlyingToken.MINTER_ROLE(), address(token))); + + // valid minting succeeds + vm.prank(address(token)); + underlyingToken.mint(address(this), 100); + assert(underlyingToken.balanceOf(address(this)) == 100); + + // invalid minting fails + address payable signer = payable(vm.addr(1)); + vm.prank(signer); + vm.expectRevert(); // todo: catch type + underlyingToken.mint(signer, 100); + + } + +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/test/token/custodian/CustodianToken.t.sol b/protocol-units/post-confirmations/contracts/test/token/custodian/CustodianToken.t.sol new file mode 100644 index 00000000..c9f01569 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/test/token/custodian/CustodianToken.t.sol @@ -0,0 +1,221 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "forge-std/Test.sol"; +import "../../../src/token/base/MintableToken.sol"; +import "../../../src/token/custodian/CustodianToken.sol"; +// import base access control instead of upgradeable access control + +contract CustodianTokenTest is Test { + function testInitialize() public { + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + CustodianToken token = new CustodianToken(); + token.initialize("Custodian Token", "CUSTODIAN", underlyingToken); + + // Check the token details + assertEq(token.name(), "Custodian Token"); + assertEq(token.symbol(), "CUSTODIAN"); + } + + function testCannotInitializeTwice() public { + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + CustodianToken token = new CustodianToken(); + token.initialize("Custodian Token", "CUSTODIAN", underlyingToken); + + // Attempt to initialize again should fail + vm.expectRevert(bytes4(0xf92ee8a9)); + token.initialize("Custodian Token", "CUSTODIAN", underlyingToken); + } + + function testGrants() public { + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + CustodianToken token = new CustodianToken(); + token.initialize("Custodian Token", "CUSTODIAN", underlyingToken); + + underlyingToken.grantMinterRole(address(token)); + assert( + underlyingToken.hasRole( + underlyingToken.MINTER_ROLE(), + address(token) + ) + ); + + // valid minting succeeds + vm.prank(address(token)); + underlyingToken.mint(address(this), 100); + assert(underlyingToken.balanceOf(address(this)) == 100); + + // invalid minting fails + address payable signer = payable(vm.addr(1)); + vm.prank(signer); + vm.expectRevert(); // todo: catch type + underlyingToken.mint(signer, 100); + } + + function testCustodianMint() public { + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + CustodianToken token = new CustodianToken(); + token.initialize("Custodian Token", "CUSTODIAN", underlyingToken); + + underlyingToken.grantMinterRole(address(token)); + assert( + underlyingToken.hasRole( + underlyingToken.MINTER_ROLE(), + address(token) + ) + ); + + // valid minting succeeds + token.mint(address(this), 100); + assert(token.balanceOf(address(this)) == 100); + assert(underlyingToken.balanceOf(address(token)) == 100); + + // valid minting is incremental + address payable signer = payable(vm.addr(1)); + token.mint(signer, 100); + assert(token.balanceOf(signer) == 100); + assert(underlyingToken.balanceOf(address(token)) == 200); + + // signers with the minter role can call through the custodian + token.grantMinterRole(signer); + vm.prank(signer); + token.mint(signer, 100); + assert(token.balanceOf(signer) == 200); + assert(underlyingToken.balanceOf(address(token)) == 300); + + // signers without the minter role cannot call through the custodian + token.revokeMinterRole(signer); + vm.prank(signer); + vm.expectRevert(); // todo: catch type + token.mint(signer, 100); + } + + function testCustodianTransferToValidSink() public { + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + CustodianToken token = new CustodianToken(); + token.initialize("Custodian Token", "CUSTODIAN", underlyingToken); + + underlyingToken.grantMinterRole(address(token)); + assert( + underlyingToken.hasRole( + underlyingToken.MINTER_ROLE(), + address(token) + ) + ); + + // signers + address payable validSink = payable(vm.addr(2)); + token.grantTransferSinkRole(validSink); + address payable alice = payable(vm.addr(5)); + + // transfer to valid sink succeeds + token.mint(alice, 100); + vm.prank(alice); + token.transfer(validSink, 100); + assert(token.balanceOf(alice) == 0); + assert(underlyingToken.balanceOf(validSink) == 100); + } + + function testCustodianTransferToInvalidSink() public { + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + CustodianToken token = new CustodianToken(); + token.initialize("Custodian Token", "CUSTODIAN", underlyingToken); + + underlyingToken.grantMinterRole(address(token)); + assert( + underlyingToken.hasRole( + underlyingToken.MINTER_ROLE(), + address(token) + ) + ); + + // signers + address payable invalidSink = payable(vm.addr(2)); + address payable alice = payable(vm.addr(5)); + + // transfer to invalid sink fails + token.mint(alice, 100); + vm.prank(alice); + vm.expectRevert(); // todo: catch type + token.transfer(invalidSink, 100); + } + + function testCustodianBuyValidSource() public { + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + CustodianToken token = new CustodianToken(); + token.initialize("Custodian Token", "CUSTODIAN", underlyingToken); + + underlyingToken.grantMinterRole(address(token)); + assert( + underlyingToken.hasRole( + underlyingToken.MINTER_ROLE(), + address(token) + ) + ); + + // signers + address payable validSource = payable(vm.addr(2)); + token.grantBuyerRole(validSource); + address payable alice = payable(vm.addr(5)); + + // fund the valid source in the underlying token + underlyingToken.mint(validSource, 100); + + // approve the custodian to spend the underlying token + vm.prank(validSource); + underlyingToken.approve(address(token), 100); + + // buy from valid source succeeds + vm.prank(validSource); + token.buyCustodialToken(alice, 100); + assert(token.balanceOf(alice) == 100); + assert(underlyingToken.balanceOf(address(token)) == 100); + assert(underlyingToken.balanceOf(validSource) == 0); + } + + function testCustodianBuyInvalidSource() public { + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + CustodianToken token = new CustodianToken(); + token.initialize("Custodian Token", "CUSTODIAN", underlyingToken); + + underlyingToken.grantMinterRole(address(token)); + assert( + underlyingToken.hasRole( + underlyingToken.MINTER_ROLE(), + address(token) + ) + ); + + // signers + address payable invalidSource = payable(vm.addr(2)); + address payable alice = payable(vm.addr(5)); + + // fund the valid source in the underlying token + underlyingToken.mint(invalidSource, 100); + + // approve the custodian to spend the underlying token + vm.prank(invalidSource); + underlyingToken.approve(address(token), 100); + + // buy from valid source succeeds + vm.prank(invalidSource); + vm.expectRevert(); // todo: catch type + token.buyCustodialToken(alice, 100); + } +} diff --git a/protocol-units/post-confirmations/contracts/test/token/locked/LockedToken.t.sol b/protocol-units/post-confirmations/contracts/test/token/locked/LockedToken.t.sol new file mode 100644 index 00000000..bf8c2ced --- /dev/null +++ b/protocol-units/post-confirmations/contracts/test/token/locked/LockedToken.t.sol @@ -0,0 +1,340 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "forge-std/Test.sol"; +import "../../../src/token/base/MintableToken.sol"; +import "../../../src/token/locked/LockedToken.sol"; +// import base access control instead of upgradeable access control + +contract LockedTokenTest is Test { + + function testInitialize() public { + + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + LockedToken token = new LockedToken(); + token.initialize("Locked Token", "LOCKED", underlyingToken); + + // Check the token details + assertEq(token.name(), "Locked Token"); + assertEq(token.symbol(), "LOCKED"); + + } + + function testBasicLock() public { + + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + LockedToken token = new LockedToken(); + token.initialize("Locked Token", "LOCKED", underlyingToken); + + underlyingToken.grantMinterRole(address(token)); + assert(underlyingToken.hasRole(underlyingToken.MINTER_ROLE(), address(token))); + + // signers + address payable alice = payable(vm.addr(1)); + + // mint locked tokens + address[] memory addresses = new address[](1); + addresses[0] = alice; + uint256[] memory amounts = new uint256[](1); + amounts[0] = 100; + uint256[] memory locks = new uint256[](1); + locks[0] = block.timestamp + 100; + token.mintAndLock( + addresses, + amounts, + amounts, // in this test case, we are not adding separate lock amounts + locks + ); + assert(token.balanceOf(alice) == 100); + assert(underlyingToken.balanceOf(address(token)) == 100); + assert(underlyingToken.balanceOf(alice) == 0); + + vm.warp(block.timestamp + 1); + // cannot release locked tokens + vm.prank(alice); + token.release(); + assert(token.balanceOf(alice) == 100); + assert(underlyingToken.balanceOf(address(token)) == 100); + assert(underlyingToken.balanceOf(alice) == 0); + + // tick forward + vm.warp(block.timestamp + 101); + + // release locked tokens + vm.prank(alice); + token.release(); + assert(token.balanceOf(alice) == 0); + assert(underlyingToken.balanceOf(address(token)) == 0); + assert(underlyingToken.balanceOf(alice) == 100); + + } + + function testLockWithEarnings() public { + + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + LockedToken token = new LockedToken(); + token.initialize("Locked Token", "LOCKED", underlyingToken); + + underlyingToken.grantMinterRole(address(token)); + + // signers + address payable alice = payable(vm.addr(1)); + + // mint locked tokens + address[] memory addresses = new address[](1); + addresses[0] = alice; + uint256[] memory mintAmounts = new uint256[](1); + mintAmounts[0] = 100; + uint256[] memory lockAmounts = new uint256[](1); + lockAmounts[0] = 150; + uint256[] memory locks = new uint256[](1); + locks[0] = block.timestamp + 100; + token.mintAndLock( + addresses, + mintAmounts, + lockAmounts, + locks + ); + assert(token.balanceOf(alice) == 100); + assert(underlyingToken.balanceOf(address(token)) == 100); + assert(underlyingToken.balanceOf(alice) == 0); + + // cannot release locked tokens + vm.warp(block.timestamp + 1); + vm.prank(alice); + token.release(); + assert(token.balanceOf(alice) == 100); + assert(underlyingToken.balanceOf(address(token)) == 100); + assert(underlyingToken.balanceOf(alice) == 0); + + // alice earns on locked tokens + token.mint(alice, 50); + assert(token.balanceOf(alice) == 150); + + // tick forward + vm.warp(block.timestamp + 101); + + // release locked tokens + vm.prank(alice); + token.release(); + assert(token.balanceOf(alice) == 0); + assert(underlyingToken.balanceOf(address(token)) == 0); + assert(underlyingToken.balanceOf(alice) == 150); + } + + function testLockMultiple() public { + + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + LockedToken token = new LockedToken(); + token.initialize("Locked Token", "LOCKED", underlyingToken); + + underlyingToken.grantMinterRole(address(token)); + + // signers + address payable alice = payable(vm.addr(1)); + + // mint locked tokens + address[] memory addresses = new address[](3); + addresses[0] = alice; + addresses[1] = alice; + addresses[2] = alice; + uint256[] memory mintAmounts = new uint256[](3); + mintAmounts[0] = 100; + mintAmounts[1] = 50; + mintAmounts[2] = 25; + uint256[] memory lockAmounts = new uint256[](3); + lockAmounts[0] = 100; + lockAmounts[1] = 50; + lockAmounts[2] = 25; + uint256[] memory locks = new uint256[](3); + locks[0] = block.timestamp + 100; + locks[1] = block.timestamp + 200; + locks[2] = block.timestamp + 300; + token.mintAndLock( + addresses, + mintAmounts, + lockAmounts, + locks + ); + assert(token.balanceOf(alice) == 175); + assert(underlyingToken.balanceOf(address(token)) == 175); + assert(underlyingToken.balanceOf(alice) == 0); + + // cannot release locked tokens + vm.warp(block.timestamp + 1); + vm.prank(alice); + token.release(); + assert(token.balanceOf(alice) == 175); + assert(underlyingToken.balanceOf(address(token)) == 175); + assert(underlyingToken.balanceOf(alice) == 0); + + // tick forward + vm.warp(block.timestamp + 301); + + // release locked tokens + vm.prank(alice); + token.release(); + assert(token.balanceOf(alice) == 0); + assert(underlyingToken.balanceOf(address(token)) == 0); + assert(underlyingToken.balanceOf(alice) == 175); + } + + function testLockMultiplePrematureClaim() public { + + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + LockedToken token = new LockedToken(); + token.initialize("Locked Token", "LOCKED", underlyingToken); + + underlyingToken.grantMinterRole(address(token)); + + // signers + address payable alice = payable(vm.addr(1)); + + // mint locked tokens + address[] memory addresses = new address[](3); + addresses[0] = alice; + addresses[1] = alice; + addresses[2] = alice; + uint256[] memory mintAmounts = new uint256[](3); + mintAmounts[0] = 100; + mintAmounts[1] = 50; + mintAmounts[2] = 25; + uint256[] memory lockAmounts = new uint256[](3); + lockAmounts[0] = 100; + lockAmounts[1] = 50; + lockAmounts[2] = 25; + uint256[] memory locks = new uint256[](3); + locks[0] = block.timestamp + 100; + locks[1] = block.timestamp + 200; + locks[2] = block.timestamp + 400; + token.mintAndLock( + addresses, + mintAmounts, + lockAmounts, + locks + ); + assert(token.balanceOf(alice) == 175); + assert(underlyingToken.balanceOf(address(token)) == 175); + assert(underlyingToken.balanceOf(alice) == 0); + + // cannot release locked tokens + vm.warp(block.timestamp + 1); + vm.prank(alice); + token.release(); + assert(token.balanceOf(alice) == 175); + assert(underlyingToken.balanceOf(address(token)) == 175); + assert(underlyingToken.balanceOf(alice) == 0); + + // tick forward + vm.warp(block.timestamp + 301); + + // release locked tokens + vm.prank(alice); + token.release(); + assert(token.balanceOf(alice) == 25); + assert(underlyingToken.balanceOf(address(token)) == 25); + assert(underlyingToken.balanceOf(alice) == 150); + // two releases occurred, alice lock index 0 should still be present + (uint256 lock1,) = token.locks(alice, 0); + assert(lock1 == 25); + + // tick forward + vm.warp(block.timestamp + 101); + vm.prank(alice); + token.release(); + assert(token.balanceOf(alice) == 0); + assert(underlyingToken.balanceOf(address(token)) == 0); + assert(underlyingToken.balanceOf(alice) == 175); + // Verify that all locks are released by checking that accessing any lock reverts + vm.expectRevert(); + token.locks(alice, 0); // Should revert since no locks should exist + } + + + function testTransferLockedAsset() public { + + MintableToken underlyingToken = new MintableToken(); + underlyingToken.initialize("Underlying Token", "UNDERLYING"); + + LockedToken token = new LockedToken(); + token.initialize("Locked Token", "LOCKED", underlyingToken); + + underlyingToken.grantMinterRole(address(token)); + + // signers + address payable alice = payable(vm.addr(1)); + + // mint locked tokens + address[] memory addresses = new address[](3); + addresses[0] = alice; + addresses[1] = alice; + addresses[2] = alice; + uint256[] memory mintAmounts = new uint256[](3); + mintAmounts[0] = 100; + mintAmounts[1] = 50; + mintAmounts[2] = 25; + uint256[] memory lockAmounts = new uint256[](3); + lockAmounts[0] = 100; + lockAmounts[1] = 50; + lockAmounts[2] = 25; + uint256[] memory locks = new uint256[](3); + locks[0] = block.timestamp + 100; + locks[1] = block.timestamp + 200; + locks[2] = block.timestamp + 400; + token.mintAndLock( + addresses, + mintAmounts, + lockAmounts, + locks + ); + assert(token.balanceOf(alice) == 175); + assert(underlyingToken.balanceOf(address(token)) == 175); + assert(underlyingToken.balanceOf(alice) == 0); + + // cannot release locked tokens + vm.warp(block.timestamp + 1); + vm.prank(alice); + token.release(); + assert(token.balanceOf(alice) == 175); + assert(underlyingToken.balanceOf(address(token)) == 175); + assert(underlyingToken.balanceOf(alice) == 0); + + // tick forward + vm.warp(block.timestamp + 301); + + // release locked tokens + vm.prank(alice); + token.release(); + assert(token.balanceOf(alice) == 25); + assert(underlyingToken.balanceOf(address(token)) == 25); + assert(underlyingToken.balanceOf(alice) == 150); + // two releases occurred, alice lock index 0 should still be present + (uint256 lock1,) = token.locks(alice, 0); + assert(lock1 == 25); + + vm.prank(alice); + token.transfer(address(0x1337), 20); + // tick forward + vm.warp(block.timestamp + 101); + vm.prank(alice); + token.release(); + assert(token.balanceOf(alice) == 0); + assert(underlyingToken.balanceOf(address(token)) == 20); + assert(underlyingToken.balanceOf(alice) == 155); + // call should revert with no locks existent + (uint256 lock2,) = token.locks(alice, 0); + assert(lock2 == 20); + } + + +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/test/token/stlMoveToken.t.sol b/protocol-units/post-confirmations/contracts/test/token/stlMoveToken.t.sol new file mode 100644 index 00000000..26e0797d --- /dev/null +++ b/protocol-units/post-confirmations/contracts/test/token/stlMoveToken.t.sol @@ -0,0 +1,245 @@ +// SPDX-License-Identifier: MIT +pragma solidity ^0.8.19; + +import "forge-std/Test.sol"; +import "../../src/token/stlMoveToken.sol"; +import "../../src/token/MOVETokenDev.sol"; +import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; + +contract stlMoveTokenTest is Test { + address public multisig = address(this); + MOVETokenDev public underlyingToken; + stlMoveToken public token; + + function setUp() public { + MOVETokenDev underlyingTokenImpl = new MOVETokenDev(); + TransparentUpgradeableProxy underlyingTokenProxy = new TransparentUpgradeableProxy( + address(underlyingTokenImpl), + address(this), + abi.encodeWithSignature("initialize(address)", multisig) + ); + + + stlMoveToken tokenImpl = new stlMoveToken(); + TransparentUpgradeableProxy tokenProxy = new TransparentUpgradeableProxy( + address(tokenImpl), + address(this), + abi.encodeWithSignature("initialize(address)", address(underlyingTokenProxy)) + ); + underlyingToken = MOVETokenDev(address(underlyingTokenProxy)); + token = stlMoveToken(address(tokenProxy)); + + // Check the token details + assertEq(token.name(), "Stakable Locked Move Token"); + assertEq(token.symbol(), "stlMOVE"); + } + + function testCannotInitializeTwice() public { + + + // Expect reversion + vm.expectRevert(bytes4(0xf92ee8a9)); + token.initialize(underlyingToken); + } + + function testSimulateStaking() public { + + vm.prank(multisig); + underlyingToken.grantMinterRole(address(token)); + assert(underlyingToken.hasRole(underlyingToken.MINTER_ROLE(), address(token))); + + // signers + address payable alice = payable(vm.addr(1)); + address payable bob = payable(vm.addr(2)); + address payable carol = payable(vm.addr(3)); + address payable dave = payable(vm.addr(4)); + + // mint locked tokens + address[] memory addresses = new address[](6); + addresses[0] = alice; + addresses[1] = bob; + addresses[2] = carol; + addresses[3] = dave; + addresses[4] = alice; + addresses[5] = bob; + uint256[] memory mintAmounts = new uint256[](6); + mintAmounts[0] = 100; + mintAmounts[1] = 100; + mintAmounts[2] = 100; + mintAmounts[3] = 100; + mintAmounts[4] = 0; + mintAmounts[5] = 0; + uint256[] memory lockAmounts = new uint256[](6); + lockAmounts[0] = 100; + lockAmounts[1] = 100; + lockAmounts[2] = 100; + lockAmounts[3] = 100; + lockAmounts[4] = UINT256_MAX; + lockAmounts[5] = UINT256_MAX; + uint256[] memory locks = new uint256[](6); + locks[0] = block.timestamp + 100; + locks[1] = block.timestamp + 100; + locks[2] = block.timestamp + 100; + locks[3] = block.timestamp + 100; + locks[4] = block.timestamp + 200; + locks[5] = block.timestamp + 200; + token.mintAndLock(addresses, mintAmounts, lockAmounts, locks); + assertEq(token.balanceOf(alice), 100); + assertEq(token.balanceOf(bob), 100); + assertEq(token.balanceOf(carol), 100); + assertEq(token.balanceOf(dave), 100); + assertEq(underlyingToken.balanceOf(address(token)), 400); + assertEq(underlyingToken.balanceOf(alice), 0); + assertEq(underlyingToken.balanceOf(bob), 0); + assertEq(underlyingToken.balanceOf(carol), 0); + assertEq(underlyingToken.balanceOf(dave), 0); + + vm.warp(block.timestamp + 1); + // cannot release locked tokens + vm.prank(alice); + token.release(); + assertEq(token.balanceOf(alice), 100); + assertEq(underlyingToken.balanceOf(address(token)), 400); + assertEq(underlyingToken.balanceOf(alice), 0); + vm.prank(bob); + token.release(); + assertEq(token.balanceOf(bob), 100); + assertEq(underlyingToken.balanceOf(address(token)), 400); + assertEq(underlyingToken.balanceOf(bob), 0); + vm.prank(carol); + token.release(); + assertEq(token.balanceOf(carol), 100); + assertEq(underlyingToken.balanceOf(address(token)), 400); + assertEq(underlyingToken.balanceOf(carol), 0); + vm.prank(dave); + token.release(); + assertEq(token.balanceOf(dave), 100); + assertEq(underlyingToken.balanceOf(address(token)), 400); + assertEq(underlyingToken.balanceOf(dave), 0); + + // add a transfer sink to represent a staking pool + address payable stakingPool = payable(vm.addr(5)); + token.grantTransferSinkRole(stakingPool); + token.grantBuyerRole(stakingPool); + + // mint some funds on the underlying token for the staking pool to reward stakers + underlyingToken.mint(stakingPool, 100); + + // use to custodian to stake the locked tokens + vm.prank(alice); + token.transfer(stakingPool, 100); + assertEq(token.balanceOf(alice), 0); + assertEq(underlyingToken.balanceOf(stakingPool), 200); + assertEq(underlyingToken.balanceOf(address(token)), 300); + vm.prank(bob); + token.transfer(stakingPool, 100); + assertEq(token.balanceOf(bob), 0); + assertEq(underlyingToken.balanceOf(stakingPool), 300); + assertEq(underlyingToken.balanceOf(address(token)), 200); + vm.prank(carol); + token.transfer(stakingPool, 100); + assertEq(token.balanceOf(carol), 0); + assertEq(underlyingToken.balanceOf(stakingPool), 400); + assertEq(underlyingToken.balanceOf(address(token)), 100); + // ! dave does not stake + + // alice gets reward and cashes out through the custodian, but cannot withdraw + vm.prank(stakingPool); + underlyingToken.approve(address(token), 110); + vm.prank(stakingPool); + token.buyCustodialToken(alice, 110); + assertEq(token.balanceOf(alice), 110); + assertEq(underlyingToken.balanceOf(stakingPool), 290); + assertEq(underlyingToken.balanceOf(address(token)), 210); + vm.prank(alice); + token.release(); + assertEq(token.balanceOf(alice), 110); + assertEq(underlyingToken.balanceOf(alice), 0); + assertEq(underlyingToken.balanceOf(address(token)), 210); + + // bob does not get a reward but cashes out through the custodian + vm.prank(stakingPool); + underlyingToken.approve(address(token), 100); + vm.prank(stakingPool); + token.buyCustodialToken(bob, 100); + assertEq(token.balanceOf(bob), 100); + assertEq(underlyingToken.balanceOf(stakingPool), 190); + assertEq(underlyingToken.balanceOf(address(token)), 310); + vm.prank(bob); + token.release(); + assertEq(token.balanceOf(bob), 100); + assertEq(underlyingToken.balanceOf(bob), 0); + assertEq(underlyingToken.balanceOf(address(token)), 310); + + // time passes + vm.warp(block.timestamp + 101); + + // alice withdraws as much as she can + vm.prank(alice); + token.release(); + assertEq(token.balanceOf(alice), 10); + assertEq(underlyingToken.balanceOf(alice), 100); + assertEq(underlyingToken.balanceOf(address(token)), 210); + + // bob withdraws as much as he can + vm.prank(bob); + token.release(); + assertEq(token.balanceOf(bob), 0); + assertEq(underlyingToken.balanceOf(bob), 100); + assertEq(underlyingToken.balanceOf(address(token)), 110); + + // carol withdraws as much as she can, but it she doesn't have any because here funds are still staked + vm.prank(carol); + token.release(); + assertEq(token.balanceOf(carol), 0); + assertEq(underlyingToken.balanceOf(carol), 0); + assertEq(underlyingToken.balanceOf(address(token)), 110); + + // carol gets reward and cashes out through the custodian + vm.prank(stakingPool); + underlyingToken.approve(address(token), 110); + vm.prank(stakingPool); + token.buyCustodialToken(carol, 110); + assertEq(token.balanceOf(carol), 110); + assertEq(underlyingToken.balanceOf(stakingPool), 80); // spent 20 in total on rewards + assertEq(underlyingToken.balanceOf(address(token)), 220); + + // carol withdraws as much as she can + vm.prank(carol); + token.release(); + assertEq(token.balanceOf(carol), 10); + assertEq(underlyingToken.balanceOf(carol), 100); + assertEq(underlyingToken.balanceOf(address(token)), 120); + + // dave withdraws as much as he can + vm.prank(dave); + token.release(); + assertEq(token.balanceOf(dave), 0); + assertEq(underlyingToken.balanceOf(dave), 100); + assertEq(underlyingToken.balanceOf(address(token)), 20); + + // time passes + vm.warp(block.timestamp + 101); + + // alice withdraws as much as she can; she can withdraw her rewards + vm.prank(alice); + token.release(); + assertEq(token.balanceOf(alice), 0); + assertEq(underlyingToken.balanceOf(alice), 110); + assertEq(underlyingToken.balanceOf(address(token)), 10); + + // bob withdraws as much as he can; he can withdraw his rewards, but doesn't have any + vm.prank(bob); + token.release(); + assertEq(token.balanceOf(bob), 0); + assertEq(underlyingToken.balanceOf(bob), 100); + assertEq(underlyingToken.balanceOf(address(token)), 10); + + // carol withdraws as much as she can; she can't withdraw her rewards + vm.prank(carol); + token.release(); + assertEq(token.balanceOf(carol), 10); + assertEq(underlyingToken.balanceOf(carol), 100); + assertEq(underlyingToken.balanceOf(address(token)), 10); + } +} diff --git a/protocol-units/post-confirmations/contracts/tsconfig.json b/protocol-units/post-confirmations/contracts/tsconfig.json new file mode 100644 index 00000000..f44404c8 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/tsconfig.json @@ -0,0 +1,12 @@ +{ + "compilerOptions": { + "target": "es2020", + "module": "commonjs", + "strict": true, + "esModuleInterop": true, + "outDir": "dist", + "resolveJsonModule": true + }, + "include": ["./scripts", "./test"], + "files": ["./hardhat.config.ts"] +} \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/upgrader/README.md b/protocol-units/post-confirmations/contracts/upgrader/README.md new file mode 100644 index 00000000..6e4d5e10 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/upgrader/README.md @@ -0,0 +1,117 @@ +# Upgrader + +The Upgrader is a script designed to automate the upgrade process for settlement protocol units, streamlining the execution of several key steps required for contract upgrades. Below is a breakdown of its main components and the steps it performs. + +## Process Overview + +### Deploy + +#### 1. Run the `safeDeploy.sh` Script + +This bash script is responsible for preparing and executing the deployment of a new contract, using a Safe multisig as the deployer. It accepts a `-c` flag to specify the contract name, a `-u` flag to specify the fork URL, and a `-k` flag to provide an Etherscan API key. + +**Steps:** + +- Ensures the contract name and URL are provided. +- Runs the deployment script to deploy the implementation contract. +- Generates transaction data and saves it for later use. +- Executes the TypeScript `safeDeploy.ts` script to complete the deployment process using the Safe API. + +**Example of Execution:** + +```bash +bash safeDeploy.sh -c ExampleContract -u https://example.url -k etherscan_api_key +``` + +#### 2. Run the propose.sh Script + +After deployment, this script is responsible for proposing an upgrade to a proxy contract. It generates the necessary transaction data and proposes the upgrade using the Safe multisig. The script accepts a -c flag for the contract name and a -u flag for the fork URL. + +### Steps + +Ensures the contract name and URL are provided. +Generates the upgrade transaction data using the deployer script. +Converts the contract name to lowercase (for consistency). +Runs the TypeScript propose.ts script, passing the necessary data to the Safe API for proposing the transaction. +Example of Execution: + +```bash +bash propose.sh -c ExampleContract -u https://example.url +``` + +### Upgrade + +#### 1. Run the acceptKms.sh Script + +This script is used to accept a transaction using a KMS (Key Management Service). It accepts a -c flag for the contract name, a -t flag for the transaction hash, and a -k flag for the key ID used in KMS. + +Steps + +- Ensures the contract name, transaction hash, and key ID are provided. +- Converts the contract name to lowercase. +- Runs the TypeScript acceptKms.ts script to accept the transaction using the KMS agent. + +Example of Execution: + +```bash +bash acceptKms.sh -c ExampleContract -t 0x123... -k key_id +``` + +#### 2. Run the accept.sh Script + +Once the transaction has been proposed, this script is responsible for accepting the upgrade proposal using the Safe API. It accepts a -c flag for the contract name and a -u flag for the fork URL. + +Steps + +- Ensures the contract name and URL are provided. +- Converts the contract name to lowercase. +- Runs the TypeScript accept.ts script to accept the upgrade proposal using the Safe API. + +Example of Execution: + +```bash +bash accept.sh -c ExampleContract -u https://example.url +``` + +## Script Breakdown + +Bash Script: safeDeploy.sh +This script handles the deployment of a contract using a Safe multisig as the deployer. It generates transaction data for the deployment and then calls the TypeScript safeDeploy.ts script to finalize the deployment. + +Flags: + +```bash +-c: Contract name (required) +-u: Fork URL (required) +-k: Etherscan API key (required) +``` + +Bash Script: propose.sh +This script generates the transaction data required for upgrading a contract and proposes the upgrade using the Safe multisig. + +Flags: + +```bash +-c: Contract name (required) +-u: Fork URL (required) +Bash Script: acceptKms.sh +This script accepts a transaction using a KMS, handling multisig approval. +``` + +Flags: + +```bash +-c: Contract name (required) +-t: Transaction hash (required) +-k: KMS key ID (required) +``` + +Bash Script: accept.sh +This script accepts the upgrade proposal through the Safe API. + +Flags: + +```bash +-c: Contract name (required) +-u: Fork URL (required) +``` diff --git a/protocol-units/post-confirmations/contracts/upgrader/accept.sh b/protocol-units/post-confirmations/contracts/upgrader/accept.sh new file mode 100644 index 00000000..9a186ae9 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/upgrader/accept.sh @@ -0,0 +1,42 @@ +# accept.sh + +#!/bin/bash + +# Initialize contract variable +contract="" +url="" + +# Parse options using getopts +while getopts "c:u:" opt; do + case $opt in + c) contract="$OPTARG" + ;; + u) url="$OPTARG" + ;; + \?) echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + esac +done + +echo "Contract: $contract" +echo "URL: $url" + +# Ensure the contract flag is provided +if [ -z "$contract" ]; then + echo "Error: -c flag for contract is required." + exit 1 +fi + +# Ensure the url flag is provided +if [ -z "$url" ]; then + echo "Error: -u flag for url is required." + exit 1 +fi + +# Convert contract name to lowercase +lowercase_contract=$(echo "$contract" | tr '[:upper:]' '[:lower:]') + +# Run the upgrader script +echo "Running upgrader/accept.ts" +npx tsx ./accept.ts -c "$lowercase_contract" -u $url diff --git a/protocol-units/post-confirmations/contracts/upgrader/accept.ts b/protocol-units/post-confirmations/contracts/upgrader/accept.ts new file mode 100644 index 00000000..5b3f43c4 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/upgrader/accept.ts @@ -0,0 +1,86 @@ +import Safe from "@safe-global/protocol-kit"; +//@ts-ignore +import SafeApiKit from '@safe-global/api-kit'; +import { + OperationType, + SafeTransactionDataPartial, +} from "@safe-global/safe-core-sdk-types"; +import * as fs from "fs"; +import { Command } from "commander"; +// import dotenv and load from the .env file in the parent directory +import dotenv from "dotenv"; +dotenv.config({ path: "../.env" }); + +interface Config { + CHAIN_ID: bigint; + RPC_URL: string; + SIGNER_ADDRESS_PRIVATE_KEY: string; + SAFE_ADDRESS: string; +} + +async function main() { + const private_key = process.env.PRIVATE_KEY; + if (!private_key) { + throw new Error("PRIVATE_KEY is required"); + } + + const program = new Command(); + + program.option("-c, --contract ", "contract name").option("-u, --url ", "rpc url"); + program.parse(process.argv); + + const rawData = fs.readFileSync( + `../script/helpers/upgrade/${program.opts().contract}.json`, + "utf-8" + ); + const jsonData = JSON.parse(rawData); + + const config: Config = { + CHAIN_ID: jsonData.chainId as bigint, + RPC_URL: program.opts().url || "https://sepolia.gateway.tenderly.co", + SIGNER_ADDRESS_PRIVATE_KEY: private_key, + SAFE_ADDRESS: jsonData.safeAddress, + }; + + // Create Safe API Kit instance + const apiKit = new SafeApiKit({ + chainId: config.CHAIN_ID, + }); + + + // Create Safe instance + const protocolKit = await Safe.init({ + provider: config.RPC_URL, + signer: config.SIGNER_ADDRESS_PRIVATE_KEY, + safeAddress: config.SAFE_ADDRESS, + }); + + + // Create transaction + const safeTransactionData: SafeTransactionDataPartial = { + to: jsonData.to, + value: jsonData.value || "0", + data: jsonData.data, + operation: jsonData.operation == "OperationType.Call" ? OperationType.Call : OperationType.DelegateCall, + }; + const safeTransaction = await protocolKit.createTransaction({ + transactions: [safeTransactionData], + }); + + const signerAddress = + (await protocolKit.getSafeProvider().getSignerAddress()) || "0x"; + const safeTxHash = await protocolKit.getTransactionHash(safeTransaction); + const signature = await protocolKit.signHash(safeTxHash); + + // Get transaction from the service + const transaction = await apiKit.confirmTransaction(safeTxHash, signature.data); + + console.log("Accepted a transaction with Safe:", config.SAFE_ADDRESS); + console.log("- safeTxHash:", safeTxHash); + console.log("- Sender:", signerAddress); + console.log("- Sender signature:", signature.data); + + // At what point should the upgrade/contract.json file be deleted? +} + +main(); diff --git a/protocol-units/post-confirmations/contracts/upgrader/acceptKms.sh b/protocol-units/post-confirmations/contracts/upgrader/acceptKms.sh new file mode 100644 index 00000000..0aaa74d8 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/upgrader/acceptKms.sh @@ -0,0 +1,52 @@ +# acceptKms.sh + +#!/bin/bash + +# Initialize contract variable +contract="" +transaction_hash="" +key_id="" + +# Parse options using getopts +while getopts "c:t:k:" opt; do + case $opt in + c) contract="$OPTARG" + ;; + t) transaction_hash="$OPTARG" + ;; + k) key_id="$OPTARG" + ;; + \?) echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + esac +done + +echo "Contract: $contract" +echo "Transaction Hash: $transaction_hash" +echo "Key ID: $key_id" + +# Ensure the contract flag is provided +if [ -z "$contract" ]; then + echo "Error: -c flag for contract is required." + exit 1 +fi + +# Ensure the transaction_hash flag is provided +if [ -z "$transaction_hash" ]; then + echo "Error: -t flag for transaction_hash is required." + exit 1 +fi + +# Ensure the key_id flag is provided +if [ -z "$key_id" ]; then + echo "Error: -k flag for key_id is required." + exit 1 +fi + +# Convert contract name to lowercase +lowercase_contract=$(echo "$contract" | tr '[:upper:]' '[:lower:]') + +# Run the upgrader script +echo "Running upgrader/acceptKms.ts" +npx tsx ./acceptKms.ts -c "$lowercase_contract" -t $transaction_hash -k $key_id diff --git a/protocol-units/post-confirmations/contracts/upgrader/acceptKms.ts b/protocol-units/post-confirmations/contracts/upgrader/acceptKms.ts new file mode 100644 index 00000000..a96b85c1 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/upgrader/acceptKms.ts @@ -0,0 +1,71 @@ +//@ts-ignore +import SafeApiKit from "@safe-global/api-kit"; +import { KMSClient, SignCommand, SignCommandInput } from "@aws-sdk/client-kms"; + +import * as fs from "fs"; +import { Command } from "commander"; +import dotenv from "dotenv"; +dotenv.config({ path: "../.env" }); + +async function main() { + const program = new Command(); + + program + .option("-c, --contract ", "contract name") + .option("-k, --key ", "key id") + .option("-h, --hash ", "hash"); + program.parse(process.argv); + + if (!program.opts().key && !program.opts().hash) { + throw new Error("PRIVATE_KEY or AWS Key Id is required"); + } + + const rawData = fs.readFileSync( + `../script/helpers/upgrade/${program.opts().contract}.json`, + "utf-8" + ); + const jsonData = JSON.parse(rawData); + + // Create Safe API Kit instance + const apiKit = new SafeApiKit({ + chainId: jsonData.chainId as bigint, + }); + + const signature = await signData(program.opts().hash, program.opts().keyId); + + // Get transaction from the service + const transaction = await apiKit.confirmTransaction(program.opts().hash, signature); + + console.log("Transaction confirmed:", transaction); + console.log("Accepted a transaction with Safe:", jsonData.safeAddress); + console.log("- safeTxHash:", program.opts().hash); + console.log("- Sender signature:", signature); + +} + +async function signData(data: string, keyId: string): Promise { + const client = new KMSClient({ region: "us-east-1" }); + + const dataBuffer = Buffer.from(data, "utf-8"); + const input: SignCommandInput = { + KeyId: keyId, + Message: dataBuffer, + MessageType: "DIGEST", + SigningAlgorithm: "ECDSA_SHA_256", + }; + + try { + const command = new SignCommand(input); + const response = await client.send(command); + if (!response.Signature) { + throw new Error("No signature returned"); + } + const signature = response.Signature.toString(); + return signature; + } catch (error) { + console.error("Error signing data:", error); + throw new Error("Error signing data"); + } +} + +main(); diff --git a/protocol-units/post-confirmations/contracts/upgrader/kmsSign.ts b/protocol-units/post-confirmations/contracts/upgrader/kmsSign.ts new file mode 100644 index 00000000..5bd17c70 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/upgrader/kmsSign.ts @@ -0,0 +1,181 @@ +import { KMS } from 'aws-sdk'; +import { keccak256 } from 'js-sha3'; +import * as ethutil from 'ethereumjs-util'; +import * as asn1 from 'asn1.js'; +import BN from 'bn.js'; +import { Transaction, TxData } from 'ethereumjs-tx'; + +const kms = new KMS({ + accessKeyId: '', // credentials for your IAM user with KMS access + secretAccessKey: '', // credentials for your IAM user with KMS access + region: 'us-east-1', + apiVersion: '2014-11-01', +}); + +const keyId = ''; + +const EcdsaSigAsnParse = asn1.define('EcdsaSig', function(this: any) { + // parsing this according to https://tools.ietf.org/html/rfc3279#section-2.2.3 + this.seq().obj( + this.key('r').int(), + this.key('s').int(), + ); +}); + +const EcdsaPubKey = asn1.define('EcdsaPubKey', function(this: any) { + // parsing this according to https://tools.ietf.org/html/rfc5480#section-2 + this.seq().obj( + this.key('algo').seq().obj( + this.key('a').objid(), + this.key('b').objid(), + ), + this.key('pubKey').bitstr() + ); +}); + +async function sign(msgHash, keyId) { + const params : KMS.SignRequest = { + // key id or 'Alias/' + KeyId: keyId, + Message: msgHash, + // 'ECDSA_SHA_256' is the one compatible with ECC_SECG_P256K1. + SigningAlgorithm: 'ECDSA_SHA_256', + MessageType: 'DIGEST' + }; + const res = await kms.sign(params).promise(); + return res; +} + +async function getPublicKey(keyPairId: string) { + return kms.getPublicKey({ + KeyId: keyPairId + }).promise(); +} + +function getEthereumAddress(publicKey: Buffer): string { + console.log("Encoded Pub Key: " + publicKey.toString('hex')); + + // The public key is ASN1 encoded in a format according to + // https://tools.ietf.org/html/rfc5480#section-2 + // I used https://lapo.it/asn1js to figure out how to parse this + // and defined the schema in the EcdsaPubKey object + let res = EcdsaPubKey.decode(publicKey, 'der'); + let pubKeyBuffer : Buffer = res.pubKey.data; + + // The public key starts with a 0x04 prefix that needs to be removed + // more info: https://www.oreilly.com/library/view/mastering-ethereum/9781491971932/ch04.html + pubKeyBuffer = pubKeyBuffer.slice(1, pubKeyBuffer.length); + + const address = keccak256(pubKeyBuffer) // keccak256 hash of publicKey + const buf2 = Buffer.from(address, 'hex'); + const EthAddr = "0x" + buf2.slice(-20).toString('hex'); // take last 20 bytes as ethereum adress + console.log("Generated Ethreum address: " + EthAddr); + return EthAddr; +} + +async function findEthereumSig(plaintext) { + let signature = await sign(plaintext, keyId); + if (signature.Signature == undefined) { + throw new Error('Signature is undefined.'); + } + console.log("encoded sig: " + signature.Signature.toString('hex')); + + let decoded = EcdsaSigAsnParse.decode(signature.Signature, 'der'); + let r : BN = decoded.r; + let s : BN = decoded.s; + console.log("r: " + r.toString(10)); + console.log("s: " + s.toString(10)); + + let tempsig = r.toString(16) + s.toString(16); + + let secp256k1N = new BN("fffffffffffffffffffffffffffffffebaaedce6af48a03bbfd25e8cd0364141", 16); // max value on the curve + let secp256k1halfN = secp256k1N.div(new BN(2)); // half of the curve + // Because of EIP-2 not all elliptic curve signatures are accepted + // the value of s needs to be SMALLER than half of the curve + // i.e. we need to flip s if it's greater than half of the curve + if (s.gt(secp256k1halfN)) { + console.log("s is on the wrong side of the curve... flipping - tempsig: " + tempsig + " length: " + tempsig.length); + // According to EIP2 https://github.com/ethereum/EIPs/blob/master/EIPS/eip-2.md + // if s < half the curve we need to invert it + // s = curve.n - s + s = secp256k1N.sub(s); + console.log("new s: " + s.toString(10)); + return { r, s } + } + // if s is less than half of the curve, we're on the "good" side of the curve, we can just return + return { r, s } +} + +function recoverPubKeyFromSig(msg: Buffer, r : BN, s : BN, v: number) { + console.log("Recovering public key with msg " + msg.toString('hex') + " r: " + r.toString(16) + " s: " + s.toString(16)); + let rBuffer = r.toBuffer(); + let sBuffer = s.toBuffer(); + let pubKey = ethutil.ecrecover(msg, v, rBuffer, sBuffer); + let addrBuf = ethutil.pubToAddress(pubKey); + var RecoveredEthAddr = ethutil.bufferToHex(addrBuf); + console.log( "Recovered ethereum address: " + RecoveredEthAddr); + return RecoveredEthAddr; +} + +function findRightKey(msg: Buffer, r : BN, s: BN, expectedEthAddr: string) { + // This is the wrapper function to find the right v value + // There are two matching signatues on the elliptic curve + // we need to find the one that matches to our public key + // it can be v = 27 or v = 28 + let v = 27; + let pubKey = recoverPubKeyFromSig(msg, r, s, v); + if (pubKey != expectedEthAddr) { + // if the pub key for v = 27 does not match + // it has to be v = 28 + v = 28; + pubKey = recoverPubKeyFromSig(msg, r, s, v) + } + console.log("Found the right ETH Address: " + pubKey + " v: " + v); + return { pubKey, v }; +} + +// txTest(); +// async function txTest() { +// const web3 = new Web3(new Web3.providers.HttpProvider("https://kovan.infura.io/v3/")); + +// let pubKey = await getPublicKey(keyId); +// let ethAddr = getEthereumAddress((pubKey.PublicKey as Buffer)); +// let ethAddrHash = ethutil.keccak(Buffer.from(ethAddr)); +// let sig = await findEthereumSig(ethAddrHash); +// let recoveredPubAddr = findRightKey(ethAddrHash, sig.r, sig.s, ethAddr); + +// const txParams: TxData = { +// nonce: await web3.eth.getTransactionCount(ethAddr), +// gasPrice: '0x0918400000', +// gasLimit: 160000, +// to: '0x0000000000000000000000000000000000000000', +// value: '0x00', +// data: '0x00', +// r: sig.r.toBuffer(), +// s: sig.s.toBuffer(), +// v: recoveredPubAddr.v +// } + +// console.log(txParams); + +// const tx = new Transaction(txParams, { +// chain: 'kovan', +// }); + +// let txHash = tx.hash(false); +// sig = await findEthereumSig(txHash); +// recoveredPubAddr = findRightKey(txHash, sig.r, sig.s, ethAddr); +// tx.r = sig.r.toBuffer(); +// tx.s = sig.s.toBuffer(); +// tx.v = new BN(recoveredPubAddr.v).toBuffer(); +// console.log(tx.getSenderAddress().toString('hex')); + +// // Send signed tx to ethereum network +// const serializedTx = tx.serialize().toString('hex'); +// web3.eth.sendSignedTransaction('0x' + serializedTx) +// .on('confirmation', (confirmationNumber : number, receipt : TransactionReceipt) => {}) +// .on('receipt', (txReceipt : TransactionReceipt) => { +// console.log("signAndSendTx txReceipt. Tx Address: " + txReceipt.transactionHash); +// }) +// .on('error', error => console.log(error)); +// } \ No newline at end of file diff --git a/protocol-units/post-confirmations/contracts/upgrader/package-lock.json b/protocol-units/post-confirmations/contracts/upgrader/package-lock.json new file mode 100644 index 00000000..46567a64 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/upgrader/package-lock.json @@ -0,0 +1,4057 @@ +{ + "name": "upgrader", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "upgrader", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@aws-sdk/client-kms": "^3.658.1", + "@safe-global/api-kit": "^2.4.4", + "asn1.js": "^5.4.1", + "aws-sdk": "^2.1691.0", + "bn.js": "^5.2.1", + "commander": "^12.1.0", + "dotenv": "^16.4.5", + "ethereumjs-tx": "^2.1.2", + "js-sha3": "^0.9.3", + "tsx": "^4.19.1", + "web3": "^4.13.0", + "web3-core": "^4.6.0" + } + }, + "node_modules/@adraffy/ens-normalize": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz", + "integrity": "sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw==", + "license": "MIT" + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/supports-web-crypto/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/client-kms": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-kms/-/client-kms-3.658.1.tgz", + "integrity": "sha512-mFlxNx2CQeA6iwvTsNzlPzSwJcjWdhar7xkdQ+VScc0EjUYMVaSmjOPmg38ztU6xeFXeU0wpwbXXNg6SNOLuRA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.658.1", + "@aws-sdk/client-sts": "3.658.1", + "@aws-sdk/core": "3.658.1", + "@aws-sdk/credential-provider-node": "3.658.1", + "@aws-sdk/middleware-host-header": "3.654.0", + "@aws-sdk/middleware-logger": "3.654.0", + "@aws-sdk/middleware-recursion-detection": "3.654.0", + "@aws-sdk/middleware-user-agent": "3.654.0", + "@aws-sdk/region-config-resolver": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@aws-sdk/util-user-agent-browser": "3.654.0", + "@aws-sdk/util-user-agent-node": "3.654.0", + "@smithy/config-resolver": "^3.0.8", + "@smithy/core": "^2.4.6", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/hash-node": "^3.0.6", + "@smithy/invalid-dependency": "^3.0.6", + "@smithy/middleware-content-length": "^3.0.8", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-retry": "^3.0.21", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/middleware-stack": "^3.0.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.21", + "@smithy/util-defaults-mode-node": "^3.0.21", + "@smithy/util-endpoints": "^2.1.2", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-retry": "^3.0.6", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-kms/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.658.1.tgz", + "integrity": "sha512-lOuaBtqPTYGn6xpXlQF4LsNDsQ8Ij2kOdnk+i69Kp6yS76TYvtUuukyLL5kx8zE1c8WbYtxj9y8VNw9/6uKl7Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.658.1", + "@aws-sdk/middleware-host-header": "3.654.0", + "@aws-sdk/middleware-logger": "3.654.0", + "@aws-sdk/middleware-recursion-detection": "3.654.0", + "@aws-sdk/middleware-user-agent": "3.654.0", + "@aws-sdk/region-config-resolver": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@aws-sdk/util-user-agent-browser": "3.654.0", + "@aws-sdk/util-user-agent-node": "3.654.0", + "@smithy/config-resolver": "^3.0.8", + "@smithy/core": "^2.4.6", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/hash-node": "^3.0.6", + "@smithy/invalid-dependency": "^3.0.6", + "@smithy/middleware-content-length": "^3.0.8", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-retry": "^3.0.21", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/middleware-stack": "^3.0.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.21", + "@smithy/util-defaults-mode-node": "^3.0.21", + "@smithy/util-endpoints": "^2.1.2", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-retry": "^3.0.6", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sso-oidc": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.658.1.tgz", + "integrity": "sha512-RGcZAI3qEA05JszPKwa0cAyp8rnS1nUvs0Sqw4hqLNQ1kD7b7V6CPjRXe7EFQqCOMvM4kGqx0+cEEVTOmBsFLw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.658.1", + "@aws-sdk/credential-provider-node": "3.658.1", + "@aws-sdk/middleware-host-header": "3.654.0", + "@aws-sdk/middleware-logger": "3.654.0", + "@aws-sdk/middleware-recursion-detection": "3.654.0", + "@aws-sdk/middleware-user-agent": "3.654.0", + "@aws-sdk/region-config-resolver": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@aws-sdk/util-user-agent-browser": "3.654.0", + "@aws-sdk/util-user-agent-node": "3.654.0", + "@smithy/config-resolver": "^3.0.8", + "@smithy/core": "^2.4.6", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/hash-node": "^3.0.6", + "@smithy/invalid-dependency": "^3.0.6", + "@smithy/middleware-content-length": "^3.0.8", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-retry": "^3.0.21", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/middleware-stack": "^3.0.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.21", + "@smithy/util-defaults-mode-node": "^3.0.21", + "@smithy/util-endpoints": "^2.1.2", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-retry": "^3.0.6", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.658.1" + } + }, + "node_modules/@aws-sdk/client-sso-oidc/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/client-sso/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/client-sts": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.658.1.tgz", + "integrity": "sha512-yw9hc5blTnbT1V6mR7Cx9HGc9KQpcLQ1QXj8rntiJi6tIYu3aFNVEyy81JHL7NsuBSeQulJTvHO3y6r3O0sfRg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/client-sso-oidc": "3.658.1", + "@aws-sdk/core": "3.658.1", + "@aws-sdk/credential-provider-node": "3.658.1", + "@aws-sdk/middleware-host-header": "3.654.0", + "@aws-sdk/middleware-logger": "3.654.0", + "@aws-sdk/middleware-recursion-detection": "3.654.0", + "@aws-sdk/middleware-user-agent": "3.654.0", + "@aws-sdk/region-config-resolver": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@aws-sdk/util-user-agent-browser": "3.654.0", + "@aws-sdk/util-user-agent-node": "3.654.0", + "@smithy/config-resolver": "^3.0.8", + "@smithy/core": "^2.4.6", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/hash-node": "^3.0.6", + "@smithy/invalid-dependency": "^3.0.6", + "@smithy/middleware-content-length": "^3.0.8", + "@smithy/middleware-endpoint": "^3.1.3", + "@smithy/middleware-retry": "^3.0.21", + "@smithy/middleware-serde": "^3.0.6", + "@smithy/middleware-stack": "^3.0.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/url-parser": "^3.0.6", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-body-length-node": "^3.0.0", + "@smithy/util-defaults-mode-browser": "^3.0.21", + "@smithy/util-defaults-mode-node": "^3.0.21", + "@smithy/util-endpoints": "^2.1.2", + "@smithy/util-middleware": "^3.0.6", + "@smithy/util-retry": "^3.0.6", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/client-sts/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/core": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.658.1.tgz", + "integrity": "sha512-vJVMoMcSKXK2gBRSu9Ywwv6wQ7tXH8VL1fqB1uVxgCqBZ3IHfqNn4zvpMPWrwgO2/3wv7XFyikGQ5ypPTCw4jA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^2.4.6", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/property-provider": "^3.1.6", + "@smithy/protocol-http": "^4.1.3", + "@smithy/signature-v4": "^4.1.4", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/util-middleware": "^3.0.6", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/core/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.654.0.tgz", + "integrity": "sha512-kogsx3Ql81JouHS7DkheCDU9MYAvK0AokxjcshDveGmf7BbgbWCA8Fnb9wjQyNDaOXNvkZu8Z8rgkX91z324/w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.658.1.tgz", + "integrity": "sha512-4ubkJjEVCZflxkZnV1JDQv8P2pburxk1LrEp55telfJRzXrnowzBKwuV2ED0QMNC448g2B3VCaffS+Ct7c4IWQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/node-http-handler": "^3.2.3", + "@smithy/property-provider": "^3.1.6", + "@smithy/protocol-http": "^4.1.3", + "@smithy/smithy-client": "^3.3.5", + "@smithy/types": "^3.4.2", + "@smithy/util-stream": "^3.1.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.658.1.tgz", + "integrity": "sha512-2uwOamQg5ppwfegwen1ddPu5HM3/IBSnaGlaKLFhltkdtZ0jiqTZWUtX2V+4Q+buLnT0hQvLS/frQ+7QUam+0Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.654.0", + "@aws-sdk/credential-provider-http": "3.658.1", + "@aws-sdk/credential-provider-process": "3.654.0", + "@aws-sdk/credential-provider-sso": "3.658.1", + "@aws-sdk/credential-provider-web-identity": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@smithy/credential-provider-imds": "^3.2.3", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.658.1" + } + }, + "node_modules/@aws-sdk/credential-provider-ini/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.658.1.tgz", + "integrity": "sha512-XwxW6N+uPXPYAuyq+GfOEdfL/MZGAlCSfB5gEWtLBFmFbikhmEuqfWtI6CD60OwudCUOh6argd21BsJf8o1SJA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.654.0", + "@aws-sdk/credential-provider-http": "3.658.1", + "@aws-sdk/credential-provider-ini": "3.658.1", + "@aws-sdk/credential-provider-process": "3.654.0", + "@aws-sdk/credential-provider-sso": "3.658.1", + "@aws-sdk/credential-provider-web-identity": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@smithy/credential-provider-imds": "^3.2.3", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.654.0.tgz", + "integrity": "sha512-PmQoo8sZ9Q2Ow8OMzK++Z9lI7MsRUG7sNq3E72DVA215dhtTICTDQwGlXH2AAmIp7n+G9LLRds+4wo2ehG4mkg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.658.1", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.658.1.tgz", + "integrity": "sha512-YOagVEsZEk9DmgJEBg+4MBXrPcw/tYas0VQ5OVBqC5XHNbi2OBGJqgmjVPesuu393E7W0VQxtJFDS00O1ewQgA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.658.1", + "@aws-sdk/token-providers": "3.654.0", + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.654.0.tgz", + "integrity": "sha512-6a2g9gMtZToqSu+CusjNK5zvbLJahQ9di7buO3iXgbizXpLXU1rnawCpWxwslMpT5fLgMSKDnKDrr6wdEk7jSw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sts": "^3.654.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.654.0.tgz", + "integrity": "sha512-rxGgVHWKp8U2ubMv+t+vlIk7QYUaRCHaVpmUlJv0Wv6Q0KeO9a42T9FxHphjOTlCGQOLcjCreL9CF8Qhtb4mdQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/protocol-http": "^4.1.3", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.654.0.tgz", + "integrity": "sha512-OQYb+nWlmASyXfRb989pwkJ9EVUMP1CrKn2eyTk3usl20JZmKo2Vjis6I0tLUkMSxMhnBJJlQKyWkRpD/u1FVg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.654.0.tgz", + "integrity": "sha512-gKSomgltKVmsT8sC6W7CrADZ4GHwX9epk3GcH6QhebVO3LA9LRbkL3TwOPUXakxxOLLUTYdOZLIOtFf7iH00lg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/protocol-http": "^4.1.3", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.654.0.tgz", + "integrity": "sha512-liCcqPAyRsr53cy2tYu4qeH4MMN0eh9g6k56XzI5xd4SghXH5YWh4qOYAlQ8T66ZV4nPMtD8GLtLXGzsH8moFg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@aws-sdk/util-endpoints": "3.654.0", + "@smithy/protocol-http": "^4.1.3", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.654.0.tgz", + "integrity": "sha512-ydGOrXJxj3x0sJhsXyTmvJVLAE0xxuTWFJihTl67RtaO7VRNtd82I3P3bwoMMaDn5WpmV5mPo8fEUDRlBm3fPg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/types": "^3.4.2", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.654.0.tgz", + "integrity": "sha512-D8GeJYmvbfWkQDtTB4owmIobSMexZel0fOoetwvgCQ/7L8VPph3Q2bn1TRRIXvH7wdt6DcDxA3tKMHPBkT3GlA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/property-provider": "^3.1.6", + "@smithy/shared-ini-file-loader": "^3.1.7", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "@aws-sdk/client-sso-oidc": "^3.654.0" + } + }, + "node_modules/@aws-sdk/token-providers/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/types": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.654.0.tgz", + "integrity": "sha512-VWvbED3SV+10QJIcmU/PKjsKilsTV16d1I7/on4bvD/jo1qGeMXqLDBSen3ks/tuvXZF/mFc7ZW/W2DiLVtO7A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/types/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.654.0.tgz", + "integrity": "sha512-i902fcBknHs0Irgdpi62+QMvzxE+bczvILXigYrlHL4+PiEnlMVpni5L5W1qCkNZXf8AaMrSBuR1NZAGp6UOUw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/types": "^3.4.2", + "@smithy/util-endpoints": "^2.1.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.568.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.568.0.tgz", + "integrity": "sha512-3nh4TINkXYr+H41QaPelCceEB2FXP3fxp93YZXB/kqJvX0U9j0N0Uk45gvsjmEPzG8XxkPEeLIfT2I1M7A6Lig==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.654.0.tgz", + "integrity": "sha512-ykYAJqvnxLt7wfrqya28wuH3/7NdrwzfiFd7NqEVQf7dXVxL5RPEpD7DxjcyQo3DsHvvdUvGZVaQhozycn1pzA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/types": "^3.4.2", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.654.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.654.0.tgz", + "integrity": "sha512-a0ojjdBN6pqv6gB4H/QPPSfhs7mFtlVwnmKCM/QrTaFzN0U810PJ1BST3lBx5sa23I5jWHGaoFY+5q65C3clLQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.654.0", + "@smithy/node-config-provider": "^3.1.7", + "@smithy/types": "^3.4.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/util-user-agent-node/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", + "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", + "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", + "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", + "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", + "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", + "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", + "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", + "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", + "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", + "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", + "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", + "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", + "cpu": [ + "loong64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", + "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", + "cpu": [ + "mips64el" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", + "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", + "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", + "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", + "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", + "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", + "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", + "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", + "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", + "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", + "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", + "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@ethereumjs/rlp": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-4.0.1.tgz", + "integrity": "sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw==", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@noble/curves": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.2.0.tgz", + "integrity": "sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.3.2" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", + "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", + "license": "MIT", + "engines": { + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@safe-global/api-kit": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@safe-global/api-kit/-/api-kit-2.4.4.tgz", + "integrity": "sha512-5Px4OZEikamGgmoqIOstMSr6blmJws2yN7LBoCtCqt4RM9Aa9cFp1jZlENvXITSSAFiUhGa3vK8+OAmbhq2nvQ==", + "license": "MIT", + "dependencies": { + "@safe-global/protocol-kit": "^4.0.4", + "@safe-global/safe-core-sdk-types": "^5.0.3", + "ethers": "^6.13.1", + "node-fetch": "^2.7.0" + } + }, + "node_modules/@safe-global/protocol-kit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@safe-global/protocol-kit/-/protocol-kit-4.1.0.tgz", + "integrity": "sha512-WAGXEn6UvKGlEYNqcWUasLZ4240sVWBg8T2SsfHoTs8Im0x2i48CNNZ5Mw9x+oKqhWs/Q9frNG6JcycN19LDRw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "^1.3.3", + "@safe-global/safe-core-sdk-types": "^5.1.0", + "@safe-global/safe-deployments": "^1.37.3", + "@safe-global/safe-modules-deployments": "^2.2.1", + "abitype": "^1.0.2", + "ethereumjs-util": "^7.1.5", + "ethers": "^6.13.1", + "semver": "^7.6.2" + } + }, + "node_modules/@safe-global/safe-core-sdk-types": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@safe-global/safe-core-sdk-types/-/safe-core-sdk-types-5.1.0.tgz", + "integrity": "sha512-UzXR4zWmVzux25FcIm4H049QhZZpVpIBL5HE+V0p5gHpArZROL+t24fZmsKUf403CtBxIJM5zZSVQL0nFJi+IQ==", + "license": "MIT", + "dependencies": { + "abitype": "^1.0.2" + } + }, + "node_modules/@safe-global/safe-deployments": { + "version": "1.37.7", + "resolved": "https://registry.npmjs.org/@safe-global/safe-deployments/-/safe-deployments-1.37.7.tgz", + "integrity": "sha512-vbmkWJoJsZ3btMl7PBMUIO/LGsQj4kB29zAuTMOLgb7GmN6avhqPcHKOIjbEKXisxvkVeUYZJWqCiKbZxnvGVA==", + "license": "MIT", + "dependencies": { + "semver": "^7.6.2" + } + }, + "node_modules/@safe-global/safe-modules-deployments": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@safe-global/safe-modules-deployments/-/safe-modules-deployments-2.2.1.tgz", + "integrity": "sha512-H0XpusyXVcsTuRsQSq0FoBKqRfhZH87/1DrFEmXXPXmI3fJkvxq3KpTaTTqzcqoIe/J+erwVZQUYNfL68EcvAQ==", + "license": "MIT" + }, + "node_modules/@scure/base": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", + "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.4.0.tgz", + "integrity": "sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "~1.4.0", + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.3.0.tgz", + "integrity": "sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "~1.4.0", + "@scure/base": "~1.1.6" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-3.1.5.tgz", + "integrity": "sha512-DhNPnqTqPoG8aZ5dWkFOgsuY+i0GQ3CI6hMmvCoduNsnU9gUZWZBwGfDQsTTB7NvFPkom1df7jMIJWU90kuXXg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/abort-controller/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/config-resolver": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-3.0.9.tgz", + "integrity": "sha512-5d9oBf40qC7n2xUoHmntKLdqsyTMMo/r49+eqSIjJ73eDfEtljAxEhzIQ3bkgXJtR3xiv7YzMT/3FF3ORkjWdg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", + "@smithy/util-config-provider": "^3.0.0", + "@smithy/util-middleware": "^3.0.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/config-resolver/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/core": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.7.tgz", + "integrity": "sha512-goqMjX+IoVEnHZjYuzu8xwoZjoteMiLXsPHuXPBkWsGwu0o9c3nTjqkUlP1Ez/V8E501aOU7CJ3INk8mQcW2gw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-retry": "^3.0.22", + "@smithy/middleware-serde": "^3.0.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/util-body-length-browser": "^3.0.0", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/core/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-3.2.4.tgz", + "integrity": "sha512-S9bb0EIokfYEuar4kEbLta+ivlKCWOCFsLZuilkNy9i0uEUEHSi47IFLPaxqqCl+0ftKmcOTHayY5nQhAuq7+w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.8", + "@smithy/property-provider": "^3.1.7", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "3.2.9", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.9.tgz", + "integrity": "sha512-hYNVQOqhFQ6vOpenifFME546f0GfJn2OiQ3M0FDmuUu8V/Uiwy2wej7ZXxFBNqdx0R5DZAqWM1l6VRhGz8oE6A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^4.1.4", + "@smithy/querystring-builder": "^3.0.7", + "@smithy/types": "^3.5.0", + "@smithy/util-base64": "^3.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/fetch-http-handler/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/hash-node": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-3.0.7.tgz", + "integrity": "sha512-SAGHN+QkrwcHFjfWzs/czX94ZEjPJ0CrWJS3M43WswDXVEuP4AVy9gJ3+AF6JQHZD13bojmuf/Ap/ItDeZ+Qfw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.5.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/hash-node/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/invalid-dependency": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-3.0.7.tgz", + "integrity": "sha512-Bq00GsAhHeYSuZX8Kpu4sbI9agH2BNYnqUmmbTGWOhki9NVsWn2jFr896vvoTMH8KAjNX/ErC/8t5QHuEXG+IA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/invalid-dependency/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/is-array-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-3.0.0.tgz", + "integrity": "sha512-+Fsu6Q6C4RSJiy81Y8eApjEB5gVtM+oFKTffg+jSuwtvomJJrhUJBu2zS8wjXSgH/g1MKEWrzyChTBe6clb5FQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/is-array-buffer/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/middleware-content-length": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-3.0.9.tgz", + "integrity": "sha512-t97PidoGElF9hTtLCrof32wfWMqC5g2SEJNxaVH3NjlatuNGsdxXRYO/t+RPnxA15RpYiS0f+zG7FuE2DeGgjA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-content-length/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-3.1.4.tgz", + "integrity": "sha512-/ChcVHekAyzUbyPRI8CzPPLj6y8QRAfJngWcLMgsWxKVzw/RzBV69mSOzJYDD3pRwushA1+5tHtPF8fjmzBnrQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^3.0.7", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "@smithy/url-parser": "^3.0.7", + "@smithy/util-middleware": "^3.0.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/middleware-retry": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.22.tgz", + "integrity": "sha512-svEN7O2Tf7BoaBkPzX/8AE2Bv7p16d9/ulFAD1Gmn5g19iMqNk1WIkMxAY7SpB9/tVtUwKx0NaIsBRl88gumZA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.8", + "@smithy/protocol-http": "^4.1.4", + "@smithy/service-error-classification": "^3.0.7", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-retry": "^3.0.7", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-retry/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/middleware-serde": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-3.0.7.tgz", + "integrity": "sha512-VytaagsQqtH2OugzVTq4qvjkLNbWehHfGcGr0JLJmlDRrNCeZoWkWsSOw1nhS/4hyUUWF/TLGGml4X/OnEep5g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-serde/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/middleware-stack": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-3.0.7.tgz", + "integrity": "sha512-EyTbMCdqS1DoeQsO4gI7z2Gzq1MoRFAeS8GkFYIwbedB7Lp5zlLHJdg+56tllIIG5Hnf9ZWX48YKSHlsKvugGA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/middleware-stack/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/node-config-provider": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-3.1.8.tgz", + "integrity": "sha512-E0rU0DglpeJn5ge64mk8wTGEXcQwmpUTY5Zr7IzTpDLmHKiIamINERNZYrPQjg58Ck236sEKSwRSHA4CwshU6Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^3.1.7", + "@smithy/shared-ini-file-loader": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/node-config-provider/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/node-http-handler": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.4.tgz", + "integrity": "sha512-49reY3+JgLMFNm7uTAKBWiKCA6XSvkNp9FqhVmusm2jpVnHORYFeFZ704LShtqWfjZW/nhX+7Iexyb6zQfXYIQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^3.1.5", + "@smithy/protocol-http": "^4.1.4", + "@smithy/querystring-builder": "^3.0.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/node-http-handler/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/property-provider": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-3.1.7.tgz", + "integrity": "sha512-QfzLi1GPMisY7bAM5hOUqBdGYnY5S2JAlr201pghksrQv139f8iiiMalXtjczIP5f6owxFn3MINLNUNvUkgtPw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/property-provider/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/protocol-http": { + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-4.1.4.tgz", + "integrity": "sha512-MlWK8eqj0JlpZBnWmjQLqmFp71Ug00P+m72/1xQB3YByXD4zZ+y9N4hYrR0EDmrUCZIkyATWHOXFgtavwGDTzQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/protocol-http/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/querystring-builder": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-3.0.7.tgz", + "integrity": "sha512-65RXGZZ20rzqqxTsChdqSpbhA6tdt5IFNgG6o7e1lnPVLCe6TNWQq4rTl4N87hTDD8mV4IxJJnvyE7brbnRkQw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.5.0", + "@smithy/util-uri-escape": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/querystring-builder/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/querystring-parser": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-3.0.7.tgz", + "integrity": "sha512-Fouw4KJVWqqUVIu1gZW8BH2HakwLz6dvdrAhXeXfeymOBrZw+hcqaWs+cS1AZPVp4nlbeIujYrKA921ZW2WMPA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/querystring-parser/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/service-error-classification": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-3.0.7.tgz", + "integrity": "sha512-91PRkTfiBf9hxkIchhRKJfl1rsplRDyBnmyFca3y0Z3x/q0JJN480S83LBd8R6sBCkm2bBbqw2FHp0Mbh+ecSA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.5.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-3.1.8.tgz", + "integrity": "sha512-0NHdQiSkeGl0ICQKcJQ2lCOKH23Nb0EaAa7RDRId6ZqwXkw4LJyIyZ0t3iusD4bnKYDPLGy2/5e2rfUhrt0Acw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/signature-v4": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.2.0.tgz", + "integrity": "sha512-LafbclHNKnsorMgUkKm7Tk7oJ7xizsZ1VwqhGKqoCIrXh4fqDDp73fK99HOEEgcsQbtemmeY/BPv0vTVYYUNEQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-middleware": "^3.0.7", + "@smithy/util-uri-escape": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/signature-v4/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/smithy-client": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.3.6.tgz", + "integrity": "sha512-qdH+mvDHgq1ss6mocyIl2/VjlWXew7pGwZQydwYJczEc22HZyX3k8yVPV9aZsbYbssHPvMDRA5rfBDrjQUbIIw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-endpoint": "^3.1.4", + "@smithy/middleware-stack": "^3.0.7", + "@smithy/protocol-http": "^4.1.4", + "@smithy/types": "^3.5.0", + "@smithy/util-stream": "^3.1.9", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/smithy-client/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/types": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-3.5.0.tgz", + "integrity": "sha512-QN0twHNfe8mNJdH9unwsCK13GURU7oEAZqkBI+rsvpv1jrmserO+WnLE7jidR9W/1dxwZ0u/CB01mV2Gms/K2Q==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/types/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/url-parser": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-3.0.7.tgz", + "integrity": "sha512-70UbSSR8J97c1rHZOWhl+VKiZDqHWxs/iW8ZHrHp5fCCPLSBE7GcUlUvKSle3Ca+J9LLbYCj/A79BxztBvAfpA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^3.0.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/url-parser/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/util-base64": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-3.0.0.tgz", + "integrity": "sha512-Kxvoh5Qtt0CDsfajiZOCpJxgtPHXOKwmM+Zy4waD43UoEMA+qPxxa98aE/7ZhdnBFZFXMOiBR5xbcaMhLtznQQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-base64/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-3.0.0.tgz", + "integrity": "sha512-cbjJs2A1mLYmqmyVl80uoLTJhAcfzMOyPgjwAYusWKMdLeNtzmMz9YxNl3/jRLoxSS3wkqkf0jwNdtXWtyEBaQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@smithy/util-body-length-browser/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/util-body-length-node": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-3.0.0.tgz", + "integrity": "sha512-Tj7pZ4bUloNUP6PzwhN7K386tmSmEET9QtQg0TgdNOnxhZvCssHji+oZTUIuzxECRfG8rdm2PMw2WCFs6eIYkA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-body-length-node/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/util-buffer-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-3.0.0.tgz", + "integrity": "sha512-aEOHCgq5RWFbP+UDPvPot26EJHjOC+bRgse5A8V3FSShqd5E5UN4qc7zkwsvJPPAVsf73QwYcHN1/gt/rtLwQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-buffer-from/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/util-config-provider": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-3.0.0.tgz", + "integrity": "sha512-pbjk4s0fwq3Di/ANL+rCvJMKM5bzAQdE5S/6RL5NXgMExFAi6UgQMPOm5yPaIWPpr+EOXKXRonJ3FoxKf4mCJQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-config-provider/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.22.tgz", + "integrity": "sha512-WKzUxNsOun5ETwEOrvooXeI1mZ8tjDTOcN4oruELWHhEYDgQYWwxZupURVyovcv+h5DyQT/DzK5nm4ZoR/Tw5Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^3.1.7", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "3.0.22", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.22.tgz", + "integrity": "sha512-hUsciOmAq8fsGwqg4+pJfNRmrhfqMH4Y9UeGcgeUl88kPAoYANFATJqCND+O4nUvwp5TzsYwGpqpcBKyA8LUUg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^3.0.9", + "@smithy/credential-provider-imds": "^3.2.4", + "@smithy/node-config-provider": "^3.1.8", + "@smithy/property-provider": "^3.1.7", + "@smithy/smithy-client": "^3.3.6", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/util-endpoints": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-2.1.3.tgz", + "integrity": "sha512-34eACeKov6jZdHqS5hxBMJ4KyWKztTMulhuQ2UdOoP6vVxMLrOKUqIXAwJe/wiWMhXhydLW664B02CNpQBQ4Aw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^3.1.8", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-endpoints/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-3.0.0.tgz", + "integrity": "sha512-eFndh1WEK5YMUYvy3lPlVmYY/fZcQE1D8oSf41Id2vCeIkKJXPcYDCZD+4+xViI6b1XSd7tE+s5AmXzz5ilabQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/util-middleware": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-3.0.7.tgz", + "integrity": "sha512-OVA6fv/3o7TMJTpTgOi1H5OTwnuUa8hzRzhSFDtZyNxi6OZ70L/FHattSmhE212I7b6WSOJAAmbYnvcjTHOJCA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-middleware/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/util-retry": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-3.0.7.tgz", + "integrity": "sha512-nh1ZO1vTeo2YX1plFPSe/OXaHkLAHza5jpokNiiKX2M5YpNUv6RxGJZhpfmiR4jSvVHCjIDmILjrxKmP+/Ghug==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^3.0.7", + "@smithy/types": "^3.5.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-retry/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/util-stream": { + "version": "3.1.9", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.9.tgz", + "integrity": "sha512-7YAR0Ub3MwTMjDfjnup4qa6W8gygZMxikBhFMPESi6ASsl/rZJhwLpF/0k9TuezScCojsM0FryGdz4LZtjKPPQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^3.2.9", + "@smithy/node-http-handler": "^3.2.4", + "@smithy/types": "^3.5.0", + "@smithy/util-base64": "^3.0.0", + "@smithy/util-buffer-from": "^3.0.0", + "@smithy/util-hex-encoding": "^3.0.0", + "@smithy/util-utf8": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-stream/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/util-uri-escape": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-3.0.0.tgz", + "integrity": "sha512-LqR7qYLgZTD7nWLBecUi4aqolw8Mhza9ArpNEQ881MJJIU2sE5iHCK6TdyqqzcDLy0OPe10IY4T8ctVdtynubg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-uri-escape/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@smithy/util-utf8": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-3.0.0.tgz", + "integrity": "sha512-rUeT12bxFnplYDe815GXbq/oixEGHfRFFtcTF3YdDi/JaENIM6aSYYLJydG83UNzLXeRI5K8abYd/8Sp/QM0kA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^3.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@smithy/util-utf8/node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" + }, + "node_modules/@types/bn.js": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.6.tgz", + "integrity": "sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "22.5.5", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", + "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", + "license": "MIT", + "dependencies": { + "undici-types": "~6.19.2" + } + }, + "node_modules/@types/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@types/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/secp256k1": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@types/secp256k1/-/secp256k1-4.0.6.tgz", + "integrity": "sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/ws": { + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/@types/ws/-/ws-8.5.3.tgz", + "integrity": "sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/abitype": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-1.0.6.tgz", + "integrity": "sha512-MMSqYh4+C/aVqI2RQaWqbvI4Kxo5cQV40WQ4QFtDnNzCkqChm8MuENhElmynZlO0qUy/ObkEUaXtKqYnx1Kp3A==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/wevm" + }, + "peerDependencies": { + "typescript": ">=5.0.4", + "zod": "^3 >=3.22.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + }, + "zod": { + "optional": true + } + } + }, + "node_modules/aes-js": { + "version": "4.0.0-beta.5", + "resolved": "https://registry.npmjs.org/aes-js/-/aes-js-4.0.0-beta.5.tgz", + "integrity": "sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q==", + "license": "MIT" + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/aws-sdk": { + "version": "2.1691.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1691.0.tgz", + "integrity": "sha512-/F2YC+DlsY3UBM2Bdnh5RLHOPNibS/+IcjUuhP8XuctyrN+MlL+fWDAiela32LTDk7hMy4rx8MTgvbJ+0blO5g==", + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "buffer": "4.9.2", + "events": "1.1.1", + "ieee754": "1.1.13", + "jmespath": "0.16.0", + "querystring": "0.2.0", + "sax": "1.2.1", + "url": "0.10.3", + "util": "^0.12.4", + "uuid": "8.0.0", + "xml2js": "0.6.2" + }, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/aws-sdk/node_modules/uuid": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.0.0.tgz", + "integrity": "sha512-jOXGuXZAWdsTH7eZLtyXMqUb9EcWMGZNbL9YcGBJl4MH4nrxHmZJhEHvyLFrkxo+28uLb/NYRcStH48fnD0Vzw==", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/base-x": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.10.tgz", + "integrity": "sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==", + "license": "MIT" + }, + "node_modules/bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "license": "MIT" + }, + "node_modules/bowser": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz", + "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==", + "license": "MIT" + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "license": "MIT" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "license": "MIT", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "license": "MIT", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "license": "MIT", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "license": "MIT", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==", + "license": "MIT" + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/crc-32": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/crc-32/-/crc-32-1.2.2.tgz", + "integrity": "sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "license": "MIT", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-fetch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cross-fetch/-/cross-fetch-4.0.0.tgz", + "integrity": "sha512-e4a5N8lVvuLgAWgnCrLr2PP0YyDOTHa9H/Rj54dirp61qXnNq46m82bRhNqIA5VccJtWBvPTFRV3TtvHUKPB1g==", + "license": "MIT", + "dependencies": { + "node-fetch": "^2.6.12" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/dotenv": { + "version": "16.4.5", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.5.tgz", + "integrity": "sha512-ZmdL2rui+eB2YwhsWzjInR8LldtZHGDoQ1ugH85ppHKwpUHL7j7rN0Ti9NCnGiQbhaZ11FpR+7ao1dNsmduNUg==", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/elliptic": { + "version": "6.5.7", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", + "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", + "license": "MIT", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "license": "MIT" + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/esbuild": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", + "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.23.1", + "@esbuild/android-arm": "0.23.1", + "@esbuild/android-arm64": "0.23.1", + "@esbuild/android-x64": "0.23.1", + "@esbuild/darwin-arm64": "0.23.1", + "@esbuild/darwin-x64": "0.23.1", + "@esbuild/freebsd-arm64": "0.23.1", + "@esbuild/freebsd-x64": "0.23.1", + "@esbuild/linux-arm": "0.23.1", + "@esbuild/linux-arm64": "0.23.1", + "@esbuild/linux-ia32": "0.23.1", + "@esbuild/linux-loong64": "0.23.1", + "@esbuild/linux-mips64el": "0.23.1", + "@esbuild/linux-ppc64": "0.23.1", + "@esbuild/linux-riscv64": "0.23.1", + "@esbuild/linux-s390x": "0.23.1", + "@esbuild/linux-x64": "0.23.1", + "@esbuild/netbsd-x64": "0.23.1", + "@esbuild/openbsd-arm64": "0.23.1", + "@esbuild/openbsd-x64": "0.23.1", + "@esbuild/sunos-x64": "0.23.1", + "@esbuild/win32-arm64": "0.23.1", + "@esbuild/win32-ia32": "0.23.1", + "@esbuild/win32-x64": "0.23.1" + } + }, + "node_modules/ethereum-cryptography": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz", + "integrity": "sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ==", + "license": "MIT", + "dependencies": { + "@types/pbkdf2": "^3.0.0", + "@types/secp256k1": "^4.0.1", + "blakejs": "^1.1.0", + "browserify-aes": "^1.2.0", + "bs58check": "^2.1.2", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "hash.js": "^1.1.7", + "keccak": "^3.0.0", + "pbkdf2": "^3.0.17", + "randombytes": "^2.1.0", + "safe-buffer": "^5.1.2", + "scrypt-js": "^3.0.0", + "secp256k1": "^4.0.1", + "setimmediate": "^1.0.5" + } + }, + "node_modules/ethereumjs-common": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/ethereumjs-common/-/ethereumjs-common-1.5.2.tgz", + "integrity": "sha512-hTfZjwGX52GS2jcVO6E2sx4YuFnf0Fhp5ylo4pEPhEffNln7vS59Hr5sLnp3/QCazFLluuBZ+FZ6J5HTp0EqCA==", + "deprecated": "New package name format for new versions: @ethereumjs/common. Please update.", + "license": "MIT" + }, + "node_modules/ethereumjs-tx": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ethereumjs-tx/-/ethereumjs-tx-2.1.2.tgz", + "integrity": "sha512-zZEK1onCeiORb0wyCXUvg94Ve5It/K6GD1K+26KfFKodiBiS6d9lfCXlUKGBBdQ+bv7Day+JK0tj1K+BeNFRAw==", + "deprecated": "New package name format for new versions: @ethereumjs/tx. Please update.", + "license": "MPL-2.0", + "dependencies": { + "ethereumjs-common": "^1.5.0", + "ethereumjs-util": "^6.0.0" + } + }, + "node_modules/ethereumjs-tx/node_modules/@types/bn.js": { + "version": "4.11.6", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-4.11.6.tgz", + "integrity": "sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/ethereumjs-tx/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "license": "MIT" + }, + "node_modules/ethereumjs-tx/node_modules/ethereumjs-util": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz", + "integrity": "sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw==", + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^4.11.3", + "bn.js": "^4.11.0", + "create-hash": "^1.1.2", + "elliptic": "^6.5.2", + "ethereum-cryptography": "^0.1.3", + "ethjs-util": "0.1.6", + "rlp": "^2.2.3" + } + }, + "node_modules/ethereumjs-util": { + "version": "7.1.5", + "resolved": "https://registry.npmjs.org/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz", + "integrity": "sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg==", + "license": "MPL-2.0", + "dependencies": { + "@types/bn.js": "^5.1.0", + "bn.js": "^5.1.2", + "create-hash": "^1.1.2", + "ethereum-cryptography": "^0.1.3", + "rlp": "^2.2.4" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/ethers": { + "version": "6.13.2", + "resolved": "https://registry.npmjs.org/ethers/-/ethers-6.13.2.tgz", + "integrity": "sha512-9VkriTTed+/27BGuY1s0hf441kqwHJ1wtN2edksEtiRvXx+soxRX3iSXTfFqq2+YwrOqbDoTHjIhQnjJRlzKmg==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/ethers-io/" + }, + { + "type": "individual", + "url": "https://www.buymeacoffee.com/ricmoo" + } + ], + "license": "MIT", + "dependencies": { + "@adraffy/ens-normalize": "1.10.1", + "@noble/curves": "1.2.0", + "@noble/hashes": "1.3.2", + "@types/node": "18.15.13", + "aes-js": "4.0.0-beta.5", + "tslib": "2.4.0", + "ws": "8.17.1" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/ethers/node_modules/@noble/hashes": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.2.tgz", + "integrity": "sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/ethers/node_modules/@types/node": { + "version": "18.15.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.15.13.tgz", + "integrity": "sha512-N+0kuo9KgrUQ1Sn/ifDXsvg0TTleP7rIy4zOBGECxAljqvqfqpTfzx0Q1NUedOixRMBfe2Whhb056a42cWs26Q==", + "license": "MIT" + }, + "node_modules/ethjs-util": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ethjs-util/-/ethjs-util-0.1.6.tgz", + "integrity": "sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w==", + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0", + "strip-hex-prefix": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz", + "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", + "license": "MIT" + }, + "node_modules/events": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/events/-/events-1.1.1.tgz", + "integrity": "sha512-kEcvvCBByWXGnZy6JUlgAp2gBIUjfCAV6P6TgT1/aaQKcmuAEC4OZTV1I4EWQLz2gxZw76atuVyvHhTxvi0Flw==", + "license": "MIT", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "license": "MIT", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/fast-xml-parser": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.1.3" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-tsconfig": { + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.1.tgz", + "integrity": "sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==", + "license": "MIT", + "dependencies": { + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "license": "MIT", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/ieee754": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.1.13.tgz", + "integrity": "sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg==", + "license": "BSD-3-Clause" + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-generator-function": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.0.10.tgz", + "integrity": "sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==", + "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-hex-prefixed": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz", + "integrity": "sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA==", + "license": "MIT", + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", + "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "license": "MIT" + }, + "node_modules/isomorphic-ws": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/isomorphic-ws/-/isomorphic-ws-5.0.0.tgz", + "integrity": "sha512-muId7Zzn9ywDsyXgTIafTry2sV3nySZeUDe6YedVd1Hvuuep5AsIlqK+XefWpYTyJG5e503F2xIuT2lcU6rCSw==", + "license": "MIT", + "peerDependencies": { + "ws": "*" + } + }, + "node_modules/jmespath": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/jmespath/-/jmespath-0.16.0.tgz", + "integrity": "sha512-9FzQjJ7MATs1tSpnco1K6ayiYE3figslrXA72G2HQ/n76RzvYlofyi5QM+iX4YRs/pu3yzxlVQSST23+dMDknw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/js-sha3": { + "version": "0.9.3", + "resolved": "https://registry.npmjs.org/js-sha3/-/js-sha3-0.9.3.tgz", + "integrity": "sha512-BcJPCQeLg6WjEx3FE591wVAevlli8lxsxm9/FzV4HXkV49TmBH38Yvrpce6fjbADGMKFrBMGTqrVz3qPIZ88Gg==", + "license": "MIT" + }, + "node_modules/keccak": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.4.tgz", + "integrity": "sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "license": "MIT" + }, + "node_modules/node-addon-api": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-2.0.2.tgz", + "integrity": "sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA==", + "license": "MIT" + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-gyp-build": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.2.tgz", + "integrity": "sha512-IRUxE4BVsHWXkV/SFOut4qTlagw2aM8T5/vnTsmrHJvVoKueJHRc/JaFND7QDDc61kLYUJ6qlZM3sqTSyx2dTw==", + "license": "MIT", + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "license": "MIT", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==", + "license": "MIT" + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "license": "MIT", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", + "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "license": "MIT", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rlp": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/rlp/-/rlp-2.2.7.tgz", + "integrity": "sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ==", + "license": "MPL-2.0", + "dependencies": { + "bn.js": "^5.2.0" + }, + "bin": { + "rlp": "bin/rlp" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "license": "MIT" + }, + "node_modules/sax": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", + "integrity": "sha512-8I2a3LovHTOpm7NV5yOyO8IHqgVsfK4+UuySrXU8YXkSRX7k6hCV9b3HrkKCr3nMpgj+0bmocaJJWpvp1oc7ZA==", + "license": "ISC" + }, + "node_modules/scrypt-js": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/scrypt-js/-/scrypt-js-3.0.1.tgz", + "integrity": "sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA==", + "license": "MIT" + }, + "node_modules/secp256k1": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/secp256k1/-/secp256k1-4.0.3.tgz", + "integrity": "sha512-NLZVf+ROMxwtEj3Xa562qgv2BK5e2WNmXPiOdVIPLgs6lyTzMvBq0aWTYMI5XCP9jZMVKOcqZLw/Wc4vDkuxhA==", + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "elliptic": "^6.5.4", + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==", + "license": "MIT" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "license": "(MIT AND BSD-3-Clause)", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/strip-hex-prefix": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz", + "integrity": "sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A==", + "license": "MIT", + "dependencies": { + "is-hex-prefixed": "1.0.0" + }, + "engines": { + "node": ">=6.5.0", + "npm": ">=3" + } + }, + "node_modules/strnum": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz", + "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==", + "license": "MIT" + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==", + "license": "0BSD" + }, + "node_modules/tsx": { + "version": "4.19.1", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.19.1.tgz", + "integrity": "sha512-0flMz1lh74BR4wOvBjuh9olbnwqCPc35OOlfyzHba0Dc+QNUeWX/Gq2YTbnwcWPO3BMd8fkzRVrHcsR+a7z7rA==", + "license": "MIT", + "dependencies": { + "esbuild": "~0.23.0", + "get-tsconfig": "^4.7.5" + }, + "bin": { + "tsx": "dist/cli.mjs" + }, + "engines": { + "node": ">=18.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + } + }, + "node_modules/typescript": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.2.tgz", + "integrity": "sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/undici-types": { + "version": "6.19.8", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", + "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", + "license": "MIT" + }, + "node_modules/url": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/url/-/url-0.10.3.tgz", + "integrity": "sha512-hzSUW2q06EqL1gKM/a+obYHLIO6ct2hwPuviqTTOcfFVc61UbfJ2Q32+uGL/HCPxKqrdGB5QUwIe7UqlDgwsOQ==", + "license": "MIT", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/web3": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/web3/-/web3-4.13.0.tgz", + "integrity": "sha512-wRXTu/YjelvBJ7PSLzp/rW8/6pqj4RlXzdKSkjk01RaHDvnpLogLU/VL8OF5ygqhY7IzhY5MSrl9SnC8C9Z4uA==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.6.0", + "web3-errors": "^1.3.0", + "web3-eth": "^4.9.0", + "web3-eth-abi": "^4.2.4", + "web3-eth-accounts": "^4.2.1", + "web3-eth-contract": "^4.7.0", + "web3-eth-ens": "^4.4.0", + "web3-eth-iban": "^4.0.7", + "web3-eth-personal": "^4.1.0", + "web3-net": "^4.1.0", + "web3-providers-http": "^4.2.0", + "web3-providers-ws": "^4.0.8", + "web3-rpc-methods": "^1.3.0", + "web3-rpc-providers": "^1.0.0-rc.2", + "web3-types": "^1.8.0", + "web3-utils": "^4.3.1", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14.0.0", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-core": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/web3-core/-/web3-core-4.6.0.tgz", + "integrity": "sha512-j8uQ/7zSwpmLClMMeZb736Ok3V4cWSd0dnd29jkd10d1pedi32r+hSAgycxSJLLWtPHOzMBIXUjj3TF/IAClVQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-errors": "^1.3.0", + "web3-eth-accounts": "^4.2.1", + "web3-eth-iban": "^4.0.7", + "web3-providers-http": "^4.2.0", + "web3-providers-ws": "^4.0.8", + "web3-types": "^1.8.0", + "web3-utils": "^4.3.1", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + }, + "optionalDependencies": { + "web3-providers-ipc": "^4.0.7" + } + }, + "node_modules/web3-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/web3-errors/-/web3-errors-1.3.0.tgz", + "integrity": "sha512-j5JkAKCtuVMbY3F5PYXBqg1vWrtF4jcyyMY1rlw8a4PV67AkqlepjGgpzWJZd56Mt+TvHy6DA1F/3Id8LatDSQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-types": "^1.7.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/web3-eth/-/web3-eth-4.9.0.tgz", + "integrity": "sha512-lE+5rQUkQq1Mzf3uZ/tlay8nvMyC/CmaRFRFQ015OZuvSrRr/byZhhkzY5ZWkIetESTMqfWapu67yeHebcHxwA==", + "license": "LGPL-3.0", + "dependencies": { + "setimmediate": "^1.0.5", + "web3-core": "^4.6.0", + "web3-errors": "^1.3.0", + "web3-eth-abi": "^4.2.4", + "web3-eth-accounts": "^4.2.1", + "web3-net": "^4.1.0", + "web3-providers-ws": "^4.0.8", + "web3-rpc-methods": "^1.3.0", + "web3-types": "^1.8.0", + "web3-utils": "^4.3.1", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-abi": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/web3-eth-abi/-/web3-eth-abi-4.2.4.tgz", + "integrity": "sha512-FGoj/ENm/Iq3+6myJyiDCwbFkha9ZCx2fRdiIdw3mp7S4lgu+ay3EVzQPRxJjNBm09UEfxB9yoSAPKj9Z3Mbxg==", + "license": "LGPL-3.0", + "dependencies": { + "abitype": "0.7.1", + "web3-errors": "^1.3.0", + "web3-types": "^1.8.0", + "web3-utils": "^4.3.1", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-abi/node_modules/abitype": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/abitype/-/abitype-0.7.1.tgz", + "integrity": "sha512-VBkRHTDZf9Myaek/dO3yMmOzB/y2s3Zo6nVU7yaw1G+TvCHAjwaJzNGN9yo4K5D8bU/VZXKP1EJpRhFr862PlQ==", + "license": "MIT", + "peerDependencies": { + "typescript": ">=4.9.4", + "zod": "^3 >=3.19.1" + }, + "peerDependenciesMeta": { + "zod": { + "optional": true + } + } + }, + "node_modules/web3-eth-accounts": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/web3-eth-accounts/-/web3-eth-accounts-4.2.1.tgz", + "integrity": "sha512-aOlEZFzqAgKprKs7+DGArU4r9b+ILBjThpeq42aY7LAQcP+mSpsWcQgbIRK3r/n3OwTYZ3aLPk0Ih70O/LwnYA==", + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/rlp": "^4.0.1", + "crc-32": "^1.2.2", + "ethereum-cryptography": "^2.0.0", + "web3-errors": "^1.3.0", + "web3-types": "^1.7.0", + "web3-utils": "^4.3.1", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-accounts/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-eth-accounts/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-eth-accounts/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/web3-eth-contract": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/web3-eth-contract/-/web3-eth-contract-4.7.0.tgz", + "integrity": "sha512-fdStoBOjFyMHwlyJmSUt/BTDL1ATwKGmG3zDXQ/zTKlkkW/F/074ut0Vry4GuwSBg9acMHc0ycOiZx9ZKjNHsw==", + "license": "LGPL-3.0", + "dependencies": { + "@ethereumjs/rlp": "^5.0.2", + "web3-core": "^4.5.1", + "web3-errors": "^1.3.0", + "web3-eth": "^4.8.2", + "web3-eth-abi": "^4.2.3", + "web3-types": "^1.7.0", + "web3-utils": "^4.3.1", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-contract/node_modules/@ethereumjs/rlp": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@ethereumjs/rlp/-/rlp-5.0.2.tgz", + "integrity": "sha512-DziebCdg4JpGlEqEdGgXmjqcFoJi+JGulUXwEjsZGAscAQ7MyD/7LE/GVCP29vEQxKc7AAwjT3A2ywHp2xfoCA==", + "license": "MPL-2.0", + "bin": { + "rlp": "bin/rlp.cjs" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/web3-eth-ens": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/web3-eth-ens/-/web3-eth-ens-4.4.0.tgz", + "integrity": "sha512-DeyVIS060hNV9g8dnTx92syqvgbvPricE3MerCxe/DquNZT3tD8aVgFfq65GATtpCgDDJffO2bVeHp3XBemnSQ==", + "license": "LGPL-3.0", + "dependencies": { + "@adraffy/ens-normalize": "^1.8.8", + "web3-core": "^4.5.0", + "web3-errors": "^1.2.0", + "web3-eth": "^4.8.0", + "web3-eth-contract": "^4.5.0", + "web3-net": "^4.1.0", + "web3-types": "^1.7.0", + "web3-utils": "^4.3.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-iban": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-eth-iban/-/web3-eth-iban-4.0.7.tgz", + "integrity": "sha512-8weKLa9KuKRzibC87vNLdkinpUE30gn0IGY027F8doeJdcPUfsa4IlBgNC4k4HLBembBB2CTU0Kr/HAOqMeYVQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7", + "web3-validator": "^2.0.3" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-eth-personal": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-eth-personal/-/web3-eth-personal-4.1.0.tgz", + "integrity": "sha512-RFN83uMuvA5cu1zIwwJh9A/bAj0OBxmGN3tgx19OD/9ygeUZbifOL06jgFzN0t+1ekHqm3DXYQM8UfHpXi7yDQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.6.0", + "web3-eth": "^4.9.0", + "web3-rpc-methods": "^1.3.0", + "web3-types": "^1.8.0", + "web3-utils": "^4.3.1", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-net": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/web3-net/-/web3-net-4.1.0.tgz", + "integrity": "sha512-WWmfvHVIXWEoBDWdgKNYKN8rAy6SgluZ0abyRyXOL3ESr7ym7pKWbfP4fjApIHlYTh8tNqkrdPfM4Dyi6CA0SA==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.4.0", + "web3-rpc-methods": "^1.3.0", + "web3-types": "^1.6.0", + "web3-utils": "^4.3.0" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-http": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/web3-providers-http/-/web3-providers-http-4.2.0.tgz", + "integrity": "sha512-IPMnDtHB7dVwaB7/mMxAZzyq7d5ezfO1+Vw0bNfAeIi7gaDlJiggp85SdyAfOgov8AMUA/dyiY72kQ0KmjXKvQ==", + "license": "LGPL-3.0", + "dependencies": { + "cross-fetch": "^4.0.0", + "web3-errors": "^1.3.0", + "web3-types": "^1.7.0", + "web3-utils": "^4.3.1" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-ipc": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/web3-providers-ipc/-/web3-providers-ipc-4.0.7.tgz", + "integrity": "sha512-YbNqY4zUvIaK2MHr1lQFE53/8t/ejHtJchrWn9zVbFMGXlTsOAbNoIoZWROrg1v+hCBvT2c9z8xt7e/+uz5p1g==", + "license": "LGPL-3.0", + "optional": true, + "dependencies": { + "web3-errors": "^1.1.3", + "web3-types": "^1.3.0", + "web3-utils": "^4.0.7" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-providers-ws": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/web3-providers-ws/-/web3-providers-ws-4.0.8.tgz", + "integrity": "sha512-goJdgata7v4pyzHRsg9fSegUG4gVnHZSHODhNnn6J93ykHkBI1nz4fjlGpcQLUMi4jAMz6SHl9Ibzs2jj9xqPw==", + "license": "LGPL-3.0", + "dependencies": { + "@types/ws": "8.5.3", + "isomorphic-ws": "^5.0.0", + "web3-errors": "^1.2.0", + "web3-types": "^1.7.0", + "web3-utils": "^4.3.1", + "ws": "^8.17.1" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-rpc-methods": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/web3-rpc-methods/-/web3-rpc-methods-1.3.0.tgz", + "integrity": "sha512-/CHmzGN+IYgdBOme7PdqzF+FNeMleefzqs0LVOduncSaqsppeOEoskLXb2anSpzmQAP3xZJPaTrkQPWSJMORig==", + "license": "LGPL-3.0", + "dependencies": { + "web3-core": "^4.4.0", + "web3-types": "^1.6.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-rpc-providers": { + "version": "1.0.0-rc.2", + "resolved": "https://registry.npmjs.org/web3-rpc-providers/-/web3-rpc-providers-1.0.0-rc.2.tgz", + "integrity": "sha512-ocFIEXcBx/DYQ90HhVepTBUVnL9pGsZw8wyPb1ZINSenwYus9SvcFkjU1Hfvd/fXjuhAv2bUVch9vxvMx1mXAQ==", + "license": "LGPL-3.0", + "dependencies": { + "web3-errors": "^1.3.0", + "web3-providers-http": "^4.2.0", + "web3-providers-ws": "^4.0.8", + "web3-types": "^1.7.0", + "web3-utils": "^4.3.1", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-types": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/web3-types/-/web3-types-1.8.0.tgz", + "integrity": "sha512-Z51wFLPGhZM/1uDxrxE8gzju3t2aEdRGn+YmLX463id5UjTuMEmP/9in1GFjqrsPB3m86czs8RnGBUt3ovueMw==", + "license": "LGPL-3.0", + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-utils": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/web3-utils/-/web3-utils-4.3.1.tgz", + "integrity": "sha512-kGwOk8FxOLJ9DQC68yqNQc7AzN+k9YDLaW+ZjlAXs3qORhf8zXk5SxWAAGLbLykMs3vTeB0FTb1Exut4JEYfFA==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "eventemitter3": "^5.0.1", + "web3-errors": "^1.2.0", + "web3-types": "^1.7.0", + "web3-validator": "^2.0.6" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-utils/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-utils/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/web3-validator": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/web3-validator/-/web3-validator-2.0.6.tgz", + "integrity": "sha512-qn9id0/l1bWmvH4XfnG/JtGKKwut2Vokl6YXP5Kfg424npysmtRLe9DgiNBM9Op7QL/aSiaA0TVXibuIuWcizg==", + "license": "LGPL-3.0", + "dependencies": { + "ethereum-cryptography": "^2.0.0", + "util": "^0.12.5", + "web3-errors": "^1.2.0", + "web3-types": "^1.6.0", + "zod": "^3.21.4" + }, + "engines": { + "node": ">=14", + "npm": ">=6.12.0" + } + }, + "node_modules/web3-validator/node_modules/@noble/curves": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.4.2.tgz", + "integrity": "sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "1.4.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-validator/node_modules/@noble/hashes": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", + "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", + "license": "MIT", + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/web3-validator/node_modules/ethereum-cryptography": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz", + "integrity": "sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg==", + "license": "MIT", + "dependencies": { + "@noble/curves": "1.4.2", + "@noble/hashes": "1.4.0", + "@scure/bip32": "1.4.0", + "@scure/bip39": "1.3.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", + "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/ws": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/zod": { + "version": "3.23.8", + "resolved": "https://registry.npmjs.org/zod/-/zod-3.23.8.tgz", + "integrity": "sha512-XBx9AXhXktjUqnepgTiE5flcKIYWi/rme0Eaj+5Y0lftuGBq+jyRu/md4WnuxqgP1ubdpNCsYEYPxrzVHD8d6g==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/colinhacks" + } + } + } +} diff --git a/protocol-units/post-confirmations/contracts/upgrader/package.json b/protocol-units/post-confirmations/contracts/upgrader/package.json new file mode 100644 index 00000000..40fb84eb --- /dev/null +++ b/protocol-units/post-confirmations/contracts/upgrader/package.json @@ -0,0 +1,26 @@ +{ + "name": "upgrader", + "version": "1.0.0", + "description": "The Upgrader is a script designed to automate the upgrade process for settlement protocol units, streamlining the execution of several key steps required for contract upgrades. Below is a breakdown of its main components and the steps it performs.", + "main": "index.ts", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "keywords": [], + "author": "", + "license": "ISC", + "dependencies": { + "@aws-sdk/client-kms": "^3.658.1", + "@safe-global/api-kit": "^2.4.4", + "asn1.js": "^5.4.1", + "aws-sdk": "^2.1691.0", + "bn.js": "^5.2.1", + "commander": "^12.1.0", + "dotenv": "^16.4.5", + "ethereumjs-tx": "^2.1.2", + "js-sha3": "^0.9.3", + "tsx": "^4.19.1", + "web3": "^4.13.0", + "web3-core": "^4.6.0" + } +} diff --git a/protocol-units/post-confirmations/contracts/upgrader/propose.sh b/protocol-units/post-confirmations/contracts/upgrader/propose.sh new file mode 100644 index 00000000..aac7c3fb --- /dev/null +++ b/protocol-units/post-confirmations/contracts/upgrader/propose.sh @@ -0,0 +1,88 @@ +# propose.sh + +#!/bin/bash + +# Initialize contract variable +contract="" +url="" +api_key="" +path="" + +# Parse options using getopts +while getopts "c:u:k:" opt; do + case $opt in + c) contract="$OPTARG" + ;; + u) url="$OPTARG" + ;; + k) api_key="$OPTARG" + ;; + \?) echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + esac +done + +echo "Contract: $contract" +echo "URL: $url" + +# Ensure the contract flag is provided +if [ -z "$contract" ]; then + echo "Error: -c flag for contract is required." + exit 1 +fi + +# Ensure the url flag is provided +if [ -z "$url" ]; then + echo "Error: -u flag for url is required." + exit 1 +fi + +# Ensure the api_key flag is provided +if [ -z "$api_key" ]; then + echo "Error: -k flag for etherscan api key is required." + exit 1 +fi + +# Make the curl request and store the result in a variable +response=$(curl -s -X POST \ + -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}' \ + $url) + +# Extract the 'result' field using jq and store it in a variable +chain_id_hex=$(echo $response | jq -r '.result') + +# Convert the hex chain ID to decimal +chain_id_dec=$(printf "%d\n" $chain_id_hex) + +if $contract == "MCR" then + path="settlement" +else if $contract == "MovementStaking" then + path="staking" +else if $contract == ["MOVEToken" | "stlMoveToken"] then + path="token" +else + echo "Error: Invalid contract name." + exit 1 +fi + +$env="../src/$path" + +old_version=$(find $env -type f -name "./${contract}V*.sol" | grep -oP 'V\d+' | sed 's/V//' | sort -n | tail -1) +new_version=$((old_version + 1)) + +current_file="${contract}.sol" +new_file="${contract}V${new_version}.sol" +cp "$env/$current_file" "env/$new_file" + +# Run the script to generate transaction data for the upgrade +echo "Generating transaction data to upgrade contract $contract" +forge script "../script/${contract}Deployer.s.sol" -vvvv --fork-url ${url} --broadcast --verify --etherscan-api-key ${api_key} -o ./artifacts/${contract}-v${new_version}-eth-${chain_id_dec} + +# Convert contract name to lowercase +lowercase_contract=$(echo "$contract" | tr '[:upper:]' '[:lower:]') + +# Run the upgrader script +echo "Running upgrader/propose.ts" +npx tsx ./propose.ts -c "$lowercase_contract" -u "$url" diff --git a/protocol-units/post-confirmations/contracts/upgrader/propose.ts b/protocol-units/post-confirmations/contracts/upgrader/propose.ts new file mode 100644 index 00000000..16532a5b --- /dev/null +++ b/protocol-units/post-confirmations/contracts/upgrader/propose.ts @@ -0,0 +1,92 @@ +import Safe from "@safe-global/protocol-kit"; +//@ts-ignore +import SafeApiKit from '@safe-global/api-kit'; +import { + OperationType, + SafeTransactionDataPartial, +} from "@safe-global/safe-core-sdk-types"; +import * as fs from "fs"; +import { Command } from "commander"; +// import dotenv and load from the .env file in the parent directory +import dotenv from "dotenv"; +dotenv.config({ path: "../.env" }); + +interface Config { + CHAIN_ID: bigint; + RPC_URL: string; + SIGNER_ADDRESS_PRIVATE_KEY: string; + SAFE_ADDRESS: string; +} + +async function main() { + const private_key = process.env.AGENT_PRIVATE_KEY; + if (!private_key) { + throw new Error("PRIVATE_KEY is required"); + } + + const program = new Command(); + + program.option("-c, --contract ", "contract name").option("-u, --url ", "rpc url"); + program.parse(process.argv); + + const rawData = fs.readFileSync( + `../script/helpers/upgrade/${program.opts().contract}.json`, + "utf-8" + ); + const jsonData = JSON.parse(rawData); + + const config: Config = { + CHAIN_ID: jsonData.chainId as bigint, + RPC_URL: program.opts().url || "https://sepolia.gateway.tenderly.co", + SIGNER_ADDRESS_PRIVATE_KEY: private_key, + SAFE_ADDRESS: jsonData.safeAddress, + }; + + // Create Safe API Kit instance + const apiKit = new SafeApiKit({ + chainId: config.CHAIN_ID, + }); + + + // Create Safe instance + const protocolKit = await Safe.init({ + provider: config.RPC_URL, + signer: config.SIGNER_ADDRESS_PRIVATE_KEY, + safeAddress: config.SAFE_ADDRESS, + }); + + + // Create transaction + const safeTransactionData: SafeTransactionDataPartial = { + to: jsonData.to, + value: jsonData.value || "0", + data: jsonData.data, + operation: jsonData.operation == "OperationType.Call" ? OperationType.Call : OperationType.DelegateCall, + }; + const safeTransaction = await protocolKit.createTransaction({ + transactions: [safeTransactionData], + }); + + const signerAddress = + (await protocolKit.getSafeProvider().getSignerAddress()) || "0x"; + const safeTxHash = await protocolKit.getTransactionHash(safeTransaction); + const signature = await protocolKit.signHash(safeTxHash); + + // Propose transaction to the service + await apiKit.proposeTransaction({ + safeAddress: config.SAFE_ADDRESS, + safeTransactionData: safeTransaction.data, + safeTxHash, + senderAddress: signerAddress, + senderSignature: signature.data, + }); + + console.log("Proposed a transaction with Safe:", config.SAFE_ADDRESS); + console.log("- safeTxHash:", safeTxHash); + console.log("- Sender:", signerAddress); + console.log("- Sender signature:", signature.data); + + // Should the upgrade/contract.json file be deleted? +} + +main(); diff --git a/protocol-units/post-confirmations/contracts/upgrader/safeDeploy.sh b/protocol-units/post-confirmations/contracts/upgrader/safeDeploy.sh new file mode 100644 index 00000000..b340de81 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/upgrader/safeDeploy.sh @@ -0,0 +1,85 @@ +# safeDeploy.sh + +#!/bin/bash + +# Initialize contract variable +contract="" +url="" +api_key="" +path="" + +# Parse options using getopts +while getopts "c:u:k:" opt; do + case $opt in + c) contract="$OPTARG" + ;; + u) url="$OPTARG" + ;; + k) api_key="$OPTARG" + ;; + \?) echo "Invalid option: -$OPTARG" >&2 + exit 1 + ;; + esac +done + +echo "Contract: $contract" +echo "URL: $url" + +# Ensure the contract flag is provided +if [ -z "$contract" ]; then + echo "Error: -c flag for contract is required." + exit 1 +fi + +# Ensure the url flag is provided +if [ -z "$url" ]; then + echo "Error: -u flag for url is required." + exit 1 +fi + +# Ensure the api_key flag is provided +if [ -z "$api_key" ]; then + echo "Error: -k flag for etherscan api key is required." + exit 1 +fi + +# Make the curl request and store the result in a variable +response=$(curl -s -X POST \ + -H "Content-Type: application/json" \ + --data '{"jsonrpc":"2.0","method":"eth_chainId","params":[],"id":1}' \ + $url) + +# Extract the 'result' field using jq and store it in a variable +chain_id_hex=$(echo $response | jq -r '.result') + +# Convert the hex chain ID to decimal +chain_id_dec=$(printf "%d\n" $chain_id_hex) + +if $contract == "MCR" then + path="settlement" +else if $contract == "MovementStaking" then + path="staking" +else if $contract == ["MOVEToken" | "stlMoveToken"] then + path="token" +else + echo "Error: Invalid contract name." + exit 1 +fi + +$env="../src/$path" + +old_version=$(find $env -type f -name "./${contract}V*.sol" | grep -oP 'V\d+' | sed 's/V//' | sort -n | tail -1) +new_version=$((old_version + 1)) + +current_file="${contract}.sol" +new_file="${contract}V${new_version}.sol" +cp "$env/$current_file" "env/$new_file" + +# Run the script to generate transaction data for the deployment +echo "Generating transaction data to deploy contract $contract" +forge script "../script/${contract}Deployer.s.sol" -vvvv --fork-url ${url} --broadcast --verify --etherscan-api-key ${api_key} -o ./artifacts/${contract}-v${new_version}-eth-${chain_id_dec} + +# Run the deployer script +echo "Running upgrader/safeDeploy.ts" +npx tsx ./safeDeploy.ts -u "$url" diff --git a/protocol-units/post-confirmations/contracts/upgrader/safeDeploy.ts b/protocol-units/post-confirmations/contracts/upgrader/safeDeploy.ts new file mode 100644 index 00000000..ccb83867 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/upgrader/safeDeploy.ts @@ -0,0 +1,92 @@ +import Safe from "@safe-global/protocol-kit"; +//@ts-ignore +import SafeApiKit from '@safe-global/api-kit'; +import { + OperationType, + SafeTransactionDataPartial, +} from "@safe-global/safe-core-sdk-types"; +import * as fs from "fs"; +import { Command } from "commander"; +// import dotenv and load from the .env file in the parent directory +import dotenv from "dotenv"; +dotenv.config({ path: "../.env" }); + +interface Config { + CHAIN_ID: bigint; + RPC_URL: string; + SIGNER_ADDRESS_PRIVATE_KEY: string; + SAFE_ADDRESS: string; +} + +async function main() { + const private_key = process.env.PRIVATE_KEY; + if (!private_key) { + throw new Error("PRIVATE_KEY is required"); + } + + const program = new Command(); + + program.option("-u, --url ", "rpc url"); + program.parse(process.argv); + + const rawData = fs.readFileSync( + `../script/helpers/upgrade/deploymove.json`, + "utf-8" + ); + const jsonData = JSON.parse(rawData); + + const config: Config = { + CHAIN_ID: jsonData.chainId as bigint, + RPC_URL: program.opts().url || "https://sepolia.gateway.tenderly.co", + SIGNER_ADDRESS_PRIVATE_KEY: private_key, + SAFE_ADDRESS: jsonData.safeAddress, + }; + + // Create Safe API Kit instance + const apiKit = new SafeApiKit({ + chainId: config.CHAIN_ID, + }); + + + // Create Safe instance + const protocolKit = await Safe.init({ + provider: config.RPC_URL, + signer: config.SIGNER_ADDRESS_PRIVATE_KEY, + safeAddress: config.SAFE_ADDRESS, + }); + + + // Create transaction + const safeTransactionData: SafeTransactionDataPartial = { + to: jsonData.to, + value: jsonData.value || "0", + data: jsonData.data, + operation: jsonData.operation == "OperationType.Call" ? OperationType.Call : OperationType.DelegateCall, + }; + const safeTransaction = await protocolKit.createTransaction({ + transactions: [safeTransactionData], + }); + + const signerAddress = + (await protocolKit.getSafeProvider().getSignerAddress()) || "0x"; + const safeTxHash = await protocolKit.getTransactionHash(safeTransaction); + const signature = await protocolKit.signHash(safeTxHash); + + // Propose transaction to the service + await apiKit.proposeTransaction({ + safeAddress: config.SAFE_ADDRESS, + safeTransactionData: safeTransaction.data, + safeTxHash, + senderAddress: signerAddress, + senderSignature: signature.data, + }); + + console.log("Proposed a transaction with Safe:", config.SAFE_ADDRESS); + console.log("- safeTxHash:", safeTxHash); + console.log("- Sender:", signerAddress); + console.log("- Sender signature:", signature.data); + + // Should the upgrade/contract.json file be deleted? +} + +main(); diff --git a/protocol-units/post-confirmations/contracts/yarn.lock b/protocol-units/post-confirmations/contracts/yarn.lock new file mode 100644 index 00000000..aa543cb8 --- /dev/null +++ b/protocol-units/post-confirmations/contracts/yarn.lock @@ -0,0 +1,3988 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@ethereumjs/rlp@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@ethereumjs/rlp/-/rlp-4.0.1.tgz#626fabfd9081baab3d0a3074b0c7ecaf674aaa41" + integrity sha512-tqsQiBQDQdmPWE1xkkBq4rlSW5QZpLOUJ5RJh2/9fug+q9tnUhuZoVLk7s0scUIKTOzEtR72DFBXI4WiZcMpvw== + +"@ethereumjs/util@^8.1.0": + version "8.1.0" + resolved "https://registry.yarnpkg.com/@ethereumjs/util/-/util-8.1.0.tgz#299df97fb6b034e0577ce9f94c7d9d1004409ed4" + integrity sha512-zQ0IqbdX8FZ9aw11vP+dZkKDkS+kgIvQPHnSAXzP9pLu+Rfu3D3XEeLbicvoXJTYnhZiPmsZUxgdzXwNKxRPbA== + dependencies: + "@ethereumjs/rlp" "^4.0.1" + ethereum-cryptography "^2.0.0" + micro-ftch "^0.3.1" + +"@ethersproject/abi@5.7.0": + version "5.7.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.7.0.tgz#b3f3e045bbbeed1af3947335c247ad625a44e449" + integrity sha512-351ktp42TiRcYB3H1OP8yajPeAQstMW/yCFokj/AthP9bLHzQFPlOrxOcwYEDkUAICmOHljvN4K39OMTMUa9RA== + dependencies: + "@ethersproject/address" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/keccak256" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + +"@ethersproject/abi@5.8.0", "@ethersproject/abi@^5.0.9", "@ethersproject/abi@^5.1.2", "@ethersproject/abi@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abi/-/abi-5.8.0.tgz#e79bb51940ac35fe6f3262d7fe2cdb25ad5f07d9" + integrity sha512-b9YS/43ObplgyV6SlyQsG53/vkSal0MNA1fskSC4mbnCMi8R+NkcH8K9FPYNESf6jUefBUniE4SOKms0E/KK1Q== + dependencies: + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/abstract-provider@5.8.0", "@ethersproject/abstract-provider@^5.7.0", "@ethersproject/abstract-provider@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-provider/-/abstract-provider-5.8.0.tgz#7581f9be601afa1d02b95d26b9d9840926a35b0c" + integrity sha512-wC9SFcmh4UK0oKuLJQItoQdzS/qZ51EJegK6EmAWlh+OptpQ/npECOR3QqECd8iGHC0RJb4WKbVdSfif4ammrg== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/networks" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/web" "^5.8.0" + +"@ethersproject/abstract-signer@5.8.0", "@ethersproject/abstract-signer@^5.7.0", "@ethersproject/abstract-signer@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/abstract-signer/-/abstract-signer-5.8.0.tgz#8d7417e95e4094c1797a9762e6789c7356db0754" + integrity sha512-N0XhZTswXcmIZQdYtUnd79VJzvEwXQw6PK0dTl9VoYrEBxxCPXqS0Eod7q5TNKRxe1/5WUMuR0u0nqTF/avdCA== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + +"@ethersproject/address@5.6.1": + version "5.6.1" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.6.1.tgz#ab57818d9aefee919c5721d28cd31fd95eff413d" + integrity sha512-uOgF0kS5MJv9ZvCz7x6T2EXJSzotiybApn4XlOgoTX0xdtyVIJ7pF+6cGPxiEq/dpBiTfMiw7Yc81JcwhSYA0Q== + dependencies: + "@ethersproject/bignumber" "^5.6.2" + "@ethersproject/bytes" "^5.6.1" + "@ethersproject/keccak256" "^5.6.1" + "@ethersproject/logger" "^5.6.0" + "@ethersproject/rlp" "^5.6.1" + +"@ethersproject/address@5.8.0", "@ethersproject/address@^5.0.2", "@ethersproject/address@^5.7.0", "@ethersproject/address@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/address/-/address-5.8.0.tgz#3007a2c352eee566ad745dca1dbbebdb50a6a983" + integrity sha512-GhH/abcC46LJwshoN+uBNoKVFPxUuZm6dA257z0vZkKmU1+t8xTn8oK7B9qrj8W2rFRMch4gbJl6PmVxjxBEBA== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + +"@ethersproject/base64@5.8.0", "@ethersproject/base64@^5.7.0", "@ethersproject/base64@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/base64/-/base64-5.8.0.tgz#61c669c648f6e6aad002c228465d52ac93ee83eb" + integrity sha512-lN0oIwfkYj9LbPx4xEkie6rAMJtySbpOAFXSDVQaBnAzYfB4X2Qr+FXJGxMoc3Bxp2Sm8OwvzMrywxyw0gLjIQ== + dependencies: + "@ethersproject/bytes" "^5.8.0" + +"@ethersproject/basex@5.8.0", "@ethersproject/basex@^5.7.0", "@ethersproject/basex@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/basex/-/basex-5.8.0.tgz#1d279a90c4be84d1c1139114a1f844869e57d03a" + integrity sha512-PIgTszMlDRmNwW9nhS6iqtVfdTAKosA7llYXNmGPw4YAI1PUyMv28988wAb41/gHF/WqGdoLv0erHaRcHRKW2Q== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + +"@ethersproject/bignumber@5.8.0", "@ethersproject/bignumber@^5.6.2", "@ethersproject/bignumber@^5.7.0", "@ethersproject/bignumber@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bignumber/-/bignumber-5.8.0.tgz#c381d178f9eeb370923d389284efa19f69efa5d7" + integrity sha512-ZyaT24bHaSeJon2tGPKIiHszWjD/54Sz8t57Toch475lCLljC6MgPmxk7Gtzz+ddNN5LuHea9qhAe0x3D+uYPA== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + bn.js "^5.2.1" + +"@ethersproject/bytes@5.8.0", "@ethersproject/bytes@^5.6.1", "@ethersproject/bytes@^5.7.0", "@ethersproject/bytes@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/bytes/-/bytes-5.8.0.tgz#9074820e1cac7507a34372cadeb035461463be34" + integrity sha512-vTkeohgJVCPVHu5c25XWaWQOZ4v+DkGoC42/TS2ond+PARCxTJvgTFUNDZovyQ/uAQ4EcpqqowKydcdmRKjg7A== + dependencies: + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/constants@5.8.0", "@ethersproject/constants@^5.7.0", "@ethersproject/constants@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/constants/-/constants-5.8.0.tgz#12f31c2f4317b113a4c19de94e50933648c90704" + integrity sha512-wigX4lrf5Vu+axVTIvNsuL6YrV4O5AXl5ubcURKMEME5TnWBouUh0CDTWxZ2GpnRn1kcCgE7l8O5+VbV9QTTcg== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + +"@ethersproject/contracts@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/contracts/-/contracts-5.8.0.tgz#243a38a2e4aa3e757215ea64e276f8a8c9d8ed73" + integrity sha512-0eFjGz9GtuAi6MZwhb4uvUM216F38xiuR0yYCjKJpNfSEy4HUM8hvqqBj9Jmm0IUz8l0xKEhWwLIhPgxNY0yvQ== + dependencies: + "@ethersproject/abi" "^5.8.0" + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + +"@ethersproject/hash@5.8.0", "@ethersproject/hash@^5.7.0", "@ethersproject/hash@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hash/-/hash-5.8.0.tgz#b8893d4629b7f8462a90102572f8cd65a0192b4c" + integrity sha512-ac/lBcTbEWW/VGJij0CNSw/wPcw9bSRgCB0AIBz8CvED/jfvDoV9hsIIiWfvWmFEi8RcXtlNwp2jv6ozWOsooA== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/base64" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/hdnode@5.8.0", "@ethersproject/hdnode@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/hdnode/-/hdnode-5.8.0.tgz#a51ae2a50bcd48ef6fd108c64cbae5e6ff34a761" + integrity sha512-4bK1VF6E83/3/Im0ERnnUeWOY3P1BZml4ZD3wcH8Ys0/d1h1xaFt6Zc+Dh9zXf9TapGro0T4wvO71UTCp3/uoA== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/basex" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/pbkdf2" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/wordlists" "^5.8.0" + +"@ethersproject/json-wallets@5.8.0", "@ethersproject/json-wallets@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/json-wallets/-/json-wallets-5.8.0.tgz#d18de0a4cf0f185f232eb3c17d5e0744d97eb8c9" + integrity sha512-HxblNck8FVUtNxS3VTEYJAcwiKYsBIF77W15HufqlBF9gGfhmYOJtYZp8fSDZtn9y5EaXTE87zDwzxRoTFk11w== + dependencies: + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hdnode" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/pbkdf2" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + aes-js "3.0.0" + scrypt-js "3.0.1" + +"@ethersproject/keccak256@5.8.0", "@ethersproject/keccak256@^5.6.1", "@ethersproject/keccak256@^5.7.0", "@ethersproject/keccak256@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/keccak256/-/keccak256-5.8.0.tgz#d2123a379567faf2d75d2aaea074ffd4df349e6a" + integrity sha512-A1pkKLZSz8pDaQ1ftutZoaN46I6+jvuqugx5KYNeQOPqq+JZ0Txm7dlWesCHB5cndJSu5vP2VKptKf7cksERng== + dependencies: + "@ethersproject/bytes" "^5.8.0" + js-sha3 "0.8.0" + +"@ethersproject/logger@5.8.0", "@ethersproject/logger@^5.6.0", "@ethersproject/logger@^5.7.0", "@ethersproject/logger@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/logger/-/logger-5.8.0.tgz#f0232968a4f87d29623a0481690a2732662713d6" + integrity sha512-Qe6knGmY+zPPWTC+wQrpitodgBfH7XoceCGL5bJVejmH+yCS3R8jJm8iiWuvWbG76RUmyEG53oqv6GMVWqunjA== + +"@ethersproject/networks@5.8.0", "@ethersproject/networks@^5.7.0", "@ethersproject/networks@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/networks/-/networks-5.8.0.tgz#8b4517a3139380cba9fb00b63ffad0a979671fde" + integrity sha512-egPJh3aPVAzbHwq8DD7Po53J4OUSsA1MjQp8Vf/OZPav5rlmWUaFLiq8cvQiGK0Z5K6LYzm29+VA/p4RL1FzNg== + dependencies: + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/pbkdf2@5.8.0", "@ethersproject/pbkdf2@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/pbkdf2/-/pbkdf2-5.8.0.tgz#cd2621130e5dd51f6a0172e63a6e4a0c0a0ec37e" + integrity sha512-wuHiv97BrzCmfEaPbUFpMjlVg/IDkZThp9Ri88BpjRleg4iePJaj2SW8AIyE8cXn5V1tuAaMj6lzvsGJkGWskg== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + +"@ethersproject/properties@5.8.0", "@ethersproject/properties@^5.7.0", "@ethersproject/properties@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/properties/-/properties-5.8.0.tgz#405a8affb6311a49a91dabd96aeeae24f477020e" + integrity sha512-PYuiEoQ+FMaZZNGrStmN7+lWjlsoufGIHdww7454FIaGdbe/p5rnaCXTr5MtBYl3NkeoVhHZuyzChPeGeKIpQw== + dependencies: + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/providers@5.7.2": + version "5.7.2" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.7.2.tgz#f8b1a4f275d7ce58cf0a2eec222269a08beb18cb" + integrity sha512-g34EWZ1WWAVgr4aptGlVBF8mhl3VWjv+8hoAnzStu8Ah22VHBsuGzP17eb6xDVRzw895G4W7vvx60lFFur/1Rg== + dependencies: + "@ethersproject/abstract-provider" "^5.7.0" + "@ethersproject/abstract-signer" "^5.7.0" + "@ethersproject/address" "^5.7.0" + "@ethersproject/base64" "^5.7.0" + "@ethersproject/basex" "^5.7.0" + "@ethersproject/bignumber" "^5.7.0" + "@ethersproject/bytes" "^5.7.0" + "@ethersproject/constants" "^5.7.0" + "@ethersproject/hash" "^5.7.0" + "@ethersproject/logger" "^5.7.0" + "@ethersproject/networks" "^5.7.0" + "@ethersproject/properties" "^5.7.0" + "@ethersproject/random" "^5.7.0" + "@ethersproject/rlp" "^5.7.0" + "@ethersproject/sha2" "^5.7.0" + "@ethersproject/strings" "^5.7.0" + "@ethersproject/transactions" "^5.7.0" + "@ethersproject/web" "^5.7.0" + bech32 "1.1.4" + ws "7.4.6" + +"@ethersproject/providers@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/providers/-/providers-5.8.0.tgz#6c2ae354f7f96ee150439f7de06236928bc04cb4" + integrity sha512-3Il3oTzEx3o6kzcg9ZzbE+oCZYyY+3Zh83sKkn4s1DZfTUjIegHnN2Cm0kbn9YFy45FDVcuCLLONhU7ny0SsCw== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/base64" "^5.8.0" + "@ethersproject/basex" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/networks" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/web" "^5.8.0" + bech32 "1.1.4" + ws "8.18.0" + +"@ethersproject/random@5.8.0", "@ethersproject/random@^5.7.0", "@ethersproject/random@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/random/-/random-5.8.0.tgz#1bced04d49449f37c6437c701735a1a022f0057a" + integrity sha512-E4I5TDl7SVqyg4/kkA/qTfuLWAQGXmSOgYyO01So8hLfwgKvYK5snIlzxJMk72IFdG/7oh8yuSqY2KX7MMwg+A== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/rlp@5.8.0", "@ethersproject/rlp@^5.6.1", "@ethersproject/rlp@^5.7.0", "@ethersproject/rlp@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/rlp/-/rlp-5.8.0.tgz#5a0d49f61bc53e051532a5179472779141451de5" + integrity sha512-LqZgAznqDbiEunaUvykH2JAoXTT9NV0Atqk8rQN9nx9SEgThA/WMx5DnW8a9FOufo//6FZOCHZ+XiClzgbqV9Q== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/sha2@5.8.0", "@ethersproject/sha2@^5.7.0", "@ethersproject/sha2@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/sha2/-/sha2-5.8.0.tgz#8954a613bb78dac9b46829c0a95de561ef74e5e1" + integrity sha512-dDOUrXr9wF/YFltgTBYS0tKslPEKr6AekjqDW2dbn1L1xmjGR+9GiKu4ajxovnrDbwxAKdHjW8jNcwfz8PAz4A== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + hash.js "1.1.7" + +"@ethersproject/signing-key@5.8.0", "@ethersproject/signing-key@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/signing-key/-/signing-key-5.8.0.tgz#9797e02c717b68239c6349394ea85febf8893119" + integrity sha512-LrPW2ZxoigFi6U6aVkFN/fa9Yx/+4AtIUe4/HACTvKJdhm0eeb107EVCIQcrLZkxaSIgc/eCrX8Q1GtbH+9n3w== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + bn.js "^5.2.1" + elliptic "6.6.1" + hash.js "1.1.7" + +"@ethersproject/solidity@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/solidity/-/solidity-5.8.0.tgz#429bb9fcf5521307a9448d7358c26b93695379b9" + integrity sha512-4CxFeCgmIWamOHwYN9d+QWGxye9qQLilpgTU0XhYs1OahkclF+ewO+3V1U0mvpiuQxm5EHHmv8f7ClVII8EHsA== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/sha2" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/strings@5.8.0", "@ethersproject/strings@^5.7.0", "@ethersproject/strings@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/strings/-/strings-5.8.0.tgz#ad79fafbf0bd272d9765603215ac74fd7953908f" + integrity sha512-qWEAk0MAvl0LszjdfnZ2uC8xbR2wdv4cDabyHiBh3Cldq/T8dPH3V4BbBsAYJUeonwD+8afVXld274Ls+Y1xXg== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/transactions@5.8.0", "@ethersproject/transactions@^5.7.0", "@ethersproject/transactions@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/transactions/-/transactions-5.8.0.tgz#1e518822403abc99def5a043d1c6f6fe0007e46b" + integrity sha512-UglxSDjByHG0TuU17bDfCemZ3AnKO2vYrL5/2n2oXvKzvb7Cz+W9gOWXKARjp2URVwcWlQlPOEQyAviKwT4AHg== + dependencies: + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/rlp" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + +"@ethersproject/units@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/units/-/units-5.8.0.tgz#c12f34ba7c3a2de0e9fa0ed0ee32f3e46c5c2c6a" + integrity sha512-lxq0CAnc5kMGIiWW4Mr041VT8IhNM+Pn5T3haO74XZWFulk7wH1Gv64HqE96hT4a7iiNMdOCFEBgaxWuk8ETKQ== + dependencies: + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/constants" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + +"@ethersproject/wallet@5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wallet/-/wallet-5.8.0.tgz#49c300d10872e6986d953e8310dc33d440da8127" + integrity sha512-G+jnzmgg6UxurVKRKvw27h0kvG75YKXZKdlLYmAHeF32TGUzHkOFd7Zn6QHOTYRFWnfjtSSFjBowKo7vfrXzPA== + dependencies: + "@ethersproject/abstract-provider" "^5.8.0" + "@ethersproject/abstract-signer" "^5.8.0" + "@ethersproject/address" "^5.8.0" + "@ethersproject/bignumber" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/hdnode" "^5.8.0" + "@ethersproject/json-wallets" "^5.8.0" + "@ethersproject/keccak256" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/random" "^5.8.0" + "@ethersproject/signing-key" "^5.8.0" + "@ethersproject/transactions" "^5.8.0" + "@ethersproject/wordlists" "^5.8.0" + +"@ethersproject/web@5.8.0", "@ethersproject/web@^5.7.0", "@ethersproject/web@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/web/-/web-5.8.0.tgz#3e54badc0013b7a801463a7008a87988efce8a37" + integrity sha512-j7+Ksi/9KfGviws6Qtf9Q7KCqRhpwrYKQPs+JBA/rKVFF/yaWLHJEH3zfVP2plVu+eys0d2DlFmhoQJayFewcw== + dependencies: + "@ethersproject/base64" "^5.8.0" + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@ethersproject/wordlists@5.8.0", "@ethersproject/wordlists@^5.8.0": + version "5.8.0" + resolved "https://registry.yarnpkg.com/@ethersproject/wordlists/-/wordlists-5.8.0.tgz#7a5654ee8d1bb1f4dbe43f91d217356d650ad821" + integrity sha512-2df9bbXicZws2Sb5S6ET493uJ0Z84Fjr3pC4tu/qlnZERibZCeUVuqdtt+7Tv9xxhUxHoIekIA7avrKUWHrezg== + dependencies: + "@ethersproject/bytes" "^5.8.0" + "@ethersproject/hash" "^5.8.0" + "@ethersproject/logger" "^5.8.0" + "@ethersproject/properties" "^5.8.0" + "@ethersproject/strings" "^5.8.0" + +"@fastify/busboy@^2.0.0": + version "2.1.1" + resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" + integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== + +"@jridgewell/resolve-uri@^3.0.3": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/sourcemap-codec@^1.4.10": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@metamask/eth-sig-util@^4.0.0": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@metamask/eth-sig-util/-/eth-sig-util-4.0.1.tgz#3ad61f6ea9ad73ba5b19db780d40d9aae5157088" + integrity sha512-tghyZKLHZjcdlDqCA3gNZmLeR0XvOE9U1qoQO9ohyAZT6Pya+H9vkBPcsyXytmYLNgVoin7CKCmweo/R43V+tQ== + dependencies: + ethereumjs-abi "^0.6.8" + ethereumjs-util "^6.2.1" + ethjs-util "^0.1.6" + tweetnacl "^1.0.3" + tweetnacl-util "^0.15.1" + +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/curves@1.4.2", "@noble/curves@~1.4.0": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.4.2.tgz#40309198c76ed71bc6dbf7ba24e81ceb4d0d1fe9" + integrity sha512-TavHr8qycMChk8UwMld0ZDRvatedkzWfH8IiaeGCfymOP5i0hSCozz9vHOL0nkwk7HRMlFnAiKpS2jrUmSybcw== + dependencies: + "@noble/hashes" "1.4.0" + +"@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.2.0.tgz#a3150eeb09cc7ab207ebf6d7b9ad311a9bdbed12" + integrity sha512-FZfhjEDbT5GRswV3C6uvLPHMiVD6lQBmpoX5+eSiPaMTXte/IKqI5dykDxzZB/WBeK/CDuQRBWarPdi3FNY2zQ== + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + +"@noble/hashes@1.4.0", "@noble/hashes@~1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.4.0.tgz#45814aa329f30e4fe0ba49426f49dfccdd066426" + integrity sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg== + +"@noble/hashes@^1.4.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.1.tgz#5738f6d765710921e7a751e00c20ae091ed8db0f" + integrity sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ== + +"@noble/secp256k1@1.7.1", "@noble/secp256k1@~1.7.0": + version "1.7.1" + resolved "https://registry.yarnpkg.com/@noble/secp256k1/-/secp256k1-1.7.1.tgz#b251c70f824ce3ca7f8dc3df08d58f005cc0507c" + integrity sha512-hOUk6AyBFmqVrv7k5WAw/LpszxVbj9gGN4JRkIX52fdFAj1UA61KXmZDvqVEm+pOyec3+fIeZB02LYa/pWOArw== + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nomicfoundation/edr-darwin-arm64@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-arm64/-/edr-darwin-arm64-0.8.0.tgz#70a23214a2dd2941fcb55e47bb4653514d2dae06" + integrity sha512-sKTmOu/P5YYhxT0ThN2Pe3hmCE/5Ag6K/eYoiavjLWbR7HEb5ZwPu2rC3DpuUk1H+UKJqt7o4/xIgJxqw9wu6A== + +"@nomicfoundation/edr-darwin-x64@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-darwin-x64/-/edr-darwin-x64-0.8.0.tgz#89c11ae510b3ac5c0e5268cd3a6b04194552112f" + integrity sha512-8ymEtWw1xf1Id1cc42XIeE+9wyo3Dpn9OD/X8GiaMz9R70Ebmj2g+FrbETu8o6UM+aL28sBZQCiCzjlft2yWAg== + +"@nomicfoundation/edr-linux-arm64-gnu@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-gnu/-/edr-linux-arm64-gnu-0.8.0.tgz#02c1b4f426576af4e464320e340855139a00fe9b" + integrity sha512-h/wWzS2EyQuycz+x/SjMRbyA+QMCCVmotRsgM1WycPARvVZWIVfwRRsKoXKdCftsb3S8NTprqBdJlOmsFyETFA== + +"@nomicfoundation/edr-linux-arm64-musl@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-arm64-musl/-/edr-linux-arm64-musl-0.8.0.tgz#9b432dca973068f16a33abb70260e904494638dd" + integrity sha512-gnWxDgdkka0O9GpPX/gZT3REeKYV28Guyg13+Vj/bbLpmK1HmGh6Kx+fMhWv+Ht/wEmGDBGMCW1wdyT/CftJaQ== + +"@nomicfoundation/edr-linux-x64-gnu@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-gnu/-/edr-linux-x64-gnu-0.8.0.tgz#72954e5fd875df17c43d4ef3fcc381e3312e1347" + integrity sha512-DTMiAkgAx+nyxcxKyxFZk1HPakXXUCgrmei7r5G7kngiggiGp/AUuBBWFHi8xvl2y04GYhro5Wp+KprnLVoAPA== + +"@nomicfoundation/edr-linux-x64-musl@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-linux-x64-musl/-/edr-linux-x64-musl-0.8.0.tgz#0d59390c512106010d6f4d94b7fffd99fb7fd8ae" + integrity sha512-iTITWe0Zj8cNqS0xTblmxPbHVWwEtMiDC+Yxwr64d7QBn/1W0ilFQ16J8gB6RVVFU3GpfNyoeg3tUoMpSnrm6Q== + +"@nomicfoundation/edr-win32-x64-msvc@0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr-win32-x64-msvc/-/edr-win32-x64-msvc-0.8.0.tgz#d14225c513372fda54684de1229cc793ffe48c12" + integrity sha512-mNRDyd/C3j7RMcwapifzv2K57sfA5xOw8g2U84ZDvgSrXVXLC99ZPxn9kmolb+dz8VMm9FONTZz9ESS6v8DTnA== + +"@nomicfoundation/edr@^0.8.0": + version "0.8.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/edr/-/edr-0.8.0.tgz#63441bb24c1804b6d27b075d0d29f3a02d94fc4f" + integrity sha512-dwWRrghSVBQDpt0wP+6RXD8BMz2i/9TI34TcmZqeEAZuCLei3U9KZRgGTKVAM1rMRvrpf5ROfPqrWNetKVUTag== + dependencies: + "@nomicfoundation/edr-darwin-arm64" "0.8.0" + "@nomicfoundation/edr-darwin-x64" "0.8.0" + "@nomicfoundation/edr-linux-arm64-gnu" "0.8.0" + "@nomicfoundation/edr-linux-arm64-musl" "0.8.0" + "@nomicfoundation/edr-linux-x64-gnu" "0.8.0" + "@nomicfoundation/edr-linux-x64-musl" "0.8.0" + "@nomicfoundation/edr-win32-x64-msvc" "0.8.0" + +"@nomicfoundation/ethereumjs-common@4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-common/-/ethereumjs-common-4.0.4.tgz#9901f513af2d4802da87c66d6f255b510bef5acb" + integrity sha512-9Rgb658lcWsjiicr5GzNCjI1llow/7r0k50dLL95OJ+6iZJcVbi15r3Y0xh2cIO+zgX0WIHcbzIu6FeQf9KPrg== + dependencies: + "@nomicfoundation/ethereumjs-util" "9.0.4" + +"@nomicfoundation/ethereumjs-rlp@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-rlp/-/ethereumjs-rlp-5.0.4.tgz#66c95256fc3c909f6fb18f6a586475fc9762fa30" + integrity sha512-8H1S3s8F6QueOc/X92SdrA4RDenpiAEqMg5vJH99kcQaCy/a3Q6fgseo75mgWlbanGJXSlAPtnCeG9jvfTYXlw== + +"@nomicfoundation/ethereumjs-tx@5.0.4": + version "5.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-tx/-/ethereumjs-tx-5.0.4.tgz#b0ceb58c98cc34367d40a30d255d6315b2f456da" + integrity sha512-Xjv8wAKJGMrP1f0n2PeyfFCCojHd7iS3s/Ab7qzF1S64kxZ8Z22LCMynArYsVqiFx6rzYy548HNVEyI+AYN/kw== + dependencies: + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/ethereumjs-util@9.0.4": + version "9.0.4" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ethereumjs-util/-/ethereumjs-util-9.0.4.tgz#84c5274e82018b154244c877b76bc049a4ed7b38" + integrity sha512-sLOzjnSrlx9Bb9EFNtHzK/FJFsfg2re6bsGqinFinH1gCqVfz9YYlXiMWwDM4C/L4ywuHFCYwfKTVr/QHQcU0Q== + dependencies: + "@nomicfoundation/ethereumjs-rlp" "5.0.4" + ethereum-cryptography "0.1.3" + +"@nomicfoundation/hardhat-chai-matchers@^2.0.0": + version "2.0.8" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-chai-matchers/-/hardhat-chai-matchers-2.0.8.tgz#9c7cfc4ad0f0a5e9cf16aba8ab668c02f6e273aa" + integrity sha512-Z5PiCXH4xhNLASROlSUOADfhfpfhYO6D7Hn9xp8PddmHey0jq704cr6kfU8TRrQ4PUZbpfsZadPj+pCfZdjPIg== + dependencies: + "@types/chai-as-promised" "^7.1.3" + chai-as-promised "^7.1.1" + deep-eql "^4.0.1" + ordinal "^1.0.3" + +"@nomicfoundation/hardhat-ethers@^3.0.0": + version "3.0.8" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ethers/-/hardhat-ethers-3.0.8.tgz#af078f566373abeb77e11cbe69fe3dd47f8bfc27" + integrity sha512-zhOZ4hdRORls31DTOqg+GmEZM0ujly8GGIuRY7t7szEk2zW/arY1qDug/py8AEktT00v5K+b6RvbVog+va51IA== + dependencies: + debug "^4.1.1" + lodash.isequal "^4.5.0" + +"@nomicfoundation/hardhat-ignition-ethers@^0.15.0": + version "0.15.10" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ignition-ethers/-/hardhat-ignition-ethers-0.15.10.tgz#a053c3ef90bc2dd8739de7b12a1badf5915e5151" + integrity sha512-P90glRiBbR4mnMKP/LePovfUJjYT2YWJjx7118i7yxssUwcaW9wFohb4bFh+236N1tqM4q7aGx9cBvHNgve3zA== + +"@nomicfoundation/hardhat-ignition@^0.15.10": + version "0.15.10" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-ignition/-/hardhat-ignition-0.15.10.tgz#605912ff4a50019685ffba105487c585e28fdde9" + integrity sha512-UScXyLLG5rEm+ANchQYCDOsskdXl6ux3oCPgC24PKE/QMJEib5crGZIo8spAyzdK6vOnRW6i4FG+1qvoO0AGWA== + dependencies: + "@nomicfoundation/ignition-core" "^0.15.10" + "@nomicfoundation/ignition-ui" "^0.15.10" + chalk "^4.0.0" + debug "^4.3.2" + fs-extra "^10.0.0" + json5 "^2.2.3" + prompts "^2.4.2" + +"@nomicfoundation/hardhat-network-helpers@^1.0.0": + version "1.0.12" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-network-helpers/-/hardhat-network-helpers-1.0.12.tgz#2c0abec0c50b75f9d0d71776e49e3b5ef746d289" + integrity sha512-xTNQNI/9xkHvjmCJnJOTyqDSl8uq1rKb2WOVmixQxFtRd7Oa3ecO8zM0cyC2YmOK+jHB9WPZ+F/ijkHg1CoORA== + dependencies: + ethereumjs-util "^7.1.4" + +"@nomicfoundation/hardhat-toolbox@^5.0.0": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-toolbox/-/hardhat-toolbox-5.0.0.tgz#165b47f8a3d2bf668cc5d453ce7f496a1156948d" + integrity sha512-FnUtUC5PsakCbwiVNsqlXVIWG5JIb5CEZoSXbJUsEBun22Bivx2jhF1/q9iQbzuaGpJKFQyOhemPB2+XlEE6pQ== + +"@nomicfoundation/hardhat-verify@^2.0.0": + version "2.0.13" + resolved "https://registry.yarnpkg.com/@nomicfoundation/hardhat-verify/-/hardhat-verify-2.0.13.tgz#41691adc32e01dc5cf6b725615f64958fba2100b" + integrity sha512-i57GX1sC0kYGyRVnbQrjjyBTpWTKgrvKC+jH8CMKV6gHp959Upb8lKaZ58WRHIU0espkulTxLnacYeUDirwJ2g== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@ethersproject/address" "^5.0.2" + cbor "^8.1.0" + debug "^4.1.1" + lodash.clonedeep "^4.5.0" + picocolors "^1.1.0" + semver "^6.3.0" + table "^6.8.0" + undici "^5.14.0" + +"@nomicfoundation/ignition-core@^0.15.10": + version "0.15.10" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ignition-core/-/ignition-core-0.15.10.tgz#284a986f72a43e93f03773dcbeee3a6dc3e13988" + integrity sha512-AWvCviNlBkPT8EKcg34N+yUdQTYFiC/HdpfFZdw8oMFuAs9SMZE0zQA9gJQSCay41GbuyXt2Kietp5/1/nlBIA== + dependencies: + "@ethersproject/address" "5.6.1" + "@nomicfoundation/solidity-analyzer" "^0.1.1" + cbor "^9.0.0" + debug "^4.3.2" + ethers "^6.7.0" + fs-extra "^10.0.0" + immer "10.0.2" + lodash "4.17.21" + ndjson "2.0.0" + +"@nomicfoundation/ignition-ui@^0.15.10": + version "0.15.10" + resolved "https://registry.yarnpkg.com/@nomicfoundation/ignition-ui/-/ignition-ui-0.15.10.tgz#83b1b29ac95f58c40a8ca6c4c3ae78b9fcd31456" + integrity sha512-82XQPF+1fvxTimDUPgDVwpTjHjfjFgFs84rERbBiMLQbz6sPtgTlV8HHrlbMx8tT/JKCI/SCU4gxV8xA4CPfcg== + +"@nomicfoundation/solidity-analyzer-darwin-arm64@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-arm64/-/solidity-analyzer-darwin-arm64-0.1.2.tgz#3a9c3b20d51360b20affb8f753e756d553d49557" + integrity sha512-JaqcWPDZENCvm++lFFGjrDd8mxtf+CtLd2MiXvMNTBD33dContTZ9TWETwNFwg7JTJT5Q9HEecH7FA+HTSsIUw== + +"@nomicfoundation/solidity-analyzer-darwin-x64@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-darwin-x64/-/solidity-analyzer-darwin-x64-0.1.2.tgz#74dcfabeb4ca373d95bd0d13692f44fcef133c28" + integrity sha512-fZNmVztrSXC03e9RONBT+CiksSeYcxI1wlzqyr0L7hsQlK1fzV+f04g2JtQ1c/Fe74ZwdV6aQBdd6Uwl1052sw== + +"@nomicfoundation/solidity-analyzer-linux-arm64-gnu@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-gnu/-/solidity-analyzer-linux-arm64-gnu-0.1.2.tgz#4af5849a89e5a8f511acc04f28eb5d4460ba2b6a" + integrity sha512-3d54oc+9ZVBuB6nbp8wHylk4xh0N0Gc+bk+/uJae+rUgbOBwQSfuGIbAZt1wBXs5REkSmynEGcqx6DutoK0tPA== + +"@nomicfoundation/solidity-analyzer-linux-arm64-musl@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-arm64-musl/-/solidity-analyzer-linux-arm64-musl-0.1.2.tgz#54036808a9a327b2ff84446c130a6687ee702a8e" + integrity sha512-iDJfR2qf55vgsg7BtJa7iPiFAsYf2d0Tv/0B+vhtnI16+wfQeTbP7teookbGvAo0eJo7aLLm0xfS/GTkvHIucA== + +"@nomicfoundation/solidity-analyzer-linux-x64-gnu@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-gnu/-/solidity-analyzer-linux-x64-gnu-0.1.2.tgz#466cda0d6e43691986c944b909fc6dbb8cfc594e" + integrity sha512-9dlHMAt5/2cpWyuJ9fQNOUXFB/vgSFORg1jpjX1Mh9hJ/MfZXlDdHQ+DpFCs32Zk5pxRBb07yGvSHk9/fezL+g== + +"@nomicfoundation/solidity-analyzer-linux-x64-musl@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-linux-x64-musl/-/solidity-analyzer-linux-x64-musl-0.1.2.tgz#2b35826987a6e94444140ac92310baa088ee7f94" + integrity sha512-GzzVeeJob3lfrSlDKQw2bRJ8rBf6mEYaWY+gW0JnTDHINA0s2gPR4km5RLIj1xeZZOYz4zRw+AEeYgLRqB2NXg== + +"@nomicfoundation/solidity-analyzer-win32-x64-msvc@0.1.2": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer-win32-x64-msvc/-/solidity-analyzer-win32-x64-msvc-0.1.2.tgz#e6363d13b8709ca66f330562337dbc01ce8bbbd9" + integrity sha512-Fdjli4DCcFHb4Zgsz0uEJXZ2K7VEO+w5KVv7HmT7WO10iODdU9csC2az4jrhEsRtiR9Gfd74FlG0NYlw1BMdyA== + +"@nomicfoundation/solidity-analyzer@^0.1.0", "@nomicfoundation/solidity-analyzer@^0.1.1": + version "0.1.2" + resolved "https://registry.yarnpkg.com/@nomicfoundation/solidity-analyzer/-/solidity-analyzer-0.1.2.tgz#8bcea7d300157bf3a770a851d9f5c5e2db34ac55" + integrity sha512-q4n32/FNKIhQ3zQGGw5CvPF6GTvDCpYwIf7bEY/dZTZbgfDsHyjJwURxUJf3VQuuJj+fDIFl4+KkBVbw4Ef6jA== + optionalDependencies: + "@nomicfoundation/solidity-analyzer-darwin-arm64" "0.1.2" + "@nomicfoundation/solidity-analyzer-darwin-x64" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-gnu" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-arm64-musl" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-gnu" "0.1.2" + "@nomicfoundation/solidity-analyzer-linux-x64-musl" "0.1.2" + "@nomicfoundation/solidity-analyzer-win32-x64-msvc" "0.1.2" + +"@nomiclabs/hardhat-ethers@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@nomiclabs/hardhat-ethers/-/hardhat-ethers-2.2.3.tgz#b41053e360c31a32c2640c9a45ee981a7e603fe0" + integrity sha512-YhzPdzb612X591FOe68q+qXVXGG2ANZRvDo0RRUtimev85rCrAlv/TLMEZw5c+kq9AbzocLTVX/h2jVIFPL9Xg== + +"@openzeppelin/contracts-upgradeable@^5.0.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts-upgradeable/-/contracts-upgradeable-5.2.0.tgz#caf9a6eaf4f16d7f90f9b45a6db4e7b125f4b13b" + integrity sha512-mZIu9oa4tQTlGiOJHk6D3LdJlqFqF6oNOSn6S6UVJtzfs9UsY9/dhMEbAVTwElxUtJnjpf6yA062+oBp+eOyPg== + +"@openzeppelin/contracts@^5.0.0": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@openzeppelin/contracts/-/contracts-5.2.0.tgz#bd020694218202b811b0ea3eec07277814c658da" + integrity sha512-bxjNie5z89W1Ea0NZLZluFh8PrFNn9DH8DQlujEok2yjsOlraUPKID5p1Wk3qdNbf6XkQ1Os2RvfiHrrXLHWKA== + +"@scure/base@~1.1.0", "@scure/base@~1.1.6": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" + integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== + +"@scure/bip32@1.1.5": + version "1.1.5" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.1.5.tgz#d2ccae16dcc2e75bc1d75f5ef3c66a338d1ba300" + integrity sha512-XyNh1rB0SkEqd3tXcXMi+Xe1fvg+kUIcoRIEujP1Jgv7DqW2r9lg3Ah0NkFaCs9sTkQAQA8kw7xiRXzENi9Rtw== + dependencies: + "@noble/hashes" "~1.2.0" + "@noble/secp256k1" "~1.7.0" + "@scure/base" "~1.1.0" + +"@scure/bip32@1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.4.0.tgz#4e1f1e196abedcef395b33b9674a042524e20d67" + integrity sha512-sVUpc0Vq3tXCkDGYVWGIZTRfnvu8LoTDaev7vbwh0omSvVORONr960MQWdKqJDCReIEmTj3PAr73O3aoxz7OPg== + dependencies: + "@noble/curves" "~1.4.0" + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + +"@scure/bip39@1.1.1": + version "1.1.1" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.1.1.tgz#b54557b2e86214319405db819c4b6a370cf340c5" + integrity sha512-t+wDck2rVkh65Hmv280fYdVdY25J9YeEUIgn2LG1WM6gxFkGzcksoDiUkWVpVp3Oex9xGC68JU2dSbUfwZ2jPg== + dependencies: + "@noble/hashes" "~1.2.0" + "@scure/base" "~1.1.0" + +"@scure/bip39@1.3.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.3.0.tgz#0f258c16823ddd00739461ac31398b4e7d6a18c3" + integrity sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ== + dependencies: + "@noble/hashes" "~1.4.0" + "@scure/base" "~1.1.6" + +"@sentry/core@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/core/-/core-5.30.0.tgz#6b203664f69e75106ee8b5a2fe1d717379b331f3" + integrity sha512-TmfrII8w1PQZSZgPpUESqjB+jC6MvZJZdLtE/0hZ+SrnKhW3x5WlYLvTXZpcWePYBku7rl2wn1RZu6uT0qCTeg== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/hub@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/hub/-/hub-5.30.0.tgz#2453be9b9cb903404366e198bd30c7ca74cdc100" + integrity sha512-2tYrGnzb1gKz2EkMDQcfLrDTvmGcQPuWxLnJKXJvYTQDGLlEvi2tWz1VIHjunmOvJrB5aIQLhm+dcMRwFZDCqQ== + dependencies: + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/minimal@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/minimal/-/minimal-5.30.0.tgz#ce3d3a6a273428e0084adcb800bc12e72d34637b" + integrity sha512-BwWb/owZKtkDX+Sc4zCSTNcvZUq7YcH3uAVlmh/gtR9rmUvbzAA3ewLuB3myi4wWRAMEtny6+J/FN/x+2wn9Xw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@sentry/node@^5.18.1": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/node/-/node-5.30.0.tgz#4ca479e799b1021285d7fe12ac0858951c11cd48" + integrity sha512-Br5oyVBF0fZo6ZS9bxbJZG4ApAjRqAnqFFurMVJJdunNb80brh7a5Qva2kjhm+U6r9NJAB5OmDyPkA1Qnt+QVg== + dependencies: + "@sentry/core" "5.30.0" + "@sentry/hub" "5.30.0" + "@sentry/tracing" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + cookie "^0.4.1" + https-proxy-agent "^5.0.0" + lru_map "^0.3.3" + tslib "^1.9.3" + +"@sentry/tracing@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/tracing/-/tracing-5.30.0.tgz#501d21f00c3f3be7f7635d8710da70d9419d4e1f" + integrity sha512-dUFowCr0AIMwiLD7Fs314Mdzcug+gBVo/+NCMyDw8tFxJkwWAKl7Qa2OZxLQ0ZHjakcj1hNKfCQJ9rhyfOl4Aw== + dependencies: + "@sentry/hub" "5.30.0" + "@sentry/minimal" "5.30.0" + "@sentry/types" "5.30.0" + "@sentry/utils" "5.30.0" + tslib "^1.9.3" + +"@sentry/types@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/types/-/types-5.30.0.tgz#19709bbe12a1a0115bc790b8942917da5636f402" + integrity sha512-R8xOqlSTZ+htqrfteCWU5Nk0CDN5ApUTvrlvBuiH1DyP6czDZ4ktbZB0hAgBlVcK0U+qpD3ag3Tqqpa5Q67rPw== + +"@sentry/utils@5.30.0": + version "5.30.0" + resolved "https://registry.yarnpkg.com/@sentry/utils/-/utils-5.30.0.tgz#9a5bd7ccff85ccfe7856d493bffa64cabc41e980" + integrity sha512-zaYmoH0NWWtvnJjC9/CBseXMtKHm/tm40sz3YfJRxeQjyzRqNQPgivpd9R/oDJCYj999mzdW382p/qi2ypjLww== + dependencies: + "@sentry/types" "5.30.0" + tslib "^1.9.3" + +"@solidity-parser/parser@^0.14.0": + version "0.14.5" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.14.5.tgz#87bc3cc7b068e08195c219c91cd8ddff5ef1a804" + integrity sha512-6dKnHZn7fg/iQATVEzqyUOyEidbn05q7YA2mQ9hC0MMXhhV3/JrsxmFSYZAcr7j1yUP700LLhTruvJ3MiQmjJg== + dependencies: + antlr4ts "^0.5.0-alpha.4" + +"@solidity-parser/parser@^0.19.0": + version "0.19.0" + resolved "https://registry.yarnpkg.com/@solidity-parser/parser/-/parser-0.19.0.tgz#37a8983b2725af9b14ff8c4a475fa0e98d773c3f" + integrity sha512-RV16k/qIxW/wWc+mLzV3ARyKUaMUTBy9tOLMzFhtNSKYeTAanQ3a5MudJKf/8arIFnA2L27SNjarQKmFg0w/jA== + +"@tsconfig/node10@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@typechain/ethers-v5@^10.0.0": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v5/-/ethers-v5-10.2.1.tgz#50241e6957683281ecfa03fb5a6724d8a3ce2391" + integrity sha512-n3tQmCZjRE6IU4h6lqUGiQ1j866n5MTCBJreNEHHVWXa2u9GJTaeYyU1/k+1qLutkyw+sS6VAN+AbeiTqsxd/A== + dependencies: + lodash "^4.17.15" + ts-essentials "^7.0.1" + +"@typechain/ethers-v6@0.5.1": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@typechain/ethers-v6/-/ethers-v6-0.5.1.tgz#42fe214a19a8b687086c93189b301e2b878797ea" + integrity sha512-F+GklO8jBWlsaVV+9oHaPh5NJdd6rAKN4tklGfInX1Q7h0xPgVLP39Jl3eCulPB5qexI71ZFHwbljx4ZXNfouA== + dependencies: + lodash "^4.17.15" + ts-essentials "^7.0.1" + +"@typechain/hardhat@^9.0.0": + version "9.1.0" + resolved "https://registry.yarnpkg.com/@typechain/hardhat/-/hardhat-9.1.0.tgz#6985015f01dfb37ef2ca8a29c742d05890351ddc" + integrity sha512-mtaUlzLlkqTlfPwB3FORdejqBskSnh+Jl8AIJGjXNAQfRQ4ofHADPl1+oU7Z3pAJzmZbUXII8MhOLQltcHgKnA== + dependencies: + fs-extra "^9.1.0" + +"@types/bn.js@^4.11.3": + version "4.11.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-4.11.6.tgz#c306c70d9358aaea33cd4eda092a742b9505967c" + integrity sha512-pqr857jrp2kPuO9uRjZ3PwnJTjoQy+fcdxvBTvHm6dkmEL9q+hDD/2j/0ELOBPtPnS8LjCX0gI9nbl8lVkadpg== + dependencies: + "@types/node" "*" + +"@types/bn.js@^5.1.0": + version "5.1.6" + resolved "https://registry.yarnpkg.com/@types/bn.js/-/bn.js-5.1.6.tgz#9ba818eec0c85e4d3c679518428afdf611d03203" + integrity sha512-Xh8vSwUeMKeYYrj3cX4lGQgFSF/N03r+tv4AiLl1SucqV+uTQpxRcnM8AkXKHwYP9ZPXOYXRr2KPXpVlIvqh9w== + dependencies: + "@types/node" "*" + +"@types/chai-as-promised@^7.1.3": + version "7.1.8" + resolved "https://registry.yarnpkg.com/@types/chai-as-promised/-/chai-as-promised-7.1.8.tgz#f2b3d82d53c59626b5d6bbc087667ccb4b677fe9" + integrity sha512-ThlRVIJhr69FLlh6IctTXFkmhtP3NpMZ2QGq69StYLyKZFp/HOp1VdKZj7RvfNWYYcJ1xlbLGLLWj1UvP5u/Gw== + dependencies: + "@types/chai" "*" + +"@types/chai@*": + version "5.2.0" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.2.0.tgz#fe62a18d33001800d3590792ceb6126142f814a4" + integrity sha512-FWnQYdrG9FAC8KgPVhDFfrPL1FBsL3NtIt2WsxKvwu/61K6HiuDF3xAb7c7w/k9ML2QOUHcwTgU7dKLFPK6sBg== + dependencies: + "@types/deep-eql" "*" + +"@types/chai@^4.2.0": + version "4.3.20" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-4.3.20.tgz#cb291577ed342ca92600430841a00329ba05cecc" + integrity sha512-/pC9HAB5I/xMlc5FP77qjCnI16ChlJfW0tGa0IUcFn38VJrTV6DeZ60NU5KZBtaOZqjdpwTWohz5HU1RrhiYxQ== + +"@types/concat-stream@^1.6.0": + version "1.6.1" + resolved "https://registry.yarnpkg.com/@types/concat-stream/-/concat-stream-1.6.1.tgz#24bcfc101ecf68e886aaedce60dfd74b632a1b74" + integrity sha512-eHE4cQPoj6ngxBZMvVf6Hw7Mh4jMW4U9lpGmS5GBPB9RYxlFg+CHaVN7ErNY4W9XfLIEn20b4VDYaIrbq0q4uA== + dependencies: + "@types/node" "*" + +"@types/deep-eql@*": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/deep-eql/-/deep-eql-4.0.2.tgz#334311971d3a07121e7eb91b684a605e7eea9cbd" + integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== + +"@types/form-data@0.0.33": + version "0.0.33" + resolved "https://registry.yarnpkg.com/@types/form-data/-/form-data-0.0.33.tgz#c9ac85b2a5fd18435b8c85d9ecb50e6d6c893ff8" + integrity sha512-8BSvG1kGm83cyJITQMZSulnl6QV8jqAGreJsc5tPu1Jq0vTSOiY/k24Wx82JRpWwZSqrala6sd5rWi6aNXvqcw== + dependencies: + "@types/node" "*" + +"@types/glob@^7.1.1": + version "7.2.0" + resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb" + integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA== + dependencies: + "@types/minimatch" "*" + "@types/node" "*" + +"@types/lru-cache@^5.1.0": + version "5.1.1" + resolved "https://registry.yarnpkg.com/@types/lru-cache/-/lru-cache-5.1.1.tgz#c48c2e27b65d2a153b19bfc1a317e30872e01eef" + integrity sha512-ssE3Vlrys7sdIzs5LOxCzTVMsU7i9oa/IaW92wF32JFb3CVczqOkru2xspuKczHEbG3nvmPY7IFqVmGGHdNbYw== + +"@types/minimatch@*": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca" + integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA== + +"@types/mocha@>=9.1.0": + version "10.0.10" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.10.tgz#91f62905e8d23cbd66225312f239454a23bebfa0" + integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q== + +"@types/node@*": + version "22.13.9" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.9.tgz#5d9a8f7a975a5bd3ef267352deb96fb13ec02eca" + integrity sha512-acBjXdRJ3A6Pb3tqnw9HZmyR3Fiol3aGxRCK1x3d+6CDAMjl7I649wpSd+yNURCjbOUGu9tqtLKnTGxmK6CyGw== + dependencies: + undici-types "~6.20.0" + +"@types/node@18.15.3": + version "18.15.3" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.15.3.tgz#f0b991c32cfc6a4e7f3399d6cb4b8cf9a0315014" + integrity sha512-p6ua9zBxz5otCmbpb5D3U4B5Nanw6Pk3PPyX05xnxbB/fRv71N7CPmORg7uAD5P70T0xmx1pzAx/FUfa5X+3cw== + +"@types/node@22.7.5": + version "22.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" + +"@types/node@^10.0.3": + version "10.17.60" + resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b" + integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw== + +"@types/node@^8.0.0": + version "8.10.66" + resolved "https://registry.yarnpkg.com/@types/node/-/node-8.10.66.tgz#dd035d409df322acc83dff62a602f12a5783bbb3" + integrity sha512-tktOkFUA4kXx2hhhrB8bIFb5TbwzS4uOhKEmwiD+NoiL0qtP2OQ9mFldbgD4dV1djrlBYP6eBuQZiWjuHUpqFw== + +"@types/pbkdf2@^3.0.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@types/pbkdf2/-/pbkdf2-3.1.2.tgz#2dc43808e9985a2c69ff02e2d2027bd4fe33e8dc" + integrity sha512-uRwJqmiXmh9++aSu1VNEn3iIxWOhd8AHXNSdlaLfdAAdSTY9jYVeGWnzejM3dvrkbqE3/hyQkQQ29IFATEGlew== + dependencies: + "@types/node" "*" + +"@types/prettier@^2.1.1": + version "2.7.3" + resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" + integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== + +"@types/qs@^6.2.31": + version "6.9.18" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.18.tgz#877292caa91f7c1b213032b34626505b746624c2" + integrity sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA== + +"@types/secp256k1@^4.0.1": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@types/secp256k1/-/secp256k1-4.0.6.tgz#d60ba2349a51c2cbc5e816dcd831a42029d376bf" + integrity sha512-hHxJU6PAEUn0TP4S/ZOzuTUvJWuZ6eIKeNKb5RBpODvSl6hp1Wrw4s7ATY50rklRCScUDpHzVA/DQdSjJ3UoYQ== + dependencies: + "@types/node" "*" + +abbrev@1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" + integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== + +abbrev@1.0.x: + version "1.0.9" + resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.0.9.tgz#91b4792588a7738c25f35dd6f63752a2f8776135" + integrity sha512-LEyx4aLEC3x6T0UguF6YILf+ntvmOaWsVfENmIW0E9H09vKlLDGelMjjSm0jkDHALj8A8quZ/HapKNigzwge+Q== + +acorn-walk@^8.1.1: + version "8.3.4" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" + +acorn@^8.11.0, acorn@^8.4.1: + version "8.14.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" + integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== + +adm-zip@^0.4.16: + version "0.4.16" + resolved "https://registry.yarnpkg.com/adm-zip/-/adm-zip-0.4.16.tgz#cf4c508fdffab02c269cbc7f471a875f05570365" + integrity sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg== + +aes-js@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-3.0.0.tgz#e21df10ad6c2053295bcbb8dab40b09dbea87e4d" + integrity sha512-H7wUZRn8WpTq9jocdxQ2c8x2sKo9ZVmzfRE13GiNJXfp7NcKYEdvl3vspKjXox6RIG2VtaRe4JFvxG4rqp2Zuw== + +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +aggregate-error@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" + integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== + dependencies: + clean-stack "^2.0.0" + indent-string "^4.0.0" + +ajv@^8.0.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +amdefine@>=0.0.4: + version "1.0.1" + resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" + integrity sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg== + +ansi-align@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" + integrity sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w== + dependencies: + string-width "^4.1.0" + +ansi-colors@^4.1.1, ansi-colors@^4.1.3: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.3.0: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.1.tgz#123d6479e92ad45ad897d4054e3c7ca7db4944e1" + integrity sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw== + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" + integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== + dependencies: + color-convert "^1.9.0" + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +antlr4ts@^0.5.0-alpha.4: + version "0.5.0-alpha.4" + resolved "https://registry.yarnpkg.com/antlr4ts/-/antlr4ts-0.5.0-alpha.4.tgz#71702865a87478ed0b40c0709f422cf14d51652a" + integrity sha512-WPQDt1B74OfPv/IMS2ekXAKkTZIHl88uMetg6q3OTqgFxZ/dxDXI0EWLyZid/1Pe6hTftyg5N7gel5wNAGxXyQ== + +anymatch@~3.1.2: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-back@^3.0.1, array-back@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-3.1.0.tgz#b8859d7a508871c9a7b2cf42f99428f65e96bfb0" + integrity sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q== + +array-back@^4.0.1, array-back@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/array-back/-/array-back-4.0.2.tgz#8004e999a6274586beeb27342168652fdb89fa1e" + integrity sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +array-uniq@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" + integrity sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q== + +asap@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/asap/-/asap-2.0.6.tgz#e50347611d7e690943208bbdafebcbc2fb866d46" + integrity sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA== + +assertion-error@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" + integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== + +astral-regex@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" + integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== + +async@1.x: + version "1.5.2" + resolved "https://registry.yarnpkg.com/async/-/async-1.5.2.tgz#ec6a61ae56480c0c3cb241c95618e20892f9672a" + integrity sha512-nSVgobk4rv61R9PUSDtYt7mPVB2olxNR5RWJcAsH676/ef11bUZwvu7+RGYrYauVdDPcO519v68wRhXQtxsV9w== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +at-least-node@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" + integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== + +axios@^1.5.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.1.tgz#7c118d2146e9ebac512b7d1128771cdd738d11e3" + integrity sha512-NN+fvwH/kV01dYUQ3PTOZns4LWtWhOFCAhQ/pHb88WQ1hNe5V/dvFwc4VJcDL11LT9xSX0QtsR8sWUuyOuOq7g== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +base-x@^3.0.2: + version "3.0.10" + resolved "https://registry.yarnpkg.com/base-x/-/base-x-3.0.10.tgz#62de58653f8762b5d6f8d9fe30fa75f7b2585a75" + integrity sha512-7d0s06rR9rYaIWHkpfLIFICM/tkSVdoPC9qYAQRpxn9DdKNWNsKC0uk++akckyLq16Tx2WIinnZ6WRriAt6njQ== + dependencies: + safe-buffer "^5.0.1" + +bech32@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" + integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.3.0.tgz#f6e14a97858d327252200242d4ccfe522c445522" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== + +blakejs@^1.1.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/blakejs/-/blakejs-1.2.1.tgz#5057e4206eadb4a97f7c0b6e197a505042fc3814" + integrity sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ== + +bn.js@4.11.6: + version "4.11.6" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.6.tgz#53344adb14617a13f6e8dd2ce28905d1c0ba3215" + integrity sha512-XWwnNNFCuuSQ0m3r3C4LE3EiORltHd9M05pq6FOlVeiophzRbMo50Sbz1ehl8K3Z+jw9+vmgnXefY1hz8X+2wA== + +bn.js@^4.11.0, bn.js@^4.11.8, bn.js@^4.11.9: + version "4.12.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.12.1.tgz#215741fe3c9dba2d7e12c001d0cfdbae43975ba7" + integrity sha512-k8TVBiPkPJT9uHLdOKfFpqcfprwBFOAAXXozRubr7R7PfIuKvQlzcI4M0pALeqXN09vdaMbUdUj+pass+uULAg== + +bn.js@^5.1.2, bn.js@^5.2.0, bn.js@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-5.2.1.tgz#0bc527a6a0d18d0aa8d5b0538ce4a77dccfa7b70" + integrity sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ== + +boxen@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/boxen/-/boxen-5.1.2.tgz#788cb686fc83c1f486dfa8a40c68fc2b831d2b50" + integrity sha512-9gYgQKXx+1nP8mP7CzFyaUARhg7D3n1dF/FnErWmu9l6JvGpNUN278h0aSb+QjoiKSWG+iZ3uHrcqk0qrY9RQQ== + dependencies: + ansi-align "^3.0.0" + camelcase "^6.2.0" + chalk "^4.1.0" + cli-boxes "^2.2.1" + string-width "^4.2.2" + type-fest "^0.20.2" + widest-line "^3.1.0" + wrap-ansi "^7.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +brorand@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" + integrity sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w== + +browser-stdout@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" + integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== + +browserify-aes@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" + integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== + dependencies: + buffer-xor "^1.0.3" + cipher-base "^1.0.0" + create-hash "^1.1.0" + evp_bytestokey "^1.0.3" + inherits "^2.0.1" + safe-buffer "^5.0.1" + +bs58@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/bs58/-/bs58-4.0.1.tgz#be161e76c354f6f788ae4071f63f34e8c4f0a42a" + integrity sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw== + dependencies: + base-x "^3.0.2" + +bs58check@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/bs58check/-/bs58check-2.1.2.tgz#53b018291228d82a5aa08e7d796fdafda54aebfc" + integrity sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA== + dependencies: + bs58 "^4.0.0" + create-hash "^1.1.0" + safe-buffer "^5.1.2" + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer-xor@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" + integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bound@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +camelcase@^6.0.0, camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caseless@^0.12.0, caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +cbor@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-8.1.0.tgz#cfc56437e770b73417a2ecbfc9caf6b771af60d5" + integrity sha512-DwGjNW9omn6EwP70aXsn7FQJx5kO12tX0bZkaTjzdVFM6/7nhA4t0EENocKGx6D2Bch9PE2KzCUf5SceBdeijg== + dependencies: + nofilter "^3.1.0" + +cbor@^9.0.0: + version "9.0.2" + resolved "https://registry.yarnpkg.com/cbor/-/cbor-9.0.2.tgz#536b4f2d544411e70ec2b19a2453f10f83cd9fdb" + integrity sha512-JPypkxsB10s9QOWwa6zwPzqE1Md3vqpPc+cai4sAecuCsRyAtAl/pMyhPlMbT/xtPnm2dznJZYRLui57qiRhaQ== + dependencies: + nofilter "^3.1.0" + +chai-as-promised@^7.1.1: + version "7.1.2" + resolved "https://registry.yarnpkg.com/chai-as-promised/-/chai-as-promised-7.1.2.tgz#70cd73b74afd519754161386421fb71832c6d041" + integrity sha512-aBDHZxRzYnUYuIAIPBH2s511DjlKPzXNlXSGFC8CwmroWQLfrW0LtE1nK3MAwwNhJPa9raEjNCmRoFpG0Hurdw== + dependencies: + check-error "^1.0.2" + +chai@^4.2.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8" + integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw== + dependencies: + assertion-error "^1.1.0" + check-error "^1.0.3" + deep-eql "^4.1.3" + get-func-name "^2.0.2" + loupe "^2.3.6" + pathval "^1.1.1" + type-detect "^4.1.0" + +chalk@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" + integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== + dependencies: + ansi-styles "^3.2.1" + escape-string-regexp "^1.0.5" + supports-color "^5.3.0" + +chalk@^4.0.0, chalk@^4.1.0: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +"charenc@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/charenc/-/charenc-0.0.2.tgz#c0a1d2f3a7092e03774bfa83f14c0fc5790a8667" + integrity sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA== + +check-error@^1.0.2, check-error@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694" + integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg== + dependencies: + get-func-name "^2.0.2" + +chokidar@^3.5.3: + version "3.6.0" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.6.0.tgz#197c6cc669ef2a8dc5e7b4d97ee4e092c3eb0d5b" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== + dependencies: + anymatch "~3.1.2" + braces "~3.0.2" + glob-parent "~5.1.2" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.6.0" + optionalDependencies: + fsevents "~2.3.2" + +chokidar@^4.0.0: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" + +ci-info@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" + integrity sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ== + +cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.6.tgz#8fe672437d01cd6c4561af5334e0cc50ff1955f7" + integrity sha512-3Ek9H3X6pj5TgenXYtNWdaBon1tgYCaebd+XPg0keyjEbEfkD4KkmAxkQ/i1vYvxdcT5nscLBfq9VJRmCBcFSw== + dependencies: + inherits "^2.0.4" + safe-buffer "^5.2.1" + +clean-stack@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" + integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== + +cli-boxes@^2.2.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/cli-boxes/-/cli-boxes-2.2.1.tgz#ddd5035d25094fce220e9cab40a45840a440318f" + integrity sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw== + +cli-table3@^0.5.0: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + +cliui@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" + integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^7.0.0" + +color-convert@^1.9.0: + version "1.9.3" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== + dependencies: + color-name "1.1.3" + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colors@1.4.0, colors@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" + integrity sha512-a+UqTh4kgZg/SlGvfbzDHpgRu7AAQOmmqRHJnxhRZICKFUT91brVhNNt58CMWU9PsBbv3PDCZUHbVxuDiH2mtA== + +combined-stream@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +command-exists@^1.2.8: + version "1.2.9" + resolved "https://registry.yarnpkg.com/command-exists/-/command-exists-1.2.9.tgz#c50725af3808c8ab0260fd60b01fbfa25b954f69" + integrity sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w== + +command-line-args@^5.1.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.2.1.tgz#c44c32e437a57d7c51157696893c5909e9cec42e" + integrity sha512-H4UfQhZyakIjC74I9d34fGYDwk3XpSr17QhEd0Q3I9Xq1CETHo4Hcuo87WyWHpAF1aSLjLRf5lD9ZGX2qStUvg== + dependencies: + array-back "^3.1.0" + find-replace "^3.0.0" + lodash.camelcase "^4.3.0" + typical "^4.0.0" + +command-line-usage@^6.1.0: + version "6.1.3" + resolved "https://registry.yarnpkg.com/command-line-usage/-/command-line-usage-6.1.3.tgz#428fa5acde6a838779dfa30e44686f4b6761d957" + integrity sha512-sH5ZSPr+7UStsloltmDh7Ce5fb8XPlHyoPzTpyyMuYCtervL65+ubVZ6Q61cFtFl62UyJlc8/JwERRbAFPUqgw== + dependencies: + array-back "^4.0.2" + chalk "^2.4.2" + table-layout "^1.0.2" + typical "^5.2.0" + +commander@^8.1.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +concat-stream@^1.6.0, concat-stream@^1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +cookie@^0.4.1: + version "0.4.2" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.2.tgz#0e41f24de5ecf317947c82fc789e06a884824432" + integrity sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +create-hash@^1.1.0, create-hash@^1.1.2, create-hash@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" + integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== + dependencies: + cipher-base "^1.0.1" + inherits "^2.0.1" + md5.js "^1.3.4" + ripemd160 "^2.0.1" + sha.js "^2.4.0" + +create-hmac@^1.1.4, create-hmac@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" + integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== + dependencies: + cipher-base "^1.0.3" + create-hash "^1.1.0" + inherits "^2.0.1" + ripemd160 "^2.0.0" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +"crypt@>= 0.0.1": + version "0.0.2" + resolved "https://registry.yarnpkg.com/crypt/-/crypt-0.0.2.tgz#88d7ff7ec0dfb86f713dc87bbb42d044d3e6c41b" + integrity sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow== + +death@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/death/-/death-1.1.0.tgz#01aa9c401edd92750514470b8266390c66c67318" + integrity sha512-vsV6S4KVHvTGxbEcij7hkWRv0It+sGGWVOM67dQde/o5Xjnr+KmLjxWJii2uEObIrt1CcM9w0Yaovx+iOlIL+w== + +debug@4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.5: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +decamelize@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" + integrity sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ== + +deep-eql@^4.0.1, deep-eql@^4.1.3: + version "4.1.4" + resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7" + integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg== + dependencies: + type-detect "^4.0.0" + +deep-extend@~0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" + integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== + +deep-is@~0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +diff@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/diff/-/diff-5.2.0.tgz#26ded047cd1179b78b9537d5ef725503ce1ae531" + integrity sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A== + +difflib@^0.2.4: + version "0.2.4" + resolved "https://registry.yarnpkg.com/difflib/-/difflib-0.2.4.tgz#b5e30361a6db023176d562892db85940a718f47e" + integrity sha512-9YVwmMb0wQHQNr5J9m6BSj6fk4pfGITGQOOs+D9Fl+INODWFOfvhIU1hNv6GgR1RBoC/9NJcwu77zShxV0kT7w== + dependencies: + heap ">= 0.2.0" + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +elliptic@6.6.1, elliptic@^6.5.2, elliptic@^6.5.7: + version "6.6.1" + resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.6.1.tgz#3b8ffb02670bf69e382c7f65bf524c97c5405c06" + integrity sha512-RaddvvMatK2LJHqFJ+YA4WysVN5Ita9E35botqIYspQ4TkRAlCicdzKOjlyv/1Za5RyTNn7di//eEV0uTAfe3g== + dependencies: + bn.js "^4.11.9" + brorand "^1.1.0" + hash.js "^1.0.0" + hmac-drbg "^1.0.1" + inherits "^2.0.4" + minimalistic-assert "^1.0.1" + minimalistic-crypto-utils "^1.0.1" + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +enquirer@^2.3.0: + version "2.4.1" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56" + integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ== + dependencies: + ansi-colors "^4.1.1" + strip-ansi "^6.0.1" + +env-paths@^2.2.0: + version "2.2.1" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.1.tgz#420399d416ce1fbe9bc0a07c62fa68d67fd0f8f2" + integrity sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A== + +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +escalade@^3.1.1: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escodegen@1.8.x: + version "1.8.1" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.8.1.tgz#5a5b53af4693110bebb0867aa3430dd3b70a1018" + integrity sha512-yhi5S+mNTOuRvyW4gWlg5W1byMaQGWWSYHXsuFZ7GBo7tpyOwi2EdzMP/QWxh9hwkD2m+wDVHJsxhRIj+v/b/A== + dependencies: + esprima "^2.7.1" + estraverse "^1.9.1" + esutils "^2.0.2" + optionator "^0.8.1" + optionalDependencies: + source-map "~0.2.0" + +esprima@2.7.x, esprima@^2.7.1: + version "2.7.3" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-2.7.3.tgz#96e3b70d5779f6ad49cd032673d1c312767ba581" + integrity sha512-OarPfz0lFCiW4/AV2Oy1Rp9qu0iusTKqykwTspGCZtPxmF81JR4MmIebvF1F9+UOKth2ZubLQ4XGGaU+hSn99A== + +esprima@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +estraverse@^1.9.1: + version "1.9.3" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-1.9.3.tgz#af67f2dc922582415950926091a4005d29c9bb44" + integrity sha512-25w1fMXQrGdoquWnScXZGckOv+Wes+JDnuN/+7ex3SauFRS72r2lFDec0EKPt2YD1wUJ/IrfEex+9yp4hfSOJA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +eth-gas-reporter@^0.2.25: + version "0.2.27" + resolved "https://registry.yarnpkg.com/eth-gas-reporter/-/eth-gas-reporter-0.2.27.tgz#928de8548a674ed64c7ba0bf5795e63079150d4e" + integrity sha512-femhvoAM7wL0GcI8ozTdxfuBtBFJ9qsyIAsmKVjlWAHUbdnnXHt+lKzz/kmldM5lA9jLuNHGwuIxorNpLbR1Zw== + dependencies: + "@solidity-parser/parser" "^0.14.0" + axios "^1.5.1" + cli-table3 "^0.5.0" + colors "1.4.0" + ethereum-cryptography "^1.0.3" + ethers "^5.7.2" + fs-readdir-recursive "^1.1.0" + lodash "^4.17.14" + markdown-table "^1.1.3" + mocha "^10.2.0" + req-cwd "^2.0.0" + sha1 "^1.1.1" + sync-request "^6.0.0" + +ethereum-bloom-filters@^1.0.6: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-bloom-filters/-/ethereum-bloom-filters-1.2.0.tgz#8294f074c1a6cbd32c39d2cc77ce86ff14797dab" + integrity sha512-28hyiE7HVsWubqhpVLVmZXFd4ITeHi+BUu05o9isf0GUpMtzBUi+8/gFrGaGYzvGAJQmJ3JKj77Mk9G98T84rA== + dependencies: + "@noble/hashes" "^1.4.0" + +ethereum-cryptography@0.1.3, ethereum-cryptography@^0.1.3: + version "0.1.3" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-0.1.3.tgz#8d6143cfc3d74bf79bbd8edecdf29e4ae20dd191" + integrity sha512-w8/4x1SGGzc+tO97TASLja6SLd3fRIK2tLVcV2Gx4IB21hE19atll5Cq9o3d0ZmAYC/8aw0ipieTSiekAea4SQ== + dependencies: + "@types/pbkdf2" "^3.0.0" + "@types/secp256k1" "^4.0.1" + blakejs "^1.1.0" + browserify-aes "^1.2.0" + bs58check "^2.1.2" + create-hash "^1.2.0" + create-hmac "^1.1.7" + hash.js "^1.1.7" + keccak "^3.0.0" + pbkdf2 "^3.0.17" + randombytes "^2.1.0" + safe-buffer "^5.1.2" + scrypt-js "^3.0.0" + secp256k1 "^4.0.1" + setimmediate "^1.0.5" + +ethereum-cryptography@^1.0.3: + version "1.2.0" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-1.2.0.tgz#5ccfa183e85fdaf9f9b299a79430c044268c9b3a" + integrity sha512-6yFQC9b5ug6/17CQpCyE3k9eKBMdhyVjzUy1WkiuY/E4vj/SXDBbCw8QEIaXqf0Mf2SnY6RmpDcwlUmBSS0EJw== + dependencies: + "@noble/hashes" "1.2.0" + "@noble/secp256k1" "1.7.1" + "@scure/bip32" "1.1.5" + "@scure/bip39" "1.1.1" + +ethereum-cryptography@^2.0.0, ethereum-cryptography@^2.1.2: + version "2.2.1" + resolved "https://registry.yarnpkg.com/ethereum-cryptography/-/ethereum-cryptography-2.2.1.tgz#58f2810f8e020aecb97de8c8c76147600b0b8ccf" + integrity sha512-r/W8lkHSiTLxUxW8Rf3u4HGB0xQweG2RyETjywylKZSzLWoWAijRz8WCuOtJ6wah+avllXBqZuk29HCCvhEIRg== + dependencies: + "@noble/curves" "1.4.2" + "@noble/hashes" "1.4.0" + "@scure/bip32" "1.4.0" + "@scure/bip39" "1.3.0" + +ethereumjs-abi@^0.6.8: + version "0.6.8" + resolved "https://registry.yarnpkg.com/ethereumjs-abi/-/ethereumjs-abi-0.6.8.tgz#71bc152db099f70e62f108b7cdfca1b362c6fcae" + integrity sha512-Tx0r/iXI6r+lRsdvkFDlut0N08jWMnKRZ6Gkq+Nmw75lZe4e6o3EkSnkaBP5NF6+m5PTGAr9JP43N3LyeoglsA== + dependencies: + bn.js "^4.11.8" + ethereumjs-util "^6.0.0" + +ethereumjs-util@^6.0.0, ethereumjs-util@^6.2.1: + version "6.2.1" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-6.2.1.tgz#fcb4e4dd5ceacb9d2305426ab1a5cd93e3163b69" + integrity sha512-W2Ktez4L01Vexijrm5EB6w7dg4n/TgpoYU4avuT5T3Vmnw/eCRtiBrJfQYS/DCSvDIOLn2k57GcHdeBcgVxAqw== + dependencies: + "@types/bn.js" "^4.11.3" + bn.js "^4.11.0" + create-hash "^1.1.2" + elliptic "^6.5.2" + ethereum-cryptography "^0.1.3" + ethjs-util "0.1.6" + rlp "^2.2.3" + +ethereumjs-util@^7.1.4: + version "7.1.5" + resolved "https://registry.yarnpkg.com/ethereumjs-util/-/ethereumjs-util-7.1.5.tgz#9ecf04861e4fbbeed7465ece5f23317ad1129181" + integrity sha512-SDl5kKrQAudFBUe5OJM9Ac6WmMyYmXX/6sTmLZ3ffG2eY6ZIGBes3pEDxNN6V72WyOw4CPD5RomKdsa8DAAwLg== + dependencies: + "@types/bn.js" "^5.1.0" + bn.js "^5.1.2" + create-hash "^1.1.2" + ethereum-cryptography "^0.1.3" + rlp "^2.2.4" + +ethers@^5.7.2: + version "5.8.0" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-5.8.0.tgz#97858dc4d4c74afce83ea7562fe9493cedb4d377" + integrity sha512-DUq+7fHrCg1aPDFCHx6UIPb3nmt2XMpM7Y/g2gLhsl3lIBqeAfOJIl1qEvRf2uq3BiKxmh6Fh5pfp2ieyek7Kg== + dependencies: + "@ethersproject/abi" "5.8.0" + "@ethersproject/abstract-provider" "5.8.0" + "@ethersproject/abstract-signer" "5.8.0" + "@ethersproject/address" "5.8.0" + "@ethersproject/base64" "5.8.0" + "@ethersproject/basex" "5.8.0" + "@ethersproject/bignumber" "5.8.0" + "@ethersproject/bytes" "5.8.0" + "@ethersproject/constants" "5.8.0" + "@ethersproject/contracts" "5.8.0" + "@ethersproject/hash" "5.8.0" + "@ethersproject/hdnode" "5.8.0" + "@ethersproject/json-wallets" "5.8.0" + "@ethersproject/keccak256" "5.8.0" + "@ethersproject/logger" "5.8.0" + "@ethersproject/networks" "5.8.0" + "@ethersproject/pbkdf2" "5.8.0" + "@ethersproject/properties" "5.8.0" + "@ethersproject/providers" "5.8.0" + "@ethersproject/random" "5.8.0" + "@ethersproject/rlp" "5.8.0" + "@ethersproject/sha2" "5.8.0" + "@ethersproject/signing-key" "5.8.0" + "@ethersproject/solidity" "5.8.0" + "@ethersproject/strings" "5.8.0" + "@ethersproject/transactions" "5.8.0" + "@ethersproject/units" "5.8.0" + "@ethersproject/wallet" "5.8.0" + "@ethersproject/web" "5.8.0" + "@ethersproject/wordlists" "5.8.0" + +ethers@^6.0.0, ethers@^6.7.0: + version "6.13.5" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.5.tgz#8c1d6ac988ac08abc3c1d8fabbd4b8b602851ac4" + integrity sha512-+knKNieu5EKRThQJWwqaJ10a6HE9sSehGeqWN65//wE7j47ZpFhKAnHB/JJFibwwg61I/koxaPsXbXpD/skNOQ== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "22.7.5" + aes-js "4.0.0-beta.5" + tslib "2.7.0" + ws "8.17.1" + +ethjs-unit@0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-unit/-/ethjs-unit-0.1.6.tgz#c665921e476e87bce2a9d588a6fe0405b2c41699" + integrity sha512-/Sn9Y0oKl0uqQuvgFk/zQgR7aw1g36qX/jzSQ5lSwlO0GigPymk4eGQfeNTD03w1dPOqfz8V77Cy43jH56pagw== + dependencies: + bn.js "4.11.6" + number-to-bn "1.7.0" + +ethjs-util@0.1.6, ethjs-util@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/ethjs-util/-/ethjs-util-0.1.6.tgz#f308b62f185f9fe6237132fb2a9818866a5cd536" + integrity sha512-CUnVOQq7gSpDHZVVrQW8ExxUETWrnrvXYvYz55wOU8Uj4VCgw56XC2B/fVqQN+f7gmrnRHSLVnFAwsCuNwji8w== + dependencies: + is-hex-prefixed "1.0.0" + strip-hex-prefix "1.0.0" + +evp_bytestokey@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" + integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== + dependencies: + md5.js "^1.3.4" + safe-buffer "^5.1.1" + +fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-glob@^3.0.3: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + +fast-levenshtein@~2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-uri@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" + integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== + +fastq@^1.6.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== + dependencies: + reusify "^1.0.4" + +fdir@^6.4.3: + version "6.4.3" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.3.tgz#011cdacf837eca9b811c89dbb902df714273db72" + integrity sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw== + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +find-replace@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-replace/-/find-replace-3.0.0.tgz#3e7e23d3b05167a76f770c9fbd5258b0def68c38" + integrity sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ== + dependencies: + array-back "^3.0.1" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +follow-redirects@^1.12.1, follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +form-data@^2.2.0: + version "2.5.3" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.3.tgz#f9bcf87418ce748513c0c3494bb48ec270c97acc" + integrity sha512-XHIrMD0NpDrNM/Ckf7XJiBbLl57KEhT3+i3yY+eWm+cqYZJQTZrKo8Y8AWKnuV5GT4scfuUGt9LzNoIx3dU1nQ== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + mime-types "^2.1.35" + safe-buffer "^5.2.1" + +form-data@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + mime-types "^2.1.12" + +fp-ts@1.19.3: + version "1.19.3" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.3.tgz#261a60d1088fbff01f91256f91d21d0caaaaa96f" + integrity sha512-H5KQDspykdHuztLTg+ajGN0Z2qUjcEf3Ybxc6hLt0k7/zPkn29XnKnxlBPyW2XIddWrGaJBzBl4VLYOtk39yZg== + +fp-ts@^1.0.0: + version "1.19.5" + resolved "https://registry.yarnpkg.com/fp-ts/-/fp-ts-1.19.5.tgz#3da865e585dfa1fdfd51785417357ac50afc520a" + integrity sha512-wDNqTimnzs8QqpldiId9OavWK2NptormjXnRJTQecNjzwfyp6P/8s/zG8e4h3ja3oqkKaY72UlTjQYt/1yXf9A== + +fs-extra@^10.0.0: + version "10.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-10.1.0.tgz#02873cfbc4084dde127eaa5f9905eef2325d1abf" + integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-extra@^7.0.0, fs-extra@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" + integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== + dependencies: + graceful-fs "^4.1.2" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +fs-extra@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" + integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== + dependencies: + at-least-node "^1.0.0" + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs-readdir-recursive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/fs-readdir-recursive/-/fs-readdir-recursive-1.1.0.tgz#e32fc030a2ccee44a6b5371308da54be0b397d27" + integrity sha512-GNanXlVr2pf02+sPN40XN8HG+ePaNcvM0q5mZBd668Obwb0yD5GiUbZOFgwn8kGMY6I3mdyDJzieUy3PTYyTRA== + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@~2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-func-name@^2.0.1, get-func-name@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" + integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== + +get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-port@^3.1.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/get-port/-/get-port-3.2.0.tgz#dd7ce7de187c06c8bf353796ac71e099f0980ebc" + integrity sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg== + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +ghost-testrpc@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/ghost-testrpc/-/ghost-testrpc-0.0.2.tgz#c4de9557b1d1ae7b2d20bbe474a91378ca90ce92" + integrity sha512-i08dAEgJ2g8z5buJIrCTduwPIhih3DP+hOCTyyryikfV8T0bNvHnGXO67i0DD1H4GBDETTclPy9njZbfluQYrQ== + dependencies: + chalk "^2.4.2" + node-emoji "^1.10.0" + +glob-parent@^5.1.2, glob-parent@~5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob@7.1.7: + version "7.1.7" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.7.tgz#3b193e9233f01d42d0b3f78294bbeeb418f94a90" + integrity sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.0.4" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^5.0.15: + version "5.0.15" + resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" + integrity sha512-c9IPMazfRITpmAAKi22dK1VKxGDX9ehhqfABDriL/lzO92xcUKEJPQHrVA/2YHSNFB4iFlykVmWvwo48nr3OxA== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.0.0, glob@^7.1.3: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" + integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^5.0.1" + once "^1.3.0" + +global-modules@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" + integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== + dependencies: + global-prefix "^3.0.0" + +global-prefix@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" + integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== + dependencies: + ini "^1.3.5" + kind-of "^6.0.2" + which "^1.3.1" + +globby@^10.0.1: + version "10.0.2" + resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543" + integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg== + dependencies: + "@types/glob" "^7.1.1" + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.0.3" + glob "^7.1.3" + ignore "^5.1.1" + merge2 "^1.2.3" + slash "^3.0.0" + +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +handlebars@^4.0.1: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +hardhat-gas-reporter@^1.0.8: + version "1.0.10" + resolved "https://registry.yarnpkg.com/hardhat-gas-reporter/-/hardhat-gas-reporter-1.0.10.tgz#ebe5bda5334b5def312747580cd923c2b09aef1b" + integrity sha512-02N4+So/fZrzJ88ci54GqwVA3Zrf0C9duuTyGt0CFRIh/CdNwbnTgkXkRfojOMLBQ+6t+lBIkgbsOtqMvNwikA== + dependencies: + array-uniq "1.0.3" + eth-gas-reporter "^0.2.25" + sha1 "^1.1.1" + +hardhat@^2.22.19: + version "2.22.19" + resolved "https://registry.yarnpkg.com/hardhat/-/hardhat-2.22.19.tgz#92eb6f59e75b0dded841fecf16260a5e3f6eb4eb" + integrity sha512-jptJR5o6MCgNbhd7eKa3mrteR+Ggq1exmE5RUL5ydQEVKcZm0sss5laa86yZ0ixIavIvF4zzS7TdGDuyopj0sQ== + dependencies: + "@ethersproject/abi" "^5.1.2" + "@metamask/eth-sig-util" "^4.0.0" + "@nomicfoundation/edr" "^0.8.0" + "@nomicfoundation/ethereumjs-common" "4.0.4" + "@nomicfoundation/ethereumjs-tx" "5.0.4" + "@nomicfoundation/ethereumjs-util" "9.0.4" + "@nomicfoundation/solidity-analyzer" "^0.1.0" + "@sentry/node" "^5.18.1" + "@types/bn.js" "^5.1.0" + "@types/lru-cache" "^5.1.0" + adm-zip "^0.4.16" + aggregate-error "^3.0.0" + ansi-escapes "^4.3.0" + boxen "^5.1.2" + chokidar "^4.0.0" + ci-info "^2.0.0" + debug "^4.1.1" + enquirer "^2.3.0" + env-paths "^2.2.0" + ethereum-cryptography "^1.0.3" + ethereumjs-abi "^0.6.8" + find-up "^5.0.0" + fp-ts "1.19.3" + fs-extra "^7.0.1" + immutable "^4.0.0-rc.12" + io-ts "1.10.4" + json-stream-stringify "^3.1.4" + keccak "^3.0.2" + lodash "^4.17.11" + mnemonist "^0.38.0" + mocha "^10.0.0" + p-map "^4.0.0" + picocolors "^1.1.0" + raw-body "^2.4.1" + resolve "1.17.0" + semver "^6.3.0" + solc "0.8.26" + source-map-support "^0.5.13" + stacktrace-parser "^0.1.10" + tinyglobby "^0.2.6" + tsort "0.0.1" + undici "^5.14.0" + uuid "^8.3.2" + ws "^7.4.6" + +has-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-1.0.0.tgz#9d9e793165ce017a00f00418c43f942a7b1d11fa" + integrity sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA== + +has-flag@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" + integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hash-base@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.1.0.tgz#55c381d9e06e1d2997a883b4a3fddfe7f0d3af33" + integrity sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA== + dependencies: + inherits "^2.0.4" + readable-stream "^3.6.0" + safe-buffer "^5.2.0" + +hash.js@1.1.7, hash.js@^1.0.0, hash.js@^1.0.3, hash.js@^1.1.7: + version "1.1.7" + resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" + integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== + dependencies: + inherits "^2.0.3" + minimalistic-assert "^1.0.1" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +he@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" + integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== + +"heap@>= 0.2.0": + version "0.2.7" + resolved "https://registry.yarnpkg.com/heap/-/heap-0.2.7.tgz#1e6adf711d3f27ce35a81fe3b7bd576c2260a8fc" + integrity sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg== + +hmac-drbg@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" + integrity sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg== + dependencies: + hash.js "^1.0.3" + minimalistic-assert "^1.0.0" + minimalistic-crypto-utils "^1.0.1" + +http-basic@^8.1.1: + version "8.1.3" + resolved "https://registry.yarnpkg.com/http-basic/-/http-basic-8.1.3.tgz#a7cabee7526869b9b710136970805b1004261bbf" + integrity sha512-/EcDMwJZh3mABI2NhGfHOGOeOZITqfkEO4p/xK+l3NpyncIHUQBoMvCSF/b5GqvKtySC2srL/GGG3+EtlqlmCw== + dependencies: + caseless "^0.12.0" + concat-stream "^1.6.2" + http-response-object "^3.0.1" + parse-cache-control "^1.0.1" + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-response-object@^3.0.1: + version "3.0.2" + resolved "https://registry.yarnpkg.com/http-response-object/-/http-response-object-3.0.2.tgz#7f435bb210454e4360d074ef1f989d5ea8aa9810" + integrity sha512-bqX0XTF6fnXSQcEJ2Iuyr75yVakyjIDCqroJQ/aHfSdlM743Cwqoi2nDYMzLGWUcuTWGWy8AAvOKXTfiv6q9RA== + dependencies: + "@types/node" "^10.0.3" + +https-proxy-agent@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +iconv-lite@0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +ignore@^5.1.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +immer@10.0.2: + version "10.0.2" + resolved "https://registry.yarnpkg.com/immer/-/immer-10.0.2.tgz#11636c5b77acf529e059582d76faf338beb56141" + integrity sha512-Rx3CqeqQ19sxUtYV9CU911Vhy8/721wRFnJv3REVGWUmoAcIwzifTsdmJte/MV+0/XpM35LZdQMBGkRIoLPwQA== + +immutable@^4.0.0-rc.12: + version "4.3.7" + resolved "https://registry.yarnpkg.com/immutable/-/immutable-4.3.7.tgz#c70145fc90d89fb02021e65c84eb0226e4e5a381" + integrity sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.5: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +interpret@^1.0.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" + integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== + +io-ts@1.10.4: + version "1.10.4" + resolved "https://registry.yarnpkg.com/io-ts/-/io-ts-1.10.4.tgz#cd5401b138de88e4f920adbcb7026e2d1967e6e2" + integrity sha512-b23PteSnYXSONJ6JQXRAlvJhuw8KOtkqa87W4wDtvMrud/DTJd5X+NpOOI+O/zZwVq6v0VLAaJ+1EDViKEuN9g== + dependencies: + fp-ts "^1.0.0" + +is-binary-path@~2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" + integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== + dependencies: + binary-extensions "^2.0.0" + +is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" + integrity sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-glob@^4.0.1, is-glob@~4.0.1: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-hex-prefixed@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-hex-prefixed/-/is-hex-prefixed-1.0.0.tgz#7d8d37e6ad77e5d127148913c573e082d777f554" + integrity sha512-WvtOiug1VFrE9v1Cydwm+FnXd3+w9GaeVUss5W4v/SLy3UW00vP+6iNF2SdnfiBoLy4bTqVdkftNGTUeOFVsbA== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-plain-obj@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" + integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +js-sha3@0.8.0, js-sha3@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/js-sha3/-/js-sha3-0.8.0.tgz#b9b7a5da73afad7dedd0f8c463954cbde6818840" + integrity sha512-gF1cRrHhIzNfToc802P800N8PpXS+evLLXfsVpowqmAFR9uwbi89WvXg2QspOmXL8QL86J4T1EpFu+yUkwJY3Q== + +js-yaml@3.x: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-stream-stringify@^3.1.4: + version "3.1.6" + resolved "https://registry.yarnpkg.com/json-stream-stringify/-/json-stream-stringify-3.1.6.tgz#ebe32193876fb99d4ec9f612389a8d8e2b5d54d4" + integrity sha512-x7fpwxOkbhFCaJDJ8vb1fBY3DdSa4AlITaz+HHILQJzdPMnHEFjxPwVUi1ALIbcIxDE0PNe/0i7frnY8QnBQog== + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== + optionalDependencies: + graceful-fs "^4.1.6" + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonschema@^1.2.4: + version "1.5.0" + resolved "https://registry.yarnpkg.com/jsonschema/-/jsonschema-1.5.0.tgz#f6aceb1ab9123563dd901d05f81f9d4883d3b7d8" + integrity sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw== + +keccak@^3.0.0, keccak@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/keccak/-/keccak-3.0.4.tgz#edc09b89e633c0549da444432ecf062ffadee86d" + integrity sha512-3vKuW0jV8J3XNTzvfyicFR5qvxrSAGl7KIhvgOu5cmWwM7tZRj3fMbj/pfIf4be7aznbc+prBWGjywox/g2Y6Q== + dependencies: + node-addon-api "^2.0.0" + node-gyp-build "^4.2.0" + readable-stream "^3.6.0" + +kind-of@^6.0.2: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +levn@~0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" + integrity sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA== + dependencies: + prelude-ls "~1.1.2" + type-check "~0.3.2" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.clonedeep@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" + integrity sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ== + +lodash.isequal@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" + integrity sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ== + +lodash.truncate@^4.4.2: + version "4.4.2" + resolved "https://registry.yarnpkg.com/lodash.truncate/-/lodash.truncate-4.4.2.tgz#5a350da0b1113b837ecfffd5812cbe58d6eae193" + integrity sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw== + +lodash@4.17.21, lodash@^4.17.11, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +loupe@^2.3.6: + version "2.3.7" + resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697" + integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== + dependencies: + get-func-name "^2.0.1" + +lru_map@^0.3.3: + version "0.3.3" + resolved "https://registry.yarnpkg.com/lru_map/-/lru_map-0.3.3.tgz#b5c8351b9464cbd750335a79650a0ec0e56118dd" + integrity sha512-Pn9cox5CsMYngeDbmChANltQl+5pi6XmTrraMSzhPmMBbmgcxmqWry0U3PGapCU1yB4/LqCcom7qhHZiF/jGfQ== + +make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +markdown-table@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" + integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +md5.js@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" + integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + safe-buffer "^5.1.2" + +memorystream@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" + integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== + +merge2@^1.2.3, merge2@^1.3.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +micro-ftch@^0.3.1: + version "0.3.1" + resolved "https://registry.yarnpkg.com/micro-ftch/-/micro-ftch-0.3.1.tgz#6cb83388de4c1f279a034fb0cf96dfc050853c5f" + integrity sha512-/0LLxhzP0tfiR5hcQebtudP56gUurs2CLkGarnCiB/OqEyUFQ6U3paQi/tgLv0hBJYt2rnr9MNpxz4fiiugstg== + +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +mime-types@^2.1.12, mime-types@^2.1.35: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" + integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== + +minimalistic-crypto-utils@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" + integrity sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg== + +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@^5.0.1, minimatch@^5.1.6: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@0.5.x: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +mkdirp@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mnemonist@^0.38.0: + version "0.38.5" + resolved "https://registry.yarnpkg.com/mnemonist/-/mnemonist-0.38.5.tgz#4adc7f4200491237fe0fa689ac0b86539685cade" + integrity sha512-bZTFT5rrPKtPJxj8KSV0WkPyNxl72vQepqqVUAW2ARUpUSF2qXMB6jZj7hW5/k7C1rtpzqbD/IIbJwLXUjCHeg== + dependencies: + obliterator "^2.0.0" + +mocha@^10.0.0, mocha@^10.2.0: + version "10.8.2" + resolved "https://registry.yarnpkg.com/mocha/-/mocha-10.8.2.tgz#8d8342d016ed411b12a429eb731b825f961afb96" + integrity sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg== + dependencies: + ansi-colors "^4.1.3" + browser-stdout "^1.3.1" + chokidar "^3.5.3" + debug "^4.3.5" + diff "^5.2.0" + escape-string-regexp "^4.0.0" + find-up "^5.0.0" + glob "^8.1.0" + he "^1.2.0" + js-yaml "^4.1.0" + log-symbols "^4.1.0" + minimatch "^5.1.6" + ms "^2.1.3" + serialize-javascript "^6.0.2" + strip-json-comments "^3.1.1" + supports-color "^8.1.1" + workerpool "^6.5.1" + yargs "^16.2.0" + yargs-parser "^20.2.9" + yargs-unparser "^2.0.0" + +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +ndjson@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ndjson/-/ndjson-2.0.0.tgz#320ac86f6fe53f5681897349b86ac6f43bfa3a19" + integrity sha512-nGl7LRGrzugTtaFcJMhLbpzJM6XdivmbkdlaGcrk/LXg2KL/YBC6z1g70xh0/al+oFuVFP8N8kiWRucmeEH/qQ== + dependencies: + json-stringify-safe "^5.0.1" + minimist "^1.2.5" + readable-stream "^3.6.0" + split2 "^3.0.0" + through2 "^4.0.0" + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +node-addon-api@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-2.0.2.tgz#432cfa82962ce494b132e9d72a15b29f71ff5d32" + integrity sha512-Ntyt4AIXyaLIuMHF6IOoTakB3K+RWxwtsHNRxllEoA6vPwP9o4866g6YWDLUdnucilZhmkxiHwHr11gAENw+QA== + +node-addon-api@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-5.1.0.tgz#49da1ca055e109a23d537e9de43c09cca21eb762" + integrity sha512-eh0GgfEkpnoWDq+VY8OyvYhFEzBk6jIYbRKdIlyTiAXIVJ8PyBaKb0rp7oDtoddbdoHWhq8wwr+XZ81F1rpNdA== + +node-emoji@^1.10.0: + version "1.11.0" + resolved "https://registry.yarnpkg.com/node-emoji/-/node-emoji-1.11.0.tgz#69a0150e6946e2f115e9d7ea4df7971e2628301c" + integrity sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A== + dependencies: + lodash "^4.17.21" + +node-gyp-build@^4.2.0: + version "4.8.4" + resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.8.4.tgz#8a70ee85464ae52327772a90d66c6077a900cfc8" + integrity sha512-LA4ZjwlnUblHVgq0oBF3Jl/6h/Nvs5fzBLwdEF4nuxnFdsfajde4WfxtJr3CaiH+F6ewcIB/q4jQ4UzPyid+CQ== + +nofilter@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/nofilter/-/nofilter-3.1.0.tgz#c757ba68801d41ff930ba2ec55bab52ca184aa66" + integrity sha512-l2NNj07e9afPnhAhvgVrCD/oy2Ai1yfLpuo3EpiO1jFTsB4sFz6oIfAfSZyQzVpkZQ9xS8ZS5g1jCBgq4Hwo0g== + +nopt@3.x: + version "3.0.6" + resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" + integrity sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg== + dependencies: + abbrev "1" + +normalize-path@^3.0.0, normalize-path@~3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +number-to-bn@1.7.0: + version "1.7.0" + resolved "https://registry.yarnpkg.com/number-to-bn/-/number-to-bn-1.7.0.tgz#bb3623592f7e5f9e0030b1977bd41a0c53fe1ea0" + integrity sha512-wsJ9gfSz1/s4ZsJN01lyonwuxA1tml6X1yBDnfpMglypcBRFZZkus26EdPSlqS5GJfYddVZa22p3VNb3z5m5Ig== + dependencies: + bn.js "4.11.6" + strip-hex-prefix "1.0.0" + +object-assign@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +obliterator@^2.0.0: + version "2.0.5" + resolved "https://registry.yarnpkg.com/obliterator/-/obliterator-2.0.5.tgz#031e0145354b0c18840336ae51d41e7d6d2c76aa" + integrity sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw== + +once@1.x, once@^1.3.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +optionator@^0.8.1: + version "0.8.3" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" + integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== + dependencies: + deep-is "~0.1.3" + fast-levenshtein "~2.0.6" + levn "~0.3.0" + prelude-ls "~1.1.2" + type-check "~0.3.2" + word-wrap "~1.2.3" + +ordinal@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/ordinal/-/ordinal-1.0.3.tgz#1a3c7726a61728112f50944ad7c35c06ae3a0d4d" + integrity sha512-cMddMgb2QElm8G7vdaa02jhUNbTSrhsgAGUz1OokD83uJTwSUn+nKoNoKVVaRa08yF6sgfO7Maou1+bgLd9rdQ== + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-limit@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-map@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" + integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== + dependencies: + aggregate-error "^3.0.0" + +parse-cache-control@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parse-cache-control/-/parse-cache-control-1.0.1.tgz#8eeab3e54fa56920fe16ba38f77fa21aacc2d74e" + integrity sha512-60zvsJReQPX5/QP0Kzfd/VrpjScIQ7SHBW6bFCYfEP+fp0Eppr1SHhIO5nd1PjZtvclzSzES9D/p5nFJurwfWg== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-parse@^1.0.6, path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +pathval@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d" + integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== + +pbkdf2@^3.0.17: + version "3.1.2" + resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.1.2.tgz#dd822aa0887580e52f1a039dc3eda108efae3075" + integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== + dependencies: + create-hash "^1.1.2" + create-hmac "^1.1.4" + ripemd160 "^2.0.1" + safe-buffer "^5.0.1" + sha.js "^2.4.8" + +picocolors@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +picomatch@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab" + integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg== + +pify@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" + integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== + +prelude-ls@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" + integrity sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w== + +prettier@^2.3.1: + version "2.8.8" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" + integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +promise@^8.0.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/promise/-/promise-8.3.0.tgz#8cb333d1edeb61ef23869fbb8a4ea0279ab60e0a" + integrity sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg== + dependencies: + asap "~2.0.6" + +prompts@^2.4.2: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +qs@^6.4.0: + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== + dependencies: + side-channel "^1.1.0" + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +randombytes@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" + integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== + dependencies: + safe-buffer "^5.1.0" + +raw-body@^2.4.1: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.6.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^2.2.2: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== + +readdirp@~3.6.0: + version "3.6.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.6.0.tgz#74a370bd857116e245b29cc97340cd431a02a6c7" + integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== + dependencies: + picomatch "^2.2.1" + +rechoir@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" + integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== + dependencies: + resolve "^1.1.6" + +recursive-readdir@^2.2.2: + version "2.2.3" + resolved "https://registry.yarnpkg.com/recursive-readdir/-/recursive-readdir-2.2.3.tgz#e726f328c0d69153bcabd5c322d3195252379372" + integrity sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA== + dependencies: + minimatch "^3.0.5" + +reduce-flatten@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/reduce-flatten/-/reduce-flatten-2.0.0.tgz#734fd84e65f375d7ca4465c69798c25c9d10ae27" + integrity sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w== + +req-cwd@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-cwd/-/req-cwd-2.0.0.tgz#d4082b4d44598036640fb73ddea01ed53db49ebc" + integrity sha512-ueoIoLo1OfB6b05COxAA9UpeoscNpYyM+BqYlA7H6LVF4hKGPXQQSSaD2YmvDVJMkk4UDpAHIeU1zG53IqjvlQ== + dependencies: + req-from "^2.0.0" + +req-from@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/req-from/-/req-from-2.0.0.tgz#d74188e47f93796f4aa71df6ee35ae689f3e0e70" + integrity sha512-LzTfEVDVQHBRfjOUMgNBA+V6DWsSnoeKzf42J7l0xa/B4jyPOuuF5MlNSmomLNGemWTnV2TIdjSSLnEn95fOQA== + dependencies: + resolve-from "^3.0.0" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +resolve-from@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" + integrity sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw== + +resolve@1.1.x: + version "1.1.7" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" + integrity sha512-9znBF0vBcaSN3W2j7wKvdERPwqTxSpCq+if5C0WoTCyV9n24rua28jeuQ2pL/HOf+yUe/Mef+H/5p60K0Id3bg== + +resolve@1.17.0: + version "1.17.0" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" + integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== + dependencies: + path-parse "^1.0.6" + +resolve@^1.1.6: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + +ripemd160@^2.0.0, ripemd160@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" + integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== + dependencies: + hash-base "^3.0.0" + inherits "^2.0.1" + +rlp@^2.2.3, rlp@^2.2.4: + version "2.2.7" + resolved "https://registry.yarnpkg.com/rlp/-/rlp-2.2.7.tgz#33f31c4afac81124ac4b283e2bd4d9720b30beaf" + integrity sha512-d5gdPmgQ0Z+AklL2NVXr/IoSjNZFfTVvQWzL/AM2AOcSzYP2xjlb0AC8YyCLc41MSNf6P6QVtjgPdmVtzb+4lQ== + dependencies: + bn.js "^5.2.0" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@^5.2.0, safe-buffer@^5.2.1, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +"safer-buffer@>= 2.1.2 < 3": + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +sc-istanbul@^0.4.5: + version "0.4.6" + resolved "https://registry.yarnpkg.com/sc-istanbul/-/sc-istanbul-0.4.6.tgz#cf6784355ff2076f92d70d59047d71c13703e839" + integrity sha512-qJFF/8tW/zJsbyfh/iT/ZM5QNHE3CXxtLJbZsL+CzdJLBsPD7SedJZoUA4d8iAcN2IoMp/Dx80shOOd2x96X/g== + dependencies: + abbrev "1.0.x" + async "1.x" + escodegen "1.8.x" + esprima "2.7.x" + glob "^5.0.15" + handlebars "^4.0.1" + js-yaml "3.x" + mkdirp "0.5.x" + nopt "3.x" + once "1.x" + resolve "1.1.x" + supports-color "^3.1.0" + which "^1.1.1" + wordwrap "^1.0.0" + +scrypt-js@3.0.1, scrypt-js@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/scrypt-js/-/scrypt-js-3.0.1.tgz#d314a57c2aef69d1ad98a138a21fe9eafa9ee312" + integrity sha512-cdwTTnqPu0Hyvf5in5asVdZocVDTNRmR7XEcJuIzMjJeSHybHl7vpB66AzwTaIg6CLSbtjcxc8fqcySfnTkccA== + +secp256k1@^4.0.1: + version "4.0.4" + resolved "https://registry.yarnpkg.com/secp256k1/-/secp256k1-4.0.4.tgz#58f0bfe1830fe777d9ca1ffc7574962a8189f8ab" + integrity sha512-6JfvwvjUOn8F/jUoBY2Q1v5WY5XS+rj8qSe0v8Y4ezH4InLgTEeOOPQsRll9OV429Pvo6BCHGavIyJfr3TAhsw== + dependencies: + elliptic "^6.5.7" + node-addon-api "^5.0.0" + node-gyp-build "^4.2.0" + +semver@^5.5.0: + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@^6.3.0: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +semver@^7.3.4: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + +serialize-javascript@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.2.tgz#defa1e055c83bf6d59ea805d8da862254eb6a6c2" + integrity sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g== + dependencies: + randombytes "^2.1.0" + +setimmediate@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" + integrity sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA== + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +sha.js@^2.4.0, sha.js@^2.4.8: + version "2.4.11" + resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" + integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== + dependencies: + inherits "^2.0.1" + safe-buffer "^5.0.1" + +sha1@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/sha1/-/sha1-1.1.1.tgz#addaa7a93168f393f19eb2b15091618e2700f848" + integrity sha512-dZBS6OrMjtgVkopB1Gmo4RQCDKiZsqcpAQpkV/aaj+FCrCg8r4I4qMkDPQjBgLIxlmu9k4nUbWq6ohXahOneYA== + dependencies: + charenc ">= 0.0.1" + crypt ">= 0.0.1" + +shelljs@^0.8.3: + version "0.8.5" + resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" + integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== + dependencies: + glob "^7.0.0" + interpret "^1.0.0" + rechoir "^0.6.2" + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +slice-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" + integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== + dependencies: + ansi-styles "^4.0.0" + astral-regex "^2.0.0" + is-fullwidth-code-point "^3.0.0" + +solc@0.8.26: + version "0.8.26" + resolved "https://registry.yarnpkg.com/solc/-/solc-0.8.26.tgz#afc78078953f6ab3e727c338a2fefcd80dd5b01a" + integrity sha512-yiPQNVf5rBFHwN6SIf3TUUvVAFKcQqmSUFeq+fb6pNRCo0ZCgpYOZDi3BVoezCPIAcKrVYd/qXlBLUP9wVrZ9g== + dependencies: + command-exists "^1.2.8" + commander "^8.1.0" + follow-redirects "^1.12.1" + js-sha3 "0.8.0" + memorystream "^0.3.1" + semver "^5.5.0" + tmp "0.0.33" + +solidity-coverage@^0.8.1: + version "0.8.14" + resolved "https://registry.yarnpkg.com/solidity-coverage/-/solidity-coverage-0.8.14.tgz#db9bfcc10e3bc369fc074b35b267d665bcc6ae2e" + integrity sha512-ItAAObe5GaEOp20kXC2BZRnph+9P7Rtoqg2mQc2SXGEHgSDF2wWd1Wxz3ntzQWXkbCtIIGdJT918HG00cObwbA== + dependencies: + "@ethersproject/abi" "^5.0.9" + "@solidity-parser/parser" "^0.19.0" + chalk "^2.4.2" + death "^1.1.0" + difflib "^0.2.4" + fs-extra "^8.1.0" + ghost-testrpc "^0.0.2" + global-modules "^2.0.0" + globby "^10.0.1" + jsonschema "^1.2.4" + lodash "^4.17.21" + mocha "^10.2.0" + node-emoji "^1.10.0" + pify "^4.0.1" + recursive-readdir "^2.2.2" + sc-istanbul "^0.4.5" + semver "^7.3.4" + shelljs "^0.8.3" + web3-utils "^1.3.6" + +source-map-support@^0.5.13: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@~0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.2.0.tgz#dab73fbcfc2ba819b4de03bd6f6eaa48164b3f9d" + integrity sha512-CBdZ2oa/BHhS4xj5DlhjWNHcan57/5YuvfdLf17iVmIpd9KRm+DFLmC6nBNj+6Ua7Kt3TmOjDpQT1aTYOQtoUA== + dependencies: + amdefine ">=0.0.4" + +split2@^3.0.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +stacktrace-parser@^0.1.10: + version "0.1.11" + resolved "https://registry.yarnpkg.com/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz#c7c08f9b29ef566b9a6f7b255d7db572f66fabc4" + integrity sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg== + dependencies: + type-fest "^0.7.1" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +string-format@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/string-format/-/string-format-2.0.0.tgz#f2df2e7097440d3b65de31b6d40d54c96eaffb9b" + integrity sha512-bbEs3scLeYNXLecRRuk6uJxdXUSj6le/8rNPHChIJTn2V79aXVTR1EH2OH5zLKKoz0V02fOUKZZcw01pLUShZA== + +string-width@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" + integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== + dependencies: + is-fullwidth-code-point "^2.0.0" + strip-ansi "^4.0.0" + +string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.2, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" + integrity sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow== + dependencies: + ansi-regex "^3.0.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-hex-prefix@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-hex-prefix/-/strip-hex-prefix-1.0.0.tgz#0c5f155fef1151373377de9dbb588da05500e36f" + integrity sha512-q8d4ue7JGEiVcypji1bALTos+0pWtyGlivAWyPuTkHzuTCJqrK9sWxYQZUq6Nq3cuyv3bm734IhHvHtGGURU6A== + dependencies: + is-hex-prefixed "1.0.0" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +supports-color@^3.1.0: + version "3.2.3" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-3.2.3.tgz#65ac0504b3954171d8a64946b2ae3cbb8a5f54f6" + integrity sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A== + dependencies: + has-flag "^1.0.0" + +supports-color@^5.3.0: + version "5.5.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" + integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== + dependencies: + has-flag "^3.0.0" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +sync-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/sync-request/-/sync-request-6.1.0.tgz#e96217565b5e50bbffe179868ba75532fb597e68" + integrity sha512-8fjNkrNlNCrVc/av+Jn+xxqfCjYaBoHqCsDz6mt030UMxJGr+GSfCV1dQt2gRtlL63+VPidwDVLr7V2OcTSdRw== + dependencies: + http-response-object "^3.0.1" + sync-rpc "^1.2.1" + then-request "^6.0.0" + +sync-rpc@^1.2.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/sync-rpc/-/sync-rpc-1.3.6.tgz#b2e8b2550a12ccbc71df8644810529deb68665a7" + integrity sha512-J8jTXuZzRlvU7HemDgHi3pGnh/rkoqR/OZSjhTyyZrEkkYQbk7Z33AXp37mkPfPpfdOuj7Ex3H/TJM1z48uPQw== + dependencies: + get-port "^3.1.0" + +table-layout@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/table-layout/-/table-layout-1.0.2.tgz#c4038a1853b0136d63365a734b6931cf4fad4a04" + integrity sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A== + dependencies: + array-back "^4.0.1" + deep-extend "~0.6.0" + typical "^5.2.0" + wordwrapjs "^4.0.0" + +table@^6.8.0: + version "6.9.0" + resolved "https://registry.yarnpkg.com/table/-/table-6.9.0.tgz#50040afa6264141c7566b3b81d4d82c47a8668f5" + integrity sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A== + dependencies: + ajv "^8.0.1" + lodash.truncate "^4.4.2" + slice-ansi "^4.0.0" + string-width "^4.2.3" + strip-ansi "^6.0.1" + +then-request@^6.0.0: + version "6.0.2" + resolved "https://registry.yarnpkg.com/then-request/-/then-request-6.0.2.tgz#ec18dd8b5ca43aaee5cb92f7e4c1630e950d4f0c" + integrity sha512-3ZBiG7JvP3wbDzA9iNY5zJQcHL4jn/0BWtXIkagfz7QgOL/LqjCEOBQuJNZfu0XYnv5JhKh+cDxCPM4ILrqruA== + dependencies: + "@types/concat-stream" "^1.6.0" + "@types/form-data" "0.0.33" + "@types/node" "^8.0.0" + "@types/qs" "^6.2.31" + caseless "~0.12.0" + concat-stream "^1.6.0" + form-data "^2.2.0" + http-basic "^8.1.1" + http-response-object "^3.0.1" + promise "^8.0.0" + qs "^6.4.0" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +tinyglobby@^0.2.6: + version "0.2.12" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.12.tgz#ac941a42e0c5773bd0b5d08f32de82e74a1a61b5" + integrity sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww== + dependencies: + fdir "^6.4.3" + picomatch "^4.0.2" + +tmp@0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +ts-command-line-args@^2.2.0: + version "2.5.1" + resolved "https://registry.yarnpkg.com/ts-command-line-args/-/ts-command-line-args-2.5.1.tgz#e64456b580d1d4f6d948824c274cf6fa5f45f7f0" + integrity sha512-H69ZwTw3rFHb5WYpQya40YAX2/w7Ut75uUECbgBIsLmM+BNuYnxsltfyyLMxy6sEeKxgijLTnQtLd0nKd6+IYw== + dependencies: + chalk "^4.1.0" + command-line-args "^5.1.1" + command-line-usage "^6.1.0" + string-format "^2.0.0" + +ts-essentials@^7.0.1: + version "7.0.3" + resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-7.0.3.tgz#686fd155a02133eedcc5362dc8b5056cde3e5a38" + integrity sha512-8+gr5+lqO3G84KdiTSMRLtuyJ+nTBVRKuCrK4lidMPdVeEp0uqC875uE5NMcaA7YYMN7XsNiFQuMvasF8HT/xQ== + +ts-node@^10.9.2: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tslib@2.7.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== + +tslib@^1.9.3: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + +tsort@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/tsort/-/tsort-0.0.1.tgz#e2280f5e817f8bf4275657fd0f9aebd44f5a2786" + integrity sha512-Tyrf5mxF8Ofs1tNoxA13lFeZ2Zrbd6cKbuH3V+MQ5sb6DtBj5FjrXVsRWT8YvNAQTqNoz66dz1WsbigI22aEnw== + +tweetnacl-util@^0.15.1: + version "0.15.1" + resolved "https://registry.yarnpkg.com/tweetnacl-util/-/tweetnacl-util-0.15.1.tgz#b80fcdb5c97bcc508be18c44a4be50f022eea00b" + integrity sha512-RKJBIj8lySrShN4w6i/BonWp2Z/uxwC3h4y7xsRrpP59ZboCd0GpEVsOnMDYLMmKBpYhb5TgHzZXy7wTfYFBRw== + +tweetnacl@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-1.0.3.tgz#ac0af71680458d8a6378d0d0d050ab1407d35596" + integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== + +type-check@~0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" + integrity sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg== + dependencies: + prelude-ls "~1.1.2" + +type-detect@^4.0.0, type-detect@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c" + integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.7.1.tgz#8dda65feaf03ed78f0a3f9678f1869147f7c5c48" + integrity sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg== + +typechain@8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/typechain/-/typechain-8.3.2.tgz#1090dd8d9c57b6ef2aed3640a516bdbf01b00d73" + integrity sha512-x/sQYr5w9K7yv3es7jo4KTX05CLxOf7TRWwoHlrjRh8H82G64g+k7VuWPJlgMo6qrjfCulOdfBjiaDtmhFYD/Q== + dependencies: + "@types/prettier" "^2.1.1" + debug "^4.3.1" + fs-extra "^7.0.0" + glob "7.1.7" + js-sha3 "^0.8.0" + lodash "^4.17.15" + mkdirp "^1.0.4" + prettier "^2.3.1" + ts-command-line-args "^2.2.0" + ts-essentials "^7.0.1" + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA== + +typescript@4.9.5: + version "4.9.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" + integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== + +typical@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-4.0.0.tgz#cbeaff3b9d7ae1e2bbfaf5a4e6f11eccfde94fc4" + integrity sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw== + +typical@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/typical/-/typical-5.2.0.tgz#4daaac4f2b5315460804f0acf6cb69c52bb93066" + integrity sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg== + +uglify-js@^3.1.4: + version "3.19.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== + +undici-types@~6.19.2: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== + +undici-types@~6.20.0: + version "6.20.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433" + integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg== + +undici@^5.14.0: + version "5.28.5" + resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.5.tgz#b2b94b6bf8f1d919bc5a6f31f2c01deb02e54d4b" + integrity sha512-zICwjrDrcrUE0pyyJc1I2QzBkLM8FINsgOrt6WjA+BgajVq9Nxu2PbFFXUrAggLfDXlZGZBVZYw7WNV5KiBiBA== + dependencies: + "@fastify/busboy" "^2.0.0" + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unpipe@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +utf8@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/utf8/-/utf8-3.0.0.tgz#f052eed1364d696e769ef058b183df88c87f69d1" + integrity sha512-E8VjFIQ/TyQgp+TZfS6l8yp/xWppSAHzidGiRrqe4bK4XP9pTRyKFgGJpO3SN7zdX4DeomTrwaseCHovfpFcqQ== + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +web3-utils@^1.3.6: + version "1.10.4" + resolved "https://registry.yarnpkg.com/web3-utils/-/web3-utils-1.10.4.tgz#0daee7d6841641655d8b3726baf33b08eda1cbec" + integrity sha512-tsu8FiKJLk2PzhDl9fXbGUWTkkVXYhtTA+SmEFkKft+9BgwLxfCRpU96sWv7ICC8zixBNd3JURVoiR3dUXgP8A== + dependencies: + "@ethereumjs/util" "^8.1.0" + bn.js "^5.2.1" + ethereum-bloom-filters "^1.0.6" + ethereum-cryptography "^2.1.2" + ethjs-unit "0.1.6" + number-to-bn "1.7.0" + randombytes "^2.1.0" + utf8 "3.0.0" + +which@^1.1.1, which@^1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +widest-line@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/widest-line/-/widest-line-3.1.0.tgz#8292333bbf66cb45ff0de1603b136b7ae1496eca" + integrity sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg== + dependencies: + string-width "^4.0.0" + +word-wrap@~1.2.3: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +wordwrapjs@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/wordwrapjs/-/wordwrapjs-4.0.1.tgz#d9790bccfb110a0fc7836b5ebce0937b37a8b98f" + integrity sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA== + dependencies: + reduce-flatten "^2.0.0" + typical "^5.2.0" + +workerpool@^6.5.1: + version "6.5.1" + resolved "https://registry.yarnpkg.com/workerpool/-/workerpool-6.5.1.tgz#060f73b39d0caf97c6db64da004cd01b4c099544" + integrity sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA== + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +ws@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.4.6.tgz#5654ca8ecdeee47c33a9a4bf6d28e2be2980377c" + integrity sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A== + +ws@8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + +ws@8.18.0: + version "8.18.0" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.0.tgz#0d7505a6eafe2b0e712d232b42279f53bc289bbc" + integrity sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw== + +ws@^7.4.6: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yargs-parser@^20.2.2, yargs-parser@^20.2.9: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs-unparser@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/yargs-unparser/-/yargs-unparser-2.0.0.tgz#f131f9226911ae5d9ad38c432fe809366c2325eb" + integrity sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA== + dependencies: + camelcase "^6.0.0" + decamelize "^4.0.0" + flat "^5.0.2" + is-plain-obj "^2.1.0" + +yargs@^16.2.0: + version "16.2.0" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" + integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== + dependencies: + cliui "^7.0.2" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.0" + y18n "^5.0.5" + yargs-parser "^20.2.2" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== diff --git a/protocol-units/post-confirmations/eth-network-params.yaml b/protocol-units/post-confirmations/eth-network-params.yaml new file mode 100644 index 00000000..6e01d4ae --- /dev/null +++ b/protocol-units/post-confirmations/eth-network-params.yaml @@ -0,0 +1,23 @@ +participants: + - el_client_type: geth + cl_client_type: lighthouse + beacon_extra_params: + - "--boot-nodes=enr:-MS4Q..." + - el_client_type: geth + cl_client_type: lodestar + beacon_extra_params: + - "--boot-nodes=enr:-MS4Q..." + - el_client_type: geth + cl_client_type: teku + beacon_extra_params: + - "--boot-nodes=enr:-MS4Q..." + +network_params: + preregistered_validator_keys_mnemonic: "giant issue aisle success illegal bike spike question tent bar rely arctic volcano long crawl hungry vocal artwork sniff fantasy very lucky have athlete" + num_validator_keys_per_node: 64 + network_id: "3151908" + deposit_contract_address: "0x4242424242424242424242424242424242424242" + seconds_per_slot: 12 + genesis_delay: 120 + capella_fork_epoch: 5 + diff --git a/protocol-units/post-confirmations/manager/Cargo.toml b/protocol-units/post-confirmations/manager/Cargo.toml new file mode 100644 index 00000000..4b30e09a --- /dev/null +++ b/protocol-units/post-confirmations/manager/Cargo.toml @@ -0,0 +1,35 @@ +[package] +name = "post-confirmationssettlement-manager" +version = { workspace = true } +edition = { workspace = true } +license = { workspace = true } +authors = { workspace = true } +repository = { workspace = true } +homepage = { workspace = true } +publish = { workspace = true } +rust-version = { workspace = true } + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html + +[dependencies] +post-confirmationsconfig = { workspace = true } +post-confirmationssettlement-client = { workspace = true } +movement-types = { workspace = true } + +anyhow = { workspace = true } +async-stream = { workspace = true } +async-trait = { workspace = true } +futures = { workspace = true } +tokio = { workspace = true } +tokio-stream = { workspace = true } +serde_json = { workspace = true } + +[dev-dependencies] +post-confirmationssettlement-client = { workspace = true, features = ["mock"] } + +[features] +default = ["stub"] +stub = [] + +[lints] +workspace = true diff --git a/protocol-units/post-confirmations/manager/src/lib.rs b/protocol-units/post-confirmations/manager/src/lib.rs new file mode 100644 index 00000000..e9b5b5a5 --- /dev/null +++ b/protocol-units/post-confirmations/manager/src/lib.rs @@ -0,0 +1,18 @@ +use post_confirmations_types::block_commitment::{SuperBlockCommitment, SuperBlockCommitmentEvent}; +use tokio_stream::Stream; + +mod manager; + +pub use manager::Manager as McrSettlementManager; + +pub type CommitmentEventStream = + std::pin::Pin> + Send>>; + +#[async_trait::async_trait] +pub trait McrSettlementManagerOperations { + /// Adds a block commitment to the manager queue. + async fn post_block_commitment( + &self, + block_commitment: SuperBlockCommitment, + ) -> Result<(), anyhow::Error>; +} diff --git a/protocol-units/post-confirmations/manager/src/manager.rs b/protocol-units/post-confirmations/manager/src/manager.rs new file mode 100644 index 00000000..2a85136d --- /dev/null +++ b/protocol-units/post-confirmations/manager/src/manager.rs @@ -0,0 +1,282 @@ +use crate::{CommitmentEventStream, McrSettlementManagerOperations, SuperBlockCommitmentEvent}; + +use post_confirmations_config::Config; +use post_confirmations_settlement_client::McrSettlementClientOperations; +use post_confirmations_types::block_commitment::{ + SuperBlockCommitment, SuperBlockCommitmentRejectionReason, +}; + +use async_stream::stream; +use async_trait::async_trait; +use futures::future::{self, Either}; +use tokio::sync::mpsc; +use tokio::time; +use tokio_stream::StreamExt; + +use std::collections::BTreeMap; +use std::mem; +use std::time::Duration; + +/// Public handle for the MCR settlement manager. +pub struct Manager { + sender: mpsc::Sender, +} + +impl Manager { + /// Creates a new MCR settlement manager. + /// + /// Returns the handle with the public API and the stream to receive commitment events. + /// The stream needs to be polled to drive the MCR settlement client and + /// process the commitments. + pub fn new( + client: C, + config: &Config, + ) -> (Self, CommitmentEventStream) { + let batch_timeout = Duration::from_millis(config.transactions.batch_timeout); + let (sender, receiver) = mpsc::channel(16); + let event_stream = process_commitments(receiver, client, batch_timeout); + (Self { sender }, event_stream) + } +} + +#[async_trait] +impl McrSettlementManagerOperations for Manager { + async fn post_block_commitment( + &self, + block_commitment: SuperBlockCommitment, + ) -> Result<(), anyhow::Error> { + self.sender.send(block_commitment).await?; + Ok(()) + } +} + +fn process_commitments( + mut receiver: mpsc::Receiver, + client: C, + batch_timeout: Duration, +) -> CommitmentEventStream { + // Can't mix try_stream! and select!, see https://github.com/tokio-rs/async-stream/issues/63 + Box::pin(stream! { + let mut settlement_stream = client.stream_block_commitments().await?; + let mut max_height = client.get_max_tolerable_block_height().await?; + let mut ahead_of_settlement = false; + let mut commitments_to_settle = BTreeMap::new(); + let mut batch_acc = Vec::new(); + let mut batch_ready = Either::Left(future::pending::<()>()); + loop { + tokio::select! { + Some(block_commitment) = receiver.recv(), if !ahead_of_settlement => { + commitments_to_settle.insert( + block_commitment.height(), + block_commitment.commitment().clone(), + ); + if block_commitment.height() > max_height { + // Can't post this commitment to the contract yet. + // Post the previously accumulated commitments as a batch + // and pause reading from input. + ahead_of_settlement = true; + let batch = mem::replace(&mut batch_acc, Vec::new()); + if let Err(e) = client.post_block_commitment_batch(batch).await { + yield Err(e); + break; + } + } + // If this commitment starts a new batch, start the timeout + if batch_acc.is_empty() { + batch_ready = Either::Right(Box::pin(time::sleep(batch_timeout))); + } + batch_acc.push(block_commitment); + } + _ = &mut batch_ready => { + // Batch timeout has expired, post the commitments we have now + let batch = mem::replace(&mut batch_acc, Vec::new()); + if let Err(e) = client.post_block_commitment_batch(batch).await { + yield Err(e); + break; + } + // Disable the batch timeout + batch_ready = Either::Left(future::pending::<()>()); + } + Some(res) = settlement_stream.next() => { + let settled_commitment = match res { + Ok(commitment) => commitment, + Err(e) => { + yield Err(e); + break; + } + }; + + let height = settled_commitment.height(); + if let Some(commitment) = commitments_to_settle.remove(&height) { + let event = if commitment == settled_commitment.commitment() { + SuperBlockCommitmentEvent::Accepted(settled_commitment) + } else { + SuperBlockCommitmentEvent::Rejected { + height, + reason: SuperBlockCommitmentRejectionReason::InvalidCommitment, + } + }; + yield Ok(event); + } else if let Some((&lh, _)) = commitments_to_settle.last_key_value() { + if lh < height { + // Settlement has left some commitments behind, but the client could + // deliver them of order? + todo!("Handle falling behind on settlement") + } + } + // Remove back-pressure if we can proceed settling new blocks. + if ahead_of_settlement { + let new_max_height = match client.get_max_tolerable_block_height().await { + Ok(h) => h, + Err(e) => { + yield Err(e); + break; + } + }; + if new_max_height > max_height { + max_height = new_max_height; + ahead_of_settlement = false; + } + } + } + else => break + } + } + }) +} + +#[cfg(test)] +mod tests { + use super::*; + use post_confirmations_settlement_client::mock::McrSettlementClient; + use post_confirmations_types::block_commitment::{Commitment, SuperBlockCommitment}; + + #[tokio::test] + async fn test_block_commitment_accepted() -> Result<(), anyhow::Error> { + let config = Config::default(); + let mut client = McrSettlementClient::new(); + client.block_lead_tolerance = 1; + let (manager, mut event_stream) = Manager::new(client.clone(), &config); + let commitment = SuperBlockCommitment::new(1, Default::default(), Commitment::new([1; 32])); + manager.post_block_commitment(commitment.clone()).await?; + let commitment2 = + SuperBlockCommitment::new(2, Default::default(), Commitment::new([2; 32])); + manager.post_block_commitment(commitment2).await?; + let item = event_stream.next().await; + let res = item.unwrap(); + let event = res.unwrap(); + assert_eq!(event, SuperBlockCommitmentEvent::Accepted(commitment)); + Ok(()) + } + + #[tokio::test] + async fn test_block_commitment_rejected() -> Result<(), anyhow::Error> { + let config = Config::default(); + let mut client = McrSettlementClient::new(); + client.block_lead_tolerance = 1; + let (manager, mut event_stream) = Manager::new(client.clone(), &config); + let commitment = SuperBlockCommitment::new(1, Default::default(), Commitment::new([1; 32])); + client + .override_block_commitment(SuperBlockCommitment::new( + 1, + Default::default(), + Commitment::new([3; 32]), + )) + .await; + manager.post_block_commitment(commitment.clone()).await?; + let commitment2 = + SuperBlockCommitment::new(2, Default::default(), Commitment::new([2; 32])); + manager.post_block_commitment(commitment2).await?; + let item = event_stream.next().await; + let res = item.unwrap(); + let event = res.unwrap(); + assert_eq!( + event, + SuperBlockCommitmentEvent::Rejected { + height: 1, + reason: SuperBlockCommitmentRejectionReason::InvalidCommitment, + } + ); + Ok(()) + } + + #[tokio::test] + async fn test_back_pressure() -> Result<(), anyhow::Error> { + let config = Config::default(); + let mut client = McrSettlementClient::new(); + client.block_lead_tolerance = 2; + client.pause_after(2).await; + let (manager, mut event_stream) = Manager::new(client.clone(), &config); + + let commitment1 = + SuperBlockCommitment::new(1, Default::default(), Commitment::new([1; 32])); + manager.post_block_commitment(commitment1.clone()).await?; + let commitment2 = + SuperBlockCommitment::new(2, Default::default(), Commitment::new([2; 32])); + manager.post_block_commitment(commitment2.clone()).await?; + let commitment3 = + SuperBlockCommitment::new(3, Default::default(), Commitment::new([3; 32])); + manager.post_block_commitment(commitment3.clone()).await?; + + let event = event_stream.next().await.expect("stream has ended")?; + assert_eq!(event, SuperBlockCommitmentEvent::Accepted(commitment1.clone())); + let event = event_stream.next().await.expect("stream has ended")?; + assert_eq!(event, SuperBlockCommitmentEvent::Accepted(commitment2.clone())); + + // The batch of first two should have been posted, + // the third commitment is batched in the manager. + assert_eq!(client.get_commitment_at_height(1).await?, Some(commitment1.clone())); + assert_eq!(client.get_commitment_at_height(2).await?, Some(commitment2.clone())); + assert_eq!(client.get_commitment_at_height(3).await?, None); + + // Unblock the client, allowing processing of commitments to resume. + client.resume().await; + + let commitment4 = + SuperBlockCommitment::new(4, Default::default(), Commitment::new([4; 32])); + manager.post_block_commitment(commitment4).await?; + let commitment5 = + SuperBlockCommitment::new(5, Default::default(), Commitment::new([5; 32])); + manager.post_block_commitment(commitment5).await?; + + let event = event_stream.next().await.expect("stream has ended")?; + assert_eq!(event, SuperBlockCommitmentEvent::Accepted(commitment3.clone())); + + Ok(()) + } + + #[tokio::test] + async fn test_batch_timeout() -> Result<(), anyhow::Error> { + let mut config = Config::default(); + config.transactions.batch_timeout = 100; + let client = McrSettlementClient::new(); + let (manager, mut event_stream) = Manager::new(client.clone(), &config); + + let commitment1 = + SuperBlockCommitment::new(1, Default::default(), Commitment::new([1; 32])); + manager.post_block_commitment(commitment1.clone()).await?; + let commitment2 = + SuperBlockCommitment::new(2, Default::default(), Commitment::new([2; 32])); + manager.post_block_commitment(commitment2.clone()).await?; + + let item = time::timeout(Duration::from_secs(2), event_stream.next()) + .await + .expect("no timeout"); + let event = item.expect("stream has ended")?; + assert_eq!(event, SuperBlockCommitmentEvent::Accepted(commitment1.clone())); + let event = event_stream.next().await.expect("stream has ended")?; + assert_eq!(event, SuperBlockCommitmentEvent::Accepted(commitment2.clone())); + + let commitment3 = + SuperBlockCommitment::new(3, Default::default(), Commitment::new([3; 32])); + manager.post_block_commitment(commitment3.clone()).await?; + + let item = time::timeout(Duration::from_secs(2), event_stream.next()) + .await + .expect("no timeout"); + let event = item.expect("stream has ended")?; + assert_eq!(event, SuperBlockCommitmentEvent::Accepted(commitment3)); + + Ok(()) + } +} diff --git a/protocol-units/post-confirmations/runner/Cargo.toml b/protocol-units/post-confirmations/runner/Cargo.toml new file mode 100644 index 00000000..1ff99ac4 --- /dev/null +++ b/protocol-units/post-confirmations/runner/Cargo.toml @@ -0,0 +1,32 @@ +[package] +name = "post-confirmationssettlement-runner" +description = "An Anvil runner for the MCR Settlement" +version.workspace = true +edition.workspace = true +license.workspace = true +authors.workspace = true +repository.workspace = true +homepage.workspace = true +publish.workspace = true +rust-version.workspace = true + +[dependencies] +post-confirmationsconfig = { workspace = true } +post-confirmationssettlement-client = { workspace = true } +post-confirmationssettlement-setup = { workspace = true } +dot-movement = { workspace = true } +commander = { workspace = true } + +alloy-primitives = { workspace = true } + +anyhow = { workspace = true } +k256 = { workspace = true } +rand = { workspace = true } +serde_json = { workspace = true } +tokio = { workspace = true } +tracing = { workspace = true } +tracing-subscriber = { workspace = true } +ffs-environment = { workspace = true } + +[lints] +workspace = true diff --git a/protocol-units/post-confirmations/runner/src/main.rs b/protocol-units/post-confirmations/runner/src/main.rs new file mode 100644 index 00000000..62847c96 --- /dev/null +++ b/protocol-units/post-confirmations/runner/src/main.rs @@ -0,0 +1,41 @@ +use ffs_environment::{backend::config_file::ConfigFile, ffs_environment}; +use post_confirmations_config::Config; +use post_confirmations_settlement_setup::Setup; + +#[tokio::main] +async fn main() -> Result<(), anyhow::Error> { + use tracing_subscriber::EnvFilter; + + tracing_subscriber::fmt() + .with_env_filter( + EnvFilter::try_from_default_env().unwrap_or_else(|_| EnvFilter::new("info")), + ) + .init(); + + // get the config file + let dot_movement = dot_movement::DotMovement::try_from_env()?; + let config_file = dot_movement.try_get_or_create_config_file().await?; + + // get a matching ffs_environment object + let ffs_environment: ffs_environment = ffs_environment::new( + ConfigFile::new(config_file), + vec!["post_confirmations_settlement".to_string()], + ); + + // Apply all of the setup steps + let anvil_join_handle = ffs_environment + .try_transaction_with_result(|config| async move { + tracing::info!("Config: {:?}", config); + let config = config.unwrap_or_default(); + tracing::info!("Config: {:?}", config); + + let (config, anvil_join_handle) = Setup::default().setup(&dot_movement, config).await?; + Ok((Some(config), anvil_join_handle)) + }) + .await?; + + // wait for anvil to finish + let _ = anvil_join_handle.await?; + + Ok(()) +} From e1729e8d7b8ea68fe700aab896f0393524f4596a Mon Sep 17 00:00:00 2001 From: apenzk Date: Fri, 7 Mar 2025 13:20:10 +0100 Subject: [PATCH 03/25] rename to pcp and fcp --- README.md | 14 +++++++++++++- .../{fast-confirmations => fcp}/README.md | 0 .../{post-confirmations => pcp}/.gitmodules | 0 .../{post-confirmations => pcp}/README copy.md | 0 .../{post-confirmations => pcp}/README.md | 0 .../{post-confirmations => pcp}/client/Cargo.toml | 0 .../client/abis/MCR.json | 0 .../client/abis/MOVEToken.json | 0 .../client/abis/MovementStaking.json | 0 .../client/src/bin/e2e/test_client_settlement.rs | 0 .../client/src/eth_client.rs | 0 .../{post-confirmations => pcp}/client/src/lib.rs | 0 .../client/src/mock.rs | 0 .../client/src/send_eth_transaction.rs | 0 .../{post-confirmations => pcp}/config/Cargo.toml | 0 .../config/src/common/deploy.rs | 0 .../config/src/common/eth_connection.rs | 0 .../config/src/common/mod.rs | 0 .../config/src/common/settlement.rs | 0 .../config/src/common/staking.rs | 0 .../config/src/common/testing.rs | 0 .../config/src/common/transactions.rs | 0 .../{post-confirmations => pcp}/config/src/lib.rs | 0 .../contracts/.DS_Store | Bin .../contracts/.github/workflows/test.yml | 0 .../contracts/.gitignore | 0 .../contracts/.prettierrc | 0 .../contracts/README.md | 0 .../contracts/deployments/local.json | 0 .../contracts/foundry.toml | 0 .../contracts/hardhat.config.ts | 0 .../contracts/kurtosis_instructions.md | 0 .../contracts/package.json | 0 .../contracts/remappings.txt | 0 .../contracts/script/CoreDeployer.s.sol | 0 .../contracts/script/DeployMCR.s.sol | 0 .../contracts/script/DeployMCRDev.s.sol | 0 .../contracts/script/DeployMOVETokenDev.s.sol | 0 .../contracts/script/MCRDeployer.s.sol | 0 .../contracts/script/MOVETokenDeployer.s.sol | 0 .../script/MovementStakingDeployer.s.sol | 0 .../script/MultisigMOVETokenDeployer.s.sol | 0 .../contracts/script/StlMoveDeployer.s.sol | 0 .../contracts/script/VerifyMCRDev.s.sol | 0 .../contracts/script/deploy-safe.sh | 0 .../script/helpers/Create3/CREATE3Factory.sol | 0 .../script/helpers/Create3/ICREATE3Factory.sol | 0 .../contracts/script/helpers/Helper.sol | 0 .../contracts/script/helpers/config.json | 0 .../contracts/script/helpers/configOLD.json | 0 .../contracts/script/helpers/deployments.json | 0 .../contracts/script/helpers/deploymentsOLD.json | 0 .../script/helpers/safe-deployments.json | 0 .../script/helpers/upgrade/deploymove.json | 0 .../contracts/script/helpers/upgrade/mcr.json | 0 .../contracts/script/helpers/upgrade/staking.json | 0 .../contracts/script/helpers/upgrade/stlmove.json | 0 .../contracts/script/install-deps.sh | 0 .../contracts/script/verify-mcr.sh | 0 .../contracts/scripts/README.md | 0 .../contracts/scripts/deploy.ts | 0 .../contracts/scripts/tasks/utils.ts | 0 .../contracts/scripts/test-deployment.ts | 0 .../contracts/src/proxy/ERC1967Proxy.sol | 0 .../contracts/src/proxy/ProxyAdmin.sol | 0 .../src/proxy/TransparentUpgradeableProxy.sol | 0 .../contracts/src/settlement/MCR.sol | 0 .../contracts/src/settlement/MCRStorage.sol | 0 .../contracts/src/settlement/interfaces/IMCR.sol | 0 .../src/settlement/settlement/BaseSettlement.sol | 0 .../contracts/src/staking/MovementStaking.sol | 0 .../src/staking/MovementStakingStorage.sol | 0 .../contracts/src/staking/base/BaseStaking.sol | 0 .../src/staking/interfaces/IMovementStaking.sol | 0 .../contracts/src/token/MOVEToken.sol | 0 .../contracts/src/token/MOVETokenDev.sol | 0 .../contracts/src/token/MOVETokenV1.sol | 0 .../contracts/src/token/base/BaseToken.sol | 0 .../contracts/src/token/base/MintableToken.sol | 0 .../contracts/src/token/base/WrappedToken.sol | 0 .../src/token/base/WrappedTokenStorage.sol | 0 .../src/token/custodian/CustodianToken.sol | 0 .../contracts/src/token/faucet/MOVEFaucet.sol | 0 .../contracts/src/token/locked/LockedToken.sol | 0 .../src/token/locked/LockedTokenStorage.sol | 0 .../contracts/src/token/stlMoveToken.sol | 0 .../contracts/test/Deployer.t.sol | 0 .../contracts/test/settlement/MCR.t.sol | 0 .../contracts/test/staking/MovementStaking.t.sol | 0 .../contracts/test/staking/base/BaseStaking.t.sol | 0 .../contracts/test/token/Faucet.t.sol | 0 .../contracts/test/token/MOVEToken.t.sol | 0 .../contracts/test/token/MOVETokenV2.t.sol | 0 .../contracts/test/token/base/BaseToken.t.sol | 0 .../contracts/test/token/base/MintableToken.t.sol | 0 .../contracts/test/token/base/WrappedToken.t.sol | 0 .../test/token/custodian/CustodianToken.t.sol | 0 .../contracts/test/token/locked/LockedToken.t.sol | 0 .../contracts/test/token/stlMoveToken.t.sol | 0 .../contracts/tsconfig.json | 0 .../contracts/upgrader/README.md | 0 .../contracts/upgrader/accept.sh | 0 .../contracts/upgrader/accept.ts | 0 .../contracts/upgrader/acceptKms.sh | 0 .../contracts/upgrader/acceptKms.ts | 0 .../contracts/upgrader/kmsSign.ts | 0 .../contracts/upgrader/package-lock.json | 0 .../contracts/upgrader/package.json | 0 .../contracts/upgrader/propose.sh | 0 .../contracts/upgrader/propose.ts | 0 .../contracts/upgrader/safeDeploy.sh | 0 .../contracts/upgrader/safeDeploy.ts | 0 .../contracts/yarn.lock | 0 .../eth-network-params.yaml | 0 .../manager/Cargo.toml | 0 .../manager/src/lib.rs | 0 .../manager/src/manager.rs | 0 .../{post-confirmations => pcp}/runner/Cargo.toml | 0 .../runner/src/main.rs | 0 119 files changed, 13 insertions(+), 1 deletion(-) rename protocol-units/{fast-confirmations => fcp}/README.md (100%) rename protocol-units/{post-confirmations => pcp}/.gitmodules (100%) rename protocol-units/{post-confirmations => pcp}/README copy.md (100%) rename protocol-units/{post-confirmations => pcp}/README.md (100%) rename protocol-units/{post-confirmations => pcp}/client/Cargo.toml (100%) rename protocol-units/{post-confirmations => pcp}/client/abis/MCR.json (100%) rename protocol-units/{post-confirmations => pcp}/client/abis/MOVEToken.json (100%) rename protocol-units/{post-confirmations => pcp}/client/abis/MovementStaking.json (100%) rename protocol-units/{post-confirmations => pcp}/client/src/bin/e2e/test_client_settlement.rs (100%) rename protocol-units/{post-confirmations => pcp}/client/src/eth_client.rs (100%) rename protocol-units/{post-confirmations => pcp}/client/src/lib.rs (100%) rename protocol-units/{post-confirmations => pcp}/client/src/mock.rs (100%) rename protocol-units/{post-confirmations => pcp}/client/src/send_eth_transaction.rs (100%) rename protocol-units/{post-confirmations => pcp}/config/Cargo.toml (100%) rename protocol-units/{post-confirmations => pcp}/config/src/common/deploy.rs (100%) rename protocol-units/{post-confirmations => pcp}/config/src/common/eth_connection.rs (100%) rename protocol-units/{post-confirmations => pcp}/config/src/common/mod.rs (100%) rename protocol-units/{post-confirmations => pcp}/config/src/common/settlement.rs (100%) rename protocol-units/{post-confirmations => pcp}/config/src/common/staking.rs (100%) rename protocol-units/{post-confirmations => pcp}/config/src/common/testing.rs (100%) rename protocol-units/{post-confirmations => pcp}/config/src/common/transactions.rs (100%) rename protocol-units/{post-confirmations => pcp}/config/src/lib.rs (100%) rename protocol-units/{post-confirmations => pcp}/contracts/.DS_Store (100%) rename protocol-units/{post-confirmations => pcp}/contracts/.github/workflows/test.yml (100%) rename protocol-units/{post-confirmations => pcp}/contracts/.gitignore (100%) rename protocol-units/{post-confirmations => pcp}/contracts/.prettierrc (100%) rename protocol-units/{post-confirmations => pcp}/contracts/README.md (100%) rename protocol-units/{post-confirmations => pcp}/contracts/deployments/local.json (100%) rename protocol-units/{post-confirmations => pcp}/contracts/foundry.toml (100%) rename protocol-units/{post-confirmations => pcp}/contracts/hardhat.config.ts (100%) rename protocol-units/{post-confirmations => pcp}/contracts/kurtosis_instructions.md (100%) rename protocol-units/{post-confirmations => pcp}/contracts/package.json (100%) rename protocol-units/{post-confirmations => pcp}/contracts/remappings.txt (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/CoreDeployer.s.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/DeployMCR.s.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/DeployMCRDev.s.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/DeployMOVETokenDev.s.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/MCRDeployer.s.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/MOVETokenDeployer.s.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/MovementStakingDeployer.s.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/MultisigMOVETokenDeployer.s.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/StlMoveDeployer.s.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/VerifyMCRDev.s.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/deploy-safe.sh (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/helpers/Create3/CREATE3Factory.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/helpers/Create3/ICREATE3Factory.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/helpers/Helper.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/helpers/config.json (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/helpers/configOLD.json (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/helpers/deployments.json (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/helpers/deploymentsOLD.json (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/helpers/safe-deployments.json (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/helpers/upgrade/deploymove.json (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/helpers/upgrade/mcr.json (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/helpers/upgrade/staking.json (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/helpers/upgrade/stlmove.json (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/install-deps.sh (100%) rename protocol-units/{post-confirmations => pcp}/contracts/script/verify-mcr.sh (100%) rename protocol-units/{post-confirmations => pcp}/contracts/scripts/README.md (100%) rename protocol-units/{post-confirmations => pcp}/contracts/scripts/deploy.ts (100%) rename protocol-units/{post-confirmations => pcp}/contracts/scripts/tasks/utils.ts (100%) rename protocol-units/{post-confirmations => pcp}/contracts/scripts/test-deployment.ts (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/proxy/ERC1967Proxy.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/proxy/ProxyAdmin.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/proxy/TransparentUpgradeableProxy.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/settlement/MCR.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/settlement/MCRStorage.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/settlement/interfaces/IMCR.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/settlement/settlement/BaseSettlement.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/staking/MovementStaking.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/staking/MovementStakingStorage.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/staking/base/BaseStaking.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/staking/interfaces/IMovementStaking.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/token/MOVEToken.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/token/MOVETokenDev.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/token/MOVETokenV1.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/token/base/BaseToken.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/token/base/MintableToken.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/token/base/WrappedToken.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/token/base/WrappedTokenStorage.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/token/custodian/CustodianToken.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/token/faucet/MOVEFaucet.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/token/locked/LockedToken.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/token/locked/LockedTokenStorage.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/src/token/stlMoveToken.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/test/Deployer.t.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/test/settlement/MCR.t.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/test/staking/MovementStaking.t.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/test/staking/base/BaseStaking.t.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/test/token/Faucet.t.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/test/token/MOVEToken.t.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/test/token/MOVETokenV2.t.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/test/token/base/BaseToken.t.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/test/token/base/MintableToken.t.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/test/token/base/WrappedToken.t.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/test/token/custodian/CustodianToken.t.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/test/token/locked/LockedToken.t.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/test/token/stlMoveToken.t.sol (100%) rename protocol-units/{post-confirmations => pcp}/contracts/tsconfig.json (100%) rename protocol-units/{post-confirmations => pcp}/contracts/upgrader/README.md (100%) rename protocol-units/{post-confirmations => pcp}/contracts/upgrader/accept.sh (100%) rename protocol-units/{post-confirmations => pcp}/contracts/upgrader/accept.ts (100%) rename protocol-units/{post-confirmations => pcp}/contracts/upgrader/acceptKms.sh (100%) rename protocol-units/{post-confirmations => pcp}/contracts/upgrader/acceptKms.ts (100%) rename protocol-units/{post-confirmations => pcp}/contracts/upgrader/kmsSign.ts (100%) rename protocol-units/{post-confirmations => pcp}/contracts/upgrader/package-lock.json (100%) rename protocol-units/{post-confirmations => pcp}/contracts/upgrader/package.json (100%) rename protocol-units/{post-confirmations => pcp}/contracts/upgrader/propose.sh (100%) rename protocol-units/{post-confirmations => pcp}/contracts/upgrader/propose.ts (100%) rename protocol-units/{post-confirmations => pcp}/contracts/upgrader/safeDeploy.sh (100%) rename protocol-units/{post-confirmations => pcp}/contracts/upgrader/safeDeploy.ts (100%) rename protocol-units/{post-confirmations => pcp}/contracts/yarn.lock (100%) rename protocol-units/{post-confirmations => pcp}/eth-network-params.yaml (100%) rename protocol-units/{post-confirmations => pcp}/manager/Cargo.toml (100%) rename protocol-units/{post-confirmations => pcp}/manager/src/lib.rs (100%) rename protocol-units/{post-confirmations => pcp}/manager/src/manager.rs (100%) rename protocol-units/{post-confirmations => pcp}/runner/Cargo.toml (100%) rename protocol-units/{post-confirmations => pcp}/runner/src/main.rs (100%) diff --git a/README.md b/README.md index 7c378a0c..123b5839 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,14 @@ # ffs -Movement Labs' Fast Finality Settlement is a proof of stake settlement system. + +Movement Labs' Fast Finality Settlement is a proof of stake settlement system. + +## Protocol Units + +**Postconfirmation protocol (PCP)** +See [postconfirmation/README.md](protocol-units/postconfirmation/README.md). + +**Multi-Commit Rollup (MCR)** +See [mcr/README.md](protocol-units/mcr/README.md). + +**Fastconfirmation protocol (FCP)** +See [fcp/README.md](protocol-units/fcp/README.md). diff --git a/protocol-units/fast-confirmations/README.md b/protocol-units/fcp/README.md similarity index 100% rename from protocol-units/fast-confirmations/README.md rename to protocol-units/fcp/README.md diff --git a/protocol-units/post-confirmations/.gitmodules b/protocol-units/pcp/.gitmodules similarity index 100% rename from protocol-units/post-confirmations/.gitmodules rename to protocol-units/pcp/.gitmodules diff --git a/protocol-units/post-confirmations/README copy.md b/protocol-units/pcp/README copy.md similarity index 100% rename from protocol-units/post-confirmations/README copy.md rename to protocol-units/pcp/README copy.md diff --git a/protocol-units/post-confirmations/README.md b/protocol-units/pcp/README.md similarity index 100% rename from protocol-units/post-confirmations/README.md rename to protocol-units/pcp/README.md diff --git a/protocol-units/post-confirmations/client/Cargo.toml b/protocol-units/pcp/client/Cargo.toml similarity index 100% rename from protocol-units/post-confirmations/client/Cargo.toml rename to protocol-units/pcp/client/Cargo.toml diff --git a/protocol-units/post-confirmations/client/abis/MCR.json b/protocol-units/pcp/client/abis/MCR.json similarity index 100% rename from protocol-units/post-confirmations/client/abis/MCR.json rename to protocol-units/pcp/client/abis/MCR.json diff --git a/protocol-units/post-confirmations/client/abis/MOVEToken.json b/protocol-units/pcp/client/abis/MOVEToken.json similarity index 100% rename from protocol-units/post-confirmations/client/abis/MOVEToken.json rename to protocol-units/pcp/client/abis/MOVEToken.json diff --git a/protocol-units/post-confirmations/client/abis/MovementStaking.json b/protocol-units/pcp/client/abis/MovementStaking.json similarity index 100% rename from protocol-units/post-confirmations/client/abis/MovementStaking.json rename to protocol-units/pcp/client/abis/MovementStaking.json diff --git a/protocol-units/post-confirmations/client/src/bin/e2e/test_client_settlement.rs b/protocol-units/pcp/client/src/bin/e2e/test_client_settlement.rs similarity index 100% rename from protocol-units/post-confirmations/client/src/bin/e2e/test_client_settlement.rs rename to protocol-units/pcp/client/src/bin/e2e/test_client_settlement.rs diff --git a/protocol-units/post-confirmations/client/src/eth_client.rs b/protocol-units/pcp/client/src/eth_client.rs similarity index 100% rename from protocol-units/post-confirmations/client/src/eth_client.rs rename to protocol-units/pcp/client/src/eth_client.rs diff --git a/protocol-units/post-confirmations/client/src/lib.rs b/protocol-units/pcp/client/src/lib.rs similarity index 100% rename from protocol-units/post-confirmations/client/src/lib.rs rename to protocol-units/pcp/client/src/lib.rs diff --git a/protocol-units/post-confirmations/client/src/mock.rs b/protocol-units/pcp/client/src/mock.rs similarity index 100% rename from protocol-units/post-confirmations/client/src/mock.rs rename to protocol-units/pcp/client/src/mock.rs diff --git a/protocol-units/post-confirmations/client/src/send_eth_transaction.rs b/protocol-units/pcp/client/src/send_eth_transaction.rs similarity index 100% rename from protocol-units/post-confirmations/client/src/send_eth_transaction.rs rename to protocol-units/pcp/client/src/send_eth_transaction.rs diff --git a/protocol-units/post-confirmations/config/Cargo.toml b/protocol-units/pcp/config/Cargo.toml similarity index 100% rename from protocol-units/post-confirmations/config/Cargo.toml rename to protocol-units/pcp/config/Cargo.toml diff --git a/protocol-units/post-confirmations/config/src/common/deploy.rs b/protocol-units/pcp/config/src/common/deploy.rs similarity index 100% rename from protocol-units/post-confirmations/config/src/common/deploy.rs rename to protocol-units/pcp/config/src/common/deploy.rs diff --git a/protocol-units/post-confirmations/config/src/common/eth_connection.rs b/protocol-units/pcp/config/src/common/eth_connection.rs similarity index 100% rename from protocol-units/post-confirmations/config/src/common/eth_connection.rs rename to protocol-units/pcp/config/src/common/eth_connection.rs diff --git a/protocol-units/post-confirmations/config/src/common/mod.rs b/protocol-units/pcp/config/src/common/mod.rs similarity index 100% rename from protocol-units/post-confirmations/config/src/common/mod.rs rename to protocol-units/pcp/config/src/common/mod.rs diff --git a/protocol-units/post-confirmations/config/src/common/settlement.rs b/protocol-units/pcp/config/src/common/settlement.rs similarity index 100% rename from protocol-units/post-confirmations/config/src/common/settlement.rs rename to protocol-units/pcp/config/src/common/settlement.rs diff --git a/protocol-units/post-confirmations/config/src/common/staking.rs b/protocol-units/pcp/config/src/common/staking.rs similarity index 100% rename from protocol-units/post-confirmations/config/src/common/staking.rs rename to protocol-units/pcp/config/src/common/staking.rs diff --git a/protocol-units/post-confirmations/config/src/common/testing.rs b/protocol-units/pcp/config/src/common/testing.rs similarity index 100% rename from protocol-units/post-confirmations/config/src/common/testing.rs rename to protocol-units/pcp/config/src/common/testing.rs diff --git a/protocol-units/post-confirmations/config/src/common/transactions.rs b/protocol-units/pcp/config/src/common/transactions.rs similarity index 100% rename from protocol-units/post-confirmations/config/src/common/transactions.rs rename to protocol-units/pcp/config/src/common/transactions.rs diff --git a/protocol-units/post-confirmations/config/src/lib.rs b/protocol-units/pcp/config/src/lib.rs similarity index 100% rename from protocol-units/post-confirmations/config/src/lib.rs rename to protocol-units/pcp/config/src/lib.rs diff --git a/protocol-units/post-confirmations/contracts/.DS_Store b/protocol-units/pcp/contracts/.DS_Store similarity index 100% rename from protocol-units/post-confirmations/contracts/.DS_Store rename to protocol-units/pcp/contracts/.DS_Store diff --git a/protocol-units/post-confirmations/contracts/.github/workflows/test.yml b/protocol-units/pcp/contracts/.github/workflows/test.yml similarity index 100% rename from protocol-units/post-confirmations/contracts/.github/workflows/test.yml rename to protocol-units/pcp/contracts/.github/workflows/test.yml diff --git a/protocol-units/post-confirmations/contracts/.gitignore b/protocol-units/pcp/contracts/.gitignore similarity index 100% rename from protocol-units/post-confirmations/contracts/.gitignore rename to protocol-units/pcp/contracts/.gitignore diff --git a/protocol-units/post-confirmations/contracts/.prettierrc b/protocol-units/pcp/contracts/.prettierrc similarity index 100% rename from protocol-units/post-confirmations/contracts/.prettierrc rename to protocol-units/pcp/contracts/.prettierrc diff --git a/protocol-units/post-confirmations/contracts/README.md b/protocol-units/pcp/contracts/README.md similarity index 100% rename from protocol-units/post-confirmations/contracts/README.md rename to protocol-units/pcp/contracts/README.md diff --git a/protocol-units/post-confirmations/contracts/deployments/local.json b/protocol-units/pcp/contracts/deployments/local.json similarity index 100% rename from protocol-units/post-confirmations/contracts/deployments/local.json rename to protocol-units/pcp/contracts/deployments/local.json diff --git a/protocol-units/post-confirmations/contracts/foundry.toml b/protocol-units/pcp/contracts/foundry.toml similarity index 100% rename from protocol-units/post-confirmations/contracts/foundry.toml rename to protocol-units/pcp/contracts/foundry.toml diff --git a/protocol-units/post-confirmations/contracts/hardhat.config.ts b/protocol-units/pcp/contracts/hardhat.config.ts similarity index 100% rename from protocol-units/post-confirmations/contracts/hardhat.config.ts rename to protocol-units/pcp/contracts/hardhat.config.ts diff --git a/protocol-units/post-confirmations/contracts/kurtosis_instructions.md b/protocol-units/pcp/contracts/kurtosis_instructions.md similarity index 100% rename from protocol-units/post-confirmations/contracts/kurtosis_instructions.md rename to protocol-units/pcp/contracts/kurtosis_instructions.md diff --git a/protocol-units/post-confirmations/contracts/package.json b/protocol-units/pcp/contracts/package.json similarity index 100% rename from protocol-units/post-confirmations/contracts/package.json rename to protocol-units/pcp/contracts/package.json diff --git a/protocol-units/post-confirmations/contracts/remappings.txt b/protocol-units/pcp/contracts/remappings.txt similarity index 100% rename from protocol-units/post-confirmations/contracts/remappings.txt rename to protocol-units/pcp/contracts/remappings.txt diff --git a/protocol-units/post-confirmations/contracts/script/CoreDeployer.s.sol b/protocol-units/pcp/contracts/script/CoreDeployer.s.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/script/CoreDeployer.s.sol rename to protocol-units/pcp/contracts/script/CoreDeployer.s.sol diff --git a/protocol-units/post-confirmations/contracts/script/DeployMCR.s.sol b/protocol-units/pcp/contracts/script/DeployMCR.s.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/script/DeployMCR.s.sol rename to protocol-units/pcp/contracts/script/DeployMCR.s.sol diff --git a/protocol-units/post-confirmations/contracts/script/DeployMCRDev.s.sol b/protocol-units/pcp/contracts/script/DeployMCRDev.s.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/script/DeployMCRDev.s.sol rename to protocol-units/pcp/contracts/script/DeployMCRDev.s.sol diff --git a/protocol-units/post-confirmations/contracts/script/DeployMOVETokenDev.s.sol b/protocol-units/pcp/contracts/script/DeployMOVETokenDev.s.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/script/DeployMOVETokenDev.s.sol rename to protocol-units/pcp/contracts/script/DeployMOVETokenDev.s.sol diff --git a/protocol-units/post-confirmations/contracts/script/MCRDeployer.s.sol b/protocol-units/pcp/contracts/script/MCRDeployer.s.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/script/MCRDeployer.s.sol rename to protocol-units/pcp/contracts/script/MCRDeployer.s.sol diff --git a/protocol-units/post-confirmations/contracts/script/MOVETokenDeployer.s.sol b/protocol-units/pcp/contracts/script/MOVETokenDeployer.s.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/script/MOVETokenDeployer.s.sol rename to protocol-units/pcp/contracts/script/MOVETokenDeployer.s.sol diff --git a/protocol-units/post-confirmations/contracts/script/MovementStakingDeployer.s.sol b/protocol-units/pcp/contracts/script/MovementStakingDeployer.s.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/script/MovementStakingDeployer.s.sol rename to protocol-units/pcp/contracts/script/MovementStakingDeployer.s.sol diff --git a/protocol-units/post-confirmations/contracts/script/MultisigMOVETokenDeployer.s.sol b/protocol-units/pcp/contracts/script/MultisigMOVETokenDeployer.s.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/script/MultisigMOVETokenDeployer.s.sol rename to protocol-units/pcp/contracts/script/MultisigMOVETokenDeployer.s.sol diff --git a/protocol-units/post-confirmations/contracts/script/StlMoveDeployer.s.sol b/protocol-units/pcp/contracts/script/StlMoveDeployer.s.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/script/StlMoveDeployer.s.sol rename to protocol-units/pcp/contracts/script/StlMoveDeployer.s.sol diff --git a/protocol-units/post-confirmations/contracts/script/VerifyMCRDev.s.sol b/protocol-units/pcp/contracts/script/VerifyMCRDev.s.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/script/VerifyMCRDev.s.sol rename to protocol-units/pcp/contracts/script/VerifyMCRDev.s.sol diff --git a/protocol-units/post-confirmations/contracts/script/deploy-safe.sh b/protocol-units/pcp/contracts/script/deploy-safe.sh similarity index 100% rename from protocol-units/post-confirmations/contracts/script/deploy-safe.sh rename to protocol-units/pcp/contracts/script/deploy-safe.sh diff --git a/protocol-units/post-confirmations/contracts/script/helpers/Create3/CREATE3Factory.sol b/protocol-units/pcp/contracts/script/helpers/Create3/CREATE3Factory.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/script/helpers/Create3/CREATE3Factory.sol rename to protocol-units/pcp/contracts/script/helpers/Create3/CREATE3Factory.sol diff --git a/protocol-units/post-confirmations/contracts/script/helpers/Create3/ICREATE3Factory.sol b/protocol-units/pcp/contracts/script/helpers/Create3/ICREATE3Factory.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/script/helpers/Create3/ICREATE3Factory.sol rename to protocol-units/pcp/contracts/script/helpers/Create3/ICREATE3Factory.sol diff --git a/protocol-units/post-confirmations/contracts/script/helpers/Helper.sol b/protocol-units/pcp/contracts/script/helpers/Helper.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/script/helpers/Helper.sol rename to protocol-units/pcp/contracts/script/helpers/Helper.sol diff --git a/protocol-units/post-confirmations/contracts/script/helpers/config.json b/protocol-units/pcp/contracts/script/helpers/config.json similarity index 100% rename from protocol-units/post-confirmations/contracts/script/helpers/config.json rename to protocol-units/pcp/contracts/script/helpers/config.json diff --git a/protocol-units/post-confirmations/contracts/script/helpers/configOLD.json b/protocol-units/pcp/contracts/script/helpers/configOLD.json similarity index 100% rename from protocol-units/post-confirmations/contracts/script/helpers/configOLD.json rename to protocol-units/pcp/contracts/script/helpers/configOLD.json diff --git a/protocol-units/post-confirmations/contracts/script/helpers/deployments.json b/protocol-units/pcp/contracts/script/helpers/deployments.json similarity index 100% rename from protocol-units/post-confirmations/contracts/script/helpers/deployments.json rename to protocol-units/pcp/contracts/script/helpers/deployments.json diff --git a/protocol-units/post-confirmations/contracts/script/helpers/deploymentsOLD.json b/protocol-units/pcp/contracts/script/helpers/deploymentsOLD.json similarity index 100% rename from protocol-units/post-confirmations/contracts/script/helpers/deploymentsOLD.json rename to protocol-units/pcp/contracts/script/helpers/deploymentsOLD.json diff --git a/protocol-units/post-confirmations/contracts/script/helpers/safe-deployments.json b/protocol-units/pcp/contracts/script/helpers/safe-deployments.json similarity index 100% rename from protocol-units/post-confirmations/contracts/script/helpers/safe-deployments.json rename to protocol-units/pcp/contracts/script/helpers/safe-deployments.json diff --git a/protocol-units/post-confirmations/contracts/script/helpers/upgrade/deploymove.json b/protocol-units/pcp/contracts/script/helpers/upgrade/deploymove.json similarity index 100% rename from protocol-units/post-confirmations/contracts/script/helpers/upgrade/deploymove.json rename to protocol-units/pcp/contracts/script/helpers/upgrade/deploymove.json diff --git a/protocol-units/post-confirmations/contracts/script/helpers/upgrade/mcr.json b/protocol-units/pcp/contracts/script/helpers/upgrade/mcr.json similarity index 100% rename from protocol-units/post-confirmations/contracts/script/helpers/upgrade/mcr.json rename to protocol-units/pcp/contracts/script/helpers/upgrade/mcr.json diff --git a/protocol-units/post-confirmations/contracts/script/helpers/upgrade/staking.json b/protocol-units/pcp/contracts/script/helpers/upgrade/staking.json similarity index 100% rename from protocol-units/post-confirmations/contracts/script/helpers/upgrade/staking.json rename to protocol-units/pcp/contracts/script/helpers/upgrade/staking.json diff --git a/protocol-units/post-confirmations/contracts/script/helpers/upgrade/stlmove.json b/protocol-units/pcp/contracts/script/helpers/upgrade/stlmove.json similarity index 100% rename from protocol-units/post-confirmations/contracts/script/helpers/upgrade/stlmove.json rename to protocol-units/pcp/contracts/script/helpers/upgrade/stlmove.json diff --git a/protocol-units/post-confirmations/contracts/script/install-deps.sh b/protocol-units/pcp/contracts/script/install-deps.sh similarity index 100% rename from protocol-units/post-confirmations/contracts/script/install-deps.sh rename to protocol-units/pcp/contracts/script/install-deps.sh diff --git a/protocol-units/post-confirmations/contracts/script/verify-mcr.sh b/protocol-units/pcp/contracts/script/verify-mcr.sh similarity index 100% rename from protocol-units/post-confirmations/contracts/script/verify-mcr.sh rename to protocol-units/pcp/contracts/script/verify-mcr.sh diff --git a/protocol-units/post-confirmations/contracts/scripts/README.md b/protocol-units/pcp/contracts/scripts/README.md similarity index 100% rename from protocol-units/post-confirmations/contracts/scripts/README.md rename to protocol-units/pcp/contracts/scripts/README.md diff --git a/protocol-units/post-confirmations/contracts/scripts/deploy.ts b/protocol-units/pcp/contracts/scripts/deploy.ts similarity index 100% rename from protocol-units/post-confirmations/contracts/scripts/deploy.ts rename to protocol-units/pcp/contracts/scripts/deploy.ts diff --git a/protocol-units/post-confirmations/contracts/scripts/tasks/utils.ts b/protocol-units/pcp/contracts/scripts/tasks/utils.ts similarity index 100% rename from protocol-units/post-confirmations/contracts/scripts/tasks/utils.ts rename to protocol-units/pcp/contracts/scripts/tasks/utils.ts diff --git a/protocol-units/post-confirmations/contracts/scripts/test-deployment.ts b/protocol-units/pcp/contracts/scripts/test-deployment.ts similarity index 100% rename from protocol-units/post-confirmations/contracts/scripts/test-deployment.ts rename to protocol-units/pcp/contracts/scripts/test-deployment.ts diff --git a/protocol-units/post-confirmations/contracts/src/proxy/ERC1967Proxy.sol b/protocol-units/pcp/contracts/src/proxy/ERC1967Proxy.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/proxy/ERC1967Proxy.sol rename to protocol-units/pcp/contracts/src/proxy/ERC1967Proxy.sol diff --git a/protocol-units/post-confirmations/contracts/src/proxy/ProxyAdmin.sol b/protocol-units/pcp/contracts/src/proxy/ProxyAdmin.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/proxy/ProxyAdmin.sol rename to protocol-units/pcp/contracts/src/proxy/ProxyAdmin.sol diff --git a/protocol-units/post-confirmations/contracts/src/proxy/TransparentUpgradeableProxy.sol b/protocol-units/pcp/contracts/src/proxy/TransparentUpgradeableProxy.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/proxy/TransparentUpgradeableProxy.sol rename to protocol-units/pcp/contracts/src/proxy/TransparentUpgradeableProxy.sol diff --git a/protocol-units/post-confirmations/contracts/src/settlement/MCR.sol b/protocol-units/pcp/contracts/src/settlement/MCR.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/settlement/MCR.sol rename to protocol-units/pcp/contracts/src/settlement/MCR.sol diff --git a/protocol-units/post-confirmations/contracts/src/settlement/MCRStorage.sol b/protocol-units/pcp/contracts/src/settlement/MCRStorage.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/settlement/MCRStorage.sol rename to protocol-units/pcp/contracts/src/settlement/MCRStorage.sol diff --git a/protocol-units/post-confirmations/contracts/src/settlement/interfaces/IMCR.sol b/protocol-units/pcp/contracts/src/settlement/interfaces/IMCR.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/settlement/interfaces/IMCR.sol rename to protocol-units/pcp/contracts/src/settlement/interfaces/IMCR.sol diff --git a/protocol-units/post-confirmations/contracts/src/settlement/settlement/BaseSettlement.sol b/protocol-units/pcp/contracts/src/settlement/settlement/BaseSettlement.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/settlement/settlement/BaseSettlement.sol rename to protocol-units/pcp/contracts/src/settlement/settlement/BaseSettlement.sol diff --git a/protocol-units/post-confirmations/contracts/src/staking/MovementStaking.sol b/protocol-units/pcp/contracts/src/staking/MovementStaking.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/staking/MovementStaking.sol rename to protocol-units/pcp/contracts/src/staking/MovementStaking.sol diff --git a/protocol-units/post-confirmations/contracts/src/staking/MovementStakingStorage.sol b/protocol-units/pcp/contracts/src/staking/MovementStakingStorage.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/staking/MovementStakingStorage.sol rename to protocol-units/pcp/contracts/src/staking/MovementStakingStorage.sol diff --git a/protocol-units/post-confirmations/contracts/src/staking/base/BaseStaking.sol b/protocol-units/pcp/contracts/src/staking/base/BaseStaking.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/staking/base/BaseStaking.sol rename to protocol-units/pcp/contracts/src/staking/base/BaseStaking.sol diff --git a/protocol-units/post-confirmations/contracts/src/staking/interfaces/IMovementStaking.sol b/protocol-units/pcp/contracts/src/staking/interfaces/IMovementStaking.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/staking/interfaces/IMovementStaking.sol rename to protocol-units/pcp/contracts/src/staking/interfaces/IMovementStaking.sol diff --git a/protocol-units/post-confirmations/contracts/src/token/MOVEToken.sol b/protocol-units/pcp/contracts/src/token/MOVEToken.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/token/MOVEToken.sol rename to protocol-units/pcp/contracts/src/token/MOVEToken.sol diff --git a/protocol-units/post-confirmations/contracts/src/token/MOVETokenDev.sol b/protocol-units/pcp/contracts/src/token/MOVETokenDev.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/token/MOVETokenDev.sol rename to protocol-units/pcp/contracts/src/token/MOVETokenDev.sol diff --git a/protocol-units/post-confirmations/contracts/src/token/MOVETokenV1.sol b/protocol-units/pcp/contracts/src/token/MOVETokenV1.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/token/MOVETokenV1.sol rename to protocol-units/pcp/contracts/src/token/MOVETokenV1.sol diff --git a/protocol-units/post-confirmations/contracts/src/token/base/BaseToken.sol b/protocol-units/pcp/contracts/src/token/base/BaseToken.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/token/base/BaseToken.sol rename to protocol-units/pcp/contracts/src/token/base/BaseToken.sol diff --git a/protocol-units/post-confirmations/contracts/src/token/base/MintableToken.sol b/protocol-units/pcp/contracts/src/token/base/MintableToken.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/token/base/MintableToken.sol rename to protocol-units/pcp/contracts/src/token/base/MintableToken.sol diff --git a/protocol-units/post-confirmations/contracts/src/token/base/WrappedToken.sol b/protocol-units/pcp/contracts/src/token/base/WrappedToken.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/token/base/WrappedToken.sol rename to protocol-units/pcp/contracts/src/token/base/WrappedToken.sol diff --git a/protocol-units/post-confirmations/contracts/src/token/base/WrappedTokenStorage.sol b/protocol-units/pcp/contracts/src/token/base/WrappedTokenStorage.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/token/base/WrappedTokenStorage.sol rename to protocol-units/pcp/contracts/src/token/base/WrappedTokenStorage.sol diff --git a/protocol-units/post-confirmations/contracts/src/token/custodian/CustodianToken.sol b/protocol-units/pcp/contracts/src/token/custodian/CustodianToken.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/token/custodian/CustodianToken.sol rename to protocol-units/pcp/contracts/src/token/custodian/CustodianToken.sol diff --git a/protocol-units/post-confirmations/contracts/src/token/faucet/MOVEFaucet.sol b/protocol-units/pcp/contracts/src/token/faucet/MOVEFaucet.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/token/faucet/MOVEFaucet.sol rename to protocol-units/pcp/contracts/src/token/faucet/MOVEFaucet.sol diff --git a/protocol-units/post-confirmations/contracts/src/token/locked/LockedToken.sol b/protocol-units/pcp/contracts/src/token/locked/LockedToken.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/token/locked/LockedToken.sol rename to protocol-units/pcp/contracts/src/token/locked/LockedToken.sol diff --git a/protocol-units/post-confirmations/contracts/src/token/locked/LockedTokenStorage.sol b/protocol-units/pcp/contracts/src/token/locked/LockedTokenStorage.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/token/locked/LockedTokenStorage.sol rename to protocol-units/pcp/contracts/src/token/locked/LockedTokenStorage.sol diff --git a/protocol-units/post-confirmations/contracts/src/token/stlMoveToken.sol b/protocol-units/pcp/contracts/src/token/stlMoveToken.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/src/token/stlMoveToken.sol rename to protocol-units/pcp/contracts/src/token/stlMoveToken.sol diff --git a/protocol-units/post-confirmations/contracts/test/Deployer.t.sol b/protocol-units/pcp/contracts/test/Deployer.t.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/test/Deployer.t.sol rename to protocol-units/pcp/contracts/test/Deployer.t.sol diff --git a/protocol-units/post-confirmations/contracts/test/settlement/MCR.t.sol b/protocol-units/pcp/contracts/test/settlement/MCR.t.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/test/settlement/MCR.t.sol rename to protocol-units/pcp/contracts/test/settlement/MCR.t.sol diff --git a/protocol-units/post-confirmations/contracts/test/staking/MovementStaking.t.sol b/protocol-units/pcp/contracts/test/staking/MovementStaking.t.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/test/staking/MovementStaking.t.sol rename to protocol-units/pcp/contracts/test/staking/MovementStaking.t.sol diff --git a/protocol-units/post-confirmations/contracts/test/staking/base/BaseStaking.t.sol b/protocol-units/pcp/contracts/test/staking/base/BaseStaking.t.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/test/staking/base/BaseStaking.t.sol rename to protocol-units/pcp/contracts/test/staking/base/BaseStaking.t.sol diff --git a/protocol-units/post-confirmations/contracts/test/token/Faucet.t.sol b/protocol-units/pcp/contracts/test/token/Faucet.t.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/test/token/Faucet.t.sol rename to protocol-units/pcp/contracts/test/token/Faucet.t.sol diff --git a/protocol-units/post-confirmations/contracts/test/token/MOVEToken.t.sol b/protocol-units/pcp/contracts/test/token/MOVEToken.t.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/test/token/MOVEToken.t.sol rename to protocol-units/pcp/contracts/test/token/MOVEToken.t.sol diff --git a/protocol-units/post-confirmations/contracts/test/token/MOVETokenV2.t.sol b/protocol-units/pcp/contracts/test/token/MOVETokenV2.t.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/test/token/MOVETokenV2.t.sol rename to protocol-units/pcp/contracts/test/token/MOVETokenV2.t.sol diff --git a/protocol-units/post-confirmations/contracts/test/token/base/BaseToken.t.sol b/protocol-units/pcp/contracts/test/token/base/BaseToken.t.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/test/token/base/BaseToken.t.sol rename to protocol-units/pcp/contracts/test/token/base/BaseToken.t.sol diff --git a/protocol-units/post-confirmations/contracts/test/token/base/MintableToken.t.sol b/protocol-units/pcp/contracts/test/token/base/MintableToken.t.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/test/token/base/MintableToken.t.sol rename to protocol-units/pcp/contracts/test/token/base/MintableToken.t.sol diff --git a/protocol-units/post-confirmations/contracts/test/token/base/WrappedToken.t.sol b/protocol-units/pcp/contracts/test/token/base/WrappedToken.t.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/test/token/base/WrappedToken.t.sol rename to protocol-units/pcp/contracts/test/token/base/WrappedToken.t.sol diff --git a/protocol-units/post-confirmations/contracts/test/token/custodian/CustodianToken.t.sol b/protocol-units/pcp/contracts/test/token/custodian/CustodianToken.t.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/test/token/custodian/CustodianToken.t.sol rename to protocol-units/pcp/contracts/test/token/custodian/CustodianToken.t.sol diff --git a/protocol-units/post-confirmations/contracts/test/token/locked/LockedToken.t.sol b/protocol-units/pcp/contracts/test/token/locked/LockedToken.t.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/test/token/locked/LockedToken.t.sol rename to protocol-units/pcp/contracts/test/token/locked/LockedToken.t.sol diff --git a/protocol-units/post-confirmations/contracts/test/token/stlMoveToken.t.sol b/protocol-units/pcp/contracts/test/token/stlMoveToken.t.sol similarity index 100% rename from protocol-units/post-confirmations/contracts/test/token/stlMoveToken.t.sol rename to protocol-units/pcp/contracts/test/token/stlMoveToken.t.sol diff --git a/protocol-units/post-confirmations/contracts/tsconfig.json b/protocol-units/pcp/contracts/tsconfig.json similarity index 100% rename from protocol-units/post-confirmations/contracts/tsconfig.json rename to protocol-units/pcp/contracts/tsconfig.json diff --git a/protocol-units/post-confirmations/contracts/upgrader/README.md b/protocol-units/pcp/contracts/upgrader/README.md similarity index 100% rename from protocol-units/post-confirmations/contracts/upgrader/README.md rename to protocol-units/pcp/contracts/upgrader/README.md diff --git a/protocol-units/post-confirmations/contracts/upgrader/accept.sh b/protocol-units/pcp/contracts/upgrader/accept.sh similarity index 100% rename from protocol-units/post-confirmations/contracts/upgrader/accept.sh rename to protocol-units/pcp/contracts/upgrader/accept.sh diff --git a/protocol-units/post-confirmations/contracts/upgrader/accept.ts b/protocol-units/pcp/contracts/upgrader/accept.ts similarity index 100% rename from protocol-units/post-confirmations/contracts/upgrader/accept.ts rename to protocol-units/pcp/contracts/upgrader/accept.ts diff --git a/protocol-units/post-confirmations/contracts/upgrader/acceptKms.sh b/protocol-units/pcp/contracts/upgrader/acceptKms.sh similarity index 100% rename from protocol-units/post-confirmations/contracts/upgrader/acceptKms.sh rename to protocol-units/pcp/contracts/upgrader/acceptKms.sh diff --git a/protocol-units/post-confirmations/contracts/upgrader/acceptKms.ts b/protocol-units/pcp/contracts/upgrader/acceptKms.ts similarity index 100% rename from protocol-units/post-confirmations/contracts/upgrader/acceptKms.ts rename to protocol-units/pcp/contracts/upgrader/acceptKms.ts diff --git a/protocol-units/post-confirmations/contracts/upgrader/kmsSign.ts b/protocol-units/pcp/contracts/upgrader/kmsSign.ts similarity index 100% rename from protocol-units/post-confirmations/contracts/upgrader/kmsSign.ts rename to protocol-units/pcp/contracts/upgrader/kmsSign.ts diff --git a/protocol-units/post-confirmations/contracts/upgrader/package-lock.json b/protocol-units/pcp/contracts/upgrader/package-lock.json similarity index 100% rename from protocol-units/post-confirmations/contracts/upgrader/package-lock.json rename to protocol-units/pcp/contracts/upgrader/package-lock.json diff --git a/protocol-units/post-confirmations/contracts/upgrader/package.json b/protocol-units/pcp/contracts/upgrader/package.json similarity index 100% rename from protocol-units/post-confirmations/contracts/upgrader/package.json rename to protocol-units/pcp/contracts/upgrader/package.json diff --git a/protocol-units/post-confirmations/contracts/upgrader/propose.sh b/protocol-units/pcp/contracts/upgrader/propose.sh similarity index 100% rename from protocol-units/post-confirmations/contracts/upgrader/propose.sh rename to protocol-units/pcp/contracts/upgrader/propose.sh diff --git a/protocol-units/post-confirmations/contracts/upgrader/propose.ts b/protocol-units/pcp/contracts/upgrader/propose.ts similarity index 100% rename from protocol-units/post-confirmations/contracts/upgrader/propose.ts rename to protocol-units/pcp/contracts/upgrader/propose.ts diff --git a/protocol-units/post-confirmations/contracts/upgrader/safeDeploy.sh b/protocol-units/pcp/contracts/upgrader/safeDeploy.sh similarity index 100% rename from protocol-units/post-confirmations/contracts/upgrader/safeDeploy.sh rename to protocol-units/pcp/contracts/upgrader/safeDeploy.sh diff --git a/protocol-units/post-confirmations/contracts/upgrader/safeDeploy.ts b/protocol-units/pcp/contracts/upgrader/safeDeploy.ts similarity index 100% rename from protocol-units/post-confirmations/contracts/upgrader/safeDeploy.ts rename to protocol-units/pcp/contracts/upgrader/safeDeploy.ts diff --git a/protocol-units/post-confirmations/contracts/yarn.lock b/protocol-units/pcp/contracts/yarn.lock similarity index 100% rename from protocol-units/post-confirmations/contracts/yarn.lock rename to protocol-units/pcp/contracts/yarn.lock diff --git a/protocol-units/post-confirmations/eth-network-params.yaml b/protocol-units/pcp/eth-network-params.yaml similarity index 100% rename from protocol-units/post-confirmations/eth-network-params.yaml rename to protocol-units/pcp/eth-network-params.yaml diff --git a/protocol-units/post-confirmations/manager/Cargo.toml b/protocol-units/pcp/manager/Cargo.toml similarity index 100% rename from protocol-units/post-confirmations/manager/Cargo.toml rename to protocol-units/pcp/manager/Cargo.toml diff --git a/protocol-units/post-confirmations/manager/src/lib.rs b/protocol-units/pcp/manager/src/lib.rs similarity index 100% rename from protocol-units/post-confirmations/manager/src/lib.rs rename to protocol-units/pcp/manager/src/lib.rs diff --git a/protocol-units/post-confirmations/manager/src/manager.rs b/protocol-units/pcp/manager/src/manager.rs similarity index 100% rename from protocol-units/post-confirmations/manager/src/manager.rs rename to protocol-units/pcp/manager/src/manager.rs diff --git a/protocol-units/post-confirmations/runner/Cargo.toml b/protocol-units/pcp/runner/Cargo.toml similarity index 100% rename from protocol-units/post-confirmations/runner/Cargo.toml rename to protocol-units/pcp/runner/Cargo.toml diff --git a/protocol-units/post-confirmations/runner/src/main.rs b/protocol-units/pcp/runner/src/main.rs similarity index 100% rename from protocol-units/post-confirmations/runner/src/main.rs rename to protocol-units/pcp/runner/src/main.rs From 15fd8b29a741b1bc45b05610a8fa827b4fc53ddf Mon Sep 17 00:00:00 2001 From: apenzk Date: Fri, 7 Mar 2025 13:20:31 +0100 Subject: [PATCH 04/25] spelling --- .vscode/settings.json | 5 +++++ .vscode/spellright.dict | 12 ++++++++++++ 2 files changed, 17 insertions(+) create mode 100644 .vscode/settings.json create mode 100644 .vscode/spellright.dict diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 00000000..f43d1930 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "stm32-for-vscode.openOCDPath": false, + "stm32-for-vscode.armToolchainPath": false, + "spellright.userDictionary": "${workspaceFolder}/.vscode/spellright.dict" +} \ No newline at end of file diff --git a/.vscode/spellright.dict b/.vscode/spellright.dict new file mode 100644 index 00000000..aece05f6 --- /dev/null +++ b/.vscode/spellright.dict @@ -0,0 +1,12 @@ +Aptos +Changelog +Fastconfirmation +Fastconfirmations +Merkle +multisig +onchain +postconfirm +postconfirmed +timelock +timelocks +trustlessness From 726dc7d8ef701bedb7007087ec3567773470fc2e Mon Sep 17 00:00:00 2001 From: apenzk Date: Tue, 18 Mar 2025 12:06:01 +0100 Subject: [PATCH 05/25] edits and postconfirmation name --- Cargo.toml | 2 +- README.md | 22 +++++++++----- node/README.md | 3 +- protocol-units/README.md | 12 ++++---- protocol-units/pcp/README.md | 4 +-- protocol-units/pcp/client/Cargo.toml | 6 ++-- .../src/bin/e2e/test_client_settlement.rs | 30 +++++++++---------- protocol-units/pcp/client/src/eth_client.rs | 6 ++-- protocol-units/pcp/client/src/lib.rs | 2 +- protocol-units/pcp/client/src/mock.rs | 6 ++-- protocol-units/pcp/config/Cargo.toml | 2 +- .../pcp/config/src/common/deploy.rs | 14 ++++----- .../pcp/config/src/common/settlement.rs | 18 +++++------ .../pcp/config/src/common/testing.rs | 12 ++++---- protocol-units/pcp/manager/Cargo.toml | 8 ++--- protocol-units/pcp/manager/src/lib.rs | 2 +- protocol-units/pcp/manager/src/manager.rs | 10 +++---- protocol-units/pcp/runner/Cargo.toml | 8 ++--- protocol-units/pcp/runner/src/main.rs | 6 ++-- sdk/README.md | 3 +- spec/README.md | 3 +- util/README.md | 3 +- 22 files changed, 97 insertions(+), 85 deletions(-) diff --git a/Cargo.toml b/Cargo.toml index 7a97d919..8251bccd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,7 @@ members = [ "protocol-units/mcr/clients/*", "protocol-units/mcr/client", "protocol-units/mcr/manager", - "protocol-units/post-confirmations/*", + "protocol-units/pcp/*", "protocol-units/fast-confirmations/*", "protocol-units/ffs/*", "util/signing/eth", diff --git a/README.md b/README.md index 123b5839..6ff4492a 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,20 @@ # ffs -Movement Labs' Fast Finality Settlement is a proof of stake settlement system. +Movement Labs' Fast Finality Settlement is a Proof-of-Stake (PoS) settlement system. -## Protocol Units +The directory is structured as follows. -**Postconfirmation protocol (PCP)** -See [postconfirmation/README.md](protocol-units/postconfirmation/README.md). +- [Node](./node/README.md) +is an independent service which is prepared to manage a fast-finality settlement connection for a given user. -**Multi-Commit Rollup (MCR)** -See [mcr/README.md](protocol-units/mcr/README.md). +- [Protocol-units](./protocol-units/README.md) +are used to collect runnable and composable units for interacting with the `ffs` protocol. We store contracts within protocol units, for example. -**Fastconfirmation protocol (FCP)** -See [fcp/README.md](protocol-units/fcp/README.md). +- [FFS SDK](./sdk/README.md) +is a set of tools for building FFS services. It is generally the entrypoint for researching and building with FFS. + +- [Spec](./spec/README.md) +contains formalizations of the FFS protocol and its components. + +- [Util](./util/README.md) +collects miscellaneous software utilities maintained by the FFS team. diff --git a/node/README.md b/node/README.md index 2c34db86..313df03e 100644 --- a/node/README.md +++ b/node/README.md @@ -1,2 +1,3 @@ # `node` -The FFS Node is an independent service which is prepared to manage a fast-finality settlement connection for a given user. \ No newline at end of file + +The FFS Node is an independent service which is prepared to manage a fast-finality settlement connection for a given user. \ No newline at end of file diff --git a/protocol-units/README.md b/protocol-units/README.md index cb89b5b8..994014ad 100644 --- a/protocol-units/README.md +++ b/protocol-units/README.md @@ -1,8 +1,10 @@ # `protocol-units` -`protocol-units` are used to collect runnable and composable units for interacting with the `ffs` protocol. We store contracts within protocol units, for example. + +`protocol-units` are used to collect runnable and composable units for interacting with the `ffs` protocol. We store contracts within protocol units, for example. ## Contents -- **[`mcr`](./mcr/)**: the `MCR` implementation of `ffs` provided prior to the specification of the `fast-confirmations` and `post-confirmations` protocols. It is maintained for legacy purposes. -- **[`post-confirmations`](./post-confirmations/)**: the `post-confirmations` sub-protocol implementation for `ffs`. -- **[`fast-confirmations`](./fast-confirmations/)**: the `fast-confirmations` sub-protocol implementation for `ffs`. -- **[`ffs`](./ffs/)**: the full `ffs` protocol implementation. \ No newline at end of file + +- **[`mcr`](./mcr/README.md)**: the `MCR` implementation of `ffs` provided prior to the specification of the `fcp` and `pcp` protocols. It is maintained for legacy purposes. +- **[`pcp`](./pcp/README.md)**: the postconfirmation sub-protocol implementation for `ffs`. +- **[`fastconfirmation`](./fcp/README.md)**: the fastconfirmation sub-protocol implementation for `ffs`. +- **[`ffs`](./ffs/README.md)**: the full Fast Finality Settlement protocol implementation. diff --git a/protocol-units/pcp/README.md b/protocol-units/pcp/README.md index 861c743a..a8613238 100644 --- a/protocol-units/pcp/README.md +++ b/protocol-units/pcp/README.md @@ -1,2 +1,2 @@ -# Post-confirmations -Post-confirmations were originally proposed in [MIP-37](https://github.com/movementlabsxyz/MIP/pull/37) as a sub-protocol of FFS, [MIP-34](https://github.com/movementlabsxyz/MIP/pull/34). It is a protocol for committing on the "base-chain" in a side-chain system. \ No newline at end of file +# Postconfirmations +Postconfirmations were originally proposed in [MIP-37](https://github.com/movementlabsxyz/MIP/pull/37) as a sub-protocol of FFS, [MIP-34](https://github.com/movementlabsxyz/MIP/pull/34). It is a protocol for committing on the "base-chain" in a side-chain system. \ No newline at end of file diff --git a/protocol-units/pcp/client/Cargo.toml b/protocol-units/pcp/client/Cargo.toml index f487d2de..97705110 100644 --- a/protocol-units/pcp/client/Cargo.toml +++ b/protocol-units/pcp/client/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "post-confirmationssettlement-client" +name = "postconfirmationssettlement-client" version = { workspace = true } edition = { workspace = true } license = { workspace = true } @@ -10,12 +10,12 @@ rust-version = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html # [[bin]] -# name = "test-post-confirmationssettlement-client" +# name = "test-postconfirmationssettlement-client" # path = "src/bin/e2e/test_client_settlement.rs" [dependencies] -post-confirmationsconfig = { workspace = true } +postconfirmationsconfig = { workspace = true } secure-signer-loader = { workspace = true } secure-signer = { workspace = true } secure-signing-eth = { workspace = true } diff --git a/protocol-units/pcp/client/src/bin/e2e/test_client_settlement.rs b/protocol-units/pcp/client/src/bin/e2e/test_client_settlement.rs index 08640fae..9f7a6946 100644 --- a/protocol-units/pcp/client/src/bin/e2e/test_client_settlement.rs +++ b/protocol-units/pcp/client/src/bin/e2e/test_client_settlement.rs @@ -5,11 +5,11 @@ use alloy_primitives::Address; use alloy_primitives::U256; use anyhow::Context; use ffs_environment::{backend::config_file::ConfigFile, ffs_environment}; -use post_confirmations_settlement_client::eth_client::Client; -use post_confirmations_settlement_client::eth_client::{MOVEToken, MovementStaking, MCR}; -use post_confirmations_settlement_client::McrSettlementClientOperations; -use post_confirmations_config::Config; -use post_confirmations_types::block_commitment::{BlockCommitment, Commitment, Id}; +use postconfirmations_settlement_client::eth_client::Client; +use postconfirmations_settlement_client::eth_client::{MOVEToken, MovementStaking, MCR}; +use postconfirmations_settlement_client::McrSettlementClientOperations; +use postconfirmations_config::Config; +use postconfirmations_types::block_commitment::{BlockCommitment, Commitment, Id}; use std::str::FromStr; use tokio_stream::StreamExt; use tracing::info; @@ -20,7 +20,7 @@ async fn run_genesis_ceremony( rpc_url: &str, move_token_address: Address, staking_address: Address, - post_confirmations_address: Address, + postconfirmations_address: Address, ) -> Result<(), anyhow::Error> { // Build alice client for MOVEToken, MCR, and staking info!("Creating alice client"); @@ -68,7 +68,7 @@ async fn run_genesis_ceremony( .on_builtin(&rpc_url) .await?; let governor_token = MOVEToken::new(move_token_address, &governor_rpc_provider); - let governor_mcr = MCR::new(post_confirmations_address, &governor_rpc_provider); + let governor_mcr = MCR::new(postconfirmations_address, &governor_rpc_provider); let governor_staking = MovementStaking::new(staking_address, &governor_rpc_provider); // Allow Alice and Bod to stake by adding to white list. @@ -140,7 +140,7 @@ async fn run_genesis_ceremony( .await .context("Alice failed to approve MCR")?; info!("Alice move approve"); - let callbuilder = alice_staking.stake(post_confirmations_address, move_token_address, U256::from(100)); + let callbuilder = alice_staking.stake(postconfirmations_address, move_token_address, U256::from(100)); let rc = callbuilder.send().await; match rc { Ok(rc) => { @@ -179,7 +179,7 @@ async fn run_genesis_ceremony( .context("Bob failed to approve MCR")?; info!("Bob move approve"); bob_staking - .stake(post_confirmations_address, move_token_address, U256::from(100)) + .stake(postconfirmations_address, move_token_address, U256::from(100)) .send() .await? .watch() @@ -188,7 +188,7 @@ async fn run_genesis_ceremony( info!("Bob move staking"); // let domain_time = governor_staking - // .epochDurationByDomain(post_confirmations_address.clone()) + // .epochDurationByDomain(postconfirmations_address.clone()) // .call() // .await.context("Failed to get domain registration time")?; // info!("Domain registration time in MCR {:?}", domain_time); @@ -221,25 +221,25 @@ pub async fn main() -> Result<(), anyhow::Error> { // get a matching ffs_environment object let ffs_environment: ffs_environment = - ffs_environment::new(ConfigFile::new(config_file), vec!["post_confirmations_settlement".to_string()]); + ffs_environment::new(ConfigFile::new(config_file), vec!["postconfirmations_settlement".to_string()]); let config: Config = ffs_environment.try_wait_for_ready().await?; let rpc_url = config.eth_rpc_connection_url(); let testing_config = config.testing.as_ref().context("Testing config not defined.")?; run_genesis_ceremony( &config, - PrivateKeySigner::from_str(&testing_config.post_confirmations_testing_admin_account_private_key)?, + PrivateKeySigner::from_str(&testing_config.postconfirmations_testing_admin_account_private_key)?, &rpc_url, Address::from_str(&testing_config.move_token_contract_address)?, Address::from_str(&testing_config.movement_staking_contract_address)?, - Address::from_str(&config.settle.post_confirmations_contract_address)?, + Address::from_str(&config.settle.postconfirmations_contract_address)?, ) .await?; // Build client 1 and send the first commitment. //let settlement_config = let config1 = Config { - settle: post_confirmations_config::common::settlement::Config { + settle: postconfirmations_config::common::settlement::Config { signer_private_key: testing_config .well_known_account_private_keys .get(1) @@ -265,7 +265,7 @@ pub async fn main() -> Result<(), anyhow::Error> { // Build client 2 and send the second commitment. let config2 = Config { - settle: post_confirmations_config::common::settlement::Config { + settle: postconfirmations_config::common::settlement::Config { signer_private_key: testing_config .well_known_account_private_keys .get(2) diff --git a/protocol-units/pcp/client/src/eth_client.rs b/protocol-units/pcp/client/src/eth_client.rs index d17cb4f1..719a532c 100644 --- a/protocol-units/pcp/client/src/eth_client.rs +++ b/protocol-units/pcp/client/src/eth_client.rs @@ -20,8 +20,8 @@ use alloy_sol_types::sol; use alloy_transport::BoxTransport; use alloy_transport_ws::WsConnect; use anyhow::Context; -use post_confirmations_config::Config; -use post_confirmations_types::block_commitment::{Commitment, Id, SuperBlockCommitment}; +use postconfirmations_config::Config; +use postconfirmations_types::block_commitment::{Commitment, Id, SuperBlockCommitment}; use secure_signer::cryptography::secp256k1::Secp256k1; use secure_signer_loader::Load; use secure_signing_eth::HsmSigner; @@ -113,7 +113,7 @@ impl info!("Signer address: {}", signer_address); let contract_address = config .settle - .post_confirmations_contract_address + .postconfirmations_contract_address .parse() .context("Failed to parse the contract address for the MCR settlement client")?; let rpc_url = config.eth_rpc_connection_url(); diff --git a/protocol-units/pcp/client/src/lib.rs b/protocol-units/pcp/client/src/lib.rs index 12e5d2d6..179add3c 100644 --- a/protocol-units/pcp/client/src/lib.rs +++ b/protocol-units/pcp/client/src/lib.rs @@ -1,4 +1,4 @@ -use post_confirmations_types::block_commitment::SuperBlockCommitment; +use postconfirmations_types::block_commitment::SuperBlockCommitment; use tokio_stream::Stream; pub mod mock; diff --git a/protocol-units/pcp/client/src/mock.rs b/protocol-units/pcp/client/src/mock.rs index 5dab4be0..ac237f51 100644 --- a/protocol-units/pcp/client/src/mock.rs +++ b/protocol-units/pcp/client/src/mock.rs @@ -1,6 +1,6 @@ use crate::{CommitmentStream, McrSettlementClientOperations}; -use post_confirmations_config::Config; -use post_confirmations_types::block_commitment::SuperBlockCommitment; +use postconfirmations_config::Config; +use postconfirmations_types::block_commitment::SuperBlockCommitment; use std::collections::BTreeMap; use std::sync::{Arc, Mutex}; use tokio::sync::{mpsc, RwLock}; @@ -153,7 +153,7 @@ impl McrSettlementClientOperations for McrSettlementClient { pub mod test { use super::*; - use post_confirmations_types::block_commitment::Commitment; + use postconfirmations_types::block_commitment::Commitment; use futures::future; use tokio::select; diff --git a/protocol-units/pcp/config/Cargo.toml b/protocol-units/pcp/config/Cargo.toml index 036d54f2..f4db55bf 100644 --- a/protocol-units/pcp/config/Cargo.toml +++ b/protocol-units/pcp/config/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "post-confirmationsconfig" +name = "postconfirmationsconfig" description = "Configuration of the MCR settlement client" version.workspace = true edition.workspace = true diff --git a/protocol-units/pcp/config/src/common/deploy.rs b/protocol-units/pcp/config/src/common/deploy.rs index fbc4b6e8..4b60aa2a 100644 --- a/protocol-units/pcp/config/src/common/deploy.rs +++ b/protocol-units/pcp/config/src/common/deploy.rs @@ -6,30 +6,30 @@ use serde::{Deserialize, Serialize}; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Config { - #[serde(default = "post_confirmations_deployment_working_directory")] - pub post_confirmations_deployment_working_directory: String, + #[serde(default = "postconfirmations_deployment_working_directory")] + pub postconfirmations_deployment_working_directory: String, #[serde(default = "default_signer_identifier")] pub signer_identifier: SignerIdentifier, } env_short_default!( - post_confirmations_deployment_working_directory, + postconfirmations_deployment_working_directory, String, "protocol-units/settlement/mcr/contracts" ); env_short_default!( - post_confirmations_local_anvil_account_private_key, + postconfirmations_local_anvil_account_private_key, String, PrivateKeySigner::random().to_bytes().to_string() ); pub fn default_signer_identifier() -> SignerIdentifier { - match std::env::var("post_confirmations_SIGNER_IDENTIFIER") { + match std::env::var("postconfirmations_SIGNER_IDENTIFIER") { Ok(str_value) => SignerIdentifier::try_from_canonical_string(&str_value).unwrap(), Err(_) => SignerIdentifier::Local(Local { // todo: validate this is a valid private key - private_key_hex_bytes: post_confirmations_local_anvil_account_private_key(), + private_key_hex_bytes: postconfirmations_local_anvil_account_private_key(), }), } } @@ -53,7 +53,7 @@ pub fn maybe_deploy() -> Option { impl Default for Config { fn default() -> Self { Config { - post_confirmations_deployment_working_directory: post_confirmations_deployment_working_directory(), + postconfirmations_deployment_working_directory: postconfirmations_deployment_working_directory(), signer_identifier: default_signer_identifier(), } } diff --git a/protocol-units/pcp/config/src/common/settlement.rs b/protocol-units/pcp/config/src/common/settlement.rs index d6e83f58..208f3890 100644 --- a/protocol-units/pcp/config/src/common/settlement.rs +++ b/protocol-units/pcp/config/src/common/settlement.rs @@ -4,7 +4,7 @@ use secure_signer_loader::identifiers::{local::Local, SignerIdentifier}; use serde::{Deserialize, Serialize}; use std::env; -const DEFAULT_post_confirmations_CONTRACT_ADDRESS: &str = "0x5fc8d32690cc91d4c39d9d3abcbd16989f875707"; +const DEFAULT_postconfirmations_CONTRACT_ADDRESS: &str = "0x5fc8d32690cc91d4c39d9d3abcbd16989f875707"; #[derive(Debug, Clone, Serialize, Deserialize)] pub struct Config { @@ -12,8 +12,8 @@ pub struct Config { pub should_settle: bool, #[serde(default = "default_signer_identifier")] pub signer_identifier: SignerIdentifier, - #[serde(default = "default_post_confirmations_contract_address")] - pub post_confirmations_contract_address: String, + #[serde(default = "default_postconfirmations_contract_address")] + pub postconfirmations_contract_address: String, #[serde(default = "default_settlement_super_block_size")] pub settlement_super_block_size: u64, #[serde(default = "default_settlement_admin_mode")] @@ -28,15 +28,15 @@ pub fn default_signer_identifier() -> SignerIdentifier { } env_default!( - default_post_confirmations_contract_address, - "post_confirmations_CONTRACT_ADDRESS", + default_postconfirmations_contract_address, + "postconfirmations_CONTRACT_ADDRESS", String, - DEFAULT_post_confirmations_CONTRACT_ADDRESS.to_string() + DEFAULT_postconfirmations_CONTRACT_ADDRESS.to_string() ); -env_default!(default_settlement_admin_mode, "post_confirmations_SETTLEMENT_ADMIN_MODE", bool, false); +env_default!(default_settlement_admin_mode, "postconfirmations_SETTLEMENT_ADMIN_MODE", bool, false); -env_default!(default_settlement_super_block_size, "post_confirmations_SETTLEMENT_SUPER_BLOCK_SIZE", u64, 1); +env_default!(default_settlement_super_block_size, "postconfirmations_SETTLEMENT_SUPER_BLOCK_SIZE", u64, 1); pub fn default_should_settle() -> bool { env::var("ETH_SIGNER_PRIVATE_KEY").is_ok() @@ -47,7 +47,7 @@ impl Default for Config { Config { should_settle: default_should_settle(), signer_identifier: default_signer_identifier(), - post_confirmations_contract_address: default_post_confirmations_contract_address(), + postconfirmations_contract_address: default_postconfirmations_contract_address(), settlement_admin_mode: default_settlement_admin_mode(), settlement_super_block_size: default_settlement_super_block_size(), } diff --git a/protocol-units/pcp/config/src/common/testing.rs b/protocol-units/pcp/config/src/common/testing.rs index 7e1dc169..1573b2ea 100644 --- a/protocol-units/pcp/config/src/common/testing.rs +++ b/protocol-units/pcp/config/src/common/testing.rs @@ -6,8 +6,8 @@ pub struct Config { #[serde(default = "Vec::new")] pub well_known_account_private_keys: Vec, - #[serde(default = "default_post_confirmations_testing_admin_account_private_key")] - pub post_confirmations_testing_admin_account_private_key: String, + #[serde(default = "default_postconfirmations_testing_admin_account_private_key")] + pub postconfirmations_testing_admin_account_private_key: String, #[serde(default = "default_move_token_contract_address")] pub move_token_contract_address: String, @@ -16,7 +16,7 @@ pub struct Config { pub movement_staking_contract_address: String, } -env_short_default!(default_post_confirmations_testing_admin_account_private_key, String, "0x0"); +env_short_default!(default_postconfirmations_testing_admin_account_private_key, String, "0x0"); env_short_default!(default_move_token_contract_address, String, "0x0"); @@ -25,7 +25,7 @@ env_short_default!(default_movement_staking_contract_address, String, "0x0"); // env_or_none!( // default_maybe_testing, // Config, -// default_post_confirmations_testing_admin_account_private_key, +// default_postconfirmations_testing_admin_account_private_key, // default_move_token_contract_address, // default_movement_staking_contract_address // ); @@ -38,8 +38,8 @@ impl Default for Config { fn default() -> Self { Config { well_known_account_private_keys: Vec::new(), - post_confirmations_testing_admin_account_private_key: - default_post_confirmations_testing_admin_account_private_key(), + postconfirmations_testing_admin_account_private_key: + default_postconfirmations_testing_admin_account_private_key(), move_token_contract_address: default_move_token_contract_address(), movement_staking_contract_address: default_movement_staking_contract_address(), } diff --git a/protocol-units/pcp/manager/Cargo.toml b/protocol-units/pcp/manager/Cargo.toml index 4b30e09a..3903e8e4 100644 --- a/protocol-units/pcp/manager/Cargo.toml +++ b/protocol-units/pcp/manager/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "post-confirmationssettlement-manager" +name = "postconfirmationssettlement-manager" version = { workspace = true } edition = { workspace = true } license = { workspace = true } @@ -12,8 +12,8 @@ rust-version = { workspace = true } # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [dependencies] -post-confirmationsconfig = { workspace = true } -post-confirmationssettlement-client = { workspace = true } +postconfirmationsconfig = { workspace = true } +postconfirmationssettlement-client = { workspace = true } movement-types = { workspace = true } anyhow = { workspace = true } @@ -25,7 +25,7 @@ tokio-stream = { workspace = true } serde_json = { workspace = true } [dev-dependencies] -post-confirmationssettlement-client = { workspace = true, features = ["mock"] } +postconfirmationssettlement-client = { workspace = true, features = ["mock"] } [features] default = ["stub"] diff --git a/protocol-units/pcp/manager/src/lib.rs b/protocol-units/pcp/manager/src/lib.rs index e9b5b5a5..dcf7baa6 100644 --- a/protocol-units/pcp/manager/src/lib.rs +++ b/protocol-units/pcp/manager/src/lib.rs @@ -1,4 +1,4 @@ -use post_confirmations_types::block_commitment::{SuperBlockCommitment, SuperBlockCommitmentEvent}; +use postconfirmations_types::block_commitment::{SuperBlockCommitment, SuperBlockCommitmentEvent}; use tokio_stream::Stream; mod manager; diff --git a/protocol-units/pcp/manager/src/manager.rs b/protocol-units/pcp/manager/src/manager.rs index 2a85136d..86d08432 100644 --- a/protocol-units/pcp/manager/src/manager.rs +++ b/protocol-units/pcp/manager/src/manager.rs @@ -1,8 +1,8 @@ use crate::{CommitmentEventStream, McrSettlementManagerOperations, SuperBlockCommitmentEvent}; -use post_confirmations_config::Config; -use post_confirmations_settlement_client::McrSettlementClientOperations; -use post_confirmations_types::block_commitment::{ +use postconfirmations_config::Config; +use postconfirmations_settlement_client::McrSettlementClientOperations; +use postconfirmations_types::block_commitment::{ SuperBlockCommitment, SuperBlockCommitmentRejectionReason, }; @@ -148,8 +148,8 @@ fn process_commitments( #[cfg(test)] mod tests { use super::*; - use post_confirmations_settlement_client::mock::McrSettlementClient; - use post_confirmations_types::block_commitment::{Commitment, SuperBlockCommitment}; + use postconfirmations_settlement_client::mock::McrSettlementClient; + use postconfirmations_types::block_commitment::{Commitment, SuperBlockCommitment}; #[tokio::test] async fn test_block_commitment_accepted() -> Result<(), anyhow::Error> { diff --git a/protocol-units/pcp/runner/Cargo.toml b/protocol-units/pcp/runner/Cargo.toml index 1ff99ac4..4d7b3dc0 100644 --- a/protocol-units/pcp/runner/Cargo.toml +++ b/protocol-units/pcp/runner/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "post-confirmationssettlement-runner" +name = "postconfirmationssettlement-runner" description = "An Anvil runner for the MCR Settlement" version.workspace = true edition.workspace = true @@ -11,9 +11,9 @@ publish.workspace = true rust-version.workspace = true [dependencies] -post-confirmationsconfig = { workspace = true } -post-confirmationssettlement-client = { workspace = true } -post-confirmationssettlement-setup = { workspace = true } +postconfirmationsconfig = { workspace = true } +postconfirmationssettlement-client = { workspace = true } +postconfirmationssettlement-setup = { workspace = true } dot-movement = { workspace = true } commander = { workspace = true } diff --git a/protocol-units/pcp/runner/src/main.rs b/protocol-units/pcp/runner/src/main.rs index 62847c96..c9d99562 100644 --- a/protocol-units/pcp/runner/src/main.rs +++ b/protocol-units/pcp/runner/src/main.rs @@ -1,6 +1,6 @@ use ffs_environment::{backend::config_file::ConfigFile, ffs_environment}; -use post_confirmations_config::Config; -use post_confirmations_settlement_setup::Setup; +use postconfirmations_config::Config; +use postconfirmations_settlement_setup::Setup; #[tokio::main] async fn main() -> Result<(), anyhow::Error> { @@ -19,7 +19,7 @@ async fn main() -> Result<(), anyhow::Error> { // get a matching ffs_environment object let ffs_environment: ffs_environment = ffs_environment::new( ConfigFile::new(config_file), - vec!["post_confirmations_settlement".to_string()], + vec!["postconfirmations_settlement".to_string()], ); // Apply all of the setup steps diff --git a/sdk/README.md b/sdk/README.md index 87f19fe4..30f22344 100644 --- a/sdk/README.md +++ b/sdk/README.md @@ -1,2 +1,3 @@ # `sdk` -The FFS SDK is a set of tools for building FFS services. It is generally the entrypoint for researching and building with FFS. \ No newline at end of file + +The FFS SDK is a set of tools for building FFS services. It is generally the entrypoint for researching and building with FFS. diff --git a/spec/README.md b/spec/README.md index 2e4de8e0..3b4d0b83 100644 --- a/spec/README.md +++ b/spec/README.md @@ -1,2 +1,3 @@ # `spec` -Spec contains formalizations of the FFS protocol and its components. \ No newline at end of file + +Spec contains formalizations of the FFS protocol and its components. diff --git a/util/README.md b/util/README.md index 8a4ba9bf..6df1e608 100644 --- a/util/README.md +++ b/util/README.md @@ -1,2 +1,3 @@ # `util` -The `util` directory collects miscellaneous software utilities maintained by the FFS team. \ No newline at end of file + +The `util` directory collects miscellaneous software utilities maintained by the FFS team. From cc2008f7045bf28639e8ee64d75c3001b0c1d8e4 Mon Sep 17 00:00:00 2001 From: apenzk Date: Tue, 18 Mar 2025 14:12:24 +0100 Subject: [PATCH 06/25] init --- .vscode/setting.json | 5 +++++ .vscode/spellright.dict | 1 + README.md | 6 ++++-- protocol/mcr/cli/client/src/cli/mod.rs | 21 +++++++++++++++++++++ sdk/README.md | 10 +++++++++- sdk/cli/ffs-client/README.md | 21 ++++++++++++++++++++- sdk/cli/ffs-client/src/cli/protocol.rs | 1 + sdk/cli/ffs-dev/README.md | 3 ++- sdk/cli/ffs/README.md | 3 ++- 9 files changed, 65 insertions(+), 6 deletions(-) create mode 100644 .vscode/setting.json create mode 100644 .vscode/spellright.dict diff --git a/.vscode/setting.json b/.vscode/setting.json new file mode 100644 index 00000000..f43d1930 --- /dev/null +++ b/.vscode/setting.json @@ -0,0 +1,5 @@ +{ + "stm32-for-vscode.openOCDPath": false, + "stm32-for-vscode.armToolchainPath": false, + "spellright.userDictionary": "${workspaceFolder}/.vscode/spellright.dict" +} \ No newline at end of file diff --git a/.vscode/spellright.dict b/.vscode/spellright.dict new file mode 100644 index 00000000..f1c632f0 --- /dev/null +++ b/.vscode/spellright.dict @@ -0,0 +1 @@ +preimage \ No newline at end of file diff --git a/README.md b/README.md index 46a7523f..d0e3e4c1 100644 --- a/README.md +++ b/README.md @@ -15,6 +15,7 @@ f ------ | 5e771e3e47 | Movement Labs' Fast Finality Settlement is a proof of stake settlement system. ## Getting started + We're working on getting this into a user-ready state. Check back soon! ## Contributing @@ -28,14 +29,15 @@ We're working on getting this into a user-ready state. Check back soon! Please see the [CONTRIBUTING.md](CONTRIBUTING.md) file for contribution guidelines. ## Organization + There are five subdirectories which progressively build on one another for node logic. 1. [`util`](./util): contains utility logic mainly reused in [`protocol`](./protocol). -2. [`protocol`](./protocol): contains implementations of the protocol logic. +2. [`protocol`](./protocol): contains implementations of the protocol logic. 3. [`node`](./node): contains single-process runnable binaries that aggregate the protocol logic. 4. [`network`](./network): contains logic for running multiple nodes in a network. 5. [`sdk`](./sdk): contains logic for interacting nodes and networks. There are several other subdirectories of note: -- [`spec`](./spec): contains formal verification of FFS protocols. +- [`spec`](./spec): contains formal verification of FFS protocols. diff --git a/protocol/mcr/cli/client/src/cli/mod.rs b/protocol/mcr/cli/client/src/cli/mod.rs index 45b8435a..0856b4a4 100644 --- a/protocol/mcr/cli/client/src/cli/mod.rs +++ b/protocol/mcr/cli/client/src/cli/mod.rs @@ -16,6 +16,19 @@ pub enum McrProtocolClientSubcommand { Run, #[clap(subcommand)] Eth(eth::Eth), + /// Post a commitment to an MCR implementation + PostCommitment(PostCommitmentArgs), +} + +#[derive(clap::Args)] +pub struct PostCommitmentArgs { + /// Hex-encoded commitment + #[clap(long, conflicts_with = "preimage_string", required_unless_present = "preimage_string")] + commitment_hex: Option, + + /// String to be hashed into a commitment + #[clap(long, conflicts_with = "commitment_hex", required_unless_present = "commitment_hex")] + preimage_string: Option, } /// Implement the `From` trait for `McrProtocolClient` to convert it into a `McrProtocolClientSubcommand`. @@ -42,6 +55,14 @@ impl McrProtocolClientSubcommand { println!("mcr-protocol-client is under development. Please check back later."); } McrProtocolClientSubcommand::Eth(eth) => eth.execute().await?, + McrProtocolClientSubcommand::PostCommitment(args) => { + // For now, just print what we would do + if let Some(hex) = &args.commitment_hex { + println!("Would post commitment from hex: {}", hex); + } else if let Some(preimage) = &args.preimage_string { + println!("Would hash and post commitment from preimage: {}", preimage); + } + } } Ok(()) } diff --git a/sdk/README.md b/sdk/README.md index 87f19fe4..fac7ce06 100644 --- a/sdk/README.md +++ b/sdk/README.md @@ -1,2 +1,10 @@ # `sdk` -The FFS SDK is a set of tools for building FFS services. It is generally the entrypoint for researching and building with FFS. \ No newline at end of file + +The FFS SDK is a set of tools for building FFS services. It is generally the entry point for researching and building with FFS. + +## Contents + +- **[`cli`](./cli/README.md)**: the SDK cli suite. + - **[`ffs`](./cli/ffs/README.md)**: the main FFS command line tool. + - **[`ffs-client`](./cli/ffs-client/README.md)**: a client for interacting with FFS. + - **[`ffs-dev`](./cli/ffs-dev/README.md)**: a development tool for FFS. diff --git a/sdk/cli/ffs-client/README.md b/sdk/cli/ffs-client/README.md index 6936bff0..4cdd7e9f 100644 --- a/sdk/cli/ffs-client/README.md +++ b/sdk/cli/ffs-client/README.md @@ -1,2 +1,21 @@ # `ffs-client` -The command line tool for interacting with live FFS services. \ No newline at end of file + +The command line tool for interacting with live FFS services. + +## Commands + +### Protocol MCR + +Post a commitment to an MCR implementation: + +Post using a hex-encoded commitment + +```bash +ffs-client protocol mcr post-commitment --commitment-hex +``` + +Post using a preimage string + +```bash +ffs-client protocol mcr post-commitment --preimage-string +``` diff --git a/sdk/cli/ffs-client/src/cli/protocol.rs b/sdk/cli/ffs-client/src/cli/protocol.rs index 1ab5511c..5e4b59b3 100644 --- a/sdk/cli/ffs-client/src/cli/protocol.rs +++ b/sdk/cli/ffs-client/src/cli/protocol.rs @@ -4,6 +4,7 @@ use mcr_protocol_client::cli::McrProtocolClientSubcommand; #[derive(Subcommand)] #[clap(rename_all = "kebab-case")] pub enum Protocol { + /// MCR protocol commands #[clap(subcommand)] Mcr(McrProtocolClientSubcommand), } diff --git a/sdk/cli/ffs-dev/README.md b/sdk/cli/ffs-dev/README.md index e0a72b65..877e0bbe 100644 --- a/sdk/cli/ffs-dev/README.md +++ b/sdk/cli/ffs-dev/README.md @@ -1,2 +1,3 @@ # `ffs-dev` -The FFS command line tool for those working on active development, typically combines the most FFS command line tools. \ No newline at end of file + +The FFS command line tool for those working on active development, typically combines the most FFS command line tools. diff --git a/sdk/cli/ffs/README.md b/sdk/cli/ffs/README.md index 27768db9..62a498f2 100644 --- a/sdk/cli/ffs/README.md +++ b/sdk/cli/ffs/README.md @@ -1,2 +1,3 @@ # `ffs` -The main FFS command line tool. This is under specification and development. \ No newline at end of file + +The main FFS command line tool. This is under specification and development. From 6260565a5b27f31bdf7f63c4cad1d9bc51906bdf Mon Sep 17 00:00:00 2001 From: apenzk Date: Tue, 18 Mar 2025 14:33:11 +0100 Subject: [PATCH 07/25] updates directory name --- protocol-units/fcp/README.md | 0 protocol-units/pcp/README copy.md | 15 ---- protocol-units/pcp/README.md | 2 - protocol-units/pcp/client/Cargo.toml | 67 ------------------ protocol-units/pcp/client/src/lib.rs | 57 --------------- .../mcr/cli}/client/abis/MCR.json | 0 .../mcr/cli}/client/abis/MOVEToken.json | 0 .../mcr/cli}/client/abis/MovementStaking.json | 0 {protocol-units => protocol}/pcp/.gitmodules | 0 protocol/pcp/README.md | 11 +++ protocol/pcp/cli/client/Cargo.toml | 60 ++++++++++++++-- .../src/bin/e2e/test_client_settlement.rs | 0 .../pcp/cli}/client/src/eth_client.rs | 0 protocol/pcp/cli/client/src/lib.rs | 57 +++++++++++++++ .../pcp/cli}/client/src/mock.rs | 0 .../cli}/client/src/send_eth_transaction.rs | 0 .../pcp/config/Cargo.toml | 0 .../pcp/config/src/common/deploy.rs | 0 .../pcp/config/src/common/eth_connection.rs | 0 .../pcp/config/src/common/mod.rs | 0 .../pcp/config/src/common/settlement.rs | 0 .../pcp/config/src/common/staking.rs | 0 .../pcp/config/src/common/testing.rs | 0 .../pcp/config/src/common/transactions.rs | 0 .../pcp/config/src/lib.rs | 0 .../pcp/contracts/.DS_Store | Bin .../pcp/contracts/.github/workflows/test.yml | 0 .../pcp/contracts/.gitignore | 0 .../pcp/contracts/.prettierrc | 0 .../pcp/contracts/README.md | 0 .../pcp/contracts/deployments/local.json | 0 .../pcp/contracts/foundry.toml | 0 .../pcp/contracts/hardhat.config.ts | 0 .../pcp/contracts/kurtosis_instructions.md | 0 .../pcp/contracts/package.json | 0 .../pcp/contracts/remappings.txt | 0 .../pcp/contracts/script/CoreDeployer.s.sol | 0 .../pcp/contracts/script/DeployMCR.s.sol | 0 .../pcp/contracts/script/DeployMCRDev.s.sol | 0 .../contracts/script/DeployMOVETokenDev.s.sol | 0 .../pcp/contracts/script/MCRDeployer.s.sol | 0 .../contracts/script/MOVETokenDeployer.s.sol | 0 .../script/MovementStakingDeployer.s.sol | 0 .../script/MultisigMOVETokenDeployer.s.sol | 0 .../contracts/script/StlMoveDeployer.s.sol | 0 .../pcp/contracts/script/VerifyMCRDev.s.sol | 0 .../pcp/contracts/script/deploy-safe.sh | 0 .../script/helpers/Create3/CREATE3Factory.sol | 0 .../helpers/Create3/ICREATE3Factory.sol | 0 .../pcp/contracts/script/helpers/Helper.sol | 0 .../pcp/contracts/script/helpers/config.json | 0 .../contracts/script/helpers/configOLD.json | 0 .../contracts/script/helpers/deployments.json | 0 .../script/helpers/deploymentsOLD.json | 0 .../script/helpers/safe-deployments.json | 0 .../script/helpers/upgrade/deploymove.json | 0 .../contracts/script/helpers/upgrade/mcr.json | 0 .../script/helpers/upgrade/staking.json | 0 .../script/helpers/upgrade/stlmove.json | 0 .../pcp/contracts/script/install-deps.sh | 0 .../pcp/contracts/script/verify-mcr.sh | 0 .../pcp/contracts/scripts/README.md | 0 .../pcp/contracts/scripts/deploy.ts | 0 .../pcp/contracts/scripts/tasks/utils.ts | 0 .../pcp/contracts/scripts/test-deployment.ts | 0 .../pcp/contracts/src/proxy/ERC1967Proxy.sol | 0 .../pcp/contracts/src/proxy/ProxyAdmin.sol | 0 .../src/proxy/TransparentUpgradeableProxy.sol | 0 .../pcp/contracts/src/settlement/MCR.sol | 0 .../contracts/src/settlement/MCRStorage.sol | 0 .../src/settlement/interfaces/IMCR.sol | 0 .../settlement/settlement/BaseSettlement.sol | 0 .../contracts/src/staking/MovementStaking.sol | 0 .../src/staking/MovementStakingStorage.sol | 0 .../src/staking/base/BaseStaking.sol | 0 .../staking/interfaces/IMovementStaking.sol | 0 .../pcp/contracts/src/token/MOVEToken.sol | 0 .../pcp/contracts/src/token/MOVETokenDev.sol | 0 .../pcp/contracts/src/token/MOVETokenV1.sol | 0 .../contracts/src/token/base/BaseToken.sol | 0 .../src/token/base/MintableToken.sol | 0 .../contracts/src/token/base/WrappedToken.sol | 0 .../src/token/base/WrappedTokenStorage.sol | 0 .../src/token/custodian/CustodianToken.sol | 0 .../contracts/src/token/faucet/MOVEFaucet.sol | 0 .../src/token/locked/LockedToken.sol | 0 .../src/token/locked/LockedTokenStorage.sol | 0 .../pcp/contracts/src/token/stlMoveToken.sol | 0 .../pcp/contracts/test/Deployer.t.sol | 0 .../pcp/contracts/test/settlement/MCR.t.sol | 0 .../test/staking/MovementStaking.t.sol | 0 .../test/staking/base/BaseStaking.t.sol | 0 .../pcp/contracts/test/token/Faucet.t.sol | 0 .../pcp/contracts/test/token/MOVEToken.t.sol | 0 .../contracts/test/token/MOVETokenV2.t.sol | 0 .../contracts/test/token/base/BaseToken.t.sol | 0 .../test/token/base/MintableToken.t.sol | 0 .../test/token/base/WrappedToken.t.sol | 0 .../test/token/custodian/CustodianToken.t.sol | 0 .../test/token/locked/LockedToken.t.sol | 0 .../contracts/test/token/stlMoveToken.t.sol | 0 .../pcp/contracts/tsconfig.json | 0 .../pcp/contracts/upgrader/README.md | 0 .../pcp/contracts/upgrader/accept.sh | 0 .../pcp/contracts/upgrader/accept.ts | 0 .../pcp/contracts/upgrader/acceptKms.sh | 0 .../pcp/contracts/upgrader/acceptKms.ts | 0 .../pcp/contracts/upgrader/kmsSign.ts | 0 .../pcp/contracts/upgrader/package-lock.json | 0 .../pcp/contracts/upgrader/package.json | 0 .../pcp/contracts/upgrader/propose.sh | 0 .../pcp/contracts/upgrader/propose.ts | 0 .../pcp/contracts/upgrader/safeDeploy.sh | 0 .../pcp/contracts/upgrader/safeDeploy.ts | 0 .../pcp/contracts/yarn.lock | 0 .../pcp/eth-network-params.yaml | 0 .../pcp/manager/Cargo.toml | 0 .../pcp/manager/src/lib.rs | 0 .../pcp/manager/src/manager.rs | 0 .../pcp/runner/Cargo.toml | 0 .../pcp/runner/src/main.rs | 0 121 files changed, 122 insertions(+), 147 deletions(-) delete mode 100644 protocol-units/fcp/README.md delete mode 100644 protocol-units/pcp/README copy.md delete mode 100644 protocol-units/pcp/README.md delete mode 100644 protocol-units/pcp/client/Cargo.toml delete mode 100644 protocol-units/pcp/client/src/lib.rs rename {protocol-units/pcp => protocol/mcr/cli}/client/abis/MCR.json (100%) rename {protocol-units/pcp => protocol/mcr/cli}/client/abis/MOVEToken.json (100%) rename {protocol-units/pcp => protocol/mcr/cli}/client/abis/MovementStaking.json (100%) rename {protocol-units => protocol}/pcp/.gitmodules (100%) rename {protocol-units/pcp => protocol/pcp/cli}/client/src/bin/e2e/test_client_settlement.rs (100%) rename {protocol-units/pcp => protocol/pcp/cli}/client/src/eth_client.rs (100%) rename {protocol-units/pcp => protocol/pcp/cli}/client/src/mock.rs (100%) rename {protocol-units/pcp => protocol/pcp/cli}/client/src/send_eth_transaction.rs (100%) rename {protocol-units => protocol}/pcp/config/Cargo.toml (100%) rename {protocol-units => protocol}/pcp/config/src/common/deploy.rs (100%) rename {protocol-units => protocol}/pcp/config/src/common/eth_connection.rs (100%) rename {protocol-units => protocol}/pcp/config/src/common/mod.rs (100%) rename {protocol-units => protocol}/pcp/config/src/common/settlement.rs (100%) rename {protocol-units => protocol}/pcp/config/src/common/staking.rs (100%) rename {protocol-units => protocol}/pcp/config/src/common/testing.rs (100%) rename {protocol-units => protocol}/pcp/config/src/common/transactions.rs (100%) rename {protocol-units => protocol}/pcp/config/src/lib.rs (100%) rename {protocol-units => protocol}/pcp/contracts/.DS_Store (100%) rename {protocol-units => protocol}/pcp/contracts/.github/workflows/test.yml (100%) rename {protocol-units => protocol}/pcp/contracts/.gitignore (100%) rename {protocol-units => protocol}/pcp/contracts/.prettierrc (100%) rename {protocol-units => protocol}/pcp/contracts/README.md (100%) rename {protocol-units => protocol}/pcp/contracts/deployments/local.json (100%) rename {protocol-units => protocol}/pcp/contracts/foundry.toml (100%) rename {protocol-units => protocol}/pcp/contracts/hardhat.config.ts (100%) rename {protocol-units => protocol}/pcp/contracts/kurtosis_instructions.md (100%) rename {protocol-units => protocol}/pcp/contracts/package.json (100%) rename {protocol-units => protocol}/pcp/contracts/remappings.txt (100%) rename {protocol-units => protocol}/pcp/contracts/script/CoreDeployer.s.sol (100%) rename {protocol-units => protocol}/pcp/contracts/script/DeployMCR.s.sol (100%) rename {protocol-units => protocol}/pcp/contracts/script/DeployMCRDev.s.sol (100%) rename {protocol-units => protocol}/pcp/contracts/script/DeployMOVETokenDev.s.sol (100%) rename {protocol-units => protocol}/pcp/contracts/script/MCRDeployer.s.sol (100%) rename {protocol-units => protocol}/pcp/contracts/script/MOVETokenDeployer.s.sol (100%) rename {protocol-units => protocol}/pcp/contracts/script/MovementStakingDeployer.s.sol (100%) rename {protocol-units => protocol}/pcp/contracts/script/MultisigMOVETokenDeployer.s.sol (100%) rename {protocol-units => protocol}/pcp/contracts/script/StlMoveDeployer.s.sol (100%) rename {protocol-units => protocol}/pcp/contracts/script/VerifyMCRDev.s.sol (100%) rename {protocol-units => protocol}/pcp/contracts/script/deploy-safe.sh (100%) rename {protocol-units => protocol}/pcp/contracts/script/helpers/Create3/CREATE3Factory.sol (100%) rename {protocol-units => protocol}/pcp/contracts/script/helpers/Create3/ICREATE3Factory.sol (100%) rename {protocol-units => protocol}/pcp/contracts/script/helpers/Helper.sol (100%) rename {protocol-units => protocol}/pcp/contracts/script/helpers/config.json (100%) rename {protocol-units => protocol}/pcp/contracts/script/helpers/configOLD.json (100%) rename {protocol-units => protocol}/pcp/contracts/script/helpers/deployments.json (100%) rename {protocol-units => protocol}/pcp/contracts/script/helpers/deploymentsOLD.json (100%) rename {protocol-units => protocol}/pcp/contracts/script/helpers/safe-deployments.json (100%) rename {protocol-units => protocol}/pcp/contracts/script/helpers/upgrade/deploymove.json (100%) rename {protocol-units => protocol}/pcp/contracts/script/helpers/upgrade/mcr.json (100%) rename {protocol-units => protocol}/pcp/contracts/script/helpers/upgrade/staking.json (100%) rename {protocol-units => protocol}/pcp/contracts/script/helpers/upgrade/stlmove.json (100%) rename {protocol-units => protocol}/pcp/contracts/script/install-deps.sh (100%) rename {protocol-units => protocol}/pcp/contracts/script/verify-mcr.sh (100%) rename {protocol-units => protocol}/pcp/contracts/scripts/README.md (100%) rename {protocol-units => protocol}/pcp/contracts/scripts/deploy.ts (100%) rename {protocol-units => protocol}/pcp/contracts/scripts/tasks/utils.ts (100%) rename {protocol-units => protocol}/pcp/contracts/scripts/test-deployment.ts (100%) rename {protocol-units => protocol}/pcp/contracts/src/proxy/ERC1967Proxy.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/proxy/ProxyAdmin.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/proxy/TransparentUpgradeableProxy.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/settlement/MCR.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/settlement/MCRStorage.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/settlement/interfaces/IMCR.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/settlement/settlement/BaseSettlement.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/staking/MovementStaking.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/staking/MovementStakingStorage.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/staking/base/BaseStaking.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/staking/interfaces/IMovementStaking.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/token/MOVEToken.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/token/MOVETokenDev.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/token/MOVETokenV1.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/token/base/BaseToken.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/token/base/MintableToken.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/token/base/WrappedToken.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/token/base/WrappedTokenStorage.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/token/custodian/CustodianToken.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/token/faucet/MOVEFaucet.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/token/locked/LockedToken.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/token/locked/LockedTokenStorage.sol (100%) rename {protocol-units => protocol}/pcp/contracts/src/token/stlMoveToken.sol (100%) rename {protocol-units => protocol}/pcp/contracts/test/Deployer.t.sol (100%) rename {protocol-units => protocol}/pcp/contracts/test/settlement/MCR.t.sol (100%) rename {protocol-units => protocol}/pcp/contracts/test/staking/MovementStaking.t.sol (100%) rename {protocol-units => protocol}/pcp/contracts/test/staking/base/BaseStaking.t.sol (100%) rename {protocol-units => protocol}/pcp/contracts/test/token/Faucet.t.sol (100%) rename {protocol-units => protocol}/pcp/contracts/test/token/MOVEToken.t.sol (100%) rename {protocol-units => protocol}/pcp/contracts/test/token/MOVETokenV2.t.sol (100%) rename {protocol-units => protocol}/pcp/contracts/test/token/base/BaseToken.t.sol (100%) rename {protocol-units => protocol}/pcp/contracts/test/token/base/MintableToken.t.sol (100%) rename {protocol-units => protocol}/pcp/contracts/test/token/base/WrappedToken.t.sol (100%) rename {protocol-units => protocol}/pcp/contracts/test/token/custodian/CustodianToken.t.sol (100%) rename {protocol-units => protocol}/pcp/contracts/test/token/locked/LockedToken.t.sol (100%) rename {protocol-units => protocol}/pcp/contracts/test/token/stlMoveToken.t.sol (100%) rename {protocol-units => protocol}/pcp/contracts/tsconfig.json (100%) rename {protocol-units => protocol}/pcp/contracts/upgrader/README.md (100%) rename {protocol-units => protocol}/pcp/contracts/upgrader/accept.sh (100%) rename {protocol-units => protocol}/pcp/contracts/upgrader/accept.ts (100%) rename {protocol-units => protocol}/pcp/contracts/upgrader/acceptKms.sh (100%) rename {protocol-units => protocol}/pcp/contracts/upgrader/acceptKms.ts (100%) rename {protocol-units => protocol}/pcp/contracts/upgrader/kmsSign.ts (100%) rename {protocol-units => protocol}/pcp/contracts/upgrader/package-lock.json (100%) rename {protocol-units => protocol}/pcp/contracts/upgrader/package.json (100%) rename {protocol-units => protocol}/pcp/contracts/upgrader/propose.sh (100%) rename {protocol-units => protocol}/pcp/contracts/upgrader/propose.ts (100%) rename {protocol-units => protocol}/pcp/contracts/upgrader/safeDeploy.sh (100%) rename {protocol-units => protocol}/pcp/contracts/upgrader/safeDeploy.ts (100%) rename {protocol-units => protocol}/pcp/contracts/yarn.lock (100%) rename {protocol-units => protocol}/pcp/eth-network-params.yaml (100%) rename {protocol-units => protocol}/pcp/manager/Cargo.toml (100%) rename {protocol-units => protocol}/pcp/manager/src/lib.rs (100%) rename {protocol-units => protocol}/pcp/manager/src/manager.rs (100%) rename {protocol-units => protocol}/pcp/runner/Cargo.toml (100%) rename {protocol-units => protocol}/pcp/runner/src/main.rs (100%) diff --git a/protocol-units/fcp/README.md b/protocol-units/fcp/README.md deleted file mode 100644 index e69de29b..00000000 diff --git a/protocol-units/pcp/README copy.md b/protocol-units/pcp/README copy.md deleted file mode 100644 index d75c7852..00000000 --- a/protocol-units/pcp/README copy.md +++ /dev/null @@ -1,15 +0,0 @@ -# MCR - Multi-Commit Rollup - -**MCR** implements a staking-based settlement where validators commit L2-blocks on Layer 1 (L1). - -Validators stake tokens to participate in block validation. They commit to L2-blocks on L1, and the contract on L1 tracks block commitments, epochs, and stake. The contracts also manage validators and custodian staking and unstaking. The contract validates if commitments have reached two-thirds supermajority stake, and rewards or slashes validators based on their actions. - -For further details see the [RFC for MCR](https://github.com/movementlabsxyz/rfcs/pull/29) and the [MIP-34](https://github.com/movementlabsxyz/MIP/blob/main/MIP/mip-34). - -## Architecture - -- [Contracts](./contracts/README.md): Includes settlement contracts for block commitments, staking contracts for validator management, token contracts for custody. -- **Manager**: Manages block commitments by batching and submitting them, interacts with clients, and processes commitment events (acceptance or rejection) for the settlement system. -- **Setup**: Prepares local environments or deploys contracts, manages configuration for local and deployment setups, and ensures contract deployment when needed. -- **Runner**: Orchestrates the setup and execution of configuration tasks, applies setup steps, and logs processes for debugging. -- **Client**: Handles interaction with the MCR system by posting block commitments, streaming commitment data, and managing Ethereum blockchain interactions. \ No newline at end of file diff --git a/protocol-units/pcp/README.md b/protocol-units/pcp/README.md deleted file mode 100644 index a8613238..00000000 --- a/protocol-units/pcp/README.md +++ /dev/null @@ -1,2 +0,0 @@ -# Postconfirmations -Postconfirmations were originally proposed in [MIP-37](https://github.com/movementlabsxyz/MIP/pull/37) as a sub-protocol of FFS, [MIP-34](https://github.com/movementlabsxyz/MIP/pull/34). It is a protocol for committing on the "base-chain" in a side-chain system. \ No newline at end of file diff --git a/protocol-units/pcp/client/Cargo.toml b/protocol-units/pcp/client/Cargo.toml deleted file mode 100644 index 97705110..00000000 --- a/protocol-units/pcp/client/Cargo.toml +++ /dev/null @@ -1,67 +0,0 @@ -[package] -name = "postconfirmationssettlement-client" -version = { workspace = true } -edition = { workspace = true } -license = { workspace = true } -authors = { workspace = true } -homepage = { workspace = true } -publish = { workspace = true } -rust-version = { workspace = true } - -# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html -# [[bin]] -# name = "test-postconfirmationssettlement-client" -# path = "src/bin/e2e/test_client_settlement.rs" - - -[dependencies] -postconfirmationsconfig = { workspace = true } -secure-signer-loader = { workspace = true } -secure-signer = { workspace = true } -secure-signing-eth = { workspace = true } - -alloy = { workspace = true, features = [ - "node-bindings", - "rpc-types-trace", - "json-rpc", - "rpc-client", - "signers", - "signer-yubihsm", - "pubsub", - "providers", -] } -alloy-contract = { workspace = true } -alloy-network = { workspace = true } -alloy-primitives = { workspace = true } -alloy-provider = { workspace = true, features = [] } -alloy-signer = { workspace = true } -alloy-sol-types = { workspace = true } -alloy-transport = { workspace = true } -alloy-transport-ws = { workspace = true } - -anyhow = { workspace = true } -async-stream = { workspace = true } -async-trait = { workspace = true } -serde_json = { workspace = true } -movement-types = { workspace = true } -thiserror = { workspace = true } -tokio = { workspace = true } -tokio-stream = { workspace = true } -tracing = { workspace = true } -serde = { workspace = true } - -ffs-environment = { workspace = true } - -dot-movement = { workspace = true } -alloy-rpc-types = { workspace = true } -futures = { workspace = true } -tracing-subscriber = { workspace = true } - -[features] -default = ["eth"] -e2e = ["eth"] -eth = [] -mock = [] - -[lints] -workspace = true diff --git a/protocol-units/pcp/client/src/lib.rs b/protocol-units/pcp/client/src/lib.rs deleted file mode 100644 index 179add3c..00000000 --- a/protocol-units/pcp/client/src/lib.rs +++ /dev/null @@ -1,57 +0,0 @@ -use postconfirmations_types::block_commitment::SuperBlockCommitment; -use tokio_stream::Stream; -pub mod mock; - -// FIXME: mock exports -// #[cfg(feature = "mock")] -// pub use mock::*; - -pub mod eth_client; - -#[cfg(feature = "eth")] -pub use eth_client::McrSettlementClient; - -pub mod send_eth_transaction; - -type CommitmentStream = - std::pin::Pin> + Send>>; - -#[async_trait::async_trait] -pub trait McrSettlementClientOperations { - /// Posts a block commitment to the settlement client. - async fn post_block_commitment( - &self, - block_commitment: SuperBlockCommitment, - ) -> Result<(), anyhow::Error>; - - /// Posts a batch of block commitments to the settlement client. - async fn post_block_commitment_batch( - &self, - block_commitment: Vec, - ) -> Result<(), anyhow::Error>; - - /// Forces a block commitment - /// This will only work in admin mode - async fn force_block_commitment( - &self, - block_commitment: SuperBlockCommitment, - ) -> Result<(), anyhow::Error>; - - /// Streams block commitments from the settlement client. - async fn stream_block_commitments(&self) -> Result; - - /// Gets the accepted commitment at the given height. - async fn get_commitment_at_height( - &self, - height: u64, - ) -> Result, anyhow::Error>; - - /// Gets the commitment this validator has made at a given height - async fn get_posted_commitment_at_height( - &self, - height: u64, - ) -> Result, anyhow::Error>; - - /// Gets the max tolerable block height. - async fn get_max_tolerable_block_height(&self) -> Result; -} diff --git a/protocol-units/pcp/client/abis/MCR.json b/protocol/mcr/cli/client/abis/MCR.json similarity index 100% rename from protocol-units/pcp/client/abis/MCR.json rename to protocol/mcr/cli/client/abis/MCR.json diff --git a/protocol-units/pcp/client/abis/MOVEToken.json b/protocol/mcr/cli/client/abis/MOVEToken.json similarity index 100% rename from protocol-units/pcp/client/abis/MOVEToken.json rename to protocol/mcr/cli/client/abis/MOVEToken.json diff --git a/protocol-units/pcp/client/abis/MovementStaking.json b/protocol/mcr/cli/client/abis/MovementStaking.json similarity index 100% rename from protocol-units/pcp/client/abis/MovementStaking.json rename to protocol/mcr/cli/client/abis/MovementStaking.json diff --git a/protocol-units/pcp/.gitmodules b/protocol/pcp/.gitmodules similarity index 100% rename from protocol-units/pcp/.gitmodules rename to protocol/pcp/.gitmodules diff --git a/protocol/pcp/README.md b/protocol/pcp/README.md index e69de29b..609b3854 100644 --- a/protocol/pcp/README.md +++ b/protocol/pcp/README.md @@ -0,0 +1,11 @@ +# Postconfirmation Protocol (PCP) + +Postconfirmations were originally proposed in [MIP-37](https://github.com/movementlabsxyz/MIP/pull/37) as a sub-protocol of FFS, [MIP-34](https://github.com/movementlabsxyz/MIP/pull/34). It is a protocol for committing on the "base-chain" in a side-chain system. + +## Architecture + +- **[`contracts`](./contracts/README.md)**: the contracts for the PCP. +- **[`manager`](./manager/README.md)**: the manager for the PCP. +- **[`config`](./config/README.md)**: the config for the PCP. +- **[`runner`](./runner/README.md)**: the runner for the PCP. +- **[`cli`](./cli/README.md)**: the CLI client for the PCP diff --git a/protocol/pcp/cli/client/Cargo.toml b/protocol/pcp/cli/client/Cargo.toml index 8014c3e8..97705110 100644 --- a/protocol/pcp/cli/client/Cargo.toml +++ b/protocol/pcp/cli/client/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "pcp-protocol-client" +name = "postconfirmationssettlement-client" version = { workspace = true } edition = { workspace = true } license = { workspace = true } @@ -8,12 +8,60 @@ homepage = { workspace = true } publish = { workspace = true } rust-version = { workspace = true } +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +# [[bin]] +# name = "test-postconfirmationssettlement-client" +# path = "src/bin/e2e/test_client_settlement.rs" + + [dependencies] -tokio = { workspace = true } -serde = { workspace = true, features = ["derive"] } -clap = { workspace = true} -dotenv = { workspace = true } +postconfirmationsconfig = { workspace = true } +secure-signer-loader = { workspace = true } +secure-signer = { workspace = true } +secure-signing-eth = { workspace = true } + +alloy = { workspace = true, features = [ + "node-bindings", + "rpc-types-trace", + "json-rpc", + "rpc-client", + "signers", + "signer-yubihsm", + "pubsub", + "providers", +] } +alloy-contract = { workspace = true } +alloy-network = { workspace = true } +alloy-primitives = { workspace = true } +alloy-provider = { workspace = true, features = [] } +alloy-signer = { workspace = true } +alloy-sol-types = { workspace = true } +alloy-transport = { workspace = true } +alloy-transport-ws = { workspace = true } + anyhow = { workspace = true } +async-stream = { workspace = true } +async-trait = { workspace = true } +serde_json = { workspace = true } +movement-types = { workspace = true } +thiserror = { workspace = true } +tokio = { workspace = true } +tokio-stream = { workspace = true } +tracing = { workspace = true } +serde = { workspace = true } + +ffs-environment = { workspace = true } + +dot-movement = { workspace = true } +alloy-rpc-types = { workspace = true } +futures = { workspace = true } +tracing-subscriber = { workspace = true } + +[features] +default = ["eth"] +e2e = ["eth"] +eth = [] +mock = [] [lints] -workspace = true \ No newline at end of file +workspace = true diff --git a/protocol-units/pcp/client/src/bin/e2e/test_client_settlement.rs b/protocol/pcp/cli/client/src/bin/e2e/test_client_settlement.rs similarity index 100% rename from protocol-units/pcp/client/src/bin/e2e/test_client_settlement.rs rename to protocol/pcp/cli/client/src/bin/e2e/test_client_settlement.rs diff --git a/protocol-units/pcp/client/src/eth_client.rs b/protocol/pcp/cli/client/src/eth_client.rs similarity index 100% rename from protocol-units/pcp/client/src/eth_client.rs rename to protocol/pcp/cli/client/src/eth_client.rs diff --git a/protocol/pcp/cli/client/src/lib.rs b/protocol/pcp/cli/client/src/lib.rs index e69de29b..179add3c 100644 --- a/protocol/pcp/cli/client/src/lib.rs +++ b/protocol/pcp/cli/client/src/lib.rs @@ -0,0 +1,57 @@ +use postconfirmations_types::block_commitment::SuperBlockCommitment; +use tokio_stream::Stream; +pub mod mock; + +// FIXME: mock exports +// #[cfg(feature = "mock")] +// pub use mock::*; + +pub mod eth_client; + +#[cfg(feature = "eth")] +pub use eth_client::McrSettlementClient; + +pub mod send_eth_transaction; + +type CommitmentStream = + std::pin::Pin> + Send>>; + +#[async_trait::async_trait] +pub trait McrSettlementClientOperations { + /// Posts a block commitment to the settlement client. + async fn post_block_commitment( + &self, + block_commitment: SuperBlockCommitment, + ) -> Result<(), anyhow::Error>; + + /// Posts a batch of block commitments to the settlement client. + async fn post_block_commitment_batch( + &self, + block_commitment: Vec, + ) -> Result<(), anyhow::Error>; + + /// Forces a block commitment + /// This will only work in admin mode + async fn force_block_commitment( + &self, + block_commitment: SuperBlockCommitment, + ) -> Result<(), anyhow::Error>; + + /// Streams block commitments from the settlement client. + async fn stream_block_commitments(&self) -> Result; + + /// Gets the accepted commitment at the given height. + async fn get_commitment_at_height( + &self, + height: u64, + ) -> Result, anyhow::Error>; + + /// Gets the commitment this validator has made at a given height + async fn get_posted_commitment_at_height( + &self, + height: u64, + ) -> Result, anyhow::Error>; + + /// Gets the max tolerable block height. + async fn get_max_tolerable_block_height(&self) -> Result; +} diff --git a/protocol-units/pcp/client/src/mock.rs b/protocol/pcp/cli/client/src/mock.rs similarity index 100% rename from protocol-units/pcp/client/src/mock.rs rename to protocol/pcp/cli/client/src/mock.rs diff --git a/protocol-units/pcp/client/src/send_eth_transaction.rs b/protocol/pcp/cli/client/src/send_eth_transaction.rs similarity index 100% rename from protocol-units/pcp/client/src/send_eth_transaction.rs rename to protocol/pcp/cli/client/src/send_eth_transaction.rs diff --git a/protocol-units/pcp/config/Cargo.toml b/protocol/pcp/config/Cargo.toml similarity index 100% rename from protocol-units/pcp/config/Cargo.toml rename to protocol/pcp/config/Cargo.toml diff --git a/protocol-units/pcp/config/src/common/deploy.rs b/protocol/pcp/config/src/common/deploy.rs similarity index 100% rename from protocol-units/pcp/config/src/common/deploy.rs rename to protocol/pcp/config/src/common/deploy.rs diff --git a/protocol-units/pcp/config/src/common/eth_connection.rs b/protocol/pcp/config/src/common/eth_connection.rs similarity index 100% rename from protocol-units/pcp/config/src/common/eth_connection.rs rename to protocol/pcp/config/src/common/eth_connection.rs diff --git a/protocol-units/pcp/config/src/common/mod.rs b/protocol/pcp/config/src/common/mod.rs similarity index 100% rename from protocol-units/pcp/config/src/common/mod.rs rename to protocol/pcp/config/src/common/mod.rs diff --git a/protocol-units/pcp/config/src/common/settlement.rs b/protocol/pcp/config/src/common/settlement.rs similarity index 100% rename from protocol-units/pcp/config/src/common/settlement.rs rename to protocol/pcp/config/src/common/settlement.rs diff --git a/protocol-units/pcp/config/src/common/staking.rs b/protocol/pcp/config/src/common/staking.rs similarity index 100% rename from protocol-units/pcp/config/src/common/staking.rs rename to protocol/pcp/config/src/common/staking.rs diff --git a/protocol-units/pcp/config/src/common/testing.rs b/protocol/pcp/config/src/common/testing.rs similarity index 100% rename from protocol-units/pcp/config/src/common/testing.rs rename to protocol/pcp/config/src/common/testing.rs diff --git a/protocol-units/pcp/config/src/common/transactions.rs b/protocol/pcp/config/src/common/transactions.rs similarity index 100% rename from protocol-units/pcp/config/src/common/transactions.rs rename to protocol/pcp/config/src/common/transactions.rs diff --git a/protocol-units/pcp/config/src/lib.rs b/protocol/pcp/config/src/lib.rs similarity index 100% rename from protocol-units/pcp/config/src/lib.rs rename to protocol/pcp/config/src/lib.rs diff --git a/protocol-units/pcp/contracts/.DS_Store b/protocol/pcp/contracts/.DS_Store similarity index 100% rename from protocol-units/pcp/contracts/.DS_Store rename to protocol/pcp/contracts/.DS_Store diff --git a/protocol-units/pcp/contracts/.github/workflows/test.yml b/protocol/pcp/contracts/.github/workflows/test.yml similarity index 100% rename from protocol-units/pcp/contracts/.github/workflows/test.yml rename to protocol/pcp/contracts/.github/workflows/test.yml diff --git a/protocol-units/pcp/contracts/.gitignore b/protocol/pcp/contracts/.gitignore similarity index 100% rename from protocol-units/pcp/contracts/.gitignore rename to protocol/pcp/contracts/.gitignore diff --git a/protocol-units/pcp/contracts/.prettierrc b/protocol/pcp/contracts/.prettierrc similarity index 100% rename from protocol-units/pcp/contracts/.prettierrc rename to protocol/pcp/contracts/.prettierrc diff --git a/protocol-units/pcp/contracts/README.md b/protocol/pcp/contracts/README.md similarity index 100% rename from protocol-units/pcp/contracts/README.md rename to protocol/pcp/contracts/README.md diff --git a/protocol-units/pcp/contracts/deployments/local.json b/protocol/pcp/contracts/deployments/local.json similarity index 100% rename from protocol-units/pcp/contracts/deployments/local.json rename to protocol/pcp/contracts/deployments/local.json diff --git a/protocol-units/pcp/contracts/foundry.toml b/protocol/pcp/contracts/foundry.toml similarity index 100% rename from protocol-units/pcp/contracts/foundry.toml rename to protocol/pcp/contracts/foundry.toml diff --git a/protocol-units/pcp/contracts/hardhat.config.ts b/protocol/pcp/contracts/hardhat.config.ts similarity index 100% rename from protocol-units/pcp/contracts/hardhat.config.ts rename to protocol/pcp/contracts/hardhat.config.ts diff --git a/protocol-units/pcp/contracts/kurtosis_instructions.md b/protocol/pcp/contracts/kurtosis_instructions.md similarity index 100% rename from protocol-units/pcp/contracts/kurtosis_instructions.md rename to protocol/pcp/contracts/kurtosis_instructions.md diff --git a/protocol-units/pcp/contracts/package.json b/protocol/pcp/contracts/package.json similarity index 100% rename from protocol-units/pcp/contracts/package.json rename to protocol/pcp/contracts/package.json diff --git a/protocol-units/pcp/contracts/remappings.txt b/protocol/pcp/contracts/remappings.txt similarity index 100% rename from protocol-units/pcp/contracts/remappings.txt rename to protocol/pcp/contracts/remappings.txt diff --git a/protocol-units/pcp/contracts/script/CoreDeployer.s.sol b/protocol/pcp/contracts/script/CoreDeployer.s.sol similarity index 100% rename from protocol-units/pcp/contracts/script/CoreDeployer.s.sol rename to protocol/pcp/contracts/script/CoreDeployer.s.sol diff --git a/protocol-units/pcp/contracts/script/DeployMCR.s.sol b/protocol/pcp/contracts/script/DeployMCR.s.sol similarity index 100% rename from protocol-units/pcp/contracts/script/DeployMCR.s.sol rename to protocol/pcp/contracts/script/DeployMCR.s.sol diff --git a/protocol-units/pcp/contracts/script/DeployMCRDev.s.sol b/protocol/pcp/contracts/script/DeployMCRDev.s.sol similarity index 100% rename from protocol-units/pcp/contracts/script/DeployMCRDev.s.sol rename to protocol/pcp/contracts/script/DeployMCRDev.s.sol diff --git a/protocol-units/pcp/contracts/script/DeployMOVETokenDev.s.sol b/protocol/pcp/contracts/script/DeployMOVETokenDev.s.sol similarity index 100% rename from protocol-units/pcp/contracts/script/DeployMOVETokenDev.s.sol rename to protocol/pcp/contracts/script/DeployMOVETokenDev.s.sol diff --git a/protocol-units/pcp/contracts/script/MCRDeployer.s.sol b/protocol/pcp/contracts/script/MCRDeployer.s.sol similarity index 100% rename from protocol-units/pcp/contracts/script/MCRDeployer.s.sol rename to protocol/pcp/contracts/script/MCRDeployer.s.sol diff --git a/protocol-units/pcp/contracts/script/MOVETokenDeployer.s.sol b/protocol/pcp/contracts/script/MOVETokenDeployer.s.sol similarity index 100% rename from protocol-units/pcp/contracts/script/MOVETokenDeployer.s.sol rename to protocol/pcp/contracts/script/MOVETokenDeployer.s.sol diff --git a/protocol-units/pcp/contracts/script/MovementStakingDeployer.s.sol b/protocol/pcp/contracts/script/MovementStakingDeployer.s.sol similarity index 100% rename from protocol-units/pcp/contracts/script/MovementStakingDeployer.s.sol rename to protocol/pcp/contracts/script/MovementStakingDeployer.s.sol diff --git a/protocol-units/pcp/contracts/script/MultisigMOVETokenDeployer.s.sol b/protocol/pcp/contracts/script/MultisigMOVETokenDeployer.s.sol similarity index 100% rename from protocol-units/pcp/contracts/script/MultisigMOVETokenDeployer.s.sol rename to protocol/pcp/contracts/script/MultisigMOVETokenDeployer.s.sol diff --git a/protocol-units/pcp/contracts/script/StlMoveDeployer.s.sol b/protocol/pcp/contracts/script/StlMoveDeployer.s.sol similarity index 100% rename from protocol-units/pcp/contracts/script/StlMoveDeployer.s.sol rename to protocol/pcp/contracts/script/StlMoveDeployer.s.sol diff --git a/protocol-units/pcp/contracts/script/VerifyMCRDev.s.sol b/protocol/pcp/contracts/script/VerifyMCRDev.s.sol similarity index 100% rename from protocol-units/pcp/contracts/script/VerifyMCRDev.s.sol rename to protocol/pcp/contracts/script/VerifyMCRDev.s.sol diff --git a/protocol-units/pcp/contracts/script/deploy-safe.sh b/protocol/pcp/contracts/script/deploy-safe.sh similarity index 100% rename from protocol-units/pcp/contracts/script/deploy-safe.sh rename to protocol/pcp/contracts/script/deploy-safe.sh diff --git a/protocol-units/pcp/contracts/script/helpers/Create3/CREATE3Factory.sol b/protocol/pcp/contracts/script/helpers/Create3/CREATE3Factory.sol similarity index 100% rename from protocol-units/pcp/contracts/script/helpers/Create3/CREATE3Factory.sol rename to protocol/pcp/contracts/script/helpers/Create3/CREATE3Factory.sol diff --git a/protocol-units/pcp/contracts/script/helpers/Create3/ICREATE3Factory.sol b/protocol/pcp/contracts/script/helpers/Create3/ICREATE3Factory.sol similarity index 100% rename from protocol-units/pcp/contracts/script/helpers/Create3/ICREATE3Factory.sol rename to protocol/pcp/contracts/script/helpers/Create3/ICREATE3Factory.sol diff --git a/protocol-units/pcp/contracts/script/helpers/Helper.sol b/protocol/pcp/contracts/script/helpers/Helper.sol similarity index 100% rename from protocol-units/pcp/contracts/script/helpers/Helper.sol rename to protocol/pcp/contracts/script/helpers/Helper.sol diff --git a/protocol-units/pcp/contracts/script/helpers/config.json b/protocol/pcp/contracts/script/helpers/config.json similarity index 100% rename from protocol-units/pcp/contracts/script/helpers/config.json rename to protocol/pcp/contracts/script/helpers/config.json diff --git a/protocol-units/pcp/contracts/script/helpers/configOLD.json b/protocol/pcp/contracts/script/helpers/configOLD.json similarity index 100% rename from protocol-units/pcp/contracts/script/helpers/configOLD.json rename to protocol/pcp/contracts/script/helpers/configOLD.json diff --git a/protocol-units/pcp/contracts/script/helpers/deployments.json b/protocol/pcp/contracts/script/helpers/deployments.json similarity index 100% rename from protocol-units/pcp/contracts/script/helpers/deployments.json rename to protocol/pcp/contracts/script/helpers/deployments.json diff --git a/protocol-units/pcp/contracts/script/helpers/deploymentsOLD.json b/protocol/pcp/contracts/script/helpers/deploymentsOLD.json similarity index 100% rename from protocol-units/pcp/contracts/script/helpers/deploymentsOLD.json rename to protocol/pcp/contracts/script/helpers/deploymentsOLD.json diff --git a/protocol-units/pcp/contracts/script/helpers/safe-deployments.json b/protocol/pcp/contracts/script/helpers/safe-deployments.json similarity index 100% rename from protocol-units/pcp/contracts/script/helpers/safe-deployments.json rename to protocol/pcp/contracts/script/helpers/safe-deployments.json diff --git a/protocol-units/pcp/contracts/script/helpers/upgrade/deploymove.json b/protocol/pcp/contracts/script/helpers/upgrade/deploymove.json similarity index 100% rename from protocol-units/pcp/contracts/script/helpers/upgrade/deploymove.json rename to protocol/pcp/contracts/script/helpers/upgrade/deploymove.json diff --git a/protocol-units/pcp/contracts/script/helpers/upgrade/mcr.json b/protocol/pcp/contracts/script/helpers/upgrade/mcr.json similarity index 100% rename from protocol-units/pcp/contracts/script/helpers/upgrade/mcr.json rename to protocol/pcp/contracts/script/helpers/upgrade/mcr.json diff --git a/protocol-units/pcp/contracts/script/helpers/upgrade/staking.json b/protocol/pcp/contracts/script/helpers/upgrade/staking.json similarity index 100% rename from protocol-units/pcp/contracts/script/helpers/upgrade/staking.json rename to protocol/pcp/contracts/script/helpers/upgrade/staking.json diff --git a/protocol-units/pcp/contracts/script/helpers/upgrade/stlmove.json b/protocol/pcp/contracts/script/helpers/upgrade/stlmove.json similarity index 100% rename from protocol-units/pcp/contracts/script/helpers/upgrade/stlmove.json rename to protocol/pcp/contracts/script/helpers/upgrade/stlmove.json diff --git a/protocol-units/pcp/contracts/script/install-deps.sh b/protocol/pcp/contracts/script/install-deps.sh similarity index 100% rename from protocol-units/pcp/contracts/script/install-deps.sh rename to protocol/pcp/contracts/script/install-deps.sh diff --git a/protocol-units/pcp/contracts/script/verify-mcr.sh b/protocol/pcp/contracts/script/verify-mcr.sh similarity index 100% rename from protocol-units/pcp/contracts/script/verify-mcr.sh rename to protocol/pcp/contracts/script/verify-mcr.sh diff --git a/protocol-units/pcp/contracts/scripts/README.md b/protocol/pcp/contracts/scripts/README.md similarity index 100% rename from protocol-units/pcp/contracts/scripts/README.md rename to protocol/pcp/contracts/scripts/README.md diff --git a/protocol-units/pcp/contracts/scripts/deploy.ts b/protocol/pcp/contracts/scripts/deploy.ts similarity index 100% rename from protocol-units/pcp/contracts/scripts/deploy.ts rename to protocol/pcp/contracts/scripts/deploy.ts diff --git a/protocol-units/pcp/contracts/scripts/tasks/utils.ts b/protocol/pcp/contracts/scripts/tasks/utils.ts similarity index 100% rename from protocol-units/pcp/contracts/scripts/tasks/utils.ts rename to protocol/pcp/contracts/scripts/tasks/utils.ts diff --git a/protocol-units/pcp/contracts/scripts/test-deployment.ts b/protocol/pcp/contracts/scripts/test-deployment.ts similarity index 100% rename from protocol-units/pcp/contracts/scripts/test-deployment.ts rename to protocol/pcp/contracts/scripts/test-deployment.ts diff --git a/protocol-units/pcp/contracts/src/proxy/ERC1967Proxy.sol b/protocol/pcp/contracts/src/proxy/ERC1967Proxy.sol similarity index 100% rename from protocol-units/pcp/contracts/src/proxy/ERC1967Proxy.sol rename to protocol/pcp/contracts/src/proxy/ERC1967Proxy.sol diff --git a/protocol-units/pcp/contracts/src/proxy/ProxyAdmin.sol b/protocol/pcp/contracts/src/proxy/ProxyAdmin.sol similarity index 100% rename from protocol-units/pcp/contracts/src/proxy/ProxyAdmin.sol rename to protocol/pcp/contracts/src/proxy/ProxyAdmin.sol diff --git a/protocol-units/pcp/contracts/src/proxy/TransparentUpgradeableProxy.sol b/protocol/pcp/contracts/src/proxy/TransparentUpgradeableProxy.sol similarity index 100% rename from protocol-units/pcp/contracts/src/proxy/TransparentUpgradeableProxy.sol rename to protocol/pcp/contracts/src/proxy/TransparentUpgradeableProxy.sol diff --git a/protocol-units/pcp/contracts/src/settlement/MCR.sol b/protocol/pcp/contracts/src/settlement/MCR.sol similarity index 100% rename from protocol-units/pcp/contracts/src/settlement/MCR.sol rename to protocol/pcp/contracts/src/settlement/MCR.sol diff --git a/protocol-units/pcp/contracts/src/settlement/MCRStorage.sol b/protocol/pcp/contracts/src/settlement/MCRStorage.sol similarity index 100% rename from protocol-units/pcp/contracts/src/settlement/MCRStorage.sol rename to protocol/pcp/contracts/src/settlement/MCRStorage.sol diff --git a/protocol-units/pcp/contracts/src/settlement/interfaces/IMCR.sol b/protocol/pcp/contracts/src/settlement/interfaces/IMCR.sol similarity index 100% rename from protocol-units/pcp/contracts/src/settlement/interfaces/IMCR.sol rename to protocol/pcp/contracts/src/settlement/interfaces/IMCR.sol diff --git a/protocol-units/pcp/contracts/src/settlement/settlement/BaseSettlement.sol b/protocol/pcp/contracts/src/settlement/settlement/BaseSettlement.sol similarity index 100% rename from protocol-units/pcp/contracts/src/settlement/settlement/BaseSettlement.sol rename to protocol/pcp/contracts/src/settlement/settlement/BaseSettlement.sol diff --git a/protocol-units/pcp/contracts/src/staking/MovementStaking.sol b/protocol/pcp/contracts/src/staking/MovementStaking.sol similarity index 100% rename from protocol-units/pcp/contracts/src/staking/MovementStaking.sol rename to protocol/pcp/contracts/src/staking/MovementStaking.sol diff --git a/protocol-units/pcp/contracts/src/staking/MovementStakingStorage.sol b/protocol/pcp/contracts/src/staking/MovementStakingStorage.sol similarity index 100% rename from protocol-units/pcp/contracts/src/staking/MovementStakingStorage.sol rename to protocol/pcp/contracts/src/staking/MovementStakingStorage.sol diff --git a/protocol-units/pcp/contracts/src/staking/base/BaseStaking.sol b/protocol/pcp/contracts/src/staking/base/BaseStaking.sol similarity index 100% rename from protocol-units/pcp/contracts/src/staking/base/BaseStaking.sol rename to protocol/pcp/contracts/src/staking/base/BaseStaking.sol diff --git a/protocol-units/pcp/contracts/src/staking/interfaces/IMovementStaking.sol b/protocol/pcp/contracts/src/staking/interfaces/IMovementStaking.sol similarity index 100% rename from protocol-units/pcp/contracts/src/staking/interfaces/IMovementStaking.sol rename to protocol/pcp/contracts/src/staking/interfaces/IMovementStaking.sol diff --git a/protocol-units/pcp/contracts/src/token/MOVEToken.sol b/protocol/pcp/contracts/src/token/MOVEToken.sol similarity index 100% rename from protocol-units/pcp/contracts/src/token/MOVEToken.sol rename to protocol/pcp/contracts/src/token/MOVEToken.sol diff --git a/protocol-units/pcp/contracts/src/token/MOVETokenDev.sol b/protocol/pcp/contracts/src/token/MOVETokenDev.sol similarity index 100% rename from protocol-units/pcp/contracts/src/token/MOVETokenDev.sol rename to protocol/pcp/contracts/src/token/MOVETokenDev.sol diff --git a/protocol-units/pcp/contracts/src/token/MOVETokenV1.sol b/protocol/pcp/contracts/src/token/MOVETokenV1.sol similarity index 100% rename from protocol-units/pcp/contracts/src/token/MOVETokenV1.sol rename to protocol/pcp/contracts/src/token/MOVETokenV1.sol diff --git a/protocol-units/pcp/contracts/src/token/base/BaseToken.sol b/protocol/pcp/contracts/src/token/base/BaseToken.sol similarity index 100% rename from protocol-units/pcp/contracts/src/token/base/BaseToken.sol rename to protocol/pcp/contracts/src/token/base/BaseToken.sol diff --git a/protocol-units/pcp/contracts/src/token/base/MintableToken.sol b/protocol/pcp/contracts/src/token/base/MintableToken.sol similarity index 100% rename from protocol-units/pcp/contracts/src/token/base/MintableToken.sol rename to protocol/pcp/contracts/src/token/base/MintableToken.sol diff --git a/protocol-units/pcp/contracts/src/token/base/WrappedToken.sol b/protocol/pcp/contracts/src/token/base/WrappedToken.sol similarity index 100% rename from protocol-units/pcp/contracts/src/token/base/WrappedToken.sol rename to protocol/pcp/contracts/src/token/base/WrappedToken.sol diff --git a/protocol-units/pcp/contracts/src/token/base/WrappedTokenStorage.sol b/protocol/pcp/contracts/src/token/base/WrappedTokenStorage.sol similarity index 100% rename from protocol-units/pcp/contracts/src/token/base/WrappedTokenStorage.sol rename to protocol/pcp/contracts/src/token/base/WrappedTokenStorage.sol diff --git a/protocol-units/pcp/contracts/src/token/custodian/CustodianToken.sol b/protocol/pcp/contracts/src/token/custodian/CustodianToken.sol similarity index 100% rename from protocol-units/pcp/contracts/src/token/custodian/CustodianToken.sol rename to protocol/pcp/contracts/src/token/custodian/CustodianToken.sol diff --git a/protocol-units/pcp/contracts/src/token/faucet/MOVEFaucet.sol b/protocol/pcp/contracts/src/token/faucet/MOVEFaucet.sol similarity index 100% rename from protocol-units/pcp/contracts/src/token/faucet/MOVEFaucet.sol rename to protocol/pcp/contracts/src/token/faucet/MOVEFaucet.sol diff --git a/protocol-units/pcp/contracts/src/token/locked/LockedToken.sol b/protocol/pcp/contracts/src/token/locked/LockedToken.sol similarity index 100% rename from protocol-units/pcp/contracts/src/token/locked/LockedToken.sol rename to protocol/pcp/contracts/src/token/locked/LockedToken.sol diff --git a/protocol-units/pcp/contracts/src/token/locked/LockedTokenStorage.sol b/protocol/pcp/contracts/src/token/locked/LockedTokenStorage.sol similarity index 100% rename from protocol-units/pcp/contracts/src/token/locked/LockedTokenStorage.sol rename to protocol/pcp/contracts/src/token/locked/LockedTokenStorage.sol diff --git a/protocol-units/pcp/contracts/src/token/stlMoveToken.sol b/protocol/pcp/contracts/src/token/stlMoveToken.sol similarity index 100% rename from protocol-units/pcp/contracts/src/token/stlMoveToken.sol rename to protocol/pcp/contracts/src/token/stlMoveToken.sol diff --git a/protocol-units/pcp/contracts/test/Deployer.t.sol b/protocol/pcp/contracts/test/Deployer.t.sol similarity index 100% rename from protocol-units/pcp/contracts/test/Deployer.t.sol rename to protocol/pcp/contracts/test/Deployer.t.sol diff --git a/protocol-units/pcp/contracts/test/settlement/MCR.t.sol b/protocol/pcp/contracts/test/settlement/MCR.t.sol similarity index 100% rename from protocol-units/pcp/contracts/test/settlement/MCR.t.sol rename to protocol/pcp/contracts/test/settlement/MCR.t.sol diff --git a/protocol-units/pcp/contracts/test/staking/MovementStaking.t.sol b/protocol/pcp/contracts/test/staking/MovementStaking.t.sol similarity index 100% rename from protocol-units/pcp/contracts/test/staking/MovementStaking.t.sol rename to protocol/pcp/contracts/test/staking/MovementStaking.t.sol diff --git a/protocol-units/pcp/contracts/test/staking/base/BaseStaking.t.sol b/protocol/pcp/contracts/test/staking/base/BaseStaking.t.sol similarity index 100% rename from protocol-units/pcp/contracts/test/staking/base/BaseStaking.t.sol rename to protocol/pcp/contracts/test/staking/base/BaseStaking.t.sol diff --git a/protocol-units/pcp/contracts/test/token/Faucet.t.sol b/protocol/pcp/contracts/test/token/Faucet.t.sol similarity index 100% rename from protocol-units/pcp/contracts/test/token/Faucet.t.sol rename to protocol/pcp/contracts/test/token/Faucet.t.sol diff --git a/protocol-units/pcp/contracts/test/token/MOVEToken.t.sol b/protocol/pcp/contracts/test/token/MOVEToken.t.sol similarity index 100% rename from protocol-units/pcp/contracts/test/token/MOVEToken.t.sol rename to protocol/pcp/contracts/test/token/MOVEToken.t.sol diff --git a/protocol-units/pcp/contracts/test/token/MOVETokenV2.t.sol b/protocol/pcp/contracts/test/token/MOVETokenV2.t.sol similarity index 100% rename from protocol-units/pcp/contracts/test/token/MOVETokenV2.t.sol rename to protocol/pcp/contracts/test/token/MOVETokenV2.t.sol diff --git a/protocol-units/pcp/contracts/test/token/base/BaseToken.t.sol b/protocol/pcp/contracts/test/token/base/BaseToken.t.sol similarity index 100% rename from protocol-units/pcp/contracts/test/token/base/BaseToken.t.sol rename to protocol/pcp/contracts/test/token/base/BaseToken.t.sol diff --git a/protocol-units/pcp/contracts/test/token/base/MintableToken.t.sol b/protocol/pcp/contracts/test/token/base/MintableToken.t.sol similarity index 100% rename from protocol-units/pcp/contracts/test/token/base/MintableToken.t.sol rename to protocol/pcp/contracts/test/token/base/MintableToken.t.sol diff --git a/protocol-units/pcp/contracts/test/token/base/WrappedToken.t.sol b/protocol/pcp/contracts/test/token/base/WrappedToken.t.sol similarity index 100% rename from protocol-units/pcp/contracts/test/token/base/WrappedToken.t.sol rename to protocol/pcp/contracts/test/token/base/WrappedToken.t.sol diff --git a/protocol-units/pcp/contracts/test/token/custodian/CustodianToken.t.sol b/protocol/pcp/contracts/test/token/custodian/CustodianToken.t.sol similarity index 100% rename from protocol-units/pcp/contracts/test/token/custodian/CustodianToken.t.sol rename to protocol/pcp/contracts/test/token/custodian/CustodianToken.t.sol diff --git a/protocol-units/pcp/contracts/test/token/locked/LockedToken.t.sol b/protocol/pcp/contracts/test/token/locked/LockedToken.t.sol similarity index 100% rename from protocol-units/pcp/contracts/test/token/locked/LockedToken.t.sol rename to protocol/pcp/contracts/test/token/locked/LockedToken.t.sol diff --git a/protocol-units/pcp/contracts/test/token/stlMoveToken.t.sol b/protocol/pcp/contracts/test/token/stlMoveToken.t.sol similarity index 100% rename from protocol-units/pcp/contracts/test/token/stlMoveToken.t.sol rename to protocol/pcp/contracts/test/token/stlMoveToken.t.sol diff --git a/protocol-units/pcp/contracts/tsconfig.json b/protocol/pcp/contracts/tsconfig.json similarity index 100% rename from protocol-units/pcp/contracts/tsconfig.json rename to protocol/pcp/contracts/tsconfig.json diff --git a/protocol-units/pcp/contracts/upgrader/README.md b/protocol/pcp/contracts/upgrader/README.md similarity index 100% rename from protocol-units/pcp/contracts/upgrader/README.md rename to protocol/pcp/contracts/upgrader/README.md diff --git a/protocol-units/pcp/contracts/upgrader/accept.sh b/protocol/pcp/contracts/upgrader/accept.sh similarity index 100% rename from protocol-units/pcp/contracts/upgrader/accept.sh rename to protocol/pcp/contracts/upgrader/accept.sh diff --git a/protocol-units/pcp/contracts/upgrader/accept.ts b/protocol/pcp/contracts/upgrader/accept.ts similarity index 100% rename from protocol-units/pcp/contracts/upgrader/accept.ts rename to protocol/pcp/contracts/upgrader/accept.ts diff --git a/protocol-units/pcp/contracts/upgrader/acceptKms.sh b/protocol/pcp/contracts/upgrader/acceptKms.sh similarity index 100% rename from protocol-units/pcp/contracts/upgrader/acceptKms.sh rename to protocol/pcp/contracts/upgrader/acceptKms.sh diff --git a/protocol-units/pcp/contracts/upgrader/acceptKms.ts b/protocol/pcp/contracts/upgrader/acceptKms.ts similarity index 100% rename from protocol-units/pcp/contracts/upgrader/acceptKms.ts rename to protocol/pcp/contracts/upgrader/acceptKms.ts diff --git a/protocol-units/pcp/contracts/upgrader/kmsSign.ts b/protocol/pcp/contracts/upgrader/kmsSign.ts similarity index 100% rename from protocol-units/pcp/contracts/upgrader/kmsSign.ts rename to protocol/pcp/contracts/upgrader/kmsSign.ts diff --git a/protocol-units/pcp/contracts/upgrader/package-lock.json b/protocol/pcp/contracts/upgrader/package-lock.json similarity index 100% rename from protocol-units/pcp/contracts/upgrader/package-lock.json rename to protocol/pcp/contracts/upgrader/package-lock.json diff --git a/protocol-units/pcp/contracts/upgrader/package.json b/protocol/pcp/contracts/upgrader/package.json similarity index 100% rename from protocol-units/pcp/contracts/upgrader/package.json rename to protocol/pcp/contracts/upgrader/package.json diff --git a/protocol-units/pcp/contracts/upgrader/propose.sh b/protocol/pcp/contracts/upgrader/propose.sh similarity index 100% rename from protocol-units/pcp/contracts/upgrader/propose.sh rename to protocol/pcp/contracts/upgrader/propose.sh diff --git a/protocol-units/pcp/contracts/upgrader/propose.ts b/protocol/pcp/contracts/upgrader/propose.ts similarity index 100% rename from protocol-units/pcp/contracts/upgrader/propose.ts rename to protocol/pcp/contracts/upgrader/propose.ts diff --git a/protocol-units/pcp/contracts/upgrader/safeDeploy.sh b/protocol/pcp/contracts/upgrader/safeDeploy.sh similarity index 100% rename from protocol-units/pcp/contracts/upgrader/safeDeploy.sh rename to protocol/pcp/contracts/upgrader/safeDeploy.sh diff --git a/protocol-units/pcp/contracts/upgrader/safeDeploy.ts b/protocol/pcp/contracts/upgrader/safeDeploy.ts similarity index 100% rename from protocol-units/pcp/contracts/upgrader/safeDeploy.ts rename to protocol/pcp/contracts/upgrader/safeDeploy.ts diff --git a/protocol-units/pcp/contracts/yarn.lock b/protocol/pcp/contracts/yarn.lock similarity index 100% rename from protocol-units/pcp/contracts/yarn.lock rename to protocol/pcp/contracts/yarn.lock diff --git a/protocol-units/pcp/eth-network-params.yaml b/protocol/pcp/eth-network-params.yaml similarity index 100% rename from protocol-units/pcp/eth-network-params.yaml rename to protocol/pcp/eth-network-params.yaml diff --git a/protocol-units/pcp/manager/Cargo.toml b/protocol/pcp/manager/Cargo.toml similarity index 100% rename from protocol-units/pcp/manager/Cargo.toml rename to protocol/pcp/manager/Cargo.toml diff --git a/protocol-units/pcp/manager/src/lib.rs b/protocol/pcp/manager/src/lib.rs similarity index 100% rename from protocol-units/pcp/manager/src/lib.rs rename to protocol/pcp/manager/src/lib.rs diff --git a/protocol-units/pcp/manager/src/manager.rs b/protocol/pcp/manager/src/manager.rs similarity index 100% rename from protocol-units/pcp/manager/src/manager.rs rename to protocol/pcp/manager/src/manager.rs diff --git a/protocol-units/pcp/runner/Cargo.toml b/protocol/pcp/runner/Cargo.toml similarity index 100% rename from protocol-units/pcp/runner/Cargo.toml rename to protocol/pcp/runner/Cargo.toml diff --git a/protocol-units/pcp/runner/src/main.rs b/protocol/pcp/runner/src/main.rs similarity index 100% rename from protocol-units/pcp/runner/src/main.rs rename to protocol/pcp/runner/src/main.rs From 3ceb48e99040115b7949070c0e79e824eadd9814 Mon Sep 17 00:00:00 2001 From: apenzk Date: Tue, 18 Mar 2025 15:22:10 +0100 Subject: [PATCH 08/25] prepare pcp --- .vscode/setting.json | 5 -- Cargo.lock | 43 ++++++++++++---- Cargo.toml | 9 ++++ protocol/pcp/cli/client/Cargo.toml | 9 ++-- protocol/pcp/cli/client/src/cli/mod.rs | 69 ++++++++++++++++++++++++++ sdk/cli/ffs-client/Cargo.toml | 1 + sdk/cli/ffs-client/README.md | 6 +-- sdk/cli/ffs-client/src/cli/protocol.rs | 8 +++ 8 files changed, 127 insertions(+), 23 deletions(-) delete mode 100644 .vscode/setting.json create mode 100644 protocol/pcp/cli/client/src/cli/mod.rs diff --git a/.vscode/setting.json b/.vscode/setting.json deleted file mode 100644 index f43d1930..00000000 --- a/.vscode/setting.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "stm32-for-vscode.openOCDPath": false, - "stm32-for-vscode.armToolchainPath": false, - "spellright.userDictionary": "${workspaceFolder}/.vscode/spellright.dict" -} \ No newline at end of file diff --git a/Cargo.lock b/Cargo.lock index 57da396a..8edc1101 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3402,17 +3402,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "pcp-protocol-client" -version = "0.0.1" -dependencies = [ - "anyhow", - "clap", - "dotenv", - "serde", - "tokio", -] - [[package]] name = "percent-encoding" version = "2.3.1" @@ -3488,6 +3477,38 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" +[[package]] +name = "postconfirmationssettlement-client" +version = "0.0.1" +dependencies = [ + "alloy", + "alloy-contract", + "alloy-network", + "alloy-primitives 0.7.7", + "alloy-provider", + "alloy-rpc-types", + "alloy-signer", + "alloy-sol-types", + "alloy-transport", + "alloy-transport-ws", + "anyhow", + "async-stream", + "async-trait", + "clap", + "ffs-environment", + "futures", + "secure-signer", + "secure-signer-eth", + "secure-signer-loader", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tracing", + "tracing-subscriber", +] + [[package]] name = "powerfmt" version = "0.2.0" diff --git a/Cargo.toml b/Cargo.toml index e8869ede..e364cca1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -123,6 +123,15 @@ mcr-network = { path = "network/mcr/cli/network" } secure-signer-eth = { path = "util/signing/eth" } ffs-environment = { path = "util/environment" } +# Movement dependencies +dot-movement = { git = "https://github.com/movementlabsxyz/movement.git", branch = "main" } +movement-types = { git = "https://github.com/movementlabsxyz/movement.git", branch = "main" } # Using same source as dot-movement + +## pcp +### protocol +# postconfirmationssettlement-client = { path = "protocol/pcp/cli/client" } +# postconfirmationsconfig = { path = "protocol/pcp/util/config" } + [workspace.lints.clippy] debug_assert_with_mut_call = "deny" inefficient_to_string = "deny" diff --git a/protocol/pcp/cli/client/Cargo.toml b/protocol/pcp/cli/client/Cargo.toml index 97705110..f348a0c8 100644 --- a/protocol/pcp/cli/client/Cargo.toml +++ b/protocol/pcp/cli/client/Cargo.toml @@ -15,10 +15,9 @@ rust-version = { workspace = true } [dependencies] -postconfirmationsconfig = { workspace = true } secure-signer-loader = { workspace = true } secure-signer = { workspace = true } -secure-signing-eth = { workspace = true } +secure-signer-eth = { workspace = true } alloy = { workspace = true, features = [ "node-bindings", @@ -43,7 +42,7 @@ anyhow = { workspace = true } async-stream = { workspace = true } async-trait = { workspace = true } serde_json = { workspace = true } -movement-types = { workspace = true } +# movement-types = { workspace = true } thiserror = { workspace = true } tokio = { workspace = true } tokio-stream = { workspace = true } @@ -52,11 +51,13 @@ serde = { workspace = true } ffs-environment = { workspace = true } -dot-movement = { workspace = true } +# dot-movement = { workspace = true } alloy-rpc-types = { workspace = true } futures = { workspace = true } tracing-subscriber = { workspace = true } +clap = { workspace = true } + [features] default = ["eth"] e2e = ["eth"] diff --git a/protocol/pcp/cli/client/src/cli/mod.rs b/protocol/pcp/cli/client/src/cli/mod.rs new file mode 100644 index 00000000..60adec1f --- /dev/null +++ b/protocol/pcp/cli/client/src/cli/mod.rs @@ -0,0 +1,69 @@ +pub mod eth; +use clap::{Parser, Subcommand}; + +/// The `pcp-protocol-client` CLI. +#[derive(Parser)] +#[clap(rename_all = "kebab-case")] +pub struct PcpProtocolClient { + #[clap(subcommand)] + command: Option, +} + +/// The subcommands of the `pcp-protocol-client` CLI. +#[derive(Subcommand)] +#[clap(rename_all = "kebab-case")] +pub enum PcpProtocolClientSubcommand { + Run, + #[clap(subcommand)] + Eth(eth::Eth), + /// Post a commitment to a PCP implementation + PostCommitment(PostCommitmentArgs), +} + +#[derive(clap::Args)] +pub struct PostCommitmentArgs { + /// Hex-encoded commitment + #[clap(long, conflicts_with = "preimage_string", required_unless_present = "preimage_string")] + commitment_hex: Option, + + /// String to be hashed into a commitment + #[clap(long, conflicts_with = "commitment_hex", required_unless_present = "commitment_hex")] + preimage_string: Option, +} + +/// Implement the `From` trait for `PcpProtocolClient` to convert it into a `PcpProtocolClientSubcommand`. +impl From for PcpProtocolClientSubcommand { + fn from(client: PcpProtocolClient) -> Self { + client.command.unwrap_or(PcpProtocolClientSubcommand::Run) + } +} + +/// Implement the `PcpProtocolClient` CLI. +impl PcpProtocolClient { + pub async fn execute(self) -> Result<(), anyhow::Error> { + let subcommand: PcpProtocolClientSubcommand = self.into(); + subcommand.execute().await + } +} + +/// Implement the `PcpProtocolClientSubcommand` CLI. +/// This is where the actual logic of the CLI is implemented. +impl PcpProtocolClientSubcommand { + pub async fn execute(&self) -> Result<(), anyhow::Error> { + match self { + PcpProtocolClientSubcommand::Run => { + println!("pcp-protocol-client is under development. Please check back later."); + } + PcpProtocolClientSubcommand::Eth(eth) => eth.execute().await?, + PcpProtocolClientSubcommand::PostCommitment(args) => { + // For now, just print what we would do + if let Some(hex) = &args.commitment_hex { + println!("Would post commitment to PCP from hex: {}", hex); + } else if let Some(preimage) = &args.preimage_string { + println!("Would hash and post commitment to PCP from preimage: {}", preimage); + } + } + } + Ok(()) + } +} diff --git a/sdk/cli/ffs-client/Cargo.toml b/sdk/cli/ffs-client/Cargo.toml index 8941fefb..e1e610f8 100644 --- a/sdk/cli/ffs-client/Cargo.toml +++ b/sdk/cli/ffs-client/Cargo.toml @@ -15,6 +15,7 @@ clap = { workspace = true} dotenv = { workspace = true } anyhow = { workspace = true } mcr-protocol-client = { workspace = true } +# postconfirmationssettlement-client = { workspace = true } [lints] workspace = true diff --git a/sdk/cli/ffs-client/README.md b/sdk/cli/ffs-client/README.md index 4cdd7e9f..87f9f159 100644 --- a/sdk/cli/ffs-client/README.md +++ b/sdk/cli/ffs-client/README.md @@ -4,18 +4,18 @@ The command line tool for interacting with live FFS services. ## Commands -### Protocol MCR +### Some test commands Post a commitment to an MCR implementation: Post using a hex-encoded commitment ```bash -ffs-client protocol mcr post-commitment --commitment-hex +cargo run --bin ffs-client -- protocol pcp post-commitment --commitment-hex ``` Post using a preimage string ```bash -ffs-client protocol mcr post-commitment --preimage-string +cargo run --bin ffs-client -- protocol pcp post-commitment --preimage-string ``` diff --git a/sdk/cli/ffs-client/src/cli/protocol.rs b/sdk/cli/ffs-client/src/cli/protocol.rs index 5e4b59b3..5d9392a3 100644 --- a/sdk/cli/ffs-client/src/cli/protocol.rs +++ b/sdk/cli/ffs-client/src/cli/protocol.rs @@ -1,5 +1,6 @@ use clap::Subcommand; use mcr_protocol_client::cli::McrProtocolClientSubcommand; +// use postconfirmationssettlement_client::cli::PcpProtocolClientSubcommand; #[derive(Subcommand)] #[clap(rename_all = "kebab-case")] @@ -7,6 +8,10 @@ pub enum Protocol { /// MCR protocol commands #[clap(subcommand)] Mcr(McrProtocolClientSubcommand), + + // /// PCP protocol commands + // #[clap(subcommand)] + // Pcp(PcpProtocolClientSubcommand), } impl Protocol { @@ -15,6 +20,9 @@ impl Protocol { Protocol::Mcr(client) => { client.execute().await?; } + // Protocol::Pcp(client) => { + // client.execute().await?; + // } } Ok(()) From 08ddc7bae2f59ce0b0f1e9e22bf5ec0a579f8895 Mon Sep 17 00:00:00 2001 From: apenzk Date: Tue, 18 Mar 2025 15:41:45 +0100 Subject: [PATCH 09/25] mcr to pcp name switch --- protocol/pcp/.gitmodules | 20 +- .../src/bin/e2e/test_client_settlement.rs | 38 +- protocol/pcp/cli/client/src/eth_client.rs | 68 +-- protocol/pcp/cli/client/src/lib.rs | 4 +- protocol/pcp/cli/client/src/mock.rs | 24 +- .../cli/client/src/send_eth_transaction.rs | 22 +- protocol/pcp/config/Cargo.toml | 2 +- protocol/pcp/config/src/common/deploy.rs | 4 +- protocol/pcp/config/src/common/testing.rs | 2 +- protocol/pcp/config/src/lib.rs | 2 +- protocol/pcp/contracts/README.md | 8 +- protocol/pcp/contracts/deployments/local.json | 2 +- .../pcp/contracts/kurtosis_instructions.md | 34 +- .../pcp/contracts/script/CoreDeployer.s.sol | 16 +- .../{DeployMCR.s.sol => DeployPCP.s.sol} | 22 +- ...{DeployMCRDev.s.sol => DeployPCPDev.s.sol} | 50 +- .../{MCRDeployer.s.sol => PCPDeployer.s.sol} | 46 +- ...{VerifyMCRDev.s.sol => VerifyPCPDev.s.sol} | 22 +- .../pcp/contracts/script/helpers/Helper.sol | 12 +- .../contracts/script/helpers/deployments.json | 20 +- .../script/helpers/deploymentsOLD.json | 16 +- protocol/pcp/contracts/script/verify-mcr.sh | 24 +- protocol/pcp/contracts/scripts/deploy.ts | 42 +- .../pcp/contracts/scripts/test-deployment.ts | 100 ++-- .../src/settlement/{MCR.sol => PCP.sol} | 10 +- .../{MCRStorage.sol => PCPStorage.sol} | 2 +- .../interfaces/{IMCR.sol => IPCP.sol} | 8 +- .../test/settlement/{MCR.t.sol => PCP.t.sol} | 542 +++++++++--------- protocol/pcp/contracts/upgrader/propose.sh | 2 +- protocol/pcp/contracts/upgrader/safeDeploy.sh | 2 +- protocol/pcp/manager/src/lib.rs | 4 +- protocol/pcp/manager/src/manager.rs | 26 +- protocol/pcp/runner/Cargo.toml | 2 +- 33 files changed, 602 insertions(+), 596 deletions(-) rename protocol/pcp/contracts/script/{DeployMCR.s.sol => DeployPCP.s.sol} (79%) rename protocol/pcp/contracts/script/{DeployMCRDev.s.sol => DeployPCPDev.s.sol} (83%) rename protocol/pcp/contracts/script/{MCRDeployer.s.sol => PCPDeployer.s.sol} (61%) rename protocol/pcp/contracts/script/{VerifyMCRDev.s.sol => VerifyPCPDev.s.sol} (71%) rename protocol/pcp/contracts/src/settlement/{MCR.sol => PCP.sol} (99%) rename protocol/pcp/contracts/src/settlement/{MCRStorage.sol => PCPStorage.sol} (99%) rename protocol/pcp/contracts/src/settlement/interfaces/{IMCR.sol => IPCP.sol} (91%) rename protocol/pcp/contracts/test/settlement/{MCR.t.sol => PCP.t.sol} (69%) diff --git a/protocol/pcp/.gitmodules b/protocol/pcp/.gitmodules index aa71afef..b0ebdef6 100644 --- a/protocol/pcp/.gitmodules +++ b/protocol/pcp/.gitmodules @@ -1,15 +1,15 @@ -[submodule "mcr/contracts/lib/forge-std"] - path = mcr/contracts/lib/forge-std +[submodule "pcp/contracts/lib/forge-std"] + path = pcp/contracts/lib/forge-std url = https://github.com/foundry-rs/forge-std -[submodule "mcr/contracts/lib/openzeppelin-contracts"] - path = mcr/contracts/lib/openzeppelin-contracts +[submodule "pcp/contracts/lib/openzeppelin-contracts"] + path = pcp/contracts/lib/openzeppelin-contracts url = https://github.com/OpenZeppelin/openzeppelin-contracts -[submodule "mcr/contracts/lib/openzeppelin-contracts-upgradeable"] - path = mcr/contracts/lib/openzeppelin-contracts-upgradeable +[submodule "pcp/contracts/lib/openzeppelin-contracts-upgradeable"] + path = pcp/contracts/lib/openzeppelin-contracts-upgradeable url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable -[submodule "mcr/contracts/lib/safe-smart-account"] - path = mcr/contracts/lib/safe-smart-account +[submodule "pcp/contracts/lib/safe-smart-account"] + path = pcp/contracts/lib/safe-smart-account url = https://github.com/safe-global/safe-smart-account -[submodule "mcr/contracts/lib/solmate"] - path = mcr/contracts/lib/solmate +[submodule "pcp/contracts/lib/solmate"] + path = pcp/contracts/lib/solmate url = https://github.com/transmissions11/solmate diff --git a/protocol/pcp/cli/client/src/bin/e2e/test_client_settlement.rs b/protocol/pcp/cli/client/src/bin/e2e/test_client_settlement.rs index 9f7a6946..478fbb35 100644 --- a/protocol/pcp/cli/client/src/bin/e2e/test_client_settlement.rs +++ b/protocol/pcp/cli/client/src/bin/e2e/test_client_settlement.rs @@ -6,8 +6,8 @@ use alloy_primitives::U256; use anyhow::Context; use ffs_environment::{backend::config_file::ConfigFile, ffs_environment}; use postconfirmations_settlement_client::eth_client::Client; -use postconfirmations_settlement_client::eth_client::{MOVEToken, MovementStaking, MCR}; -use postconfirmations_settlement_client::McrSettlementClientOperations; +use postconfirmations_settlement_client::eth_client::{MOVEToken, MovementStaking, PCP}; +use postconfirmations_settlement_client::PcpSettlementClientOperations; use postconfirmations_config::Config; use postconfirmations_types::block_commitment::{BlockCommitment, Commitment, Id}; use std::str::FromStr; @@ -22,7 +22,7 @@ async fn run_genesis_ceremony( staking_address: Address, postconfirmations_address: Address, ) -> Result<(), anyhow::Error> { - // Build alice client for MOVEToken, MCR, and staking + // Build alice client for MOVEToken, PCP, and staking info!("Creating alice client"); let alice: PrivateKeySigner = config .testing @@ -41,7 +41,7 @@ async fn run_genesis_ceremony( let alice_staking = MovementStaking::new(staking_address, &alice_rpc_provider); let alice_move_token = MOVEToken::new(move_token_address, &alice_rpc_provider); - // Build bob client for MOVEToken, MCR, and staking + // Build bob client for MOVEToken, PCP, and staking info!("Creating bob client"); let bob: PrivateKeySigner = config .testing @@ -60,7 +60,7 @@ async fn run_genesis_ceremony( let bob_staking = MovementStaking::new(staking_address, &bob_rpc_provider); let bob_move_token = MOVEToken::new(move_token_address, &bob_rpc_provider); - // Build the MCR client for staking + // Build the PCP client for staking info!("Creating governor client"); let governor_rpc_provider = ProviderBuilder::new() .with_recommended_fillers() @@ -68,7 +68,7 @@ async fn run_genesis_ceremony( .on_builtin(&rpc_url) .await?; let governor_token = MOVEToken::new(move_token_address, &governor_rpc_provider); - let governor_mcr = MCR::new(postconfirmations_address, &governor_rpc_provider); + let governor_pcp = PCP::new(postconfirmations_address, &governor_rpc_provider); let governor_staking = MovementStaking::new(staking_address, &governor_rpc_provider); // Allow Alice and Bod to stake by adding to white list. @@ -87,8 +87,8 @@ async fn run_genesis_ceremony( .await .context("Governor failed to whilelist Bod")?; - // alice stakes for mcr - info!("Alice stakes for MCR"); + // alice stakes for pcp + info!("Alice stakes for PCP"); let token_name = governor_token.name().call().await.context("Failed to get token name")?; info!("Token name: {}", token_name._0); @@ -138,13 +138,13 @@ async fn run_genesis_ceremony( .await? .watch() .await - .context("Alice failed to approve MCR")?; + .context("Alice failed to approve PCP")?; info!("Alice move approve"); let callbuilder = alice_staking.stake(postconfirmations_address, move_token_address, U256::from(100)); let rc = callbuilder.send().await; match rc { Ok(rc) => { - rc.watch().await.context("Alice failed to stake for MCR")?; + rc.watch().await.context("Alice failed to stake for PCP")?; } Err(err) => { println!("err: {err:?}"); @@ -153,8 +153,8 @@ async fn run_genesis_ceremony( }; info!("Alice move staking"); - // bob stakes for mcr - info!("Bob stakes for MCR"); + // bob stakes for pcp + info!("Bob stakes for PCP"); governor_token .mint(bob.address(), U256::from(100)) .send() @@ -176,7 +176,7 @@ async fn run_genesis_ceremony( .await? .watch() .await - .context("Bob failed to approve MCR")?; + .context("Bob failed to approve PCP")?; info!("Bob move approve"); bob_staking .stake(postconfirmations_address, move_token_address, U256::from(100)) @@ -184,24 +184,24 @@ async fn run_genesis_ceremony( .await? .watch() .await - .context("Bob failed to stake for MCR")?; + .context("Bob failed to stake for PCP")?; info!("Bob move staking"); // let domain_time = governor_staking // .epochDurationByDomain(postconfirmations_address.clone()) // .call() // .await.context("Failed to get domain registration time")?; - // info!("Domain registration time in MCR {:?}", domain_time); - // mcr accepts the genesis - info!("MCR accepts the genesis"); - governor_mcr + // info!("Domain registration time in PCP {:?}", domain_time); + // pcp accepts the genesis + info!("PCP accepts the genesis"); + governor_pcp .acceptGenesisCeremony() .send() .await? .watch() .await .context("Governor failed to accept genesis ceremony")?; - info!("mcr accepted"); + info!("pcp accepted"); Ok(()) } diff --git a/protocol/pcp/cli/client/src/eth_client.rs b/protocol/pcp/cli/client/src/eth_client.rs index 719a532c..33001f89 100644 --- a/protocol/pcp/cli/client/src/eth_client.rs +++ b/protocol/pcp/cli/client/src/eth_client.rs @@ -2,7 +2,7 @@ use crate::send_eth_transaction::InsufficentFunds; use crate::send_eth_transaction::SendTransactionErrorRule; use crate::send_eth_transaction::UnderPriced; use crate::send_eth_transaction::VerifyRule; -use crate::{CommitmentStream, McrSettlementClientOperations}; +use crate::{CommitmentStream, PcpSettlementClientOperations}; use alloy::providers::fillers::ChainIdFiller; use alloy::providers::fillers::FillProvider; use alloy::providers::fillers::GasFiller; @@ -34,20 +34,20 @@ use tokio_stream::StreamExt; use tracing::info; #[derive(Error, Debug)] -pub enum McrEthConnectorError { +pub enum PcpEthConnectorError { #[error( - "MCR Settlement Transaction fails because gas estimation is too high. Estimated gas:{0} gas limit:{1}" + "PCP Settlement Transaction fails because gas estimation is too high. Estimated gas:{0} gas limit:{1}" )] GasLimitExceed(u128, u128), - #[error("MCR Settlement Transaction fails because account funds are insufficient. error:{0}")] + #[error("PCP Settlement Transaction fails because account funds are insufficient. error:{0}")] InsufficientFunds(String), - #[error("MCR Settlement Transaction send failed because :{0}")] + #[error("PCP Settlement Transaction send failed because :{0}")] SendTransactionError(#[from] alloy_contract::Error), - #[error("MCR Settlement Transaction send failed during its execution :{0}")] + #[error("PCP Settlement Transaction send failed during its execution :{0}")] RpcTransactionExecution(String), - #[error("MCR Settlement SuperBlockPostconfirmed event notification error :{0}")] + #[error("PCP Settlement SuperBlockPostconfirmed event notification error :{0}")] EventNotificationError(#[from] alloy_sol_types::Error), - #[error("MCR Settlement SuperBlockPostconfirmed event notification stream close")] + #[error("PCP Settlement SuperBlockPostconfirmed event notification stream close")] EventNotificationStreamClosed, } @@ -55,8 +55,8 @@ pub enum McrEthConnectorError { sol!( #[allow(missing_docs)] #[sol(rpc)] - MCR, - "abis/MCR.json" + PCP, + "abis/PCP.json" ); // Note: we prefer using the ABI because the [`sol!`](alloy_sol_types::sol) macro, when used with smart contract code directly, will not handle inheritance. @@ -75,7 +75,7 @@ sol!( "abis/MOVEToken.json" ); -pub struct McrSettlementClient

{ +pub struct PcpSettlementClient

{ run_commitment_admin_mode: bool, rpc_provider: P, ws_provider: RootProvider, @@ -87,7 +87,7 @@ pub struct McrSettlementClient

{ } impl - McrSettlementClient< + PcpSettlementClient< FillProvider< JoinFill< JoinFill< @@ -115,7 +115,7 @@ impl .settle .postconfirmations_contract_address .parse() - .context("Failed to parse the contract address for the MCR settlement client")?; + .context("Failed to parse the contract address for the PCP settlement client")?; let rpc_url = config.eth_rpc_connection_url(); let ws_url = config.eth_ws_connection_url(); let rpc_provider = ProviderBuilder::new() @@ -123,9 +123,9 @@ impl .wallet(EthereumWallet::from(signer)) .on_builtin(&rpc_url) .await - .context("Failed to create the RPC provider for the MCR settlement client")?; + .context("Failed to create the RPC provider for the PCP settlement client")?; - let client = McrSettlementClient::build_with_provider( + let client = PcpSettlementClient::build_with_provider( config.settle.settlement_admin_mode, rpc_provider, ws_url, @@ -136,13 +136,13 @@ impl ) .await .context( - "Failed to create the MCR settlement client with the RPC provider and contract address", + "Failed to create the PCP settlement client with the RPC provider and contract address", )?; Ok(client) } } -impl

McrSettlementClient

{ +impl

PcpSettlementClient

{ async fn build_with_provider( run_commitment_admin_mode: bool, rpc_provider: P, @@ -161,14 +161,14 @@ impl

McrSettlementClient

{ let ws_provider = ProviderBuilder::new() .on_ws(ws) .await - .context("Failed to create the WebSocket provider for the MCR settlement client")?; + .context("Failed to create the WebSocket provider for the PCP settlement client")?; let rule1: Box = Box::new(SendTransactionErrorRule::::new()); let rule2: Box = Box::new(SendTransactionErrorRule::::new()); let send_transaction_error_rules = vec![rule1, rule2]; - Ok(McrSettlementClient { + Ok(PcpSettlementClient { run_commitment_admin_mode, rpc_provider, ws_provider, @@ -182,7 +182,7 @@ impl

McrSettlementClient

{ } #[async_trait::async_trait] -impl

McrSettlementClientOperations for McrSettlementClient

+impl

PcpSettlementClientOperations for PcpSettlementClient

where P: Provider + Clone, { @@ -190,9 +190,9 @@ where &self, block_commitment: SuperBlockCommitment, ) -> Result<(), anyhow::Error> { - let contract = MCR::new(self.contract_address, &self.rpc_provider); + let contract = PCP::new(self.contract_address, &self.rpc_provider); - let eth_block_commitment = MCR::SuperBlockCommitment { + let eth_block_commitment = PCP::SuperBlockCommitment { // Currently, to simplify the API, we'll say 0 is uncommitted all other numbers are legitimate heights height: U256::from(block_commitment.height()), commitment: alloy_primitives::FixedBytes( @@ -226,12 +226,12 @@ where &self, block_commitments: Vec, ) -> Result<(), anyhow::Error> { - let contract = MCR::new(self.contract_address, &self.rpc_provider); + let contract = PCP::new(self.contract_address, &self.rpc_provider); let eth_block_commitment: Vec<_> = block_commitments .into_iter() .map(|block_commitment| { - Ok(MCR::SuperBlockCommitment { + Ok(PCP::SuperBlockCommitment { // Currently, to simplify the API, we'll say 0 is uncommitted all other numbers are legitimate heights height: U256::from(block_commitment.height()), commitment: alloy_primitives::FixedBytes( @@ -259,9 +259,9 @@ where &self, block_commitment: SuperBlockCommitment, ) -> Result<(), anyhow::Error> { - let contract = MCR::new(self.contract_address, &self.rpc_provider); + let contract = PCP::new(self.contract_address, &self.rpc_provider); - let eth_block_commitment = MCR::SuperBlockCommitment { + let eth_block_commitment = PCP::SuperBlockCommitment { // Currently, to simplify the API, we'll say 0 is uncommitted all other numbers are legitimate heights height: U256::from(block_commitment.height()), commitment: alloy_primitives::FixedBytes( @@ -283,7 +283,7 @@ where async fn stream_block_commitments(&self) -> Result { // Register to contract BlockCommitmentSubmitted event - let contract = MCR::new(self.contract_address, &self.ws_provider); + let contract = PCP::new(self.contract_address, &self.ws_provider); let event_filter = contract.SuperBlockPostconfirmed_filter().watch().await?; let stream = event_filter.into_stream().map(|event| { @@ -300,7 +300,7 @@ where Commitment::new(commitment.stateCommitment.0), )) }) - .map_err(|err| McrEthConnectorError::EventNotificationError(err).into()) + .map_err(|err| PcpEthConnectorError::EventNotificationError(err).into()) }); Ok(Box::pin(stream) as CommitmentStream) } @@ -309,8 +309,8 @@ where &self, height: u64, ) -> Result, anyhow::Error> { - let contract = MCR::new(self.contract_address, &self.ws_provider); - let MCR::getPostconfirmedCommitmentReturn { _0: commitment } = + let contract = PCP::new(self.contract_address, &self.ws_provider); + let PCP::getPostconfirmedCommitmentReturn { _0: commitment } = contract.getPostconfirmedCommitment(U256::from(height)).call().await?; let return_height: u64 = commitment @@ -332,8 +332,8 @@ where &self, height: u64, ) -> Result, anyhow::Error> { - let contract = MCR::new(self.contract_address, &self.ws_provider); - let MCR::getValidatorCommitmentAtSuperBlockHeightReturn { _0: commitment } = contract + let contract = PCP::new(self.contract_address, &self.ws_provider); + let PCP::getValidatorCommitmentAtSuperBlockHeightReturn { _0: commitment } = contract .getValidatorCommitmentAtSuperBlockHeight(U256::from(height), self.signer_address) .call() .await?; @@ -354,8 +354,8 @@ where } async fn get_max_tolerable_block_height(&self) -> Result { - let contract = MCR::new(self.contract_address, &self.ws_provider); - let MCR::getMaxTolerableSuperBlockHeightReturn { _0: block_height } = + let contract = PCP::new(self.contract_address, &self.ws_provider); + let PCP::getMaxTolerableSuperBlockHeightReturn { _0: block_height } = contract.getMaxTolerableSuperBlockHeight().call().await?; Ok(block_height .try_into() diff --git a/protocol/pcp/cli/client/src/lib.rs b/protocol/pcp/cli/client/src/lib.rs index 179add3c..ea6e29dc 100644 --- a/protocol/pcp/cli/client/src/lib.rs +++ b/protocol/pcp/cli/client/src/lib.rs @@ -9,7 +9,7 @@ pub mod mock; pub mod eth_client; #[cfg(feature = "eth")] -pub use eth_client::McrSettlementClient; +pub use eth_client::PcpSettlementClient; pub mod send_eth_transaction; @@ -17,7 +17,7 @@ type CommitmentStream = std::pin::Pin> + Send>>; #[async_trait::async_trait] -pub trait McrSettlementClientOperations { +pub trait PcpSettlementClientOperations { /// Posts a block commitment to the settlement client. async fn post_block_commitment( &self, diff --git a/protocol/pcp/cli/client/src/mock.rs b/protocol/pcp/cli/client/src/mock.rs index ac237f51..31b3c9d1 100644 --- a/protocol/pcp/cli/client/src/mock.rs +++ b/protocol/pcp/cli/client/src/mock.rs @@ -1,4 +1,4 @@ -use crate::{CommitmentStream, McrSettlementClientOperations}; +use crate::{CommitmentStream, PcpSettlementClientOperations}; use postconfirmations_config::Config; use postconfirmations_types::block_commitment::SuperBlockCommitment; use std::collections::BTreeMap; @@ -8,7 +8,7 @@ use tokio_stream::wrappers::ReceiverStream; use tracing::info; #[derive(Clone)] -pub struct McrSettlementClient { +pub struct PcpSettlementClient { commitments: Arc>>, stream_sender: mpsc::Sender>, stream_receiver: Arc>>>>, @@ -17,10 +17,10 @@ pub struct McrSettlementClient { paused_at_height: Arc>>, } -impl McrSettlementClient { +impl PcpSettlementClient { pub fn new() -> Self { let (stream_sender, receiver) = mpsc::channel(10); - McrSettlementClient { + PcpSettlementClient { commitments: Arc::new(RwLock::new(BTreeMap::new())), stream_sender, stream_receiver: Arc::new(Mutex::new(Some(receiver))), @@ -38,7 +38,7 @@ impl McrSettlementClient { /// Overrides the commitment to settle on at given height. /// /// To have effect, this method needs to be called before a commitment is - /// posted for this height with the `McrSettlementClientOperations` API. + /// posted for this height with the `PcpSettlementClientOperations` API. pub async fn override_block_commitment(&self, commitment: SuperBlockCommitment) { let mut commitments = self.commitments.write().await; commitments.insert(commitment.height(), commitment); @@ -71,7 +71,7 @@ impl McrSettlementClient { } #[async_trait::async_trait] -impl McrSettlementClientOperations for McrSettlementClient { +impl PcpSettlementClientOperations for PcpSettlementClient { async fn post_block_commitment( &self, block_commitment: SuperBlockCommitment, @@ -161,7 +161,7 @@ pub mod test { #[tokio::test] async fn test_post_block_commitment() -> Result<(), anyhow::Error> { - let client = McrSettlementClient::new(); + let client = PcpSettlementClient::new(); let commitment = SuperBlockCommitment::new(1, Default::default(), Commitment::test()); client.post_block_commitment(commitment.clone()).await.unwrap(); let guard = client.commitments.write().await; @@ -175,7 +175,7 @@ pub mod test { #[tokio::test] async fn test_post_block_commitment_batch() -> Result<(), anyhow::Error> { - let client = McrSettlementClient::new(); + let client = PcpSettlementClient::new(); let commitment = SuperBlockCommitment::new(1, Default::default(), Commitment::test()); let commitment2 = SuperBlockCommitment::new(1, Default::default(), Commitment::test()); client @@ -190,7 +190,7 @@ pub mod test { #[tokio::test] async fn test_stream_block_commitments() -> Result<(), anyhow::Error> { - let client = McrSettlementClient::new(); + let client = PcpSettlementClient::new(); let commitment = SuperBlockCommitment::new(1, Default::default(), Commitment::test()); client.post_block_commitment(commitment.clone()).await.unwrap(); let mut stream = client.stream_block_commitments().await?; @@ -200,7 +200,7 @@ pub mod test { #[tokio::test] async fn test_override_block_commitments() -> Result<(), anyhow::Error> { - let client = McrSettlementClient::new(); + let client = PcpSettlementClient::new(); let commitment = SuperBlockCommitment::new(2, Default::default(), Commitment::test()); client.override_block_commitment(commitment.clone()).await; client @@ -214,7 +214,7 @@ pub mod test { #[tokio::test] async fn test_pause() -> Result<(), anyhow::Error> { - let client = McrSettlementClient::new(); + let client = PcpSettlementClient::new(); let commitment = SuperBlockCommitment::new(2, Default::default(), Commitment::test()); client.pause_after(1).await; client.post_block_commitment(commitment.clone()).await?; @@ -232,7 +232,7 @@ pub mod test { #[tokio::test] async fn test_resume() -> Result<(), anyhow::Error> { - let client = McrSettlementClient::new(); + let client = PcpSettlementClient::new(); let commitment = SuperBlockCommitment::new(2, Default::default(), Commitment::test()); client.pause_after(1).await; client.post_block_commitment(commitment.clone()).await?; diff --git a/protocol/pcp/cli/client/src/send_eth_transaction.rs b/protocol/pcp/cli/client/src/send_eth_transaction.rs index 89d70a0d..fd11fded 100644 --- a/protocol/pcp/cli/client/src/send_eth_transaction.rs +++ b/protocol/pcp/cli/client/src/send_eth_transaction.rs @@ -1,4 +1,4 @@ -use crate::eth_client::McrEthConnectorError; +use crate::eth_client::PcpEthConnectorError; use alloy::providers::Provider; use alloy_contract::CallBuilder; use alloy_contract::CallDecoder; @@ -9,10 +9,10 @@ use tracing::info; // Define a rule to verify the error generated when a transaction is send to determine if: // * the Transaction must me resend with more gas: return Ok(true) -// * a specific error must be return: return Err(McrEthConnectorError::xxx); +// * a specific error must be return: return Err(PcpEthConnectorError::xxx); // * the rule doesn't apply: return Ok(false) pub trait VerifyRule: Sync + Send { - fn verify(&self, error: &alloy_contract::Error) -> Result; + fn verify(&self, error: &alloy_contract::Error) -> Result; } pub struct SendTransactionErrorRule { @@ -30,7 +30,7 @@ pub struct UnderPriced; pub struct InsufficentFunds; impl VerifyRule for SendTransactionErrorRule { - fn verify(&self, error: &alloy_contract::Error) -> Result { + fn verify(&self, error: &alloy_contract::Error) -> Result { let alloy_contract::Error::TransportError(TransportError::ErrorResp(payload)) = error else { return Ok(false); @@ -45,14 +45,14 @@ impl VerifyRule for SendTransactionErrorRule { } impl VerifyRule for SendTransactionErrorRule { - fn verify(&self, error: &alloy_contract::Error) -> Result { + fn verify(&self, error: &alloy_contract::Error) -> Result { let alloy_contract::Error::TransportError(TransportError::ErrorResp(payload)) = error else { return Ok(false); }; if payload.code == -32000 && payload.message.contains("insufficient funds") { - Err(McrEthConnectorError::InsufficientFunds(payload.message.clone())) + Err(PcpEthConnectorError::InsufficientFunds(payload.message.clone())) } else { Ok(false) } @@ -87,7 +87,7 @@ pub async fn send_transaction< let gas_price = call_builder.provider.get_gas_price().await?; let transaction_fee_wei = estimate_gas * gas_price; if transaction_fee_wei > gas_limit { - return Err(McrEthConnectorError::GasLimitExceed(transaction_fee_wei, gas_limit).into()); + return Err(PcpEthConnectorError::GasLimitExceed(transaction_fee_wei, gas_limit).into()); } info!("Sending transaction with gas: {}", estimate_gas); @@ -108,7 +108,7 @@ pub async fn send_transaction< } } - return Err(McrEthConnectorError::from(err).into()); + return Err(PcpEthConnectorError::from(err).into()); } }; @@ -127,7 +127,7 @@ pub async fn send_transaction< estimate_gas += (estimate_gas * 30) / 100; continue; } else { - return Err(McrEthConnectorError::RpcTransactionExecution(format!( + return Err(PcpEthConnectorError::RpcTransactionExecution(format!( "Send commitment Transaction fail, abort Transaction, receipt:{transaction_receipt:?}" )) .into()); @@ -135,13 +135,13 @@ pub async fn send_transaction< } Ok(_) => return Ok(()), Err(err) => { - return Err(McrEthConnectorError::RpcTransactionExecution(err.to_string()).into()) + return Err(PcpEthConnectorError::RpcTransactionExecution(err.to_string()).into()) } }; } //Max retry exceed - Err(McrEthConnectorError::RpcTransactionExecution( + Err(PcpEthConnectorError::RpcTransactionExecution( "Send commitment Transaction fail because of exceed max retry".to_string(), ) .into()) diff --git a/protocol/pcp/config/Cargo.toml b/protocol/pcp/config/Cargo.toml index f4db55bf..25b6177b 100644 --- a/protocol/pcp/config/Cargo.toml +++ b/protocol/pcp/config/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "postconfirmationsconfig" -description = "Configuration of the MCR settlement client" +description = "Configuration of the PCP settlement client" version.workspace = true edition.workspace = true license.workspace = true diff --git a/protocol/pcp/config/src/common/deploy.rs b/protocol/pcp/config/src/common/deploy.rs index 4b60aa2a..1c138f30 100644 --- a/protocol/pcp/config/src/common/deploy.rs +++ b/protocol/pcp/config/src/common/deploy.rs @@ -15,7 +15,7 @@ pub struct Config { env_short_default!( postconfirmations_deployment_working_directory, String, - "protocol-units/settlement/mcr/contracts" + "protocol-units/settlement/pcp/contracts" ); env_short_default!( @@ -35,7 +35,7 @@ pub fn default_signer_identifier() -> SignerIdentifier { } pub fn maybe_deploy() -> Option { - match std::env::var("MAYBE_DEPLOY_MCR") { + match std::env::var("MAYBE_DEPLOY_PCP") { Ok(str_value) => { // if it parses as true then we want to deploy under the default config let bool_value = str_value.parse::().unwrap_or(false); diff --git a/protocol/pcp/config/src/common/testing.rs b/protocol/pcp/config/src/common/testing.rs index 1573b2ea..3a49c8bf 100644 --- a/protocol/pcp/config/src/common/testing.rs +++ b/protocol/pcp/config/src/common/testing.rs @@ -31,7 +31,7 @@ env_short_default!(default_movement_staking_contract_address, String, "0x0"); // ); pub fn maybe_testing() -> Option { - std::env::var("MAYBE_TESTING_MCR").ok().map(|_| Config::default()) + std::env::var("MAYBE_TESTING_PCP").ok().map(|_| Config::default()) } impl Default for Config { diff --git a/protocol/pcp/config/src/lib.rs b/protocol/pcp/config/src/lib.rs index d6282530..fa44f5f4 100644 --- a/protocol/pcp/config/src/lib.rs +++ b/protocol/pcp/config/src/lib.rs @@ -1,4 +1,4 @@ -//! This crate provides configuration parameters for the MCR settlement +//! This crate provides configuration parameters for the PCP settlement //! component of a Movement node. use serde::{Deserialize, Serialize}; pub mod common; diff --git a/protocol/pcp/contracts/README.md b/protocol/pcp/contracts/README.md index a053c95c..6d176b35 100644 --- a/protocol/pcp/contracts/README.md +++ b/protocol/pcp/contracts/README.md @@ -1,6 +1,6 @@ -# MCR - L1 contract +# PCP - L1 contract -- **RFC**: [RFC MCR](https://github.com/movementlabsxyz/rfcs/pulls) +- **RFC**: [RFC PCP](https://github.com/movementlabsxyz/rfcs/pulls) - **MIP**: [MIP-37](https://github.com/movementlabsxyz/MIP/blob/mip/postconfirmation/MIP/mip-37/README.md) This directory contains the implementation of the MRC settlement smart contract. To test the contract, run: @@ -15,7 +15,7 @@ There is a long-running test covering over 50 epochs. It will likely take a few ### Description -For a given block height, MCR selects the earliest block commitment that matches the supermajority of stake for a given epoch by: +For a given block height, PCP selects the earliest block commitment that matches the supermajority of stake for a given epoch by: 1. Fixing the stake parameters for the epoch; all stake changes apply to the next epoch. 2. Tracking commitments for each block height until one exceeds the supermajority of stake. @@ -34,4 +34,4 @@ $$ S(C',i) > \frac{2}{3} TotalStake = \frac{2}{3} \times \sum_{u \in V} s(u), $$ -If $S(C', i)$ satisfies the condition, and $S(C',i-1)$ does not, then $c_i$ is returned by MCR. Due to the non-decreasing nature of $S$ with $i$, $c_i$ is the earliest commitment that can be returned. \ No newline at end of file +If $S(C', i)$ satisfies the condition, and $S(C',i-1)$ does not, then $c_i$ is returned by PCP. Due to the non-decreasing nature of $S$ with $i$, $c_i$ is the earliest commitment that can be returned. \ No newline at end of file diff --git a/protocol/pcp/contracts/deployments/local.json b/protocol/pcp/contracts/deployments/local.json index 2665c509..e402e09b 100644 --- a/protocol/pcp/contracts/deployments/local.json +++ b/protocol/pcp/contracts/deployments/local.json @@ -8,7 +8,7 @@ "implementation": "0x38435Ac0E0e9Bd8737c476F8F39a24b0735e00dc", "proxy": "0xE19dddcaF5dCb2Ec0Fe52229e3133B99396f22e2" }, - "MCR": { + "PCP": { "implementation": "0x1430c9c2143F97aaE765197e744BaBa7e78acaf0", "proxy": "0x2A3365C575a5Fc8fD2842B82D29f8035E7f71CeC" } diff --git a/protocol/pcp/contracts/kurtosis_instructions.md b/protocol/pcp/contracts/kurtosis_instructions.md index 46a82174..4314a553 100644 --- a/protocol/pcp/contracts/kurtosis_instructions.md +++ b/protocol/pcp/contracts/kurtosis_instructions.md @@ -1,6 +1,6 @@ -# Testing the MCR Contract with Kurtosis +# Testing the PCP Contract with Kurtosis -This guide provides step-by-step instructions for setting up and testing the MCR contract using Kurtosis. +This guide provides step-by-step instructions for setting up and testing the PCP contract using Kurtosis. ## 1. Prerequisites - [Docker](https://docs.docker.com/get-docker/) @@ -24,7 +24,7 @@ docker image ls ### 2.2 Install Development Dependencies ```sh # Initialize Foundry -cd mcr/contracts +cd pcp/contracts forge init --force --no-git # Install dependencies @@ -147,7 +147,7 @@ npx hardhat run scripts/test-deployment.ts --network localnet **Setup** First, ensure Foundry is initialized. You may have to run the following. ```sh -cd mcr/contracts +cd protocol/pcp/contracts forge init --force --no-git ``` @@ -157,6 +157,12 @@ chmod +x script/install-deps.sh ./script/install-deps.sh ``` +It may be that this causes an error and requires some dependencies to be installed manually. (Remove this comment once this is resolved). Such as: +```sh +forge install safe-global/safe-smart-account --no-commit +forge install transmissions11/solmate --no-commit +``` + Install npm dependencies using the provided package.json: ```sh yarn install @@ -170,7 +176,7 @@ The following files are required for deployment and need to be updated when depl **Deployment** ```sh -forge script script/DeployMCRDev.s.sol:DeployMCRDev \ +forge script script/DeployPCPDev.s.sol:DeployPCPDev \ --rpc-url http://127.0.0.1: \ --private-key \ --broadcast @@ -179,8 +185,8 @@ forge script script/DeployMCRDev.s.sol:DeployMCRDev \ Run the automated verification script: ```sh -chmod +x script/verify-mcr.sh -./script/verify-mcr.sh +chmod +x script/verify-pcp.sh +./script/verify-pcp.sh ``` #### 4.3 Option C: Production Deployment (with `forge`) @@ -189,8 +195,8 @@ Production-like Deployment (Optional, requires Safe contracts): ```sh # Only attempt this after testing with the development deployment -# This deploys MCR using previously deployed Safe contracts -forge script script/DeployMCR.s.sol:DeployMCR \ +# This deploys PCP using previously deployed Safe contracts +forge script script/DeployPCP.s.sol:DeployPCP \ --rpc-url http://127.0.0.1: \ --private-key \ --broadcast @@ -200,23 +206,23 @@ forge script script/DeployMCR.s.sol:DeployMCR \ ### 5.1 Deploy Safe Contracts -The MCR deployment requires Safe contracts for governance. Deploy them using the provided script: +The PCP deployment requires Safe contracts for governance. Deploy them using the provided script: ```sh -cd mcr/contracts +cd pcp/contracts chmod +x script/deploy-safe.sh ./script/deploy-safe.sh http://127.0.0.1: ``` This will deploy all required Safe contracts and save their addresses to `script/helpers/safe-deployments.json`. -Note: Keep track of the deployed addresses as they'll be needed for the MCR deployment. +Note: Keep track of the deployed addresses as they'll be needed for the PCP deployment. ### 5.2 Verify Deployment ```sh -chmod +x script/verify-mcr.sh -./script/verify-mcr.sh +chmod +x script/verify-pcp.sh +./script/verify-pcp.sh ``` ## 5. Advanced Configuration (Optional) diff --git a/protocol/pcp/contracts/script/CoreDeployer.s.sol b/protocol/pcp/contracts/script/CoreDeployer.s.sol index 52a1e67f..2e6004e1 100644 --- a/protocol/pcp/contracts/script/CoreDeployer.s.sol +++ b/protocol/pcp/contracts/script/CoreDeployer.s.sol @@ -3,16 +3,16 @@ pragma solidity ^0.8.13; import "forge-std/Script.sol"; import {MOVEToken} from "../src/token/MOVEToken.sol"; import { Helper } from "./helpers/Helper.sol"; -import { MCRDeployer } from "./MCRDeployer.s.sol"; +import { PCPDeployer } from "./PCPDeployer.s.sol"; import { MovementStakingDeployer } from "./MovementStakingDeployer.s.sol"; import { StlMoveDeployer } from "./StlMoveDeployer.s.sol"; import { MOVETokenDeployer } from "./MOVETokenDeployer.s.sol"; import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol"; -contract CoreDeployer is MCRDeployer, MovementStakingDeployer, StlMoveDeployer, MOVETokenDeployer { +contract CoreDeployer is PCPDeployer, MovementStakingDeployer, StlMoveDeployer, MOVETokenDeployer { - function run() external override(MCRDeployer, MovementStakingDeployer, StlMoveDeployer, MOVETokenDeployer) { + function run() external override(PCPDeployer, MovementStakingDeployer, StlMoveDeployer, MOVETokenDeployer) { // load config and deployments data _loadExternalData(); @@ -42,10 +42,10 @@ contract CoreDeployer is MCRDeployer, MovementStakingDeployer, StlMoveDeployer, _upgradeStlMove() : revert("STL: both admin and proxy should be registered"); // requires staking and move to be deployed - deployment.mcrAdmin == ZERO && deployment.mcr == ZERO && deployment.move != ZERO && deployment.staking != ZERO ? - _deployMCR() : deployment.mcrAdmin != ZERO && deployment.mcr != ZERO ? - // if mcr is already deployed, upgrade it - _upgradeMCR() : revert("MCR: both admin and proxy should be registered"); + deployment.pcpAdmin == ZERO && deployment.pcp == ZERO && deployment.move != ZERO && deployment.staking != ZERO ? + _deployPCP() : deployment.pcpAdmin != ZERO && deployment.pcp != ZERO ? + // if pcp is already deployed, upgrade it + _upgradePCP() : revert("PCP: both admin and proxy should be registered"); // Only write to file if chainid is not running a foundry local chain and if broadcasting if (block.chainid == foundryChainId) { @@ -53,7 +53,7 @@ contract CoreDeployer is MCRDeployer, MovementStakingDeployer, StlMoveDeployer, _upgradeMove(); _upgradeStaking(); _upgradeStlMove(); - _upgradeMCR(); + _upgradePCP(); } else { if (vm.isContext(VmSafe.ForgeContext.ScriptBroadcast)) { _writeDeployments(); diff --git a/protocol/pcp/contracts/script/DeployMCR.s.sol b/protocol/pcp/contracts/script/DeployPCP.s.sol similarity index 79% rename from protocol/pcp/contracts/script/DeployMCR.s.sol rename to protocol/pcp/contracts/script/DeployPCP.s.sol index 37d76a8d..bf65d394 100644 --- a/protocol/pcp/contracts/script/DeployMCR.s.sol +++ b/protocol/pcp/contracts/script/DeployPCP.s.sol @@ -2,11 +2,11 @@ pragma solidity ^0.8.19; import "forge-std/Script.sol"; -import "../src/settlement/MCR.sol"; +import "../src/settlement/PCP.sol"; import {IMintableToken, MintableToken} from "../src/token/base/MintableToken.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; -contract DeployMCR is Script { +contract DeployPCP is Script { function run() public { // Load Safe addresses from deployments.json string memory root = vm.projectRoot(); @@ -19,8 +19,8 @@ contract DeployMCR is Script { vm.startBroadcast(); - // Deploy MCR implementation and proxy - MCR mcrImplementation = new MCR(); + // Deploy PCP implementation and proxy + PCP pcpImplementation = new PCP(); // Get MOVE token and staking addresses from deployments string memory deploymentsPath = string.concat(root, "/script/helpers/deployments.json"); @@ -28,12 +28,12 @@ contract DeployMCR is Script { address moveToken = abi.decode(vm.parseJson(deploymentsJson, ".3151908.move"), (address)); address staking = abi.decode(vm.parseJson(deploymentsJson, ".3151908.staking"), (address)); - // Initialize MCR with production settings + // Initialize PCP with production settings address[] memory custodians = new address[](1); custodians[0] = moveToken; // The MOVE token is the custodian for rewards - bytes memory mcrData = abi.encodeCall( - MCR.initialize, + bytes memory pcpData = abi.encodeCall( + PCP.initialize, ( IMovementStaking(staking), // _stakingContract: address of staking contract 0, // _lastPostconfirmedSuperBlockHeight: start from genesis @@ -44,11 +44,11 @@ contract DeployMCR is Script { moveToken // _moveTokenAddress: primary custodian for rewards in staking ) ); - address mcrProxy = address(new ERC1967Proxy(address(mcrImplementation), mcrData)); + address pcpProxy = address(new ERC1967Proxy(address(pcpImplementation), pcpData)); - // Save MCR address to deployments - console.log("MCR implementation deployed to:", address(mcrImplementation)); - console.log("MCR proxy deployed to:", mcrProxy); + // Save PCP address to deployments + console.log("PCP implementation deployed to:", address(pcpImplementation)); + console.log("PCP proxy deployed to:", pcpProxy); vm.stopBroadcast(); } diff --git a/protocol/pcp/contracts/script/DeployMCRDev.s.sol b/protocol/pcp/contracts/script/DeployPCPDev.s.sol similarity index 83% rename from protocol/pcp/contracts/script/DeployMCRDev.s.sol rename to protocol/pcp/contracts/script/DeployPCPDev.s.sol index dd02f1c9..ffeefdae 100644 --- a/protocol/pcp/contracts/script/DeployMCRDev.s.sol +++ b/protocol/pcp/contracts/script/DeployPCPDev.s.sol @@ -1,22 +1,22 @@ pragma solidity ^0.8.19; /** - * Development deployment script for the Multi-Commit-Rollup (MCR) system. + * Development deployment script for the Multi-Commit-Rollup (PCP) system. * This deploys a test environment with short epochs and quick postconfirmer rotations. - * Includes MOVE token for staking, Movement Staking for managing attesters, and MCR for cross-chain settlement. + * Includes MOVE token for staking, Movement Staking for managing attesters, and PCP for cross-chain settlement. */ import "forge-std/Script.sol"; import "../src/token/MOVEToken.sol"; import "../src/staking/MovementStaking.sol"; -import "../src/settlement/MCR.sol"; +import "../src/settlement/PCP.sol"; import {IMintableToken, MintableToken} from "../src/token/base/MintableToken.sol"; import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol"; import {ERC1967Proxy} from "@openzeppelin/contracts/proxy/ERC1967/ERC1967Proxy.sol"; -contract DeployMCRDev is Script { +contract DeployPCPDev is Script { function run() external { vm.startBroadcast(); @@ -25,7 +25,7 @@ contract DeployMCRDev is Script { // Deploy the implementation contracts that will be delegated to MintableToken moveTokenImplementation = new MintableToken(); MovementStaking stakingImplementation = new MovementStaking(); - MCR mcrImplementation = new MCR(); + PCP pcpImplementation = new PCP(); // Deploy MOVE token behind proxy and initialize with name and symbol bytes memory moveTokenData = abi.encodeCall( @@ -48,13 +48,13 @@ contract DeployMCRDev is Script { new ERC1967Proxy(address(stakingImplementation), movementStakingData) ); - // Set up MCR with MOVE token as the only custodian for rewards + // Set up PCP with MOVE token as the only custodian for rewards address[] memory custodians = new address[](1); custodians[0] = address(moveTokenProxy); - // Deploy MCR behind proxy with test configuration - bytes memory mcrData = abi.encodeCall( - MCR.initialize, + // Deploy PCP behind proxy with test configuration + bytes memory pcpData = abi.encodeCall( + PCP.initialize, ( IMovementStaking(address(movementStakingProxy)), // stakingContract: Contract managing attesters' stakes 0, // lastPostconfirmedSuperBlockHeight: Start from genesis @@ -65,22 +65,22 @@ contract DeployMCRDev is Script { address(moveTokenProxy) // moveTokenAddress: Primary token for staking rewards ) ); - address mcrProxy = address(new ERC1967Proxy(address(mcrImplementation), mcrData)); + address pcpProxy = address(new ERC1967Proxy(address(pcpImplementation), pcpData)); // Set up roles and permissions - MCR mcr = MCR(mcrProxy); - mcr.grantCommitmentAdmin(msg.sender); + PCP pcp = PCP(pcpProxy); + pcp.grantCommitmentAdmin(msg.sender); // Log the deployed addresses console.log("Move Token Proxy: %s", moveTokenProxy); - console.log("MCR Proxy: %s", mcrProxy); - console.log("MCR custodian: %s", MovementStaking(movementStakingProxy).epochDurationByDomain(mcrProxy)); + console.log("PCP Proxy: %s", pcpProxy); + console.log("PCP custodian: %s", MovementStaking(movementStakingProxy).epochDurationByDomain(pcpProxy)); // Log initial state console.log("\n=== Initial Setup ==="); console.log("Deployer address: %s", msg.sender); console.log("Move Token Proxy: %s", moveTokenProxy); - console.log("MCR Proxy: %s", mcrProxy); + console.log("PCP Proxy: %s", pcpProxy); console.log("Staking Proxy: %s", movementStakingProxy); // Set up initial token distribution and permissions @@ -115,11 +115,11 @@ contract DeployMCRDev is Script { // Verify deployment console.log("\n=== Verifying Deployment ==="); - // Verify MCR configuration - console.log("MCR Configuration:"); + // Verify PCP configuration + console.log("PCP Configuration:"); MovementStaking staking = MovementStaking(movementStakingProxy); - uint256 epochDuration = staking.getEpochDuration(mcrProxy); - uint256 postconfirmerDuration = mcr.getPostconfirmerDuration(); + uint256 epochDuration = staking.getEpochDuration(pcpProxy); + uint256 postconfirmerDuration = pcp.getPostconfirmerDuration(); console.log("- Epoch Duration: %s seconds", epochDuration); console.log("- Postconfirmer Duration: %s seconds", postconfirmerDuration); require(epochDuration == 10, "Incorrect epoch duration"); @@ -127,15 +127,15 @@ contract DeployMCRDev is Script { // Verify Staking configuration console.log("\nStaking Configuration:"); - uint256 stakingEpochDuration = MovementStaking(movementStakingProxy).epochDurationByDomain(mcrProxy); - console.log("- Epoch Duration for MCR domain: %s seconds", stakingEpochDuration); + uint256 stakingEpochDuration = MovementStaking(movementStakingProxy).epochDurationByDomain(pcpProxy); + console.log("- Epoch Duration for PCP domain: %s seconds", stakingEpochDuration); require(stakingEpochDuration == 10, "Incorrect staking epoch duration"); // Some simple sanity checks - console.log("\ngetAcceptingEpoch(mcrProxy): %s", staking.getAcceptingEpoch(mcrProxy)); - console.log("\ngetLastPostconfirmedSuperBlockHeight(): %s", mcr.getLastPostconfirmedSuperBlockHeight()); + console.log("\ngetAcceptingEpoch(pcpProxy): %s", staking.getAcceptingEpoch(pcpProxy)); + console.log("\ngetLastPostconfirmedSuperBlockHeight(): %s", pcp.getLastPostconfirmedSuperBlockHeight()); console.log("\nList of active attesters:"); - address[] memory stakedAttesters = staking.getStakedAttestersForAcceptingEpoch(mcrProxy); + address[] memory stakedAttesters = staking.getStakedAttestersForAcceptingEpoch(pcpProxy); if (stakedAttesters.length > 0) { for (uint256 i = 0; i < stakedAttesters.length; i++) { console.log("- Attester %s: %s", i, stakedAttesters[i]); @@ -143,7 +143,7 @@ contract DeployMCRDev is Script { } else { console.log("No attesters staked"); } - console.log("\nPostconfirmer: %s", mcr.getPostconfirmer()); + console.log("\nPostconfirmer: %s", pcp.getPostconfirmer()); // Verify token setup console.log("\nToken Configuration:"); diff --git a/protocol/pcp/contracts/script/MCRDeployer.s.sol b/protocol/pcp/contracts/script/PCPDeployer.s.sol similarity index 61% rename from protocol/pcp/contracts/script/MCRDeployer.s.sol rename to protocol/pcp/contracts/script/PCPDeployer.s.sol index 87d73dc1..7d037e16 100644 --- a/protocol/pcp/contracts/script/MCRDeployer.s.sol +++ b/protocol/pcp/contracts/script/PCPDeployer.s.sol @@ -1,12 +1,12 @@ pragma solidity ^0.8.13; import "forge-std/Script.sol"; -import {MCR} from "../src/settlement/MCR.sol"; +import {PCP} from "../src/settlement/PCP.sol"; import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import {TimelockController} from "@openzeppelin/contracts/governance/TimelockController.sol"; import { Helper } from "./helpers/Helper.sol"; -contract MCRDeployer is Helper { +contract PCPDeployer is Helper { function run() external virtual { @@ -19,9 +19,9 @@ contract MCRDeployer is Helper { // Deploy CREATE3Factory, Safes and Timelock if not deployed _deployDependencies(); - deployment.mcrAdmin == ZERO && deployment.mcr == ZERO && deployment.move != ZERO && deployment.staking != ZERO ? - _deployMCR() : deployment.mcrAdmin != ZERO && deployment.mcr != ZERO ? - _upgradeMCR() : revert("MCR: both admin and proxy should be registered"); + deployment.pcpAdmin == ZERO && deployment.pcp == ZERO && deployment.move != ZERO && deployment.staking != ZERO ? + _deployPCP() : deployment.pcpAdmin != ZERO && deployment.pcp != ZERO ? + _upgradePCP() : revert("PCP: both admin and proxy should be registered"); vm.stopBroadcast(); @@ -34,15 +34,15 @@ contract MCRDeployer is Helper { // •☽────✧˖°˖DANGER ZONE˖°˖✧────☾• // Modifications to the following functions have to be throughly tested - function _deployMCR() internal { - console.log("MCR: deploying"); - MCR mcrImplementation = new MCR(); + function _deployPCP() internal { + console.log("PCP: deploying"); + PCP pcpImplementation = new PCP(); vm.recordLogs(); - mcrProxy = new TransparentUpgradeableProxy( - address(mcrImplementation), + pcpProxy = new TransparentUpgradeableProxy( + address(pcpImplementation), address(timelock), abi.encodeWithSignature( - mcrSignature, + pcpSignature, address(stakingProxy), 128, 100 ether, @@ -50,31 +50,31 @@ contract MCRDeployer is Helper { config.signersLabs ) ); - console.log("MCR deployment records:"); - console.log("proxy", address(mcrProxy)); - deployment.mcr = address(mcrProxy); - deployment.mcrAdmin = _storeAdminDeployment(); + console.log("PCP deployment records:"); + console.log("proxy", address(pcpProxy)); + deployment.pcp = address(pcpProxy); + deployment.pcpAdmin = _storeAdminDeployment(); } - function _upgradeMCR() internal { - console.log("MCR: upgrading"); - MCR newMCRImplementation = new MCR(); - _checkBytecodeDifference(address(newMCRImplementation), deployment.mcr); + function _upgradePCP() internal { + console.log("PCP: upgrading"); + PCP newPCPImplementation = new PCP(); + _checkBytecodeDifference(address(newPCPImplementation), deployment.pcp); bytes memory data = abi.encodeWithSignature( "schedule(address,uint256,bytes,bytes32,bytes32,uint256)", - address(deployment.mcrAdmin), + address(deployment.pcpAdmin), 0, abi.encodeWithSignature( "upgradeAndCall(address,address,bytes)", - address(mcrProxy), - address(newMCRImplementation), + address(pcpProxy), + address(newPCPImplementation), "" ), bytes32(0), bytes32(0), config.minDelay ); - _proposeUpgrade(data, "mcr.json"); + _proposeUpgrade(data, "pcp.json"); } } diff --git a/protocol/pcp/contracts/script/VerifyMCRDev.s.sol b/protocol/pcp/contracts/script/VerifyPCPDev.s.sol similarity index 71% rename from protocol/pcp/contracts/script/VerifyMCRDev.s.sol rename to protocol/pcp/contracts/script/VerifyPCPDev.s.sol index 9bc3c820..befa26fc 100644 --- a/protocol/pcp/contracts/script/VerifyMCRDev.s.sol +++ b/protocol/pcp/contracts/script/VerifyPCPDev.s.sol @@ -1,38 +1,38 @@ pragma solidity ^0.8.19; /** - * Verification script for the MCR deployment. - * Checks token balances, permissions, staking functionality, and basic MCR operations. - * Run this after DeployMCRDev.s.sol to verify the system is working correctly. + * Verification script for the PCP deployment. + * Checks token balances, permissions, staking functionality, and basic PCP operations. + * Run this after DeployPCPDev.s.sol to verify the system is working correctly. */ import "forge-std/Script.sol"; import "../src/token/MOVEToken.sol"; import "../src/staking/MovementStaking.sol"; -import "../src/settlement/MCR.sol"; +import "../src/settlement/PCP.sol"; import {IMintableToken, MintableToken} from "../src/token/base/MintableToken.sol"; import {IERC20} from "@openzeppelin/contracts/interfaces/IERC20.sol"; -contract VerifyMCRDev is Script { +contract VerifyPCPDev is Script { function run() external { // Read deployment addresses string memory json = vm.readFile("deployment.json"); address moveTokenProxy = vm.parseJsonAddress(json, ".moveToken"); - address mcrProxy = vm.parseJsonAddress(json, ".mcr"); + address pcpProxy = vm.parseJsonAddress(json, ".pcp"); address stakingProxy = vm.parseJsonAddress(json, ".staking"); address deployer = vm.parseJsonAddress(json, ".deployer"); // Contract instances MintableToken moveToken = MintableToken(moveTokenProxy); - MCR mcr = MCR(mcrProxy); + PCP pcp = PCP(pcpProxy); MovementStaking staking = MovementStaking(stakingProxy); - console.log("\n=== Verifying MCR Configuration ==="); - console.log("Epoch duration: %s seconds", mcr.getEpochDuration()); - console.log("Postconfirmer duration: %s seconds", mcr.getPostconfirmerDuration()); + console.log("\n=== Verifying PCP Configuration ==="); + console.log("Epoch duration: %s seconds", pcp.getEpochDuration()); + console.log("Postconfirmer duration: %s seconds", pcp.getPostconfirmerDuration()); console.log("\n=== Verifying Staking Setup ==="); - console.log("MCR epoch duration in staking: %s", staking.epochDurationByDomain(mcrProxy)); + console.log("PCP epoch duration in staking: %s", staking.epochDurationByDomain(pcpProxy)); // console.log("MOVE token in staking: %s", address(staking.moveToken())); console.log("\n=== Verifying Token Setup ==="); diff --git a/protocol/pcp/contracts/script/helpers/Helper.sol b/protocol/pcp/contracts/script/helpers/Helper.sol index 8036ede1..86469fc9 100644 --- a/protocol/pcp/contracts/script/helpers/Helper.sol +++ b/protocol/pcp/contracts/script/helpers/Helper.sol @@ -22,11 +22,11 @@ contract Helper is Script { TransparentUpgradeableProxy public moveProxy; TransparentUpgradeableProxy public stlMoveProxy; TransparentUpgradeableProxy public stakingProxy; - TransparentUpgradeableProxy public mcrProxy; + TransparentUpgradeableProxy public pcpProxy; TimelockController public timelock; // CREATE3 exists across all major chains, we only enforce it on the same address if not deployed yet CREATE3Factory public create3 = CREATE3Factory(0x2Dfcc7415D89af828cbef005F0d072D8b3F23183); - string public mcrSignature = "initialize(address,uint256,uint256,uint256,address[])"; + string public pcpSignature = "initialize(address,uint256,uint256,uint256,address[])"; string public stakingSignature = "initialize(address)"; string public stlMoveSignature = "initialize(string,string,address)"; string public moveSignature = "initialize(address,address)"; @@ -56,8 +56,8 @@ contract Helper is Script { Deployment public deployment; struct Deployment { - address mcr; - address mcrAdmin; + address pcp; + address pcpAdmin; address move; address moveAdmin; address movementAnchorage; @@ -260,8 +260,8 @@ contract Helper is Script { } function _serializer(string memory json, Deployment memory memoryDeployment) internal returns (string memory) { - json.serialize("mcr", memoryDeployment.mcr); - json.serialize("mcrAdmin", memoryDeployment.mcrAdmin); + json.serialize("pcp", memoryDeployment.pcp); + json.serialize("pcpAdmin", memoryDeployment.pcpAdmin); json.serialize("move", memoryDeployment.move); json.serialize("moveAdmin", memoryDeployment.moveAdmin); json.serialize("movementAnchorage", memoryDeployment.movementAnchorage); diff --git a/protocol/pcp/contracts/script/helpers/deployments.json b/protocol/pcp/contracts/script/helpers/deployments.json index 42d503ee..b2881cf2 100644 --- a/protocol/pcp/contracts/script/helpers/deployments.json +++ b/protocol/pcp/contracts/script/helpers/deployments.json @@ -1,7 +1,7 @@ { "1": { - "mcr": "0x0000000000000000000000000000000000000000", - "mcrAdmin": "0x0000000000000000000000000000000000000000", + "pcp": "0x0000000000000000000000000000000000000000", + "pcpAdmin": "0x0000000000000000000000000000000000000000", "move": "0x3073f7aAA4DB83f95e9FFf17424F71D4751a3073", "moveAdmin": "0x8365AA031806A1ac2b31a5d3b8323020FC85DfEc", "movementAnchorage": "0xe3e86E126fcCd071Af39a0899734Ca5C8E5F4F25", @@ -15,8 +15,8 @@ "timelock": "0xA649f6335828f070dDDd7A8c4F5bef2b6FF7Bd51" }, "11155111": { - "mcr": "0x0000000000000000000000000000000000000000", - "mcrAdmin": "0x0000000000000000000000000000000000000000", + "pcp": "0x0000000000000000000000000000000000000000", + "pcpAdmin": "0x0000000000000000000000000000000000000000", "move": "0x0000000000000000000000000000000000000000", "moveAdmin": "0x0000000000000000000000000000000000000000", "movementAnchorage": "0x0000000000000000000000000000000000000000", @@ -30,8 +30,8 @@ "timelock": "0xC5B4Ca6E12144dE0e8e666F738A289476bebBc02" }, "17000": { - "mcr": "0x0000000000000000000000000000000000000000", - "mcrAdmin": "0x0000000000000000000000000000000000000000", + "pcp": "0x0000000000000000000000000000000000000000", + "pcpAdmin": "0x0000000000000000000000000000000000000000", "move": "0x0000000000000000000000000000000000000000", "moveAdmin": "0x0000000000000000000000000000000000000000", "movementAnchorage": "0x0000000000000000000000000000000000000000", @@ -45,8 +45,8 @@ "timelock": "0x0000000000000000000000000000000000000000" }, "31337": { - "mcr": "0x0000000000000000000000000000000000000000", - "mcrAdmin": "0x0000000000000000000000000000000000000000", + "pcp": "0x0000000000000000000000000000000000000000", + "pcpAdmin": "0x0000000000000000000000000000000000000000", "move": "0x703848F4c85f18e3acd8196c8eC91eb0b7Bd0797", "moveAdmin": "0x0000000000000000000000000000000000000000", "movementAnchorage": "0x0000000000000000000000000000000000000000", @@ -60,8 +60,8 @@ "timelock": "0x0000000000000000000000000000000000000000" }, "3151908": { - "mcr": "0x0000000000000000000000000000000000000000", - "mcrAdmin": "0x0000000000000000000000000000000000000000", + "pcp": "0x0000000000000000000000000000000000000000", + "pcpAdmin": "0x0000000000000000000000000000000000000000", "move": "0x703848F4c85f18e3acd8196c8eC91eb0b7Bd0797", "moveAdmin": "0x0000000000000000000000000000000000000000", "movementAnchorage": "0x0000000000000000000000000000000000000000", diff --git a/protocol/pcp/contracts/script/helpers/deploymentsOLD.json b/protocol/pcp/contracts/script/helpers/deploymentsOLD.json index 78a076cd..3d14bed3 100644 --- a/protocol/pcp/contracts/script/helpers/deploymentsOLD.json +++ b/protocol/pcp/contracts/script/helpers/deploymentsOLD.json @@ -1,7 +1,7 @@ { "1": { - "mcr": "0x0000000000000000000000000000000000000000", - "mcrAdmin": "0x0000000000000000000000000000000000000000", + "pcp": "0x0000000000000000000000000000000000000000", + "pcpAdmin": "0x0000000000000000000000000000000000000000", "move": "0x3073f7aAA4DB83f95e9FFf17424F71D4751a3073", "moveAdmin": "0x8365AA031806A1ac2b31a5d3b8323020FC85DfEc", "movementAnchorage": "0xe3e86E126fcCd071Af39a0899734Ca5C8E5F4F25", @@ -15,8 +15,8 @@ "timelock": "0xA649f6335828f070dDDd7A8c4F5bef2b6FF7Bd51" }, "11155111": { - "mcr": "0x0000000000000000000000000000000000000000", - "mcrAdmin": "0x0000000000000000000000000000000000000000", + "pcp": "0x0000000000000000000000000000000000000000", + "pcpAdmin": "0x0000000000000000000000000000000000000000", "move": "0x0000000000000000000000000000000000000000", "moveAdmin": "0x0000000000000000000000000000000000000000", "movementAnchorage": "0x0000000000000000000000000000000000000000", @@ -30,8 +30,8 @@ "timelock": "0xC5B4Ca6E12144dE0e8e666F738A289476bebBc02" }, "17000": { - "mcr": "0x0000000000000000000000000000000000000000", - "mcrAdmin": "0x0000000000000000000000000000000000000000", + "pcp": "0x0000000000000000000000000000000000000000", + "pcpAdmin": "0x0000000000000000000000000000000000000000", "move": "0x0000000000000000000000000000000000000000", "moveAdmin": "0x0000000000000000000000000000000000000000", "movementAnchorage": "0x0000000000000000000000000000000000000000", @@ -45,8 +45,8 @@ "timelock": "0x0000000000000000000000000000000000000000" }, "31337": { - "mcr": "0x0000000000000000000000000000000000000000", - "mcrAdmin": "0x0000000000000000000000000000000000000000", + "pcp": "0x0000000000000000000000000000000000000000", + "pcpAdmin": "0x0000000000000000000000000000000000000000", "move": "0x0000000000000000000000000000000000000000", "moveAdmin": "0x0000000000000000000000000000000000000000", "movementAnchorage": "0x0000000000000000000000000000000000000000", diff --git a/protocol/pcp/contracts/script/verify-mcr.sh b/protocol/pcp/contracts/script/verify-mcr.sh index f493881f..f67de637 100755 --- a/protocol/pcp/contracts/script/verify-mcr.sh +++ b/protocol/pcp/contracts/script/verify-mcr.sh @@ -10,29 +10,29 @@ fi RPC_URL=$1 # Read the deployment addresses from the latest broadcast -LATEST_BROADCAST=$(ls -t broadcast/DeployMCRDev.s.sol/*/run-latest.json | head -n1) +LATEST_BROADCAST=$(ls -t broadcast/DeployPCPDev.s.sol/*/run-latest.json | head -n1) # Get the proxy addresses (they're created after the implementations) MOVE_TOKEN=$(cat $LATEST_BROADCAST | jq -r '.transactions[] | select(.contractName=="ERC1967Proxy") | .contractAddress' | sed -n '1p') STAKING_PROXY=$(cat $LATEST_BROADCAST | jq -r '.transactions[] | select(.contractName=="ERC1967Proxy") | .contractAddress' | sed -n '2p') -MCR_PROXY=$(cat $LATEST_BROADCAST | jq -r '.transactions[] | select(.contractName=="ERC1967Proxy") | .contractAddress' | sed -n '3p') +PCP_PROXY=$(cat $LATEST_BROADCAST | jq -r '.transactions[] | select(.contractName=="ERC1967Proxy") | .contractAddress' | sed -n '3p') DEPLOYER=$(cat $LATEST_BROADCAST | jq -r '.transactions[0].from') PRIVATE_KEY="39725efee3fb28614de3bacaffe4cc4bd8c436257e2c8bb887c4b5c4be45e76d" -echo "=== Verifying MCR Deployment ===" +echo "=== Verifying PCP Deployment ===" echo "MOVE Token: $MOVE_TOKEN" -echo "MCR Proxy: $MCR_PROXY" +echo "PCP Proxy: $PCP_PROXY" echo "Staking Proxy: $STAKING_PROXY" echo "Deployer: $DEPLOYER"./ -echo -e "\n=== Checking MCR Configuration ===" +echo -e "\n=== Checking PCP Configuration ===" echo "Epoch Duration:" -cast call --rpc-url $RPC_URL $MCR_PROXY "getEpochDuration()(uint256)" +cast call --rpc-url $RPC_URL $PCP_PROXY "getEpochDuration()(uint256)" echo "Postconfirmer Duration:" -cast call --rpc-url $RPC_URL $MCR_PROXY "getPostconfirmerDuration()(uint256)" +cast call --rpc-url $RPC_URL $PCP_PROXY "getPostconfirmerDuration()(uint256)" echo -e "\n=== Checking Staking Setup ===" -echo "Epoch Duration for MCR domain:" -cast call --rpc-url $RPC_URL $STAKING_PROXY "epochDurationByDomain(address)(uint256)" $MCR_PROXY +echo "Epoch Duration for PCP domain:" +cast call --rpc-url $RPC_URL $STAKING_PROXY "epochDurationByDomain(address)(uint256)" $PCP_PROXY echo -e "\n=== Checking Token Setup ===" echo "Deployer Balance:" @@ -44,10 +44,10 @@ echo -e "\n=== Testing Staking ===" echo "Approving tokens for staking..." cast send --rpc-url $RPC_URL $MOVE_TOKEN "approve(address,uint256)" $STAKING_PROXY 1000ether --private-key $PRIVATE_KEY echo "Staking tokens..." -cast send --rpc-url $RPC_URL $STAKING_PROXY "stake(address,uint256)" $MCR_PROXY 1000ether --private-key $PRIVATE_KEY +cast send --rpc-url $RPC_URL $STAKING_PROXY "stake(address,uint256)" $PCP_PROXY 1000ether --private-key $PRIVATE_KEY -echo -e "\n=== Testing MCR Attestation ===" +echo -e "\n=== Testing PCP Attestation ===" echo "Submitting test attestation..." -cast send --rpc-url $RPC_URL $MCR_PROXY "attest(uint256,bytes32)" 1 0x1234567890123456789012345678901234567890123456789012345678901234 --private-key $PRIVATE_KEY +cast send --rpc-url $RPC_URL $PCP_PROXY "attest(uint256,bytes32)" 1 0x1234567890123456789012345678901234567890123456789012345678901234 --private-key $PRIVATE_KEY echo -e "\n=== Verification Complete ===" \ No newline at end of file diff --git a/protocol/pcp/contracts/scripts/deploy.ts b/protocol/pcp/contracts/scripts/deploy.ts index 5ec03b0d..02d92e35 100644 --- a/protocol/pcp/contracts/scripts/deploy.ts +++ b/protocol/pcp/contracts/scripts/deploy.ts @@ -4,7 +4,7 @@ import * as path from 'path'; async function main() { try { - console.log("Starting MCR Dev deployment..."); + console.log("Starting PCP Dev deployment..."); const [deployer] = await ethers.getSigners(); console.log("Deploying contracts with account:", deployer.address); @@ -12,7 +12,7 @@ async function main() { ProxyAdmin: "", MoveToken: { implementation: "", proxy: "" }, MovementStaking: { implementation: "", proxy: "" }, - MCR: { implementation: "", proxy: "" } + PCP: { implementation: "", proxy: "" } }; // Deploy ProxyAdmin @@ -32,7 +32,7 @@ async function main() { // Deploy other implementations const MovementStaking = await ethers.getContractFactory("MovementStaking"); - const MCR = await ethers.getContractFactory("MCR"); + const PCP = await ethers.getContractFactory("PCP"); const TransparentProxy = await ethers.getContractFactory("TransparentUpgradeableProxy"); const stakingImpl = await MovementStaking.deploy(); @@ -40,10 +40,10 @@ async function main() { console.log("Deployed MovementStaking implementation at:", await stakingImpl.getAddress()); deployments.MovementStaking.implementation = await stakingImpl.getAddress(); - const mcrImpl = await MCR.deploy(); - await mcrImpl.waitForDeployment(); - console.log("Deployed MCR implementation at:", await mcrImpl.getAddress()); - deployments.MCR.implementation = await mcrImpl.getAddress(); + const pcpImpl = await PCP.deploy(); + await pcpImpl.waitForDeployment(); + console.log("Deployed PCP implementation at:", await pcpImpl.getAddress()); + deployments.PCP.implementation = await pcpImpl.getAddress(); // Prepare MOVE token proxy deployment console.log("Preparing MOVE token proxy deployment..."); @@ -82,12 +82,12 @@ async function main() { console.log("Deployed staking proxy at:", await stakingProxy.getAddress()); deployments.MovementStaking.proxy = await stakingProxy.getAddress(); - // Deploy MCR proxy - console.log("Deploying MCR proxy..."); + // Deploy PCP proxy + console.log("Deploying PCP proxy..."); const custodians = [await moveTokenProxy.getAddress()]; console.log("Custodian Address:", custodians[0]); // Debugging output - const mcrData = MCR.interface.encodeFunctionData( + const pcpData = PCP.interface.encodeFunctionData( "initialize(address,uint256,uint256,uint256,address[],uint256,address)", [ await stakingProxy.getAddress(), // stakingContract @@ -100,38 +100,38 @@ async function main() { ] ); - const mcrProxy = await TransparentProxy.deploy( - await mcrImpl.getAddress(), + const pcpProxy = await TransparentProxy.deploy( + await pcpImpl.getAddress(), await proxyAdmin.getAddress(), - mcrData + pcpData ); - await mcrProxy.waitForDeployment(); - console.log("Deployed MCR proxy at:", await mcrProxy.getAddress()); - deployments.MCR.proxy = await mcrProxy.getAddress(); + await pcpProxy.waitForDeployment(); + console.log("Deployed PCP proxy at:", await pcpProxy.getAddress()); + deployments.PCP.proxy = await pcpProxy.getAddress(); // Set up roles and initial token distribution console.log("Setting up roles and minting initial tokens..."); const moveToken = MoveToken.attach(await moveTokenProxy.getAddress()); - const mcr = MCR.attach(await mcrProxy.getAddress()); + const pcp = PCP.attach(await pcpProxy.getAddress()); // Mint initial tokens and set up roles await moveToken.mint(deployer.address, ethers.parseEther("100000")); await moveToken.grantMinterRole(deployer.address); await moveToken.grantMinterRole(await stakingProxy.getAddress()); - await mcr.grantCommitmentAdmin(deployer.address); + await pcp.grantCommitmentAdmin(deployer.address); // Log deployment addresses and configuration console.log("\n=== Deployment Complete ==="); console.log("MOVE Token Proxy:", await moveTokenProxy.getAddress()); console.log("Staking Proxy:", await stakingProxy.getAddress()); - console.log("MCR Proxy:", await mcrProxy.getAddress()); + console.log("PCP Proxy:", await pcpProxy.getAddress()); // Verify deployment const deployerBalance = await moveToken.balanceOf(deployer.address); console.log("\n=== Verification ==="); console.log("Deployer MOVE Balance:", ethers.formatEther(deployerBalance)); - console.log("Epoch Duration:", await mcr.getEpochDuration()); - console.log("Postconfirmer Duration:", await mcr.getPostconfirmerDuration()); + console.log("Epoch Duration:", await pcp.getEpochDuration()); + console.log("Postconfirmer Duration:", await pcp.getPostconfirmerDuration()); // Save deployments const deploymentsPath = path.join(__dirname, '../deployments/local.json'); diff --git a/protocol/pcp/contracts/scripts/test-deployment.ts b/protocol/pcp/contracts/scripts/test-deployment.ts index b450bb52..7f7cab77 100644 --- a/protocol/pcp/contracts/scripts/test-deployment.ts +++ b/protocol/pcp/contracts/scripts/test-deployment.ts @@ -2,11 +2,11 @@ import { ethers, type Wallet } from "ethers"; import { ethers as hreEthers } from "hardhat"; import * as fs from 'fs'; import * as path from 'path'; -import { IMovementStaking, MCR } from "../typechain-types"; // Make sure types are generated +import { IMovementStaking, PCP } from "../typechain-types"; // Make sure types are generated import { IERC20 } from "@openzeppelin/contracts/token/ERC20/IERC20"; // Add at top with other imports import { AccessControl } from "@openzeppelin/contracts/access/AccessControl"; -import { IMCR } from "../typechain-types"; // Make sure types are generated -import { MCRStorage } from "../typechain-types"; // Add MCRStorage import +import { IPCP } from "../typechain-types"; // Make sure types are generated +import { PCPStorage } from "../typechain-types"; // Add PCPStorage import @@ -26,8 +26,8 @@ async function main() { // Setup contracts const moveToken = await hreEthers.getContractAt("MintableToken", deployments.MoveToken.proxy) as unknown as IERC20; const staking = await hreEthers.getContractAt("MovementStaking", deployments.MovementStaking.proxy) as unknown as IMovementStaking & AccessControl; - const mcrContract = await hreEthers.getContractAt("MCR", deployments.MCR.proxy) as unknown as MCR; - const mcr = await hreEthers.getContractAt("MCR", deployments.MCR.proxy) as unknown as IMCR; + const pcpContract = await hreEthers.getContractAt("PCP", deployments.PCP.proxy) as unknown as PCP; + const pcp = await hreEthers.getContractAt("PCP", deployments.PCP.proxy) as unknown as IPCP; const { deployer, staker } = await setupAccounts(); // await testEthTransfers(staker as unknown as ethers.Wallet); @@ -38,10 +38,10 @@ async function main() { console.log("Staker MOVE balance:", ethers.formatEther(await moveToken.balanceOf(staker.address))); // await testMoveTransfers(moveToken, staker as unknown as ethers.Wallet); - // Test Staking and MCR - await testStaking(staking, moveToken, deployments.MCR.proxy, staker as unknown as ethers.Wallet); - await testMCR(mcr, mcrContract, moveToken, staker as unknown as ethers.Wallet, deployer); - await testUnstaking(staking, moveToken, deployments.MCR.proxy, staker as unknown as ethers.Wallet, mcr); + // Test Staking and PCP + await testStaking(staking, moveToken, deployments.PCP.proxy, staker as unknown as ethers.Wallet); + await testPCP(pcp, pcpContract, moveToken, staker as unknown as ethers.Wallet, deployer); + await testUnstaking(staking, moveToken, deployments.PCP.proxy, staker as unknown as ethers.Wallet, pcp); console.log("\n=== Verification Complete ==="); @@ -108,7 +108,7 @@ async function testMoveTransfers(moveToken: IERC20, staker: ethers.Wallet) { async function testStaking( staking: IMovementStaking & AccessControl, moveToken: IERC20, - mcrAddress: string, + pcpAddress: string, staker: ethers.Wallet ) { console.log("\n=== Testing Staking Functionality ==="); @@ -129,40 +129,40 @@ async function testStaking( } // Stake and verify - const txStake = await staking.connect(staker).stake(mcrAddress, moveToken.target, stakeAmount); + const txStake = await staking.connect(staker).stake(pcpAddress, moveToken.target, stakeAmount); await txStake.wait(); - if (await staking.getAttesterStakeForAcceptingEpoch(mcrAddress, staker.address) !== stakeAmount) { + if (await staking.getAttesterStakeForAcceptingEpoch(pcpAddress, staker.address) !== stakeAmount) { throw new Error("Staking failed"); } console.log("Staking successful - amount:", ethers.formatEther(stakeAmount)); - const registeredAttesters = await staking.getRegisteredAttesters(mcrAddress); + const registeredAttesters = await staking.getRegisteredAttesters(pcpAddress); console.log("Registered Attesters:", registeredAttesters); - const stakedAttesters = await staking.getStakedAttestersForAcceptingEpoch(mcrAddress); + const stakedAttesters = await staking.getStakedAttestersForAcceptingEpoch(pcpAddress); console.log("Staked Attesters:", stakedAttesters); } -// This function tests the MCR functionality -async function testMCR( - mcr: IMCR, - mcrContract: MCR, +// This function tests the PCP functionality +async function testPCP( + pcp: IPCP, + pcpContract: PCP, moveToken: IERC20, staker: ethers.Wallet, deployer: ethers.Wallet ) { - console.log("\n=== Testing MCR Functionality ==="); + console.log("\n=== Testing PCP Functionality ==="); // Grant COMMITMENT_ADMIN role to deployer - const COMMITMENT_ADMIN = await mcrContract.COMMITMENT_ADMIN(); - const txGrantAdminRole = await mcrContract.grantRole(COMMITMENT_ADMIN, deployer.address); + const COMMITMENT_ADMIN = await pcpContract.COMMITMENT_ADMIN(); + const txGrantAdminRole = await pcpContract.grantRole(COMMITMENT_ADMIN, deployer.address); await txGrantAdminRole.wait(); console.log("Commitment admin role granted to deployer"); - const TRUSTED_ATTESTER = await mcrContract.TRUSTED_ATTESTER(); - const txGrantRole = await mcrContract.grantRole(TRUSTED_ATTESTER, staker.address); + const TRUSTED_ATTESTER = await pcpContract.TRUSTED_ATTESTER(); + const txGrantRole = await pcpContract.grantRole(TRUSTED_ATTESTER, staker.address); await txGrantRole.wait(); - const hasRole = await mcrContract.hasRole(TRUSTED_ATTESTER, staker.address); + const hasRole = await pcpContract.hasRole(TRUSTED_ATTESTER, staker.address); if (!hasRole) { throw new Error("TRUSTED_ATTESTER role not granted"); } @@ -170,58 +170,58 @@ async function testMCR( const stakerBalance = await moveToken.balanceOf(staker.address); console.log("Staker balance:", ethers.formatEther(stakerBalance)); - const epochDuration = await mcr.connect(staker).getEpochDuration(); + const epochDuration = await pcp.connect(staker).getEpochDuration(); console.log("Epoch duration (seconds):", Number(epochDuration)); - const acceptingEpoch = await mcr.connect(staker).getAcceptingEpoch(); + const acceptingEpoch = await pcp.connect(staker).getAcceptingEpoch(); console.log("Accepting epoch:", acceptingEpoch); - // mcr contract should set the accepting epoch to the present epoch - const presentEpoch = await mcr.connect(deployer).getPresentEpoch(); + // pcp contract should set the accepting epoch to the present epoch + const presentEpoch = await pcp.connect(deployer).getPresentEpoch(); console.log("Present epoch:", presentEpoch); - const txSetAcceptingEpoch = await mcr.connect(deployer).setAcceptingEpoch(presentEpoch - 2n); + const txSetAcceptingEpoch = await pcp.connect(deployer).setAcceptingEpoch(presentEpoch - 2n); await txSetAcceptingEpoch.wait(); - const acceptingEpoch2 = await mcr.connect(staker).getAcceptingEpoch(); + const acceptingEpoch2 = await pcp.connect(staker).getAcceptingEpoch(); console.log("Accepting epoch after setting to present epoch:", acceptingEpoch2); if (presentEpoch > acceptingEpoch) { console.log("Present epoch is greater than accepting epoch, so rollover should update the accepting epoch."); } // rollover the epoch - const txRollover = await mcr.connect(staker).postconfirmSuperBlocksAndRollover(); + const txRollover = await pcp.connect(staker).postconfirmSuperBlocksAndRollover(); await txRollover.wait(); - const acceptingEpoch3 = await mcr.connect(staker).getAcceptingEpoch(); + const acceptingEpoch3 = await pcp.connect(staker).getAcceptingEpoch(); console.log("New accepting epoch after rollover:", acceptingEpoch3); // submit a dummy commitment - const initialPostconfirmedSuperblockHeight = await mcr.getLastPostconfirmedSuperBlockHeight(); + const initialPostconfirmedSuperblockHeight = await pcp.getLastPostconfirmedSuperBlockHeight(); console.log("Initial postconfirmed superblock height:", initialPostconfirmedSuperblockHeight); const dummyCommitment = { height: initialPostconfirmedSuperblockHeight + 1n, commitment: ethers.randomBytes(32), blockId: ethers.randomBytes(32) } as const; - const txCommit = await mcr.connect(staker).submitSuperBlockCommitment(dummyCommitment); + const txCommit = await pcp.connect(staker).submitSuperBlockCommitment(dummyCommitment); await txCommit.wait(); - const lastPostconfirmedSuperblockHeight = await mcr.getLastPostconfirmedSuperBlockHeight(); + const lastPostconfirmedSuperblockHeight = await pcp.getLastPostconfirmedSuperBlockHeight(); console.log("Last postconfirmed superblock height:", lastPostconfirmedSuperblockHeight); - const newAcceptingEpoch = await mcr.getAcceptingEpoch(); + const newAcceptingEpoch = await pcp.getAcceptingEpoch(); console.log("Accepting epoch:", newAcceptingEpoch); // postconfirm - const txPostconfirm = await mcr.connect(staker).postconfirmSuperBlocksAndRollover(); + const txPostconfirm = await pcp.connect(staker).postconfirmSuperBlocksAndRollover(); await txPostconfirm.wait(); - const newPostconfirmedSuperblockHeight = await mcr.getLastPostconfirmedSuperBlockHeight(); + const newPostconfirmedSuperblockHeight = await pcp.getLastPostconfirmedSuperBlockHeight(); if (newPostconfirmedSuperblockHeight !== dummyCommitment.height) { throw new Error("Last postconfirmed superblock height mismatch"); } console.log("Last postconfirmed superblock height:", newPostconfirmedSuperblockHeight); - const newAcceptingEpoch2 = await mcr.getAcceptingEpoch(); + const newAcceptingEpoch2 = await pcp.getAcceptingEpoch(); console.log("Accepting epoch:", newAcceptingEpoch2); const newStakerBalance = await moveToken.balanceOf(staker.address); console.log("Staker balance:", ethers.formatEther(newStakerBalance)); // wait for the epoch duration time to ensure at least one rollover await new Promise(resolve => setTimeout(resolve, Number(epochDuration))); - const txRollOverEpoch = await mcr.connect(staker).postconfirmSuperBlocksAndRollover(); + const txRollOverEpoch = await pcp.connect(staker).postconfirmSuperBlocksAndRollover(); await txRollOverEpoch.wait(); const newStakerBalance3 = await moveToken.balanceOf(staker.address); console.log("Staker balance (latest point where it should be rewarded):", ethers.formatEther(newStakerBalance3)); @@ -232,41 +232,41 @@ async function testMCR( async function testUnstaking( staking: IMovementStaking & AccessControl, moveToken: IERC20, - mcrAddress: string, + pcpAddress: string, staker: ethers.Wallet, - mcr: IMCR + pcp: IPCP ) { console.log("\n=== Testing Unstaking Functionality ==="); // initial list of active attesters - const initialActiveAttesters = await staking.getStakedAttestersForAcceptingEpoch(mcrAddress); + const initialActiveAttesters = await staking.getStakedAttestersForAcceptingEpoch(pcpAddress); console.log("Initial active attesters:", initialActiveAttesters); // get stake amount - const stakeAmount = await staking.getAttesterStakeForAcceptingEpoch(mcrAddress, staker.address); + const stakeAmount = await staking.getAttesterStakeForAcceptingEpoch(pcpAddress, staker.address); console.log("Stake amount:", ethers.formatEther(stakeAmount)); // unstake - const txUnstake = await staking.connect(staker).unstake(mcrAddress, moveToken.target, stakeAmount); + const txUnstake = await staking.connect(staker).unstake(pcpAddress, moveToken.target, stakeAmount); await txUnstake.wait(); - if (await staking.getAttesterStakeForAcceptingEpoch(mcrAddress, staker.address) !== 0n) { + if (await staking.getAttesterStakeForAcceptingEpoch(pcpAddress, staker.address) !== 0n) { throw new Error("Unstaking failed"); } console.log("Unstaking successful"); // warp time into next epoch - const epochDuration = await mcr.getEpochDuration(); + const epochDuration = await pcp.getEpochDuration(); await new Promise(resolve => setTimeout(resolve, Number(epochDuration))); - const txRollOverEpoch2 = await mcr.connect(staker).postconfirmSuperBlocksAndRollover(); + const txRollOverEpoch2 = await pcp.connect(staker).postconfirmSuperBlocksAndRollover(); await txRollOverEpoch2.wait(); - if (await mcr.getAcceptingEpoch() !== 3n) { + if (await pcp.getAcceptingEpoch() !== 3n) { throw new Error("Epoch rollover failed"); } const stakerBalance4 = await moveToken.balanceOf(staker.address); console.log("Staker balance:", ethers.formatEther(stakerBalance4)); // check that the staker is removed from the active attesters list - const activeAttesters = await staking.getStakedAttestersForAcceptingEpoch(mcrAddress); + const activeAttesters = await staking.getStakedAttestersForAcceptingEpoch(pcpAddress); console.log("Active attesters:", activeAttesters); if (activeAttesters.includes(staker.address)) { throw new Error("Staker is still in the active attesters list"); diff --git a/protocol/pcp/contracts/src/settlement/MCR.sol b/protocol/pcp/contracts/src/settlement/PCP.sol similarity index 99% rename from protocol/pcp/contracts/src/settlement/MCR.sol rename to protocol/pcp/contracts/src/settlement/PCP.sol index b6824595..8c679325 100644 --- a/protocol/pcp/contracts/src/settlement/MCR.sol +++ b/protocol/pcp/contracts/src/settlement/PCP.sol @@ -4,12 +4,12 @@ pragma solidity ^0.8.13; import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import {Initializable} from "@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol"; import {MovementStaking, IMovementStaking} from "../staking/MovementStaking.sol"; -import {MCRStorage} from "./MCRStorage.sol"; +import {PCPStorage} from "./PCPStorage.sol"; import {BaseSettlement} from "./settlement/BaseSettlement.sol"; -import {IMCR} from "./interfaces/IMCR.sol"; +import {IPCP} from "./interfaces/IPCP.sol"; import "@openzeppelin/contracts/utils/ReentrancyGuard.sol"; -contract MCR is Initializable, BaseSettlement, MCRStorage, IMCR { +contract PCP is Initializable, BaseSettlement, PCPStorage, IPCP { // A role for setting commitments bytes32 public constant COMMITMENT_ADMIN = keccak256("COMMITMENT_ADMIN"); @@ -212,7 +212,7 @@ contract MCR is Initializable, BaseSettlement, MCRStorage, IMCR { /// @notice Sets the accepting epoch to a new value (must be higher than current) /// @param newEpoch The new accepting epoch value function setAcceptingEpoch(uint256 newEpoch) external onlyRole(COMMITMENT_ADMIN) { - // the domain which is the mcr contract must make the call to set the accepting epoch + // the domain which is the pcp contract must make the call to set the accepting epoch stakingContract.setAcceptingEpoch(address(this), newEpoch); } @@ -441,7 +441,7 @@ contract MCR is Initializable, BaseSettlement, MCRStorage, IMCR { // TODO: make this configurable and set it on instance creation uint256 reward = attesterRewardPoints[acceptingEpoch][attesters[i]] * rewardPerAttestationPoint * getAttesterStakeForAcceptingEpoch(attesters[i]); // the staking contract is the custodian - // rewards are currently paid out from the mcr domain + // rewards are currently paid out from the pcp domain stakingContract.rewardFromDomain(attesters[i], reward, moveTokenAddress); // TODO : check if we really have to keep attesterRewardPoints per epoch, or whether we could simply delete the points here for a given attester. } diff --git a/protocol/pcp/contracts/src/settlement/MCRStorage.sol b/protocol/pcp/contracts/src/settlement/PCPStorage.sol similarity index 99% rename from protocol/pcp/contracts/src/settlement/MCRStorage.sol rename to protocol/pcp/contracts/src/settlement/PCPStorage.sol index 4a3782c8..2da15de1 100644 --- a/protocol/pcp/contracts/src/settlement/MCRStorage.sol +++ b/protocol/pcp/contracts/src/settlement/PCPStorage.sol @@ -3,7 +3,7 @@ pragma solidity ^0.8.13; import {EnumerableSet} from "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; import {MovementStaking, IMovementStaking} from "../staking/MovementStaking.sol"; -contract MCRStorage { +contract PCPStorage { IMovementStaking public stakingContract; diff --git a/protocol/pcp/contracts/src/settlement/interfaces/IMCR.sol b/protocol/pcp/contracts/src/settlement/interfaces/IPCP.sol similarity index 91% rename from protocol/pcp/contracts/src/settlement/interfaces/IMCR.sol rename to protocol/pcp/contracts/src/settlement/interfaces/IPCP.sol index b5123876..be5c703b 100644 --- a/protocol/pcp/contracts/src/settlement/interfaces/IMCR.sol +++ b/protocol/pcp/contracts/src/settlement/interfaces/IPCP.sol @@ -1,9 +1,9 @@ // SPDX-License-Identifier: UNLICENSED pragma solidity ^0.8.13; -import {MCRStorage} from "../MCRStorage.sol"; +import {PCPStorage} from "../PCPStorage.sol"; -interface IMCR { +interface IPCP { event SuperBlockPostconfirmed( bytes32 indexed blockHash, @@ -28,7 +28,7 @@ interface IMCR { function getPostconfirmer() external view returns (address); /// @notice submit a superblock commitment - function submitSuperBlockCommitment(MCRStorage.SuperBlockCommitment memory commitment) external; + function submitSuperBlockCommitment(PCPStorage.SuperBlockCommitment memory commitment) external; /// @notice get the last postconfirmed superblock height function getLastPostconfirmedSuperBlockHeight() external view returns (uint256); @@ -40,7 +40,7 @@ interface IMCR { function getPresentEpoch() external view returns (uint256); /// @notice get the postconfirmed commitment for a given height - function getPostconfirmedCommitment(uint256 height) external view returns (MCRStorage.SuperBlockCommitment memory); + function getPostconfirmedCommitment(uint256 height) external view returns (PCPStorage.SuperBlockCommitment memory); /// @notice postconfirm superblocks and rollover function postconfirmSuperBlocksAndRollover() external; diff --git a/protocol/pcp/contracts/test/settlement/MCR.t.sol b/protocol/pcp/contracts/test/settlement/PCP.t.sol similarity index 69% rename from protocol/pcp/contracts/test/settlement/MCR.t.sol rename to protocol/pcp/contracts/test/settlement/PCP.t.sol index a94ac148..0e3ddd8a 100644 --- a/protocol/pcp/contracts/test/settlement/MCR.t.sol +++ b/protocol/pcp/contracts/test/settlement/PCP.t.sol @@ -4,21 +4,21 @@ pragma solidity ^0.8.19; import "forge-std/Test.sol"; import "../../src/staking/MovementStaking.sol"; import "../../src/token/MOVETokenDev.sol"; -import "../../src/settlement/MCR.sol"; -import "../../src/settlement/MCRStorage.sol"; -import "../../src/settlement/interfaces/IMCR.sol"; +import "../../src/settlement/PCP.sol"; +import "../../src/settlement/PCPStorage.sol"; +import "../../src/settlement/interfaces/IPCP.sol"; import {TransparentUpgradeableProxy} from "@openzeppelin/contracts/proxy/transparent/TransparentUpgradeableProxy.sol"; import {ProxyAdmin} from "@openzeppelin/contracts/proxy/transparent/ProxyAdmin.sol"; import "@openzeppelin/contracts/utils/Strings.sol"; -contract MCRTest is Test { +contract PCPTest is Test { MOVETokenDev public moveToken; MovementStaking public staking; - MCR public mcr; + PCP public pcp; ProxyAdmin public admin; string public moveSignature = "initialize(address)"; string public stakingSignature = "initialize(address)"; - string public mcrSignature = "initialize(address,uint256,uint256,uint256,address[],uint256,address)"; + string public pcpSignature = "initialize(address,uint256,uint256,uint256,address[],uint256,address)"; uint256 epochDuration = 7200 seconds; uint256 postconfirmerDuration = epochDuration/4; bytes32 honestCommitmentTemplate = keccak256(abi.encodePacked(uint256(1), uint256(2), uint256(3))); @@ -27,8 +27,8 @@ contract MCRTest is Test { bytes32 dishonestBlockIdTemplate = keccak256(abi.encodePacked(uint256(3), uint256(2), uint256(1))); // make an honest commitment - function makeHonestCommitment(uint256 height) internal view returns (MCRStorage.SuperBlockCommitment memory) { - return MCRStorage.SuperBlockCommitment({ + function makeHonestCommitment(uint256 height) internal view returns (PCPStorage.SuperBlockCommitment memory) { + return PCPStorage.SuperBlockCommitment({ height: height, commitment: honestCommitmentTemplate, blockId: honestBlockIdTemplate @@ -36,8 +36,8 @@ contract MCRTest is Test { } // make a dishonest commitment - function makeDishonestCommitment(uint256 height) internal view returns (MCRStorage.SuperBlockCommitment memory) { - return MCRStorage.SuperBlockCommitment({ + function makeDishonestCommitment(uint256 height) internal view returns (PCPStorage.SuperBlockCommitment memory) { + return PCPStorage.SuperBlockCommitment({ height: height, commitment: dishonestCommitmentTemplate, blockId: dishonestBlockIdTemplate @@ -52,9 +52,9 @@ contract MCRTest is Test { function setUp() public { MOVETokenDev moveTokenImplementation = new MOVETokenDev(); MovementStaking stakingImplementation = new MovementStaking(); - MCR mcrImplementation = new MCR(); + PCP pcpImplementation = new PCP(); - // Contract MCRTest is the admin + // Contract PCPTest is the admin admin = new ProxyAdmin(address(this)); // Deploy proxies @@ -80,8 +80,8 @@ contract MCRTest is Test { // TODO while this works it is hard to access that this is the moveToken. We should not rely on the custodian array custodians[0] = address(moveProxy); - bytes memory mcrInitData = abi.encodeWithSignature( - mcrSignature, + bytes memory pcpInitData = abi.encodeWithSignature( + pcpSignature, stakingProxy, // _stakingContract, address of staking contract 0, // _lastPostconfirmedSuperBlockHeight, start from genesis 5, // _leadingSuperBlockTolerance, max blocks ahead of last confirmed @@ -91,29 +91,29 @@ contract MCRTest is Test { // TODO can we replace the following line with the moveToken address? address(moveProxy) // _moveTokenAddress, the primary custodian for rewards in the staking contract ); - TransparentUpgradeableProxy mcrProxy = new TransparentUpgradeableProxy( - address(mcrImplementation), + TransparentUpgradeableProxy pcpProxy = new TransparentUpgradeableProxy( + address(pcpImplementation), address(admin), - mcrInitData + pcpInitData ); - mcr = MCR(address(mcrProxy)); - mcr.setOpenAttestationEnabled(true); + pcp = PCP(address(pcpProxy)); + pcp.setOpenAttestationEnabled(true); - assertEq(staking.getEpochDuration(address(mcr)), epochDuration, "Epoch duration not set correctly"); + assertEq(staking.getEpochDuration(address(pcp)), epochDuration, "Epoch duration not set correctly"); // set the min commitment age for postconfirmation to 0 to make the tests easier - mcr.setMinCommitmentAgeForPostconfirmation(0); - assertEq(mcr.getMinCommitmentAgeForPostconfirmation(), 0, "The default min commitment age for tests is set to 0"); + pcp.setMinCommitmentAgeForPostconfirmation(0); + assertEq(pcp.getMinCommitmentAgeForPostconfirmation(), 0, "The default min commitment age for tests is set to 0"); // set the max postconfirmer non-reactivity time to 0 to make the tests easier - mcr.setPostconfirmerPrivilegeDuration(0); - assertEq(mcr.getPostconfirmerPrivilegeDuration(), 0, "The default max postconfirmer non-reactivity time for tests is set to 0"); + pcp.setPostconfirmerPrivilegeDuration(0); + assertEq(pcp.getPostconfirmerPrivilegeDuration(), 0, "The default max postconfirmer non-reactivity time for tests is set to 0"); } // Helper function to setup genesis with 1 attester and their stake function setupGenesisWithOneAttester(uint256 stakeAmount) internal returns (address attester) { - moveToken.mint(address(mcr), stakeAmount*100); // MCR needs tokens to pay rewards - // MCR needs to approve staking contract to spend its tokens - vm.prank(address(mcr)); + moveToken.mint(address(pcp), stakeAmount*100); // PCP needs tokens to pay rewards + // PCP needs to approve staking contract to spend its tokens + vm.prank(address(pcp)); moveToken.approve(address(staking), type(uint256).max); attester = payable(vm.addr(1)); @@ -122,9 +122,9 @@ contract MCRTest is Test { vm.prank(attester); moveToken.approve(address(staking), stakeAmount); vm.prank(attester); - staking.stake(address(mcr), moveToken, stakeAmount); - assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), attester), stakeAmount); - assertEq(mcr.getTotalStakeForAcceptingEpoch(), stakeAmount); + staking.stake(address(pcp), moveToken, stakeAmount); + assertEq(pcp.getStakeForAcceptingEpoch(address(moveToken), attester), stakeAmount); + assertEq(pcp.getTotalStakeForAcceptingEpoch(), stakeAmount); // TODO check why the registering did not work in the setup function // setup the epoch duration @@ -133,18 +133,18 @@ contract MCRTest is Test { staking.registerDomain(epochDuration, custodians); // TODO this seems odd that we need to do this here.. check for correctnes of this approach - mcr.grantRole(mcr.DEFAULT_ADMIN_ROLE(), address(mcr)); + pcp.grantRole(pcp.DEFAULT_ADMIN_ROLE(), address(pcp)); // attempt genesis when L1 chain has already advanced into the future // vm.warp(3*epochDuration); // End genesis ceremony - vm.prank(address(mcr)); - mcr.acceptGenesisCeremony(); + vm.prank(address(pcp)); + pcp.acceptGenesisCeremony(); // Verify stakes - assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), attester), stakeAmount, "Alice's stake not correct"); - assertEq(mcr.getTotalStakeForAcceptingEpoch(), stakeAmount, "Total stake not correct"); + assertEq(pcp.getStakeForAcceptingEpoch(address(moveToken), attester), stakeAmount, "Alice's stake not correct"); + assertEq(pcp.getTotalStakeForAcceptingEpoch(), stakeAmount, "Total stake not correct"); } @@ -156,9 +156,9 @@ contract MCRTest is Test { ) internal returns (address alice, address bob, address carol) { uint256 totalStakeAmount = aliceStakeAmount + bobStakeAmount + carolStakeAmount; - moveToken.mint(address(mcr), totalStakeAmount*100); // MCR needs tokens to pay rewards - // MCR needs to approve staking contract to spend its tokens - vm.prank(address(mcr)); + moveToken.mint(address(pcp), totalStakeAmount*100); // PCP needs tokens to pay rewards + // PCP needs to approve staking contract to spend its tokens + vm.prank(address(pcp)); moveToken.approve(address(staking), type(uint256).max); // Create attesters @@ -180,17 +180,17 @@ contract MCRTest is Test { // Stake vm.prank(alice); - staking.stake(address(mcr), moveToken, aliceStakeAmount); + staking.stake(address(pcp), moveToken, aliceStakeAmount); vm.prank(bob); - staking.stake(address(mcr), moveToken, bobStakeAmount); + staking.stake(address(pcp), moveToken, bobStakeAmount); vm.prank(carol); - staking.stake(address(mcr), moveToken, carolStakeAmount); + staking.stake(address(pcp), moveToken, carolStakeAmount); // Verify stakes - assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), alice), aliceStakeAmount, "Alice's stake not correct"); - assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), bob), bobStakeAmount, "Bob's stake not correct"); - assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), carol), carolStakeAmount, "Carol's stake not correct"); - assertEq(mcr.getTotalStakeForAcceptingEpoch(), totalStakeAmount, "Total stake not correct"); + assertEq(pcp.getStakeForAcceptingEpoch(address(moveToken), alice), aliceStakeAmount, "Alice's stake not correct"); + assertEq(pcp.getStakeForAcceptingEpoch(address(moveToken), bob), bobStakeAmount, "Bob's stake not correct"); + assertEq(pcp.getStakeForAcceptingEpoch(address(moveToken), carol), carolStakeAmount, "Carol's stake not correct"); + assertEq(pcp.getTotalStakeForAcceptingEpoch(), totalStakeAmount, "Total stake not correct"); // TODO check why the registering did not work in the setup function // setup the epoch duration @@ -199,20 +199,20 @@ contract MCRTest is Test { staking.registerDomain(epochDuration, custodians); // TODO this seems odd that we need to do this here.. check for correctnes of this approach - mcr.grantRole(mcr.DEFAULT_ADMIN_ROLE(), address(mcr)); + pcp.grantRole(pcp.DEFAULT_ADMIN_ROLE(), address(pcp)); // attempt genesis when L1 chain has already advanced into the future // vm.warp(3*epochDuration); // End genesis ceremony - vm.prank(address(mcr)); - mcr.acceptGenesisCeremony(); + vm.prank(address(pcp)); + pcp.acceptGenesisCeremony(); // Verify stakes - assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), alice), aliceStakeAmount, "Alice's stake not correct"); - assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), bob), bobStakeAmount, "Bob's stake not correct"); - assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), carol), carolStakeAmount, "Carol's stake not correct"); - assertEq(mcr.getTotalStakeForAcceptingEpoch(), totalStakeAmount, "Total stake not correct"); + assertEq(pcp.getStakeForAcceptingEpoch(address(moveToken), alice), aliceStakeAmount, "Alice's stake not correct"); + assertEq(pcp.getStakeForAcceptingEpoch(address(moveToken), bob), bobStakeAmount, "Bob's stake not correct"); + assertEq(pcp.getStakeForAcceptingEpoch(address(moveToken), carol), carolStakeAmount, "Carol's stake not correct"); + assertEq(pcp.getTotalStakeForAcceptingEpoch(), totalStakeAmount, "Total stake not correct"); } /// @notice Helper function to setup a new signer with staking @@ -226,8 +226,8 @@ contract MCRTest is Test { vm.prank(newAttester); moveToken.approve(address(staking), stakeAmount); vm.prank(newAttester); - staking.stake(address(mcr), moveToken, stakeAmount); - assert(mcr.getStakeForAcceptingEpoch(address(moveToken), newAttester) == stakeAmount); + staking.stake(address(pcp), moveToken, stakeAmount); + assert(pcp.getStakeForAcceptingEpoch(address(moveToken), newAttester) == stakeAmount); return newAttester; } @@ -250,13 +250,13 @@ contract MCRTest is Test { // calculate the honest attesters stake uint256 honestStake = 0; for (uint256 k = 0; k < _honestAttesters.length; k++) { - honestStake += mcr.getStakeForAcceptingEpoch(address(moveToken), _honestAttesters[k]); + honestStake += pcp.getStakeForAcceptingEpoch(address(moveToken), _honestAttesters[k]); } // calculate the dishonest attesters stake uint256 dishonestStake = 0; for (uint256 k = 0; k < _dishonestAttesters.length; k++) { - dishonestStake += mcr.getStakeForAcceptingEpoch(address(moveToken), _dishonestAttesters[k]); + dishonestStake += pcp.getStakeForAcceptingEpoch(address(moveToken), _dishonestAttesters[k]); } uint256 supermajorityStake = 2 * (honestStake + dishonestStake) / 3 + 1; @@ -266,7 +266,7 @@ contract MCRTest is Test { // remove an attester from the attesters array function removeAttester(address attester, address[] storage attesters, uint256 attesterStake) internal { vm.prank(attester); - staking.unstake(address(mcr), address(moveToken), attesterStake); + staking.unstake(address(pcp), address(moveToken), attesterStake); // Find and remove attester from array using swap and pop for (uint i = 0; i < attesters.length; i++) { @@ -287,29 +287,29 @@ contract MCRTest is Test { custodians[0] = address(moveToken); // Attempt to initialize again should fail vm.expectRevert(bytes4(0xf92ee8a9)); - mcr.initialize(staking, 0, 5, 10 seconds, custodians,120 seconds, address(moveToken)); + pcp.initialize(staking, 0, 5, 10 seconds, custodians,120 seconds, address(moveToken)); } function testSetAcceptingEpochOnlyDomain() public { address alice = setupGenesisWithOneAttester(1000); - vm.warp(mcr.getEpochDuration()*2); + vm.warp(pcp.getEpochDuration()*2); // Try to set accepting epoch from a non-domain address vm.prank(alice); - assertEq(mcr.hasRole(mcr.COMMITMENT_ADMIN(), alice), false); + assertEq(pcp.hasRole(pcp.COMMITMENT_ADMIN(), alice), false); vm.prank(alice); vm.expectRevert("UNAUTHORIZED"); - staking.setAcceptingEpoch(address(mcr), 1); + staking.setAcceptingEpoch(address(pcp), 1); console.log("Unauthorized attempt failed as expected"); - // Ensure the MCR contract has the COMMITMENT_ADMIN role - uint256 presentEpoch = mcr.getPresentEpoch(); - assertEq(mcr.hasRole(mcr.COMMITMENT_ADMIN(), address(this)), true); - mcr.grantRole(mcr.COMMITMENT_ADMIN(), address(this)); - // check that mcr has the COMMITMENT_ADMIN role - assertEq(mcr.hasRole(mcr.COMMITMENT_ADMIN(), address(this)), true); - mcr.setAcceptingEpoch(presentEpoch - 1); - assertEq(staking.getAcceptingEpoch(address(mcr)), presentEpoch - 1); + // Ensure the PCP contract has the COMMITMENT_ADMIN role + uint256 presentEpoch = pcp.getPresentEpoch(); + assertEq(pcp.hasRole(pcp.COMMITMENT_ADMIN(), address(this)), true); + pcp.grantRole(pcp.COMMITMENT_ADMIN(), address(this)); + // check that pcp has the COMMITMENT_ADMIN role + assertEq(pcp.hasRole(pcp.COMMITMENT_ADMIN(), address(this)), true); + pcp.setAcceptingEpoch(presentEpoch - 1); + assertEq(staking.getAcceptingEpoch(address(pcp)), presentEpoch - 1); } /// @notice Test that an attester cannot submit multiple commitments for the same height @@ -319,12 +319,12 @@ contract MCRTest is Test { // carol will be dishonest vm.prank(carol); - mcr.submitSuperBlockCommitment(makeDishonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeDishonestCommitment(1)); // carol will try to sign again vm.prank(carol); - vm.expectRevert(IMCR.AttesterAlreadyCommitted.selector); - mcr.submitSuperBlockCommitment(makeDishonestCommitment(1)); + vm.expectRevert(IPCP.AttesterAlreadyCommitted.selector); + pcp.submitSuperBlockCommitment(makeDishonestCommitment(1)); } /// @notice Test that honest supermajority succeeds despite dishonest attesters @@ -334,20 +334,20 @@ contract MCRTest is Test { // Dishonest carol submits first vm.prank(carol); - mcr.submitSuperBlockCommitment(makeDishonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeDishonestCommitment(1)); // Honest majority submits vm.prank(alice); - mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeHonestCommitment(1)); vm.prank(bob); - mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeHonestCommitment(1)); // Trigger postconfirmation with majority vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); + pcp.postconfirmSuperBlocksAndRollover(); // Verify honest commitment was postconfirmed - MCRStorage.SuperBlockCommitment memory retrievedCommitment = mcr.getPostconfirmedCommitment(1); + PCPStorage.SuperBlockCommitment memory retrievedCommitment = pcp.getPostconfirmedCommitment(1); assertEq(retrievedCommitment.commitment, honestCommitmentTemplate); assertEq(retrievedCommitment.blockId, honestBlockIdTemplate); assertEq(retrievedCommitment.height, 1); @@ -361,18 +361,18 @@ contract MCRTest is Test { // Honnest commitments vm.prank(alice); - mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeHonestCommitment(1)); vm.prank(bob); - mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeHonestCommitment(1)); // Dishonest commitment vm.prank(carol); - mcr.submitSuperBlockCommitment(makeDishonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeDishonestCommitment(1)); vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 0, "Height should not advance - Alice"); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getLastPostconfirmedSuperBlockHeight(), 0, "Height should not advance - Alice"); // Verify no commitment was postconfirmed - MCRStorage.SuperBlockCommitment memory retrievedCommitment = mcr.getPostconfirmedCommitment(1); + PCPStorage.SuperBlockCommitment memory retrievedCommitment = pcp.getPostconfirmedCommitment(1); assertEq(retrievedCommitment.height, 0, "No commitment should be postconfirmed"); assertEq(retrievedCommitment.commitment, bytes32(0), "No commitment should be postconfirmed"); } @@ -386,27 +386,27 @@ contract MCRTest is Test { // dishonest carol vm.prank(carol); - mcr.submitSuperBlockCommitment(makeDishonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeDishonestCommitment(1)); // honest majority vm.prank(alice); - mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeHonestCommitment(1)); vm.prank(bob); - mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeHonestCommitment(1)); // now we move to next epoch vm.warp(L1BlockTimeStart + epochDuration); // postconfirm and rollover vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); + pcp.postconfirmSuperBlocksAndRollover(); // check that roll over happened - assertEq(mcr.getAcceptingEpoch(), mcr.getPresentEpoch()); - assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), alice), 2); - assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), bob), 1); - assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), carol), 1); - MCRStorage.SuperBlockCommitment memory retrievedCommitment = mcr.getPostconfirmedCommitment(1); + assertEq(pcp.getAcceptingEpoch(), pcp.getPresentEpoch()); + assertEq(pcp.getStakeForAcceptingEpoch(address(moveToken), alice), 2); + assertEq(pcp.getStakeForAcceptingEpoch(address(moveToken), bob), 1); + assertEq(pcp.getStakeForAcceptingEpoch(address(moveToken), carol), 1); + PCPStorage.SuperBlockCommitment memory retrievedCommitment = pcp.getPostconfirmedCommitment(1); assert(retrievedCommitment.commitment == honestCommitmentTemplate); assert(retrievedCommitment.blockId == honestBlockIdTemplate); assert(retrievedCommitment.height == 1); @@ -417,7 +417,7 @@ contract MCRTest is Test { address[] honestAttesters = new address[](0); address[] dishonestAttesters = new address[](0); - /// @notice Tests the MCR system's resilience with changing Attester sets by: + /// @notice Tests the PCP system's resilience with changing Attester sets by: /// 1. Starting with honest majority (2/3 honest, 1/3 dishonest) /// 2. Adding new attester periodically /// 3. Removing attester periodically @@ -435,7 +435,7 @@ contract MCRTest is Test { // alice needs to have attesterStake + 1 so we reach supermajority (address alice, address bob, address carol) = setupGenesisWithThreeAttesters(attesterStake+1, attesterStake, attesterStake); - moveToken.mint(address(mcr), 100); // MCR needs tokens to pay rewards + moveToken.mint(address(pcp), 100); // PCP needs tokens to pay rewards // honest attesters honestAttesters.push(alice); @@ -452,34 +452,34 @@ contract MCRTest is Test { vm.warp(L1BlockTime); // alice triggers rollover vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); + pcp.postconfirmSuperBlocksAndRollover(); // get the assigned epoch for the superblock height // commit roughly half of dishones attesters - MCRStorage.SuperBlockCommitment memory dishonestCommitment = makeDishonestCommitment(superBlockHeightNow); + PCPStorage.SuperBlockCommitment memory dishonestCommitment = makeDishonestCommitment(superBlockHeightNow); for (uint256 k = 0; k < dishonestAttesters.length / 2; k++) { vm.prank(dishonestAttesters[k]); - mcr.submitSuperBlockCommitment(dishonestCommitment); + pcp.submitSuperBlockCommitment(dishonestCommitment); } // commit honestly - MCRStorage.SuperBlockCommitment memory honestCommitment = makeHonestCommitment(superBlockHeightNow); + PCPStorage.SuperBlockCommitment memory honestCommitment = makeHonestCommitment(superBlockHeightNow); for (uint256 k = 0; k < honestAttesters.length; k++) { vm.prank(honestAttesters[k]); - mcr.submitSuperBlockCommitment(honestCommitment); + pcp.submitSuperBlockCommitment(honestCommitment); } // TODO: The following does not serve any purpose, as enough attesters are already committed // commit dishonestly the rest // for (uint256 k = dishonestAttesters.length / 2; k < dishonestAttesters.length; k++) { // vm.prank(dishonestAttesters[k]); - // mcr.submitSuperBlockCommitment(dishonestCommitment); + // pcp.submitSuperBlockCommitment(dishonestCommitment); // } vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); + pcp.postconfirmSuperBlocksAndRollover(); - MCRStorage.SuperBlockCommitment memory retrievedCommitment = mcr.getPostconfirmedCommitment(superBlockHeightNow); + PCPStorage.SuperBlockCommitment memory retrievedCommitment = pcp.getPostconfirmedCommitment(superBlockHeightNow); assert(retrievedCommitment.commitment == honestCommitment.commitment); assert(retrievedCommitment.blockId == honestCommitment.blockId); assert(retrievedCommitment.height == superBlockHeightNow); @@ -500,16 +500,16 @@ contract MCRTest is Test { vm.prank(newAttester); moveToken.approve(address(staking), attesterStake); vm.prank(newAttester); - staking.stake(address(mcr), moveToken, attesterStake); + staking.stake(address(pcp), moveToken, attesterStake); L1BlockTime += epochDuration; vm.warp(L1BlockTime); // Force rollover by having alice (who has majority stake) call postconfirmSuperBlocksAndRollover vm.prank(alice); // alice has attesterStake+1 from setup - mcr.postconfirmSuperBlocksAndRollover(); + pcp.postconfirmSuperBlocksAndRollover(); // confirm that the new attester has stake - assert(mcr.getStakeForAcceptingEpoch(address(moveToken), newAttester) == attesterStake); + assert(pcp.getStakeForAcceptingEpoch(address(moveToken), newAttester) == attesterStake); // push every third signer to dishonest attesters. If pushed earlier we fail a super majority test. if (i % 3 == 2) { @@ -539,7 +539,7 @@ contract MCRTest is Test { // assert the time here assertEq(L1BlockTime, L1BlockTimeStart + (i+1) * (commitmentHeights + 1) * epochDuration); } - assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), changingAttesterSetEvents * commitmentHeights); + assertEq(pcp.getLastPostconfirmedSuperBlockHeight(), changingAttesterSetEvents * commitmentHeights); } function testForcedAttestation() public { @@ -549,11 +549,11 @@ contract MCRTest is Test { vm.warp(blockTime); // default signer should be able to force commitment - MCRStorage.SuperBlockCommitment memory forcedCommitment = makeDishonestCommitment(1); - mcr.forceLatestCommitment(forcedCommitment); + PCPStorage.SuperBlockCommitment memory forcedCommitment = makeDishonestCommitment(1); + pcp.forceLatestCommitment(forcedCommitment); // get the latest commitment - MCRStorage.SuperBlockCommitment memory retrievedCommitment = mcr.getPostconfirmedCommitment(1); + PCPStorage.SuperBlockCommitment memory retrievedCommitment = pcp.getPostconfirmedCommitment(1); assertEq(retrievedCommitment.blockId, forcedCommitment.blockId); assertEq(retrievedCommitment.commitment, forcedCommitment.commitment); assertEq(retrievedCommitment.height, forcedCommitment.height); @@ -562,14 +562,14 @@ contract MCRTest is Test { address payable alice = payable(vm.addr(1)); // try to force a different commitment with unauthorized user - MCRStorage.SuperBlockCommitment memory badForcedCommitment = makeHonestCommitment(1); + PCPStorage.SuperBlockCommitment memory badForcedCommitment = makeHonestCommitment(1); // Alice should not have COMMITMENT_ADMIN role - assertEq(mcr.hasRole(mcr.COMMITMENT_ADMIN(), alice), false); + assertEq(pcp.hasRole(pcp.COMMITMENT_ADMIN(), alice), false); vm.prank(alice); vm.expectRevert("FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY"); - mcr.forceLatestCommitment(badForcedCommitment); + pcp.forceLatestCommitment(badForcedCommitment); } /// @notice Test that a confirmation and postconfirmation by single attester works @@ -583,18 +583,18 @@ contract MCRTest is Test { vm.prank(alice); moveToken.approve(address(staking), 100); vm.prank(alice); - staking.stake(address(mcr), moveToken, 100); + staking.stake(address(pcp), moveToken, 100); // End genesis ceremony - // vm.prank(address(mcr)); // TODO is this needed? - mcr.acceptGenesisCeremony(); + // vm.prank(address(pcp)); // TODO is this needed? + pcp.acceptGenesisCeremony(); // confirm current superblock height - uint256 currentHeight = mcr.getLastPostconfirmedSuperBlockHeight(); + uint256 currentHeight = pcp.getLastPostconfirmedSuperBlockHeight(); // Create and submit commitment uint256 targetHeight = 1; - MCRStorage.SuperBlockCommitment memory commitment = MCRStorage.SuperBlockCommitment({ + PCPStorage.SuperBlockCommitment memory commitment = PCPStorage.SuperBlockCommitment({ height: targetHeight, commitment: keccak256(abi.encodePacked(uint256(1))), blockId: keccak256(abi.encodePacked(uint256(1))) @@ -602,22 +602,22 @@ contract MCRTest is Test { // Submit commitment vm.prank(alice); - mcr.submitSuperBlockCommitment(commitment); + pcp.submitSuperBlockCommitment(commitment); // Verify commitment was stored - MCRStorage.SuperBlockCommitment memory stored = mcr.getCommitmentByAttester(targetHeight, alice); + PCPStorage.SuperBlockCommitment memory stored = pcp.getCommitmentByAttester(targetHeight, alice); assert(stored.commitment == commitment.commitment); // Attempt postconfirmation vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); + pcp.postconfirmSuperBlocksAndRollover(); // Verify postconfirmation worked - MCRStorage.SuperBlockCommitment memory postconfirmed = mcr.getPostconfirmedCommitment(targetHeight); + PCPStorage.SuperBlockCommitment memory postconfirmed = pcp.getPostconfirmedCommitment(targetHeight); assert(postconfirmed.commitment == commitment.commitment); // confirm current superblock height - uint256 currentHeightNew = mcr.getLastPostconfirmedSuperBlockHeight(); + uint256 currentHeightNew = pcp.getLastPostconfirmedSuperBlockHeight(); assertEq(currentHeightNew, currentHeight + 1); } @@ -631,32 +631,32 @@ contract MCRTest is Test { // Create commitment for height 1 uint256 targetHeight = 1; - MCRStorage.SuperBlockCommitment memory commitment = makeHonestCommitment(targetHeight); + PCPStorage.SuperBlockCommitment memory commitment = makeHonestCommitment(targetHeight); // Submit commitments vm.prank(alice); - mcr.submitSuperBlockCommitment(commitment); + pcp.submitSuperBlockCommitment(commitment); vm.prank(bob); - mcr.submitSuperBlockCommitment(commitment); + pcp.submitSuperBlockCommitment(commitment); // Verify commitments were stored - MCRStorage.SuperBlockCommitment memory aliceCommitment = mcr.getCommitmentByAttester(targetHeight, alice); - MCRStorage.SuperBlockCommitment memory bobCommitment = mcr.getCommitmentByAttester(targetHeight, bob); + PCPStorage.SuperBlockCommitment memory aliceCommitment = pcp.getCommitmentByAttester(targetHeight, alice); + PCPStorage.SuperBlockCommitment memory bobCommitment = pcp.getCommitmentByAttester(targetHeight, bob); assert(aliceCommitment.commitment == commitment.commitment); assert(bobCommitment.commitment == commitment.commitment); // Verify postconfirmer state - assert(mcr.isWithinPostconfirmerPrivilegeDuration(commitment)); - assertEq(mcr.getSuperBlockHeightAssignedEpoch(targetHeight), mcr.getAcceptingEpoch()); + assert(pcp.isWithinPostconfirmerPrivilegeDuration(commitment)); + assertEq(pcp.getSuperBlockHeightAssignedEpoch(targetHeight), pcp.getAcceptingEpoch()); // Attempt postconfirmation vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); + pcp.postconfirmSuperBlocksAndRollover(); // Verify postconfirmation - MCRStorage.SuperBlockCommitment memory postconfirmed = mcr.getPostconfirmedCommitment(targetHeight); + PCPStorage.SuperBlockCommitment memory postconfirmed = pcp.getPostconfirmedCommitment(targetHeight); assert(postconfirmed.commitment == commitment.commitment); - assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), targetHeight); + assertEq(pcp.getLastPostconfirmedSuperBlockHeight(), targetHeight); } /// @notice Test that a confirmation and postconfirmation by single attester fails if they have majority stake @@ -667,30 +667,30 @@ contract MCRTest is Test { // Create commitment for height 1 uint256 targetHeight = 1; - MCRStorage.SuperBlockCommitment memory commitment = makeHonestCommitment(targetHeight); + PCPStorage.SuperBlockCommitment memory commitment = makeHonestCommitment(targetHeight); // Submit commitments vm.prank(alice); - mcr.submitSuperBlockCommitment(commitment); + pcp.submitSuperBlockCommitment(commitment); vm.prank(bob); - mcr.submitSuperBlockCommitment(commitment); + pcp.submitSuperBlockCommitment(commitment); // Verify commitments were stored - MCRStorage.SuperBlockCommitment memory aliceCommitment = mcr.getCommitmentByAttester(targetHeight, alice); - MCRStorage.SuperBlockCommitment memory bobCommitment = mcr.getCommitmentByAttester(targetHeight, bob); + PCPStorage.SuperBlockCommitment memory aliceCommitment = pcp.getCommitmentByAttester(targetHeight, alice); + PCPStorage.SuperBlockCommitment memory bobCommitment = pcp.getCommitmentByAttester(targetHeight, bob); assert(aliceCommitment.commitment == commitment.commitment); assert(bobCommitment.commitment == commitment.commitment); // Verify postconfirmer state - assert(mcr.isWithinPostconfirmerPrivilegeDuration(commitment)); - assertEq(mcr.getSuperBlockHeightAssignedEpoch(targetHeight), mcr.getAcceptingEpoch()); + assert(pcp.isWithinPostconfirmerPrivilegeDuration(commitment)); + assertEq(pcp.getSuperBlockHeightAssignedEpoch(targetHeight), pcp.getAcceptingEpoch()); // Attempt postconfirmation - this should fail because there's no supermajority vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); + pcp.postconfirmSuperBlocksAndRollover(); // Verify height hasn't changed (postconfirmation didn't succeed) - assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 0); + assertEq(pcp.getLastPostconfirmedSuperBlockHeight(), 0); } /// @notice Test that stake activation and postconfirmation works away from the Genesis. @@ -700,83 +700,83 @@ contract MCRTest is Test { (address alice, address bob, address carol) = setupGenesisWithThreeAttesters(1, 1, 0); // Create commitment for height 1 by the only stable attester - MCRStorage.SuperBlockCommitment memory commitment = makeHonestCommitment(1); + PCPStorage.SuperBlockCommitment memory commitment = makeHonestCommitment(1); vm.prank(bob); - mcr.submitSuperBlockCommitment(commitment); + pcp.submitSuperBlockCommitment(commitment); vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 0, "Last postconfirmed superblock height should be 0, as no supermajority was reached (2/3 < threshold)"); - assertEq(mcr.getAcceptingEpoch(),0, "Accepting epoch should be 0"); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getLastPostconfirmedSuperBlockHeight(), 0, "Last postconfirmed superblock height should be 0, as no supermajority was reached (2/3 < threshold)"); + assertEq(pcp.getAcceptingEpoch(),0, "Accepting epoch should be 0"); vm.warp(epochDuration); - assertEq(mcr.getPresentEpoch(),1, "Present epoch should be 1"); + assertEq(pcp.getPresentEpoch(),1, "Present epoch should be 1"); vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getAcceptingEpoch(),1, "Accepting epoch should be 1"); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getAcceptingEpoch(),1, "Accepting epoch should be 1"); vm.prank(carol); - staking.stake(address(mcr), moveToken, 1); - assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), carol), 0, "Carol's stake is still 0."); + staking.stake(address(pcp), moveToken, 1); + assertEq(pcp.getStakeForAcceptingEpoch(address(moveToken), carol), 0, "Carol's stake is still 0."); // Alice unstakes so her commitment is not counted in the next accepting epoch vm.prank(alice); - staking.unstake(address(mcr), address(moveToken), 1); - assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), alice), 1, "Alice's stake should still be 1"); - assertEq(staking.getUnstake(address(mcr), 2, address(moveToken), alice), 1, "Alice's unstake in epoch 2 should be 1"); + staking.unstake(address(pcp), address(moveToken), 1); + assertEq(pcp.getStakeForAcceptingEpoch(address(moveToken), alice), 1, "Alice's stake should still be 1"); + assertEq(staking.getUnstake(address(pcp), 2, address(moveToken), alice), 1, "Alice's unstake in epoch 2 should be 1"); // Warp to next epoch vm.warp(2*epochDuration); - assertEq(mcr.getPresentEpoch(), 2, "Present epoch should be 2"); - assertEq(mcr.getAcceptingEpoch(), 1, "Accepting epoch should be 1"); + assertEq(pcp.getPresentEpoch(), 2, "Present epoch should be 2"); + assertEq(pcp.getAcceptingEpoch(), 1, "Accepting epoch should be 1"); vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getAcceptingEpoch(), 2, "Accepting epoch should be 2"); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getAcceptingEpoch(), 2, "Accepting epoch should be 2"); - assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), carol), 1, "Carol's stake should already be active"); - assertEq(mcr.getStakeForAcceptingEpoch(address(moveToken), alice), 0, "Alice's stake should be 0"); + assertEq(pcp.getStakeForAcceptingEpoch(address(moveToken), carol), 1, "Carol's stake should already be active"); + assertEq(pcp.getStakeForAcceptingEpoch(address(moveToken), alice), 0, "Alice's stake should be 0"); assertEq(moveToken.balanceOf(alice), 2, "Alice's balance should be 2"); // Carol commits to height 1 vm.prank(carol); - mcr.submitSuperBlockCommitment(commitment); + pcp.submitSuperBlockCommitment(commitment); // perform postconfirmation vm.prank(carol); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 1, "Last postconfirmed superblock height should be 1, as supermajority was reached (2/2 > threshold)"); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getLastPostconfirmedSuperBlockHeight(), 1, "Last postconfirmed superblock height should be 1, as supermajority was reached (2/2 > threshold)"); } function testSetMinCommitmentAge() public { // Set min commitment age to a too long value - vm.expectRevert(MCR.minCommitmentAgeForPostconfirmationTooLong.selector); - mcr.setMinCommitmentAgeForPostconfirmation(epochDuration); + vm.expectRevert(PCP.minCommitmentAgeForPostconfirmationTooLong.selector); + pcp.setMinCommitmentAgeForPostconfirmation(epochDuration); // Set min commitment age to 1/10 of epochDuration uint256 minAge = epochDuration/10; - mcr.setMinCommitmentAgeForPostconfirmation(minAge); - assertEq(mcr.minCommitmentAgeForPostconfirmation(), minAge, "Min commitment age should be updated to 1/10 of epochDuration"); + pcp.setMinCommitmentAgeForPostconfirmation(minAge); + assertEq(pcp.minCommitmentAgeForPostconfirmation(), minAge, "Min commitment age should be updated to 1/10 of epochDuration"); } function testMinCommitmentAge() public { // Setup with Alice having supermajority stake address alice = setupGenesisWithOneAttester(1); - assertEq(mcr.getMinCommitmentAgeForPostconfirmation(), 0, "The unset min commitment age should be 0"); + assertEq(pcp.getMinCommitmentAgeForPostconfirmation(), 0, "The unset min commitment age should be 0"); uint256 minAge = 1 minutes; - mcr.setMinCommitmentAgeForPostconfirmation(minAge); - assertEq(mcr.getMinCommitmentAgeForPostconfirmation(), minAge, "Min commitment age should be updated to 1 minutes"); + pcp.setMinCommitmentAgeForPostconfirmation(minAge); + assertEq(pcp.getMinCommitmentAgeForPostconfirmation(), minAge, "Min commitment age should be updated to 1 minutes"); vm.prank(alice); - mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeHonestCommitment(1)); vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 0, "Immediate postconfirmation should fail."); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getLastPostconfirmedSuperBlockHeight(), 0, "Immediate postconfirmation should fail."); vm.warp(block.timestamp + minAge); // note that time starts at 1, not 0 // Now postconfirmation should succeed vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 1); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getLastPostconfirmedSuperBlockHeight(), 1); } @@ -788,45 +788,45 @@ contract MCRTest is Test { function testPostconfirmerStartTime() public { // Test at block 0 assertEq(block.timestamp, 1, "Current time should be 1"); // TODO why is it 1? and not 0? - assertEq(postconfirmerDuration, mcr.getPostconfirmerDuration(), "Postconfirmer term should be correctly set"); - assertEq(mcr.getPostconfirmerStartTime(), 0, "Postconfirmer term should start at (1) time 0"); + assertEq(postconfirmerDuration, pcp.getPostconfirmerDuration(), "Postconfirmer term should be correctly set"); + assertEq(pcp.getPostconfirmerStartTime(), 0, "Postconfirmer term should start at (1) time 0"); // Test at half an postconfirmer term vm.warp(postconfirmerDuration-1); - assertEq(mcr.getPostconfirmerStartTime(), 0, "Postconfirmer term should start at (2) time 0"); + assertEq(pcp.getPostconfirmerStartTime(), 0, "Postconfirmer term should start at (2) time 0"); // Test at an postconfirmer term boundary vm.warp(postconfirmerDuration); - assertEq(mcr.getPostconfirmerStartTime(), postconfirmerDuration, "Postconfirmer term should start at (3) time postconfirmerDuration"); + assertEq(pcp.getPostconfirmerStartTime(), postconfirmerDuration, "Postconfirmer term should start at (3) time postconfirmerDuration"); // Test at an postconfirmer term boundary vm.warp(postconfirmerDuration+1); - assertEq(mcr.getPostconfirmerStartTime(), postconfirmerDuration, "Postconfirmer term should start at (4) time postconfirmerDuration"); + assertEq(pcp.getPostconfirmerStartTime(), postconfirmerDuration, "Postconfirmer term should start at (4) time postconfirmerDuration"); // Test at 1.5 postconfirmer terms vm.warp(2 * postconfirmerDuration ); - assertEq(mcr.getPostconfirmerStartTime(), 2 * postconfirmerDuration, "Postconfirmer term should start at (5) time 2 * postconfirmerDuration"); + assertEq(pcp.getPostconfirmerStartTime(), 2 * postconfirmerDuration, "Postconfirmer term should start at (5) time 2 * postconfirmerDuration"); } /// @notice Test setting postconfirmer duration with validation function testSetPostconfirmerDuration() public { // Check the epoch duration is set correctly - assertEq(epochDuration, staking.getEpochDuration(address(mcr))); + assertEq(epochDuration, staking.getEpochDuration(address(pcp))); // Test valid duration (less than half epoch duration) uint256 validDuration = epochDuration / 2 - 1; - mcr.setPostconfirmerDuration(validDuration); - assertEq(mcr.getPostconfirmerDuration(), validDuration, "Duration should be updated to valid value"); + pcp.setPostconfirmerDuration(validDuration); + assertEq(pcp.getPostconfirmerDuration(), validDuration, "Duration should be updated to valid value"); // Test duration too long compared to epoch (>= epochDuration/2) uint256 invalidDuration = epochDuration / 2; - vm.expectRevert(MCR.PostconfirmerDurationTooLongForEpoch.selector); - mcr.setPostconfirmerDuration(invalidDuration); - assertEq(mcr.getPostconfirmerDuration(), validDuration, "Duration should remain at previous valid value"); + vm.expectRevert(PCP.PostconfirmerDurationTooLongForEpoch.selector); + pcp.setPostconfirmerDuration(invalidDuration); + assertEq(pcp.getPostconfirmerDuration(), validDuration, "Duration should remain at previous valid value"); // Test duration equal to epoch duration (should fail) - vm.expectRevert(MCR.PostconfirmerDurationTooLongForEpoch.selector); - mcr.setPostconfirmerDuration(epochDuration); - assertEq(mcr.getPostconfirmerDuration(), validDuration, "Duration should remain at previous valid value"); + vm.expectRevert(PCP.PostconfirmerDurationTooLongForEpoch.selector); + pcp.setPostconfirmerDuration(epochDuration); + assertEq(pcp.getPostconfirmerDuration(), validDuration, "Duration should remain at previous valid value"); } /// @notice Test that getPostconfirmer correctly selects an postconfirmer based on block hash @@ -834,19 +834,19 @@ contract MCRTest is Test { // Setup with three attesters with equal stakes (, address bob, address carol) = setupGenesisWithThreeAttesters(1, 1, 1); uint256 myPostconfirmerDuration = 13; - mcr.setPostconfirmerDuration(myPostconfirmerDuration); - assertEq(myPostconfirmerDuration,mcr.getPostconfirmerDuration(),"Postconfirmer duration not set correctly"); + pcp.setPostconfirmerDuration(myPostconfirmerDuration); + assertEq(myPostconfirmerDuration,pcp.getPostconfirmerDuration(),"Postconfirmer duration not set correctly"); - address initialPostconfirmer = mcr.getPostconfirmer(); + address initialPostconfirmer = pcp.getPostconfirmer(); assertEq(initialPostconfirmer, bob, "Postconfirmer should be bob"); vm.warp(myPostconfirmerDuration-1); - assertEq(mcr.getPostconfirmer(), initialPostconfirmer, "Postconfirmer should not change within term"); + assertEq(pcp.getPostconfirmer(), initialPostconfirmer, "Postconfirmer should not change within term"); // Move two postconfirmer terms (moving one resulted still in bob as postconfirmer with current randomness) vm.warp(2*myPostconfirmerDuration); - address newPostconfirmer = mcr.getPostconfirmer(); - assertEq(mcr.getPostconfirmerStartTime(),2*myPostconfirmerDuration,"Postconfirmer start time should be myPostconfirmerDuration"); + address newPostconfirmer = pcp.getPostconfirmer(); + assertEq(pcp.getPostconfirmerStartTime(),2*myPostconfirmerDuration,"Postconfirmer start time should be myPostconfirmerDuration"); assertEq(newPostconfirmer, carol, "New postconfirmer should be Carol"); } @@ -861,57 +861,57 @@ contract MCRTest is Test { uint256 aliceInitialBalance = moveToken.balanceOf(alice); uint256 bobInitialBalance = moveToken.balanceOf(bob); uint256 carolInitialBalance = moveToken.balanceOf(carol); - mcr.setRewardPerPostconfirmationPoint(0); + pcp.setRewardPerPostconfirmationPoint(0); // Exit genesis epoch vm.warp(epochDuration); vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getAcceptingEpoch(), 1, "Should have exited genesis"); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getAcceptingEpoch(), 1, "Should have exited genesis"); // Submit commitments for height 1 honestly (Alice and Bob > 2/3) vm.prank(alice); - mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeHonestCommitment(1)); vm.prank(bob); - mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeHonestCommitment(1)); vm.prank(carol); - mcr.submitSuperBlockCommitment(makeDishonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeDishonestCommitment(1)); // Check initial reward points - assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), alice), 0, "Alice should have no points yet"); - assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), bob), 0, "Bob should have no points yet"); - assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), carol), 0, "Carol should have no points yet"); + assertEq(pcp.getAttesterRewardPoints(pcp.getAcceptingEpoch(), alice), 0, "Alice should have no points yet"); + assertEq(pcp.getAttesterRewardPoints(pcp.getAcceptingEpoch(), bob), 0, "Bob should have no points yet"); + assertEq(pcp.getAttesterRewardPoints(pcp.getAcceptingEpoch(), carol), 0, "Carol should have no points yet"); // Trigger postconfirmation vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); + pcp.postconfirmSuperBlocksAndRollover(); // New reward points - assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), alice), 1, "Alice should have 1 points"); - assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), bob), 1, "Bob should have 1 point"); - assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), carol), 0, "Carol should have 0 point"); + assertEq(pcp.getAttesterRewardPoints(pcp.getAcceptingEpoch(), alice), 1, "Alice should have 1 points"); + assertEq(pcp.getAttesterRewardPoints(pcp.getAcceptingEpoch(), bob), 1, "Bob should have 1 point"); + assertEq(pcp.getAttesterRewardPoints(pcp.getAcceptingEpoch(), carol), 0, "Carol should have 0 point"); // Alice and Carol commit to height 2 honestly (Alice + Carol > 2/3) vm.prank(alice); - mcr.submitSuperBlockCommitment(makeHonestCommitment(2)); + pcp.submitSuperBlockCommitment(makeHonestCommitment(2)); vm.prank(bob); - mcr.submitSuperBlockCommitment(makeDishonestCommitment(2)); + pcp.submitSuperBlockCommitment(makeDishonestCommitment(2)); vm.prank(carol); - mcr.submitSuperBlockCommitment(makeHonestCommitment(2)); + pcp.submitSuperBlockCommitment(makeHonestCommitment(2)); // Trigger postconfirmation, reward distribution by rolling over to next epoch vm.warp(2*epochDuration); vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getAcceptingEpoch(), 2, "Should be in epoch 2"); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getAcceptingEpoch(), 2, "Should be in epoch 2"); // Verify rewards were distributed and points were cleared - assertEq(mcr.attesterRewardPoints(mcr.getAcceptingEpoch(), alice), 0, "Alice's points should be cleared"); - assertEq(mcr.attesterRewardPoints(mcr.getAcceptingEpoch(), bob), 0, "Bob's points should be cleared"); - assertEq(mcr.attesterRewardPoints(mcr.getAcceptingEpoch(), carol), 0, "Carol's points should be cleared"); - assertEq(moveToken.balanceOf(alice), aliceInitialBalance + mcr.getStakeForAcceptingEpoch(address(moveToken), alice) * 2, "Alice reward not correct."); - assertEq(moveToken.balanceOf(bob), bobInitialBalance + mcr.getStakeForAcceptingEpoch(address(moveToken), bob), "Bob reward not correct."); - assertEq(moveToken.balanceOf(carol), carolInitialBalance + mcr.getStakeForAcceptingEpoch(address(moveToken), carol), "Carol reward not correct."); + assertEq(pcp.attesterRewardPoints(pcp.getAcceptingEpoch(), alice), 0, "Alice's points should be cleared"); + assertEq(pcp.attesterRewardPoints(pcp.getAcceptingEpoch(), bob), 0, "Bob's points should be cleared"); + assertEq(pcp.attesterRewardPoints(pcp.getAcceptingEpoch(), carol), 0, "Carol's points should be cleared"); + assertEq(moveToken.balanceOf(alice), aliceInitialBalance + pcp.getStakeForAcceptingEpoch(address(moveToken), alice) * 2, "Alice reward not correct."); + assertEq(moveToken.balanceOf(bob), bobInitialBalance + pcp.getStakeForAcceptingEpoch(address(moveToken), bob), "Bob reward not correct."); + assertEq(moveToken.balanceOf(carol), carolInitialBalance + pcp.getStakeForAcceptingEpoch(address(moveToken), carol), "Carol reward not correct."); } /// @notice Test that postconfirmation rewards are distributed correctly when the postconfirmer is live @@ -924,32 +924,32 @@ contract MCRTest is Test { uint256 aliceInitialBalance = moveToken.balanceOf(alice); uint256 bobInitialBalance = moveToken.balanceOf(bob); // set the max postconfirmer non-reactivity time to 1/4 epochDuration - mcr.setPostconfirmerPrivilegeDuration(epochDuration/4); + pcp.setPostconfirmerPrivilegeDuration(epochDuration/4); vm.prank(alice); - mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeHonestCommitment(1)); // check that the first seen timestamp is set - assertGt(mcr.getCommitmentFirstSeenAt(makeHonestCommitment(1)), 0, "Commitment first seen at should be set"); + assertGt(pcp.getCommitmentFirstSeenAt(makeHonestCommitment(1)), 0, "Commitment first seen at should be set"); - assertEq(mcr.getPostconfirmer(), bob, "Bob should be the postconfirmer but its not"); - assertEq(mcr.isWithinPostconfirmerPrivilegeDuration(makeHonestCommitment(1)), true, "Postconfirmer should be live"); + assertEq(pcp.getPostconfirmer(), bob, "Bob should be the postconfirmer but its not"); + assertEq(pcp.isWithinPostconfirmerPrivilegeDuration(makeHonestCommitment(1)), true, "Postconfirmer should be live"); // postconfirmer postconfirms while postconfirmer is live vm.prank(bob); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getAcceptingEpoch(), 0, "Should be in epoch 0"); - assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 1, "Last postconfirmed superblock height should be 1"); - assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), alice), 1, "Alice should have 1 attester points"); - assertEq(mcr.getPostconfirmerRewardPoints(mcr.getAcceptingEpoch(), bob), 1, "Bob should have 1 postconfirmer points"); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getAcceptingEpoch(), 0, "Should be in epoch 0"); + assertEq(pcp.getLastPostconfirmedSuperBlockHeight(), 1, "Last postconfirmed superblock height should be 1"); + assertEq(pcp.getAttesterRewardPoints(pcp.getAcceptingEpoch(), alice), 1, "Alice should have 1 attester points"); + assertEq(pcp.getPostconfirmerRewardPoints(pcp.getAcceptingEpoch(), bob), 1, "Bob should have 1 postconfirmer points"); assertEq(moveToken.balanceOf(alice), aliceInitialBalance, "Alice should have not received any rewards yet"); assertEq(moveToken.balanceOf(bob), bobInitialBalance, "Bob should not have received any rewards yet"); // warp to next epoch vm.warp(epochDuration); vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 1); - assertEq(mcr.getAcceptingEpoch(), 1, "Should be in epoch 1"); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getLastPostconfirmedSuperBlockHeight(), 1); + assertEq(pcp.getAcceptingEpoch(), 1, "Should be in epoch 1"); // Verify rewards: assertEq(moveToken.balanceOf(alice), aliceInitialBalance + aliceStake, "Alice should have received the rewards"); @@ -966,26 +966,26 @@ contract MCRTest is Test { uint256 bobInitialBalance = moveToken.balanceOf(bob); vm.prank(alice); - mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeHonestCommitment(1)); - assertEq(mcr.getPostconfirmer(), alice, "Alice should be the postconfirmer since it is the only staked attester."); - assertEq(mcr.isWithinPostconfirmerPrivilegeDuration(makeHonestCommitment(1)), true, "Postconfirmer should be live"); + assertEq(pcp.getPostconfirmer(), alice, "Alice should be the postconfirmer since it is the only staked attester."); + assertEq(pcp.isWithinPostconfirmerPrivilegeDuration(makeHonestCommitment(1)), true, "Postconfirmer should be live"); // volunteer postconfirmer postconfirms while postconfirmer is live vm.prank(bob); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 1); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getLastPostconfirmedSuperBlockHeight(), 1); // bob should not get any postconfirmer rewards assertEq(moveToken.balanceOf(bob), bobInitialBalance, "Bob should not have received any rewards"); - assertEq(mcr.getPostconfirmerRewardPoints(mcr.getAcceptingEpoch(), bob), 0, "Bob should have 0 postconfirmer points"); - assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), alice), 1, "Alice should have 1 attester points"); - assertEq(mcr.getPostconfirmerRewardPoints(mcr.getAcceptingEpoch(), alice), 0, "Alice should have 0 postconfirmer points"); + assertEq(pcp.getPostconfirmerRewardPoints(pcp.getAcceptingEpoch(), bob), 0, "Bob should have 0 postconfirmer points"); + assertEq(pcp.getAttesterRewardPoints(pcp.getAcceptingEpoch(), alice), 1, "Alice should have 1 attester points"); + assertEq(pcp.getPostconfirmerRewardPoints(pcp.getAcceptingEpoch(), alice), 0, "Alice should have 0 postconfirmer points"); vm.warp(epochDuration); vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getAcceptingEpoch(), 1, "Should be in epoch 1"); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getAcceptingEpoch(), 1, "Should be in epoch 1"); // alice should get the postconfirmer rewards assertEq(moveToken.balanceOf(bob), bobInitialBalance, "Bob should not have received any rewards"); @@ -1002,36 +1002,36 @@ contract MCRTest is Test { (address alice, address bob, ) = setupGenesisWithThreeAttesters(aliceStake, bobStake, 0); uint256 aliceInitialBalance = moveToken.balanceOf(alice); uint256 bobInitialBalance = moveToken.balanceOf(bob); - uint256 thisPostconfirmerDuration = mcr.getPostconfirmerDuration(); + uint256 thisPostconfirmerDuration = pcp.getPostconfirmerDuration(); // set the time windows - assertEq(mcr.getMinCommitmentAgeForPostconfirmation(), 0, "Min commitment age should be 0"); + assertEq(pcp.getMinCommitmentAgeForPostconfirmation(), 0, "Min commitment age should be 0"); uint256 thisPostconfirmerPriviledgeWindow = epochDuration/100; - mcr.setPostconfirmerPrivilegeDuration(thisPostconfirmerPriviledgeWindow); - assertEq(mcr.getPostconfirmerPrivilegeDuration(), thisPostconfirmerPriviledgeWindow, "Max postconfirmer non-reactivity time should be 1/100 epochDuration"); + pcp.setPostconfirmerPrivilegeDuration(thisPostconfirmerPriviledgeWindow); + assertEq(pcp.getPostconfirmerPrivilegeDuration(), thisPostconfirmerPriviledgeWindow, "Max postconfirmer non-reactivity time should be 1/100 epochDuration"); assertGt(thisPostconfirmerDuration, thisPostconfirmerPriviledgeWindow, "Postconfirmer term should be greater than thisPostconfirmerPriviledgeWindow"); vm.prank(alice); - mcr.submitSuperBlockCommitment(makeHonestCommitment(1)); + pcp.submitSuperBlockCommitment(makeHonestCommitment(1)); - assertEq(mcr.getPostconfirmer(), bob, "bob should be the postconfirmer"); - assertEq(mcr.isWithinPostconfirmerPrivilegeDuration(makeHonestCommitment(1)), true, "Postconfirmer should be live"); + assertEq(pcp.getPostconfirmer(), bob, "bob should be the postconfirmer"); + assertEq(pcp.isWithinPostconfirmerPrivilegeDuration(makeHonestCommitment(1)), true, "Postconfirmer should be live"); // warp out of postconfirmer privilege window vm.warp(block.timestamp + thisPostconfirmerPriviledgeWindow + 1 ); // TODO check why + 1 is needed - assertEq(mcr.isWithinPostconfirmerPrivilegeDuration(makeHonestCommitment(1)), false, "Postconfirmer should not be live"); + assertEq(pcp.isWithinPostconfirmerPrivilegeDuration(makeHonestCommitment(1)), false, "Postconfirmer should not be live"); vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getAcceptingEpoch(), 0, "Should be in epoch 0"); - assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 1, "Last postconfirmed superblock height should be 1"); - assertEq(mcr.getAttesterRewardPoints(mcr.getAcceptingEpoch(), alice), 1, "Alice should have 1 attester points"); - assertEq(mcr.getPostconfirmerRewardPoints(mcr.getAcceptingEpoch(), alice), 1, "Alice should have 1 postconfirmer points"); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getAcceptingEpoch(), 0, "Should be in epoch 0"); + assertEq(pcp.getLastPostconfirmedSuperBlockHeight(), 1, "Last postconfirmed superblock height should be 1"); + assertEq(pcp.getAttesterRewardPoints(pcp.getAcceptingEpoch(), alice), 1, "Alice should have 1 attester points"); + assertEq(pcp.getPostconfirmerRewardPoints(pcp.getAcceptingEpoch(), alice), 1, "Alice should have 1 postconfirmer points"); // warp to next epoch vm.warp(epochDuration); vm.prank(bob); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getAcceptingEpoch(), 1, "Should be in epoch 1"); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getAcceptingEpoch(), 1, "Should be in epoch 1"); assertEq(moveToken.balanceOf(alice), aliceInitialBalance + aliceStake + aliceStake, "Alice should have received the attester and postconfirmer rewards"); assertEq(moveToken.balanceOf(bob), bobInitialBalance, "Bob should have received no rewards"); @@ -1046,38 +1046,38 @@ contract MCRTest is Test { // TODO reward logic is not yet implemented function testPostconfirmerRewards() public { (address alice, address bob, ) = setupGenesisWithThreeAttesters(1, 1, 0); - assertEq(mcr.getPostconfirmer(), bob, "Bob should be the postconfirmer"); + assertEq(pcp.getPostconfirmer(), bob, "Bob should be the postconfirmer"); // make superBlock commitments - MCRStorage.SuperBlockCommitment memory initCommitment = makeHonestCommitment(1); + PCPStorage.SuperBlockCommitment memory initCommitment = makeHonestCommitment(1); vm.prank(alice); - mcr.submitSuperBlockCommitment(initCommitment); + pcp.submitSuperBlockCommitment(initCommitment); vm.prank(bob); - mcr.submitSuperBlockCommitment(initCommitment); + pcp.submitSuperBlockCommitment(initCommitment); // bob postconfirms and gets a reward vm.prank(bob); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 1); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getLastPostconfirmedSuperBlockHeight(), 1); // make second superblock commitment - MCRStorage.SuperBlockCommitment memory secondCommitment = makeHonestCommitment(2); + PCPStorage.SuperBlockCommitment memory secondCommitment = makeHonestCommitment(2); vm.prank(alice); - mcr.submitSuperBlockCommitment(secondCommitment); + pcp.submitSuperBlockCommitment(secondCommitment); vm.prank(bob); - mcr.submitSuperBlockCommitment(secondCommitment); + pcp.submitSuperBlockCommitment(secondCommitment); // alice can postconfirm, but does not get the reward // TODO check that bob did not get the reward vm.prank(alice); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 2); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getLastPostconfirmedSuperBlockHeight(), 2); // bob tries to postconfirm, but already done by alice // TODO: bob should still get the reward vm.prank(bob); - mcr.postconfirmSuperBlocksAndRollover(); - assertEq(mcr.getLastPostconfirmedSuperBlockHeight(), 2); + pcp.postconfirmSuperBlocksAndRollover(); + assertEq(pcp.getLastPostconfirmedSuperBlockHeight(), 2); } diff --git a/protocol/pcp/contracts/upgrader/propose.sh b/protocol/pcp/contracts/upgrader/propose.sh index aac7c3fb..729d75b0 100644 --- a/protocol/pcp/contracts/upgrader/propose.sh +++ b/protocol/pcp/contracts/upgrader/propose.sh @@ -56,7 +56,7 @@ chain_id_hex=$(echo $response | jq -r '.result') # Convert the hex chain ID to decimal chain_id_dec=$(printf "%d\n" $chain_id_hex) -if $contract == "MCR" then +if $contract == "PCP" then path="settlement" else if $contract == "MovementStaking" then path="staking" diff --git a/protocol/pcp/contracts/upgrader/safeDeploy.sh b/protocol/pcp/contracts/upgrader/safeDeploy.sh index b340de81..dec2bb11 100644 --- a/protocol/pcp/contracts/upgrader/safeDeploy.sh +++ b/protocol/pcp/contracts/upgrader/safeDeploy.sh @@ -56,7 +56,7 @@ chain_id_hex=$(echo $response | jq -r '.result') # Convert the hex chain ID to decimal chain_id_dec=$(printf "%d\n" $chain_id_hex) -if $contract == "MCR" then +if $contract == "PCP" then path="settlement" else if $contract == "MovementStaking" then path="staking" diff --git a/protocol/pcp/manager/src/lib.rs b/protocol/pcp/manager/src/lib.rs index dcf7baa6..c9513796 100644 --- a/protocol/pcp/manager/src/lib.rs +++ b/protocol/pcp/manager/src/lib.rs @@ -3,13 +3,13 @@ use tokio_stream::Stream; mod manager; -pub use manager::Manager as McrSettlementManager; +pub use manager::Manager as PcpSettlementManager; pub type CommitmentEventStream = std::pin::Pin> + Send>>; #[async_trait::async_trait] -pub trait McrSettlementManagerOperations { +pub trait PcpSettlementManagerOperations { /// Adds a block commitment to the manager queue. async fn post_block_commitment( &self, diff --git a/protocol/pcp/manager/src/manager.rs b/protocol/pcp/manager/src/manager.rs index 86d08432..5b84e6f3 100644 --- a/protocol/pcp/manager/src/manager.rs +++ b/protocol/pcp/manager/src/manager.rs @@ -1,7 +1,7 @@ -use crate::{CommitmentEventStream, McrSettlementManagerOperations, SuperBlockCommitmentEvent}; +use crate::{CommitmentEventStream, PcpSettlementManagerOperations, SuperBlockCommitmentEvent}; use postconfirmations_config::Config; -use postconfirmations_settlement_client::McrSettlementClientOperations; +use postconfirmations_settlement_client::PcpSettlementClientOperations; use postconfirmations_types::block_commitment::{ SuperBlockCommitment, SuperBlockCommitmentRejectionReason, }; @@ -17,18 +17,18 @@ use std::collections::BTreeMap; use std::mem; use std::time::Duration; -/// Public handle for the MCR settlement manager. +/// Public handle for the PCP settlement manager. pub struct Manager { sender: mpsc::Sender, } impl Manager { - /// Creates a new MCR settlement manager. + /// Creates a new PCP settlement manager. /// /// Returns the handle with the public API and the stream to receive commitment events. - /// The stream needs to be polled to drive the MCR settlement client and + /// The stream needs to be polled to drive the PCP settlement client and /// process the commitments. - pub fn new( + pub fn new( client: C, config: &Config, ) -> (Self, CommitmentEventStream) { @@ -40,7 +40,7 @@ impl Manager { } #[async_trait] -impl McrSettlementManagerOperations for Manager { +impl PcpSettlementManagerOperations for Manager { async fn post_block_commitment( &self, block_commitment: SuperBlockCommitment, @@ -50,7 +50,7 @@ impl McrSettlementManagerOperations for Manager { } } -fn process_commitments( +fn process_commitments( mut receiver: mpsc::Receiver, client: C, batch_timeout: Duration, @@ -148,13 +148,13 @@ fn process_commitments( #[cfg(test)] mod tests { use super::*; - use postconfirmations_settlement_client::mock::McrSettlementClient; + use postconfirmations_settlement_client::mock::PcpSettlementClient; use postconfirmations_types::block_commitment::{Commitment, SuperBlockCommitment}; #[tokio::test] async fn test_block_commitment_accepted() -> Result<(), anyhow::Error> { let config = Config::default(); - let mut client = McrSettlementClient::new(); + let mut client = PcpSettlementClient::new(); client.block_lead_tolerance = 1; let (manager, mut event_stream) = Manager::new(client.clone(), &config); let commitment = SuperBlockCommitment::new(1, Default::default(), Commitment::new([1; 32])); @@ -172,7 +172,7 @@ mod tests { #[tokio::test] async fn test_block_commitment_rejected() -> Result<(), anyhow::Error> { let config = Config::default(); - let mut client = McrSettlementClient::new(); + let mut client = PcpSettlementClient::new(); client.block_lead_tolerance = 1; let (manager, mut event_stream) = Manager::new(client.clone(), &config); let commitment = SuperBlockCommitment::new(1, Default::default(), Commitment::new([1; 32])); @@ -203,7 +203,7 @@ mod tests { #[tokio::test] async fn test_back_pressure() -> Result<(), anyhow::Error> { let config = Config::default(); - let mut client = McrSettlementClient::new(); + let mut client = PcpSettlementClient::new(); client.block_lead_tolerance = 2; client.pause_after(2).await; let (manager, mut event_stream) = Manager::new(client.clone(), &config); @@ -249,7 +249,7 @@ mod tests { async fn test_batch_timeout() -> Result<(), anyhow::Error> { let mut config = Config::default(); config.transactions.batch_timeout = 100; - let client = McrSettlementClient::new(); + let client = PcpSettlementClient::new(); let (manager, mut event_stream) = Manager::new(client.clone(), &config); let commitment1 = diff --git a/protocol/pcp/runner/Cargo.toml b/protocol/pcp/runner/Cargo.toml index 4d7b3dc0..adc4934e 100644 --- a/protocol/pcp/runner/Cargo.toml +++ b/protocol/pcp/runner/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "postconfirmationssettlement-runner" -description = "An Anvil runner for the MCR Settlement" +description = "An Anvil runner for the PCP Settlement" version.workspace = true edition.workspace = true license.workspace = true From 40d8617e5e1e03d4840514c2a46eb97e49f0ddd8 Mon Sep 17 00:00:00 2001 From: apenzk Date: Tue, 18 Mar 2025 17:39:39 +0100 Subject: [PATCH 10/25] path towards client interaction --- Cargo.lock | 86 +- Cargo.toml | 21 +- protocol/pcp/cli/client/Cargo.toml | 30 +- protocol/pcp/cli/client/abis/MOVEToken.json | 1 + .../pcp/cli/client/abis/MovementStaking.json | 1 + protocol/pcp/cli/client/abis/PCP.json | 1 + .../src/bin/e2e/test_client_settlement.rs | 8 +- protocol/pcp/cli/client/src/eth_client.rs | 9 +- protocol/pcp/cli/client/src/lib.rs | 2 +- protocol/pcp/cli/client/src/mock.rs | 6 +- protocol/pcp/clients/eth/Cargo.toml | 52 + protocol/pcp/clients/eth/abis/MOVEToken.json | 2983 +++++++++++++++++ .../pcp/clients/eth/abis/MovementStaking.json | 1 + protocol/pcp/clients/eth/abis/PCP.json | 1 + protocol/pcp/clients/eth/src/builder/mod.rs | 0 protocol/pcp/clients/eth/src/client/mod.rs | 290 ++ protocol/pcp/clients/eth/src/config/mod.rs | 166 + protocol/pcp/clients/eth/src/lib.rs | 4 + protocol/pcp/clients/eth/src/util/mod.rs | 1 + .../eth/src/util/send_eth_transaction.rs | 177 + protocol/pcp/clients/mock/Cargo.toml | 23 + protocol/pcp/clients/mock/src/lib.rs | 242 ++ protocol/pcp/clients/util/Cargo.toml | 20 + protocol/pcp/clients/util/src/lib.rs | 65 + protocol/pcp/manager/src/lib.rs | 2 +- protocol/pcp/manager/src/manager.rs | 6 +- protocol/pcp/runner/src/main.rs | 2 +- protocol/pcp/util/config/Cargo.toml | 22 + protocol/pcp/util/config/src/common/deploy.rs | 60 + .../util/config/src/common/eth_connection.rs | 106 + protocol/pcp/util/config/src/common/mod.rs | 6 + .../pcp/util/config/src/common/settlement.rs | 55 + .../pcp/util/config/src/common/staking.rs | 14 + .../pcp/util/config/src/common/testing.rs | 46 + .../util/config/src/common/transactions.rs | 29 + protocol/pcp/util/config/src/lib.rs | 67 + protocol/pcp/util/types/Cargo.toml | 27 + .../pcp/util/types/src/block_commitment.rs | 137 + protocol/pcp/util/types/src/lib.rs | 1 + sdk/cli/ffs-client/Cargo.toml | 2 +- sdk/cli/ffs-client/src/cli/protocol.rs | 14 +- 41 files changed, 4722 insertions(+), 64 deletions(-) create mode 100644 protocol/pcp/cli/client/abis/MOVEToken.json create mode 100644 protocol/pcp/cli/client/abis/MovementStaking.json create mode 100644 protocol/pcp/cli/client/abis/PCP.json create mode 100644 protocol/pcp/clients/eth/Cargo.toml create mode 100644 protocol/pcp/clients/eth/abis/MOVEToken.json create mode 100644 protocol/pcp/clients/eth/abis/MovementStaking.json create mode 100644 protocol/pcp/clients/eth/abis/PCP.json create mode 100644 protocol/pcp/clients/eth/src/builder/mod.rs create mode 100644 protocol/pcp/clients/eth/src/client/mod.rs create mode 100644 protocol/pcp/clients/eth/src/config/mod.rs create mode 100644 protocol/pcp/clients/eth/src/lib.rs create mode 100644 protocol/pcp/clients/eth/src/util/mod.rs create mode 100644 protocol/pcp/clients/eth/src/util/send_eth_transaction.rs create mode 100644 protocol/pcp/clients/mock/Cargo.toml create mode 100644 protocol/pcp/clients/mock/src/lib.rs create mode 100644 protocol/pcp/clients/util/Cargo.toml create mode 100644 protocol/pcp/clients/util/src/lib.rs create mode 100644 protocol/pcp/util/config/Cargo.toml create mode 100644 protocol/pcp/util/config/src/common/deploy.rs create mode 100644 protocol/pcp/util/config/src/common/eth_connection.rs create mode 100644 protocol/pcp/util/config/src/common/mod.rs create mode 100644 protocol/pcp/util/config/src/common/settlement.rs create mode 100644 protocol/pcp/util/config/src/common/staking.rs create mode 100644 protocol/pcp/util/config/src/common/testing.rs create mode 100644 protocol/pcp/util/config/src/common/transactions.rs create mode 100644 protocol/pcp/util/config/src/lib.rs create mode 100644 protocol/pcp/util/types/Cargo.toml create mode 100644 protocol/pcp/util/types/src/block_commitment.rs create mode 100644 protocol/pcp/util/types/src/lib.rs diff --git a/Cargo.lock b/Cargo.lock index 8edc1101..06d26513 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -1978,6 +1978,7 @@ dependencies = [ "clap", "dotenv", "mcr-protocol-client", + "pcp-protocol-client", "serde", "tokio", ] @@ -3325,6 +3326,18 @@ dependencies = [ "hmac", ] +[[package]] +name = "pcp-config" +version = "0.0.1" +dependencies = [ + "alloy", + "anyhow", + "ffs-environment", + "secure-signer", + "secure-signer-loader", + "serde", +] + [[package]] name = "pcp-network" version = "0.0.1" @@ -3402,6 +3415,47 @@ dependencies = [ "tokio", ] +[[package]] +name = "pcp-protocol-client" +version = "0.0.1" +dependencies = [ + "alloy", + "alloy-contract", + "alloy-network", + "alloy-primitives 0.7.7", + "alloy-provider", + "alloy-rpc-types", + "alloy-signer", + "alloy-sol-types", + "alloy-transport", + "alloy-transport-ws", + "anyhow", + "async-stream", + "async-trait", + "clap", + "ffs-environment", + "futures", + "pcp-config", + "pcp-types", + "secure-signer", + "secure-signer-eth", + "secure-signer-loader", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "pcp-types" +version = "0.0.1" +dependencies = [ + "serde", +] + [[package]] name = "percent-encoding" version = "2.3.1" @@ -3477,38 +3531,6 @@ version = "0.3.31" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "953ec861398dccce10c670dfeaf3ec4911ca479e9c02154b3a215178c5f566f2" -[[package]] -name = "postconfirmationssettlement-client" -version = "0.0.1" -dependencies = [ - "alloy", - "alloy-contract", - "alloy-network", - "alloy-primitives 0.7.7", - "alloy-provider", - "alloy-rpc-types", - "alloy-signer", - "alloy-sol-types", - "alloy-transport", - "alloy-transport-ws", - "anyhow", - "async-stream", - "async-trait", - "clap", - "ffs-environment", - "futures", - "secure-signer", - "secure-signer-eth", - "secure-signer-loader", - "serde", - "serde_json", - "thiserror 1.0.69", - "tokio", - "tokio-stream", - "tracing", - "tracing-subscriber", -] - [[package]] name = "powerfmt" version = "0.2.0" diff --git a/Cargo.toml b/Cargo.toml index e364cca1..8540a398 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -119,18 +119,27 @@ mcr-network-client = { path = "network/mcr/cli/client" } mcr-network-coordinator = { path = "network/mcr/cli/coordinator" } mcr-network = { path = "network/mcr/cli/network" } +## pcp +### protocol +pcp-types = { path = "protocol/pcp/util/types" } +pcp-config = { path = "protocol/pcp/util/config" } +pcp-protocol-client-core-util = { path = "protocol/pcp/clients/util" } +pcp-protocol-client-core-eth = { path = "protocol/pcp/clients/eth" } +pcp-protocol-client-core-mock = { path = "protocol/pcp/clients/mock" } +pcp-protocol-client = { path = "protocol/pcp/cli/client" } +pcp-protocol = { path = "protocol/pcp/cli"} +### network +pcp-network-client = { path = "network/pcp/cli/client" } +pcp-network-coordinator = { path = "network/pcp/cli/coordinator" } +pcp-network = { path = "network/pcp/cli/network" } + # util secure-signer-eth = { path = "util/signing/eth" } ffs-environment = { path = "util/environment" } # Movement dependencies dot-movement = { git = "https://github.com/movementlabsxyz/movement.git", branch = "main" } -movement-types = { git = "https://github.com/movementlabsxyz/movement.git", branch = "main" } # Using same source as dot-movement - -## pcp -### protocol -# postconfirmationssettlement-client = { path = "protocol/pcp/cli/client" } -# postconfirmationsconfig = { path = "protocol/pcp/util/config" } +movement-types = { git = "https://github.com/movementlabsxyz/movement.git", branch = "main" } [workspace.lints.clippy] debug_assert_with_mut_call = "deny" diff --git a/protocol/pcp/cli/client/Cargo.toml b/protocol/pcp/cli/client/Cargo.toml index f348a0c8..1d561edd 100644 --- a/protocol/pcp/cli/client/Cargo.toml +++ b/protocol/pcp/cli/client/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "postconfirmationssettlement-client" +name = "pcp-protocol-client" version = { workspace = true } edition = { workspace = true } license = { workspace = true } @@ -18,6 +18,8 @@ rust-version = { workspace = true } secure-signer-loader = { workspace = true } secure-signer = { workspace = true } secure-signer-eth = { workspace = true } +pcp-types = { workspace = true } +pcp-config = { workspace = true } alloy = { workspace = true, features = [ "node-bindings", @@ -66,3 +68,29 @@ mock = [] [lints] workspace = true + + + + +# [package] +# name = "pcp-protocol-client" +# version = { workspace = true } +# edition = { workspace = true } +# license = { workspace = true } +# authors = { workspace = true } +# homepage = { workspace = true } +# publish = { workspace = true } +# rust-version = { workspace = true } + +# [dependencies] +# tokio = { workspace = true } +# serde = { workspace = true, features = ["derive"] } +# clap = { workspace = true} +# dotenv = { workspace = true } +# anyhow = { workspace = true } +# pcp-protocol-client-core-util = { workspace = true } +# pcp-protocol-client-core-eth = { workspace = true } +# pcp-types = { workspace = true } + +# [lints] +# workspace = true diff --git a/protocol/pcp/cli/client/abis/MOVEToken.json b/protocol/pcp/cli/client/abis/MOVEToken.json new file mode 100644 index 00000000..753f2239 --- /dev/null +++ b/protocol/pcp/cli/client/abis/MOVEToken.json @@ -0,0 +1 @@ +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"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":"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":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_owner","type":"address","internalType":"address"},{"name":"_custody","type":"address","internalType":"address"}],"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":"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":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"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":"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":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","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":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"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":[]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611823806100d65f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063485cc955116100b457806395d89b411161007957806395d89b4114610283578063a217fddf1461028b578063a9059cbb14610292578063d505accf146102a5578063d547741f146102b8578063dd62ed3e146102cb575f80fd5b8063485cc9551461021c57806370a082311461022f5780637ecebe001461024257806384b0196e1461025557806391d1485414610270575f80fd5b8063248a9ca3116100fa578063248a9ca3146101ca5780632f2ff15d146101dd578063313ce567146101f25780633644e5151461020157806336568abe14610209575f80fd5b806301ffc9a71461013657806306fdde031461015e578063095ea7b31461017357806318160ddd1461018657806323b872dd146101b7575b5f80fd5b61014961014436600461128f565b6102de565b60405190151581526020015b60405180910390f35b610166610314565b60405161015591906112eb565b610149610181366004611318565b6103b9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610155565b6101496101c5366004611340565b6103d0565b6101a96101d836600461137a565b6103f3565b6101f06101eb366004611391565b610413565b005b60405160088152602001610155565b6101a9610435565b6101f0610217366004611391565b610443565b6101f061022a3660046113bb565b61047b565b6101a961023d3660046113e3565b61064c565b6101a96102503660046113e3565b61067c565b61025d610686565b60405161015597969594939291906113fc565b61014961027e366004611391565b610734565b61016661076a565b6101a95f81565b6101496102a0366004611318565b6107a8565b6101f06102b3366004611492565b6107b5565b6101f06102c6366004611391565b61090a565b6101a96102d93660046113bb565b610926565b5f6001600160e01b03198216637965db0b60e01b148061030e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5f8051602061178e8339815191525b9050806003018054610337906114ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610363906114ff565b80156103ae5780601f10610385576101008083540402835291602001916103ae565b820191905f5260205f20905b81548152906001019060200180831161039157829003601f168201915b505050505091505090565b5f336103c681858561096f565b5060019392505050565b5f336103dd85828561097c565b6103e88585856109da565b506001949350505050565b5f9081525f805160206117ce833981519152602052604090206001015490565b61041c826103f3565b61042581610a37565b61042f8383610a44565b50505050565b5f61043e610ae5565b905090565b6001600160a01b038116331461046c5760405163334bd91960e11b815260040160405180910390fd5b6104768282610aee565b505050565b5f610484610b67565b805490915060ff600160401b820416159067ffffffffffffffff165f811580156104ab5750825b90505f8267ffffffffffffffff1660011480156104c75750303b155b9050811580156104d5575080155b156104f35760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561051d57845460ff60401b1916600160401b1785555b6001600160a01b0387161580159061053d57506001600160a01b03861615155b610545575f80fd5b61058b60405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060048152602001634d4f564560e01b815250610b8f565b6105ce60405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060018152602001603160f81b815250610ba5565b6105d85f88610a44565b506105fd866105e96008600a61162e565b6105f8906402540be40061163c565b610c04565b831561064357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f805f8051602061178e8339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b5f61030e82610c38565b5f60608082808083815f805160206117ae83398151915280549091501580156106b157506001810154155b6106fa5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610702610c60565b61070a610c9e565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f9182525f805160206117ce833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061178e83398151915291610337906114ff565b5f336103c68185856109da565b834211156107d95760405163313c898160e11b8152600481018590526024016106f1565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108438c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089d82610cb4565b90505f6108ac82878787610ce0565b9050896001600160a01b0316816001600160a01b0316146108f3576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016106f1565b6108fe8a8a8a61096f565b50505050505050505050565b610913826103f3565b61091c81610a37565b61042f8383610aee565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104768383836001610d0c565b5f6109878484610926565b90505f1981101561042f57818110156109cc57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016106f1565b61042f84848484035f610d0c565b6001600160a01b038316610a0357604051634b637e8f60e11b81525f60048201526024016106f1565b6001600160a01b038216610a2c5760405163ec442f0560e01b81525f60048201526024016106f1565b610476838383610df0565b610a418133610f29565b50565b5f5f805160206117ce833981519152610a5d8484610734565b610adc575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610a923390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061030e565b5f91505061030e565b5f61043e610f62565b5f5f805160206117ce833981519152610b078484610734565b15610adc575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061030e565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061030e565b610b97610fd5565b610ba18282610ffc565b5050565b610bad610fd5565b5f805160206117ae8339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610be684826116ab565b5060038101610bf583826116ab565b505f8082556001909101555050565b6001600160a01b038216610c2d5760405163ec442f0560e01b81525f60048201526024016106f1565b610ba15f8383610df0565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0061065d565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206117ae83398151915291610337906114ff565b60605f5f805160206117ae833981519152610326565b5f61030e610cc0610ae5565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80610cf08888888861104c565b925092509250610d008282611114565b50909695505050505050565b5f8051602061178e8339815191526001600160a01b038516610d435760405163e602df0560e01b81525f60048201526024016106f1565b6001600160a01b038416610d6c57604051634a1406b160e11b81525f60048201526024016106f1565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610de957836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610de091815260200190565b60405180910390a35b5050505050565b5f8051602061178e8339815191526001600160a01b038416610e2a5781816002015f828254610e1f9190611766565b90915550610e9a9050565b6001600160a01b0384165f9081526020829052604090205482811015610e7c5760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016106f1565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610eb8576002810180548390039055610ed6565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f1b91815260200190565b60405180910390a350505050565b610f338282610734565b610ba15760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016106f1565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f8c6111cc565b610f94611234565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b610fdd611276565b610ffa57604051631afcd79f60e31b815260040160405180910390fd5b565b611004610fd5565b5f8051602061178e8339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361103d84826116ab565b506004810161042f83826116ab565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561108557505f9150600390508261110a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156110d6573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661110157505f92506001915082905061110a565b92505f91508190505b9450945094915050565b5f82600381111561112757611127611779565b03611130575050565b600182600381111561114457611144611779565b036111625760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561117657611176611779565b036111975760405163fce698f760e01b8152600481018290526024016106f1565b60038260038111156111ab576111ab611779565b03610ba1576040516335e2f38360e21b8152600481018290526024016106f1565b5f5f805160206117ae833981519152816111e4610c60565b8051909150156111fc57805160209091012092915050565b8154801561120b579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f805160206117ae8339815191528161124c610c9e565b80519091501561126457805160209091012092915050565b6001820154801561120b579392505050565b5f61127f610b67565b54600160401b900460ff16919050565b5f6020828403121561129f575f80fd5b81356001600160e01b0319811681146112b6575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112b660208301846112bd565b80356001600160a01b0381168114611313575f80fd5b919050565b5f8060408385031215611329575f80fd5b611332836112fd565b946020939093013593505050565b5f805f60608486031215611352575f80fd5b61135b846112fd565b9250611369602085016112fd565b929592945050506040919091013590565b5f6020828403121561138a575f80fd5b5035919050565b5f80604083850312156113a2575f80fd5b823591506113b2602084016112fd565b90509250929050565b5f80604083850312156113cc575f80fd5b6113d5836112fd565b91506113b2602084016112fd565b5f602082840312156113f3575f80fd5b6112b6826112fd565b60ff60f81b8816815260e060208201525f61141a60e08301896112bd565b828103604084015261142c81896112bd565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015611481578351835260209384019390920191600101611463565b50909b9a5050505050505050505050565b5f805f805f805f60e0888a0312156114a8575f80fd5b6114b1886112fd565b96506114bf602089016112fd565b95506040880135945060608801359350608088013560ff811681146114e2575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c9082168061151357607f821691505b60208210810361153157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156115865780850481111561156a5761156a611537565b600184161561157857908102905b60019390931c92800261154f565b935093915050565b5f8261159c5750600161030e565b816115a857505f61030e565b81600181146115be57600281146115c8576115e4565b600191505061030e565b60ff8411156115d9576115d9611537565b50506001821b61030e565b5060208310610133831016604e8410600b8410161715611607575081810a61030e565b6116135f19848461154b565b805f190482111561162657611626611537565b029392505050565b5f6112b660ff84168361158e565b808202811582820484141761030e5761030e611537565b634e487b7160e01b5f52604160045260245ffd5b601f82111561047657805f5260205f20601f840160051c8101602085101561168c5750805b601f840160051c820191505b81811015610de9575f8155600101611698565b815167ffffffffffffffff8111156116c5576116c5611653565b6116d9816116d384546114ff565b84611667565b6020601f82116001811461170b575f83156116f45750848201515b5f19600385901b1c1916600184901b178455610de9565b5f84815260208120601f198516915b8281101561173a578785015182556020948501946001909201910161171a565b508482101561175757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561030e5761030e611537565b634e487b7160e01b5f52602160045260245ffdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220ba6737519c4d823bd8173730e98a374cece7f227284185b724401425f8414dfe64736f6c634300081a0033","sourceMap":"299:1259:122:-:0;;;447:39;;;;;;;;;-1:-1:-1;462:22:122;:20;:22::i;:::-;299:1259;;7709:422:21;3147:66;7898:15;;;;;;;7894:76;;;7936:23;;-1:-1:-1;;;7936:23:21;;;;;;;;;;;7894:76;7983:14;;-1:-1:-1;;;;;7983:14:21;;;:34;7979:146;;8033:33;;-1:-1:-1;;;;;;8033:33:21;-1:-1:-1;;;;;8033:33:21;;;;;8085:29;;158:50:147;;;8085:29:21;;146:2:147;131:18;8085:29:21;;;;;;;7979:146;7758:373;7709:422::o;14:200:147:-;299:1259:122;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063485cc955116100b457806395d89b411161007957806395d89b4114610283578063a217fddf1461028b578063a9059cbb14610292578063d505accf146102a5578063d547741f146102b8578063dd62ed3e146102cb575f80fd5b8063485cc9551461021c57806370a082311461022f5780637ecebe001461024257806384b0196e1461025557806391d1485414610270575f80fd5b8063248a9ca3116100fa578063248a9ca3146101ca5780632f2ff15d146101dd578063313ce567146101f25780633644e5151461020157806336568abe14610209575f80fd5b806301ffc9a71461013657806306fdde031461015e578063095ea7b31461017357806318160ddd1461018657806323b872dd146101b7575b5f80fd5b61014961014436600461128f565b6102de565b60405190151581526020015b60405180910390f35b610166610314565b60405161015591906112eb565b610149610181366004611318565b6103b9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610155565b6101496101c5366004611340565b6103d0565b6101a96101d836600461137a565b6103f3565b6101f06101eb366004611391565b610413565b005b60405160088152602001610155565b6101a9610435565b6101f0610217366004611391565b610443565b6101f061022a3660046113bb565b61047b565b6101a961023d3660046113e3565b61064c565b6101a96102503660046113e3565b61067c565b61025d610686565b60405161015597969594939291906113fc565b61014961027e366004611391565b610734565b61016661076a565b6101a95f81565b6101496102a0366004611318565b6107a8565b6101f06102b3366004611492565b6107b5565b6101f06102c6366004611391565b61090a565b6101a96102d93660046113bb565b610926565b5f6001600160e01b03198216637965db0b60e01b148061030e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5f8051602061178e8339815191525b9050806003018054610337906114ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610363906114ff565b80156103ae5780601f10610385576101008083540402835291602001916103ae565b820191905f5260205f20905b81548152906001019060200180831161039157829003601f168201915b505050505091505090565b5f336103c681858561096f565b5060019392505050565b5f336103dd85828561097c565b6103e88585856109da565b506001949350505050565b5f9081525f805160206117ce833981519152602052604090206001015490565b61041c826103f3565b61042581610a37565b61042f8383610a44565b50505050565b5f61043e610ae5565b905090565b6001600160a01b038116331461046c5760405163334bd91960e11b815260040160405180910390fd5b6104768282610aee565b505050565b5f610484610b67565b805490915060ff600160401b820416159067ffffffffffffffff165f811580156104ab5750825b90505f8267ffffffffffffffff1660011480156104c75750303b155b9050811580156104d5575080155b156104f35760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561051d57845460ff60401b1916600160401b1785555b6001600160a01b0387161580159061053d57506001600160a01b03861615155b610545575f80fd5b61058b60405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060048152602001634d4f564560e01b815250610b8f565b6105ce60405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060018152602001603160f81b815250610ba5565b6105d85f88610a44565b506105fd866105e96008600a61162e565b6105f8906402540be40061163c565b610c04565b831561064357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f805f8051602061178e8339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b5f61030e82610c38565b5f60608082808083815f805160206117ae83398151915280549091501580156106b157506001810154155b6106fa5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610702610c60565b61070a610c9e565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f9182525f805160206117ce833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061178e83398151915291610337906114ff565b5f336103c68185856109da565b834211156107d95760405163313c898160e11b8152600481018590526024016106f1565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108438c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089d82610cb4565b90505f6108ac82878787610ce0565b9050896001600160a01b0316816001600160a01b0316146108f3576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016106f1565b6108fe8a8a8a61096f565b50505050505050505050565b610913826103f3565b61091c81610a37565b61042f8383610aee565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104768383836001610d0c565b5f6109878484610926565b90505f1981101561042f57818110156109cc57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016106f1565b61042f84848484035f610d0c565b6001600160a01b038316610a0357604051634b637e8f60e11b81525f60048201526024016106f1565b6001600160a01b038216610a2c5760405163ec442f0560e01b81525f60048201526024016106f1565b610476838383610df0565b610a418133610f29565b50565b5f5f805160206117ce833981519152610a5d8484610734565b610adc575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610a923390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061030e565b5f91505061030e565b5f61043e610f62565b5f5f805160206117ce833981519152610b078484610734565b15610adc575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061030e565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061030e565b610b97610fd5565b610ba18282610ffc565b5050565b610bad610fd5565b5f805160206117ae8339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610be684826116ab565b5060038101610bf583826116ab565b505f8082556001909101555050565b6001600160a01b038216610c2d5760405163ec442f0560e01b81525f60048201526024016106f1565b610ba15f8383610df0565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0061065d565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206117ae83398151915291610337906114ff565b60605f5f805160206117ae833981519152610326565b5f61030e610cc0610ae5565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80610cf08888888861104c565b925092509250610d008282611114565b50909695505050505050565b5f8051602061178e8339815191526001600160a01b038516610d435760405163e602df0560e01b81525f60048201526024016106f1565b6001600160a01b038416610d6c57604051634a1406b160e11b81525f60048201526024016106f1565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610de957836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610de091815260200190565b60405180910390a35b5050505050565b5f8051602061178e8339815191526001600160a01b038416610e2a5781816002015f828254610e1f9190611766565b90915550610e9a9050565b6001600160a01b0384165f9081526020829052604090205482811015610e7c5760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016106f1565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610eb8576002810180548390039055610ed6565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f1b91815260200190565b60405180910390a350505050565b610f338282610734565b610ba15760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016106f1565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f8c6111cc565b610f94611234565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b610fdd611276565b610ffa57604051631afcd79f60e31b815260040160405180910390fd5b565b611004610fd5565b5f8051602061178e8339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361103d84826116ab565b506004810161042f83826116ab565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561108557505f9150600390508261110a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156110d6573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661110157505f92506001915082905061110a565b92505f91508190505b9450945094915050565b5f82600381111561112757611127611779565b03611130575050565b600182600381111561114457611144611779565b036111625760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561117657611176611779565b036111975760405163fce698f760e01b8152600481018290526024016106f1565b60038260038111156111ab576111ab611779565b03610ba1576040516335e2f38360e21b8152600481018290526024016106f1565b5f5f805160206117ae833981519152816111e4610c60565b8051909150156111fc57805160209091012092915050565b8154801561120b579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f805160206117ae8339815191528161124c610c9e565b80519091501561126457805160209091012092915050565b6001820154801561120b579392505050565b5f61127f610b67565b54600160401b900460ff16919050565b5f6020828403121561129f575f80fd5b81356001600160e01b0319811681146112b6575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112b660208301846112bd565b80356001600160a01b0381168114611313575f80fd5b919050565b5f8060408385031215611329575f80fd5b611332836112fd565b946020939093013593505050565b5f805f60608486031215611352575f80fd5b61135b846112fd565b9250611369602085016112fd565b929592945050506040919091013590565b5f6020828403121561138a575f80fd5b5035919050565b5f80604083850312156113a2575f80fd5b823591506113b2602084016112fd565b90509250929050565b5f80604083850312156113cc575f80fd5b6113d5836112fd565b91506113b2602084016112fd565b5f602082840312156113f3575f80fd5b6112b6826112fd565b60ff60f81b8816815260e060208201525f61141a60e08301896112bd565b828103604084015261142c81896112bd565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015611481578351835260209384019390920191600101611463565b50909b9a5050505050505050505050565b5f805f805f805f60e0888a0312156114a8575f80fd5b6114b1886112fd565b96506114bf602089016112fd565b95506040880135945060608801359350608088013560ff811681146114e2575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c9082168061151357607f821691505b60208210810361153157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156115865780850481111561156a5761156a611537565b600184161561157857908102905b60019390931c92800261154f565b935093915050565b5f8261159c5750600161030e565b816115a857505f61030e565b81600181146115be57600281146115c8576115e4565b600191505061030e565b60ff8411156115d9576115d9611537565b50506001821b61030e565b5060208310610133831016604e8410600b8410161715611607575081810a61030e565b6116135f19848461154b565b805f190482111561162657611626611537565b029392505050565b5f6112b660ff84168361158e565b808202811582820484141761030e5761030e611537565b634e487b7160e01b5f52604160045260245ffd5b601f82111561047657805f5260205f20601f840160051c8101602085101561168c5750805b601f840160051c820191505b81811015610de9575f8155600101611698565b815167ffffffffffffffff8111156116c5576116c5611653565b6116d9816116d384546114ff565b84611667565b6020601f82116001811461170b575f83156116f45750848201515b5f19600385901b1c1916600184901b178455610de9565b5f84815260208120601f198516915b8281101561173a578785015182556020948501946001909201910161171a565b508482101561175757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561030e5761030e611537565b634e487b7160e01b5f52602160045260245ffdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220ba6737519c4d823bd8173730e98a374cece7f227284185b724401425f8414dfe64736f6c634300081a0033","sourceMap":"299:1259:122:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:20;;;;;;:::i;:::-;;:::i;:::-;;;470:14:147;;463:22;445:41;;433:2;418:18;3443:202:20;;;;;;;;2716:144:23;;;:::i;:::-;;;;;;;:::i;5210:186::-;;;;;;:::i;:::-;;:::i;3896:152::-;4027:14;;3896:152;;;1645:25:147;;;1633:2;1618:18;3896:152:23;1499:177:147;5988:244:23;;;;;;:::i;:::-;;:::i;4759:191:20:-;;;;;;:::i;:::-;;:::i;5246:136::-;;;;;;:::i;:::-;;:::i;:::-;;1474:82:122;;;1548:1;2920:36:147;;2908:2;2893:18;1474:82:122;2778:184:147;3085:112:24;;;:::i;6348:245:20:-;;;;;;:::i;:::-;;:::i;981:342:122:-;;;;;;:::i;:::-;;:::i;4106:171:23:-;;;;;;:::i;:::-;;:::i;2824:154:24:-;;;;;;:::i;:::-;;:::i;5172:903:27:-;;;:::i;:::-;;;;;;;;;;;;;:::i;3732:207:20:-;;;;;;:::i;:::-;;:::i;2973:148:23:-;;;:::i;2317:49:20:-;;2362:4;2317:49;;4472:178:23;;;;;;:::i;:::-;;:::i;2098:672:24:-;;;;;;:::i;:::-;;:::i;5662:138:20:-;;;;;;:::i;:::-;;:::i;4708:195:23:-;;;;;;:::i;:::-;;:::i;3443:202:20:-;3528:4;-1:-1:-1;;;;;;3551:47:20;;-1:-1:-1;;;3551:47:20;;:87;;-1:-1:-1;;;;;;;;;;1134:40:28;;;3602:36:20;3544:94;3443:202;-1:-1:-1;;3443:202:20:o;2716:144:23:-;2761:13;2786:22;-1:-1:-1;;;;;;;;;;;2811:18:23;2786:43;;2846:1;:7;;2839:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2716:144;:::o;5210:186::-;5283:4;966:10:25;5337:31:23;966:10:25;5353:7:23;5362:5;5337:8;:31::i;:::-;-1:-1:-1;5385:4:23;;5210:186;-1:-1:-1;;;5210:186:23:o;5988:244::-;6075:4;966:10:25;6131:37:23;6147:4;966:10:25;6162:5:23;6131:15;:37::i;:::-;6178:26;6188:4;6194:2;6198:5;6178:9;:26::i;:::-;-1:-1:-1;6221:4:23;;5988:244;-1:-1:-1;;;;5988:244:23:o;4759:191:20:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:20;;;;;:24;;;;4759:191::o;5246:136::-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;3085:112:24:-;3144:7;3170:20;:18;:20::i;:::-;3163:27;;3085:112;:::o;6348:245:20:-;-1:-1:-1;;;;;6441:34:20;;966:10:25;6441:34:20;6437:102;;6498:30;;-1:-1:-1;;;6498:30:20;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;981:342:122:-;4158:30:21;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:21;-1:-1:-1;;;4302:15:21;;;4301:16;;4348:14;;4279:19;4724:16;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4788:11;:16;;4803:1;4788:16;:50;;;;-1:-1:-1;4816:4:21;4808:25;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;-1:-1:-1;;;4906:23:21;;;;;;;;;;;4849:91;4949:18;;-1:-1:-1;;4949:18:21;4966:1;4949:18;;;4977:67;;;;5011:22;;-1:-1:-1;;;;5011:22:21;-1:-1:-1;;;5011:22:21;;;4977:67;-1:-1:-1;;;;;1072:20:122;::::1;::::0;;::::1;::::0;:46:::1;;-1:-1:-1::0;;;;;;1096:22:122;::::1;::::0;::::1;1072:46;1064:55;;;::::0;::::1;;1129:32;;;;;;;;;;;;;;-1:-1:-1::0;;;1129:32:122::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1129:32:122::1;;::::0;:12:::1;:32::i;:::-;1171:40;;;;;;;;;;;;;;-1:-1:-1::0;;;1171:40:122::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1171:40:122::1;;::::0;:23:::1;:40::i;:::-;1221:38;2362:4:20;1252:6:122::0;1221:10:::1;:38::i;:::-;-1:-1:-1::0;1269:47:122::1;1275:8:::0;1299:16:::1;1548:1:::0;1299:2:::1;:16;:::i;:::-;1285:30;::::0;:11:::1;:30;:::i;:::-;1269:5;:47::i;:::-;5068:14:21::0;5064:101;;;5098:23;;-1:-1:-1;;;;5098:23:21;;;5140:14;;-1:-1:-1;7849:50:147;;5140:14:21;;7837:2:147;7822:18;5140:14:21;;;;;;;5064:101;4092:1079;;;;;981:342:122;;:::o;4106:171:23:-;4171:7;;-1:-1:-1;;;;;;;;;;;4215:18:23;-1:-1:-1;;;;;4250:20:23;;;:11;:20;;;;;;;;-1:-1:-1;;4250:20:23;;;;;4106:171::o;2824:154:24:-;2926:7;2952:19;2965:5;2952:12;:19::i;5172:903:27:-;5270:13;5297:18;;5270:13;;;5297:18;5270:13;-1:-1:-1;;;;;;;;;;;5776:13:27;;5510:45;;-1:-1:-1;5776:18:27;:43;;;;-1:-1:-1;5798:16:27;;;;:21;5776:43;5768:77;;;;-1:-1:-1;;;5768:77:27;;8112:2:147;5768:77:27;;;8094:21:147;8151:2;8131:18;;;8124:30;-1:-1:-1;;;8170:18:147;;;8163:51;8231:18;;5768:77:27;;;;;;;;;5907:13;:11;:13::i;:::-;5934:16;:14;:16::i;:::-;6042;;;6026:1;6042:16;;;;;;;;;-1:-1:-1;;;5856:212:27;;;-1:-1:-1;5856:212:27;;-1:-1:-1;5964:13:27;;-1:-1:-1;5999:4:27;;-1:-1:-1;6026:1:27;-1:-1:-1;6042:16:27;-1:-1:-1;5856:212:27;-1:-1:-1;;5172:903:27:o;3732:207:20:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:20;;;;;;;;-1:-1:-1;;;;;3901:31:20;;;;;;;;;;;;;;;3732:207::o;2973:148:23:-;3105:9;3098:16;;3020:13;;-1:-1:-1;;;;;;;;;;;2064:20:23;3098:16;;;:::i;4472:178::-;4541:4;966:10:25;4595:27:23;966:10:25;4612:2:23;4616:5;4595:9;:27::i;2098:672:24:-;2319:8;2301:15;:26;2297:97;;;2350:33;;-1:-1:-1;;;2350:33:24;;;;;1645:25:147;;;1618:18;;2350:33:24;1499:177:147;2297:97:24;2404:18;1279:95;2463:5;2470:7;2479:5;2486:16;2496:5;-1:-1:-1;;;;;1954:16:26;1597:7;1954:16;;;1005:21;1954:16;;;;;:18;;;;;;;;;1537:452;2486:16:24;2435:78;;;;;;8679:25:147;;;;-1:-1:-1;;;;;8740:32:147;;;8720:18;;;8713:60;8809:32;;;;8789:18;;;8782:60;8858:18;;;8851:34;8901:19;;;8894:35;8945:19;;;8938:35;;;8651:19;;2435:78:24;;;;;;;;;;;;2425:89;;;;;;2404:110;;2525:12;2540:28;2557:10;2540:16;:28::i;:::-;2525:43;;2579:14;2596:28;2610:4;2616:1;2619;2622;2596:13;:28::i;:::-;2579:45;;2648:5;-1:-1:-1;;;;;2638:15:24;:6;-1:-1:-1;;;;;2638:15:24;;2634:88;;2676:35;;-1:-1:-1;;;2676:35:24;;-1:-1:-1;;;;;9176:32:147;;;2676:35:24;;;9158:51:147;9245:32;;9225:18;;;9218:60;9131:18;;2676:35:24;8984:300:147;2634:88:24;2732:31;2741:5;2748:7;2757:5;2732:8;:31::i;:::-;2287:483;;;2098:672;;;;;;;:::o;5662:138:20:-;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;4708:195:23:-:0;-1:-1:-1;;;;;4867:20:23;;;4788:7;4867:20;;;:13;:20;;;;;;;;:29;;;;;;;;;;;;;4708:195::o;10001:128::-;10085:37;10094:5;10101:7;10110:5;10117:4;10085:8;:37::i;11745:476::-;11844:24;11871:25;11881:5;11888:7;11871:9;:25::i;:::-;11844:52;;-1:-1:-1;;11910:16:23;:36;11906:309;;;11985:5;11966:16;:24;11962:130;;;12017:60;;-1:-1:-1;;;12017:60:23;;-1:-1:-1;;;;;9509:32:147;;12017:60:23;;;9491:51:147;9558:18;;;9551:34;;;9601:18;;;9594:34;;;9464:18;;12017:60:23;9289:345:147;11962:130:23;12133:57;12142:5;12149:7;12177:5;12158:16;:24;12184:5;12133:8;:57::i;6605:300::-;-1:-1:-1;;;;;6688:18:23;;6684:86;;6729:30;;-1:-1:-1;;;6729:30:23;;6756:1;6729:30;;;9785:51:147;9758:18;;6729:30:23;9639:203:147;6684:86:23;-1:-1:-1;;;;;6783:16:23;;6779:86;;6822:32;;-1:-1:-1;;;6822:32:23;;6851:1;6822:32;;;9785:51:147;9758:18;;6822:32:23;9639:203:147;6779:86:23;6874:24;6882:4;6888:2;6892:5;6874:7;:24::i;4148:103:20:-;4214:30;4225:4;966:10:25;4214::20;:30::i;:::-;4148:103;:::o;7270:387::-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:20;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:20;;;;;;;;;:38;;-1:-1:-1;;7475:38:20;7509:4;7475:38;;;7559:12;966:10:25;;887:96;7559:12:20;-1:-1:-1;;;;;7532:40:20;7550:7;-1:-1:-1;;;;;7532:40:20;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;4015:109:27;4068:7;4094:23;:21;:23::i;7894:388:20:-;7972:4;-1:-1:-1;;;;;;;;;;;8061:22:20;8069:4;8075:7;8061;:22::i;:::-;8057:219;;;8133:5;8099:14;;;;;;;;;;;-1:-1:-1;;;;;8099:31:20;;;;;;;;;;:39;;-1:-1:-1;;8099:39:20;;;8157:40;966:10:25;;8099:14:20;;8157:40;;8133:5;8157:40;8218:4;8211:11;;;;;9071:205:21;9129:30;;3147:66;9186:27;8819:122;2282:147:23;6929:20:21;:18;:20::i;:::-;2384:38:23::1;2407:5;2414:7;2384:22;:38::i;:::-;2282:147:::0;;:::o;3599:330:27:-;6929:20:21;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;3766:7:27;:14:::1;3776:4:::0;3766:7;:14:::1;:::i;:::-;-1:-1:-1::0;3790:10:27::1;::::0;::::1;:20;3803:7:::0;3790:10;:20:::1;:::i;:::-;-1:-1:-1::0;3891:1:27::1;3875:17:::0;;;3902:16:::1;::::0;;::::1;:20:::0;-1:-1:-1;;3599:330:27:o;8733:208:23:-;-1:-1:-1;;;;;8803:21:23;;8799:91;;8847:32;;-1:-1:-1;;;8847:32:23;;8876:1;8847:32;;;9785:51:147;9758:18;;8847:32:23;9639:203:147;8799:91:23;8899:35;8915:1;8919:7;8928:5;8899:7;:35::i;1259:164:26:-;1319:7;;1005:21;1364:19;886:156;6299:155:27;6440:7;6433:14;;6353:13;;-1:-1:-1;;;;;;;;;;;2839:21:27;6433:14;;;:::i;6681:161::-;6738:13;6763:23;-1:-1:-1;;;;;;;;;;;6789:19:27;2720:156;4946:176;5023:7;5049:66;5082:20;:18;:20::i;:::-;5104:10;4049:4:65;4043:11;-1:-1:-1;;;4067:23:65;;4119:4;4110:14;;4103:39;;;;4171:4;4162:14;;4155:34;4227:4;4212:20;;;3874:374;6887:260:64;6972:7;6992:17;7011:18;7031:16;7051:25;7062:4;7068:1;7071;7074;7051:10;:25::i;:::-;6991:85;;;;;;7086:28;7098:5;7105:8;7086:11;:28::i;:::-;-1:-1:-1;7131:9:64;;6887:260;-1:-1:-1;;;;;;6887:260:64:o;10976:487:23:-;-1:-1:-1;;;;;;;;;;;;;;;;11141:19:23;;11137:89;;11183:32;;-1:-1:-1;;;11183:32:23;;11212:1;11183:32;;;9785:51:147;9758:18;;11183:32:23;9639:203:147;11137:89:23;-1:-1:-1;;;;;11239:21:23;;11235:90;;11283:31;;-1:-1:-1;;;11283:31:23;;11311:1;11283:31;;;9785:51:147;9758:18;;11283:31:23;9639:203:147;11235:90:23;-1:-1:-1;;;;;11334:20:23;;;;;;;:13;;;:20;;;;;;;;:29;;;;;;;;;:37;;;11381:76;;;;11431:7;-1:-1:-1;;;;;11415:31:23;11424:5;-1:-1:-1;;;;;11415:31:23;;11440:5;11415:31;;;;1645:25:147;;1633:2;1618:18;;1499:177;11415:31:23;;;;;;;;11381:76;11074:389;10976:487;;;;:::o;7220:1170::-;-1:-1:-1;;;;;;;;;;;;;;;;7362:18:23;;7358:546;;7516:5;7498:1;:14;;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;7358:546:23;;-1:-1:-1;7358:546:23;;-1:-1:-1;;;;;7574:17:23;;7552:19;7574:17;;;;;;;;;;;7609:19;;;7605:115;;;7655:50;;-1:-1:-1;;;7655:50:23;;-1:-1:-1;;;;;9509:32:147;;7655:50:23;;;9491:51:147;9558:18;;;9551:34;;;9601:18;;;9594:34;;;9464:18;;7655:50:23;9289:345:147;7605:115:23;-1:-1:-1;;;;;7840:17:23;;:11;:17;;;;;;;;;;7860:19;;;;7840:39;;7358:546;-1:-1:-1;;;;;7918:16:23;;7914:429;;8081:14;;;:23;;;;;;;7914:429;;;-1:-1:-1;;;;;8294:15:23;;:11;:15;;;;;;;;;;:24;;;;;;7914:429;8373:2;-1:-1:-1;;;;;8358:25:23;8367:4;-1:-1:-1;;;;;8358:25:23;;8377:5;8358:25;;;;1645::147;;1633:2;1618:18;;1499:177;8358:25:23;;;;;;;;7295:1095;7220:1170;;;:::o;4381:197:20:-;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:20;;-1:-1:-1;;;;;12293:32:147;;4514:47:20;;;12275:51:147;12342:18;;;12335:34;;;12248:18;;4514:47:20;12101:274:147;4130:191:27;4185:7;2073:95;4243:17;:15;:17::i;:::-;4262:20;:18;:20::i;:::-;4221:92;;;;;;12639:25:147;;;;12680:18;;12673:34;;;;12723:18;;;12716:34;4284:13:27;12766:18:147;;;12759:34;4307:4:27;12809:19:147;;;12802:61;12611:19;;4221:92:27;;;;;;;;;;;;4211:103;;;;;;4204:110;;4130:191;:::o;7082:141:21:-;7149:17;:15;:17::i;:::-;7144:73;;7189:17;;-1:-1:-1;;;7189:17:21;;;;;;;;;;;7144:73;7082:141::o;2435:216:23:-;6929:20:21;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;2600:7:23;:15:::1;2610:5:::0;2600:7;:15:::1;:::i;:::-;-1:-1:-1::0;2625:9:23::1;::::0;::::1;:19;2637:7:::0;2625:9;:19:::1;:::i;5203:1551:64:-:0;5329:17;;;6283:66;6270:79;;6266:164;;;-1:-1:-1;6381:1:64;;-1:-1:-1;6385:30:64;;-1:-1:-1;6417:1:64;6365:54;;6266:164;6541:24;;;6524:14;6541:24;;;;;;;;;13101:25:147;;;13174:4;13162:17;;13142:18;;;13135:45;;;;13196:18;;;13189:34;;;13239:18;;;13232:34;;;6541:24:64;;13073:19:147;;6541:24:64;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6541:24:64;;-1:-1:-1;;6541:24:64;;;-1:-1:-1;;;;;;;6579:20:64;;6575:113;;-1:-1:-1;6631:1:64;;-1:-1:-1;6635:29:64;;-1:-1:-1;6631:1:64;;-1:-1:-1;6615:62:64;;6575:113;6706:6;-1:-1:-1;6714:20:64;;-1:-1:-1;6714:20:64;;-1:-1:-1;5203:1551:64;;;;;;;;;:::o;7280:532::-;7375:20;7366:5;:29;;;;;;;;:::i;:::-;;7362:444;;7280:532;;:::o;7362:444::-;7471:29;7462:5;:38;;;;;;;;:::i;:::-;;7458:348;;7523:23;;-1:-1:-1;;;7523:23:64;;;;;;;;;;;7458:348;7576:35;7567:5;:44;;;;;;;;:::i;:::-;;7563:243;;7634:46;;-1:-1:-1;;;7634:46:64;;;;;1645:25:147;;;1618:18;;7634:46:64;1499:177:147;7563:243:64;7710:30;7701:5;:39;;;;;;;;:::i;:::-;;7697:109;;7763:32;;-1:-1:-1;;;7763:32:64;;;;;1645:25:147;;;1618:18;;7763:32:64;1499:177:147;7057:687:27;7107:7;-1:-1:-1;;;;;;;;;;;7107:7:27;7202:13;:11;:13::i;:::-;7229:18;;7181:34;;-1:-1:-1;7229:22:27;7225:513;;7274:22;;;;;;;;7057:687;-1:-1:-1;;7057:687:27:o;7225:513::-;7571:13;;7602:15;;7598:130;;7644:10;7057:687;-1:-1:-1;;;7057:687:27:o;7598:130::-;7700:13;7693:20;;;;;7057:687;:::o;7965:723::-;8018:7;-1:-1:-1;;;;;;;;;;;8018:7:27;8116:16;:14;:16::i;:::-;8146:21;;8092:40;;-1:-1:-1;8146:25:27;8142:540;;8194:25;;;;;;;;7965:723;-1:-1:-1;;7965:723:27:o;8142:540::-;8506:16;;;;8540:18;;8536:136;;8585:13;7965:723;-1:-1:-1;;;7965:723:27:o;8485:120:21:-;8535:4;8558:26;:24;:26::i;:::-;:40;-1:-1:-1;;;8558:40:21;;;;;;-1:-1:-1;8485:120:21:o;14:286:147:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:147;;209:43;;199:71;;266:1;263;256:12;199:71;289:5;14:286;-1:-1:-1;;;14:286:147:o;497:289::-;539:3;577:5;571:12;604:6;599:3;592:19;660:6;653:4;646:5;642:16;635:4;630:3;626:14;620:47;712:1;705:4;696:6;691:3;687:16;683:27;676:38;775:4;768:2;764:7;759:2;751:6;747:15;743:29;738:3;734:39;730:50;723:57;;;497:289;;;;:::o;791:220::-;940:2;929:9;922:21;903:4;960:45;1001:2;990:9;986:18;978:6;960:45;:::i;1016:173::-;1084:20;;-1:-1:-1;;;;;1133:31:147;;1123:42;;1113:70;;1179:1;1176;1169:12;1113:70;1016:173;;;:::o;1194:300::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1362:29;1381:9;1362:29;:::i;:::-;1352:39;1460:2;1445:18;;;;1432:32;;-1:-1:-1;;;1194:300:147:o;1681:374::-;1758:6;1766;1774;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;1866:29;1885:9;1866:29;:::i;:::-;1856:39;;1914:38;1948:2;1937:9;1933:18;1914:38;:::i;:::-;1681:374;;1904:48;;-1:-1:-1;;;2021:2:147;2006:18;;;;1993:32;;1681:374::o;2060:226::-;2119:6;2172:2;2160:9;2151:7;2147:23;2143:32;2140:52;;;2188:1;2185;2178:12;2140:52;-1:-1:-1;2233:23:147;;2060:226;-1:-1:-1;2060:226:147:o;2473:300::-;2541:6;2549;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2663:23;;;-1:-1:-1;2729:38:147;2763:2;2748:18;;2729:38;:::i;:::-;2719:48;;2473:300;;;;;:::o;2967:260::-;3035:6;3043;3096:2;3084:9;3075:7;3071:23;3067:32;3064:52;;;3112:1;3109;3102:12;3064:52;3135:29;3154:9;3135:29;:::i;:::-;3125:39;;3183:38;3217:2;3206:9;3202:18;3183:38;:::i;3232:186::-;3291:6;3344:2;3332:9;3323:7;3319:23;3315:32;3312:52;;;3360:1;3357;3350:12;3312:52;3383:29;3402:9;3383:29;:::i;3423:1238::-;3829:3;3824;3820:13;3812:6;3808:26;3797:9;3790:45;3871:3;3866:2;3855:9;3851:18;3844:31;3771:4;3898:46;3939:3;3928:9;3924:19;3916:6;3898:46;:::i;:::-;3992:9;3984:6;3980:22;3975:2;3964:9;3960:18;3953:50;4026:33;4052:6;4044;4026:33;:::i;:::-;4090:2;4075:18;;4068:34;;;-1:-1:-1;;;;;4139:32:147;;4133:3;4118:19;;4111:61;4159:3;4188:19;;4181:35;;;4253:22;;;4247:3;4232:19;;4225:51;4325:13;;4347:22;;;4397:2;4423:15;;;;-1:-1:-1;4385:15:147;;;;-1:-1:-1;4466:169:147;4480:6;4477:1;4474:13;4466:169;;;4541:13;;4529:26;;4584:2;4610:15;;;;4575:12;;;;4502:1;4495:9;4466:169;;;-1:-1:-1;4652:3:147;;3423:1238;-1:-1:-1;;;;;;;;;;;3423:1238:147:o;4666:903::-;4777:6;4785;4793;4801;4809;4817;4825;4878:3;4866:9;4857:7;4853:23;4849:33;4846:53;;;4895:1;4892;4885:12;4846:53;4918:29;4937:9;4918:29;:::i;:::-;4908:39;;4966:38;5000:2;4989:9;4985:18;4966:38;:::i;:::-;4956:48;-1:-1:-1;5073:2:147;5058:18;;5045:32;;-1:-1:-1;5174:2:147;5159:18;;5146:32;;-1:-1:-1;5256:3:147;5241:19;;5228:33;5305:4;5292:18;;5280:31;;5270:59;;5325:1;5322;5315:12;5270:59;4666:903;;;;-1:-1:-1;4666:903:147;;;;5348:7;5428:3;5413:19;;5400:33;;-1:-1:-1;5532:3:147;5517:19;;;5504:33;;4666:903;-1:-1:-1;;4666:903:147:o;5574:380::-;5653:1;5649:12;;;;5696;;;5717:61;;5771:4;5763:6;5759:17;5749:27;;5717:61;5824:2;5816:6;5813:14;5793:18;5790:38;5787:161;;5870:10;5865:3;5861:20;5858:1;5851:31;5905:4;5902:1;5895:15;5933:4;5930:1;5923:15;5787:161;;5574:380;;;:::o;5959:127::-;6020:10;6015:3;6011:20;6008:1;6001:31;6051:4;6048:1;6041:15;6075:4;6072:1;6065:15;6091:375;6179:1;6197:5;6211:249;6232:1;6222:8;6219:15;6211:249;;;6282:4;6277:3;6273:14;6267:4;6264:24;6261:50;;;6291:18;;:::i;:::-;6341:1;6331:8;6327:16;6324:49;;;6355:16;;;;6324:49;6438:1;6434:16;;;;;6394:15;;6211:249;;;6091:375;;;;;;:::o;6471:902::-;6520:5;6550:8;6540:80;;-1:-1:-1;6591:1:147;6605:5;;6540:80;6639:4;6629:76;;-1:-1:-1;6676:1:147;6690:5;;6629:76;6721:4;6739:1;6734:59;;;;6807:1;6802:174;;;;6714:262;;6734:59;6764:1;6755:10;;6778:5;;;6802:174;6839:3;6829:8;6826:17;6823:43;;;6846:18;;:::i;:::-;-1:-1:-1;;6902:1:147;6888:16;;6961:5;;6714:262;;7060:2;7050:8;7047:16;7041:3;7035:4;7032:13;7028:36;7022:2;7012:8;7009:16;7004:2;6998:4;6995:12;6991:35;6988:77;6985:203;;;-1:-1:-1;7097:19:147;;;7173:5;;6985:203;7220:42;-1:-1:-1;;7245:8:147;7239:4;7220:42;:::i;:::-;7298:6;7294:1;7290:6;7286:19;7277:7;7274:32;7271:58;;;7309:18;;:::i;:::-;7347:20;;6471:902;-1:-1:-1;;;6471:902:147:o;7378:140::-;7436:5;7465:47;7506:4;7496:8;7492:19;7486:4;7465:47;:::i;7523:168::-;7596:9;;;7627;;7644:15;;;7638:22;;7624:37;7614:71;;7665:18;;:::i;8260:127::-;8321:10;8316:3;8312:20;8309:1;8302:31;8352:4;8349:1;8342:15;8376:4;8373:1;8366:15;9973:518;10075:2;10070:3;10067:11;10064:421;;;10111:5;10108:1;10101:16;10155:4;10152:1;10142:18;10225:2;10213:10;10209:19;10206:1;10202:27;10196:4;10192:38;10261:4;10249:10;10246:20;10243:47;;;-1:-1:-1;10284:4:147;10243:47;10339:2;10334:3;10330:12;10327:1;10323:20;10317:4;10313:31;10303:41;;10394:81;10412:2;10405:5;10402:13;10394:81;;;10471:1;10457:16;;10438:1;10427:13;10394:81;;10667:1299;10793:3;10787:10;10820:18;10812:6;10809:30;10806:56;;;10842:18;;:::i;:::-;10871:97;10961:6;10921:38;10953:4;10947:11;10921:38;:::i;:::-;10915:4;10871:97;:::i;:::-;11017:4;11048:2;11037:14;;11065:1;11060:649;;;;11753:1;11770:6;11767:89;;;-1:-1:-1;11822:19:147;;;11816:26;11767:89;-1:-1:-1;;10624:1:147;10620:11;;;10616:24;10612:29;10602:40;10648:1;10644:11;;;10599:57;11869:81;;11030:930;;11060:649;9920:1;9913:14;;;9957:4;9944:18;;-1:-1:-1;;11096:20:147;;;11214:222;11228:7;11225:1;11222:14;11214:222;;;11310:19;;;11304:26;11289:42;;11417:4;11402:20;;;;11370:1;11358:14;;;;11244:12;11214:222;;;11218:3;11464:6;11455:7;11452:19;11449:201;;;11525:19;;;11519:26;-1:-1:-1;;11608:1:147;11604:14;;;11620:3;11600:24;11596:37;11592:42;11577:58;11562:74;;11449:201;-1:-1:-1;;;;11696:1:147;11680:14;;;11676:22;11663:36;;-1:-1:-1;10667:1299:147:o;11971:125::-;12036:9;;;12057:10;;;12054:36;;;12070:18;;:::i;13277:127::-;13338:10;13333:3;13329:20;13326:1;13319:31;13369:4;13366:1;13359:15;13393:4;13390:1;13383:15","linkReferences":{}},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","eip712Domain()":"84b0196e","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize(address,address)":"485cc955","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"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\"},{\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"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\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"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\":[],\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_custody\",\"type\":\"address\"}],\"name\":\"initialize\",\"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\":[{\"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\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"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.\"}]},\"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.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"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}.\"},\"constructor\":{\"details\":\"Disables potential implementation exploit\"},\"decimals()\":{\"details\":\"Returns the number of decimals\"},\"eip712Domain()\":{\"details\":\"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize(address,address)\":{\"details\":\"Initializes the contract with initial parameters.\",\"params\":{\"_custody\":\"The address of the custody account.\",\"_owner\":\"The address of the owner who receives default admin role.\"}},\"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.\"},\"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.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"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`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"decimals()\":{\"notice\":\"decimals is set to 8, following the Movement network standard decimals\"},\"initialize(address,address)\":{\"notice\":\"The ERC20 token is named \\\"Movement\\\" with symbol \\\"MOVE\\\".EIP712 domain version is set to \\\"1\\\" for signatures.The owner is granted the `DEFAULT_ADMIN_ROLE`.10 billion MOVE tokens are minted to the owner's address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/MOVEToken.sol\":\"MOVEToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x949f1b87232ce60ae1d7651dfc4272f258a388448e08b4d624b1acbe05d8b39b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://469b7e1cab4c319957fddef8ad610ce347e2494d15389f3d3f689c4be66c1f7d\",\"dweb:/ipfs/QmdC9UdUZAYzjyZ2ULJgJ5QxhDHRtVJ8MJhHKjiotNfCeY\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x13c2d19041c51b246233f96874a66c0094b8a5ff78af3b85ea27867f302dcbbb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f1bc47de2e6e12b3680e47a4dd5b6e3c1e85b65851378aa1d617309edbc1200d\",\"dweb:/ipfs/QmSPcJ9HmkmsSDvMS4KZijnxoGMAEn8HbQuY4fe8DroZEE\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x37b2d71a3d12d55076e87942fb75e80ec8b6bacecd19b6562474952f6973d87b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4261c708ec31ae8764d242089617dc60c5e54a20ec781a42704886eda988a37a\",\"dweb:/ipfs/QmQqFiotrcCfB36B2pSfwGz4Bi4zhRgwwGAJ8VFBaEtzQ1\"]},\"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\":\"0xc42e24f0285994caee3bc6c916d41fefb36a618b319c611bfe9d35a3d3ae99a5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0b53cab18c57c95baf6a0a905720c0b689bbfb5d0bcd0e839bdfd2c94a4dc1\",\"dweb:/ipfs/QmNP63qE5U7KoTcG3SNj1Gwoa6pHsXxtNeidYzojfUBof6\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89\",\"dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xccb9b54747f3733f9ca435191745881587b2b48a12d6903358b59bc8ae39ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://021b637b39bddc68e1beed71677cb52919d27880804b1c7160d53064342786bc\",\"dweb:/ipfs/QmV3wgNQmoi9d6U3P7xwHAEKDoaQzGqGGjcSXsyWMf9rsK\"]},\"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\":\"0x967996585c54704fd501d06738b0dc2463207929f6f9d8e5193770ca88035130\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c22d1c0daf76538514f93f524c1a6dca7bf5a97992537122ef3a7f8632fb3375\",\"dweb:/ipfs/QmYpjvU5LV3HsQRvoCzy9CHzQMWxEro4mHYGvcgWkCPSPw\"]},\"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\":\"0x7ae21669569f436e69e064814c8b8986e1936972bdd9ad559b859f3abe7251ae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad6d66b7acf76e9ad8703c2a04c1e62c0394cba2ad8f0fbd98cf06b3d9dbb403\",\"dweb:/ipfs/QmSrJChs3MKqG6EFAi585MPJ1FyUvMxK66Bi7Pxm4e3qxU\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xc240f71206795cead02e49f999b3523414c230cec53423298d8457a7ce9d3ea4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d5813c665d5ea1b73e27844800eb45831b9ba608b2a9216ead318e246fd5e8f\",\"dweb:/ipfs/QmNStA3tbwHZm1tXgdmY4wB3NbYKJtzYWADjKmDMhYHjyA\"]},\"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/token/MOVEToken.sol\":{\"keccak256\":\"0x907babd7e2db7867a9401ab8edcecd579ad7db099ae4693a27e052887d91eb22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a87e3b44d5e5409f0695ca2057be132b02b12a6cfa3d95a1a69382458e16b20a\",\"dweb:/ipfs/QmPNA8kiRGr3jR4ngz8UeKLUM7QitN4J5xNbxxWYNncV9H\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"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","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":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","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":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"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":[],"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":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_custody","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"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":[{"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":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"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"}]}],"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}."},"constructor":{"details":"Disables potential implementation exploit"},"decimals()":{"details":"Returns the number of decimals"},"eip712Domain()":{"details":"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature."},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize(address,address)":{"details":"Initializes the contract with initial parameters.","params":{"_custody":"The address of the custody account.","_owner":"The address of the owner who receives default admin role."}},"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."},"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."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"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`."}},"version":1},"userdoc":{"kind":"user","methods":{"decimals()":{"notice":"decimals is set to 8, following the Movement network standard decimals"},"initialize(address,address)":{"notice":"The ERC20 token is named \"Movement\" with symbol \"MOVE\".EIP712 domain version is set to \"1\" for signatures.The owner is granted the `DEFAULT_ADMIN_ROLE`.10 billion MOVE tokens are minted to the owner's address."}},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/token/MOVEToken.sol":"MOVEToken"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x949f1b87232ce60ae1d7651dfc4272f258a388448e08b4d624b1acbe05d8b39b","urls":["bzz-raw://469b7e1cab4c319957fddef8ad610ce347e2494d15389f3d3f689c4be66c1f7d","dweb:/ipfs/QmdC9UdUZAYzjyZ2ULJgJ5QxhDHRtVJ8MJhHKjiotNfCeY"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x13c2d19041c51b246233f96874a66c0094b8a5ff78af3b85ea27867f302dcbbb","urls":["bzz-raw://f1bc47de2e6e12b3680e47a4dd5b6e3c1e85b65851378aa1d617309edbc1200d","dweb:/ipfs/QmSPcJ9HmkmsSDvMS4KZijnxoGMAEn8HbQuY4fe8DroZEE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x37b2d71a3d12d55076e87942fb75e80ec8b6bacecd19b6562474952f6973d87b","urls":["bzz-raw://4261c708ec31ae8764d242089617dc60c5e54a20ec781a42704886eda988a37a","dweb:/ipfs/QmQqFiotrcCfB36B2pSfwGz4Bi4zhRgwwGAJ8VFBaEtzQ1"],"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":"0xc42e24f0285994caee3bc6c916d41fefb36a618b319c611bfe9d35a3d3ae99a5","urls":["bzz-raw://ed0b53cab18c57c95baf6a0a905720c0b689bbfb5d0bcd0e839bdfd2c94a4dc1","dweb:/ipfs/QmNP63qE5U7KoTcG3SNj1Gwoa6pHsXxtNeidYzojfUBof6"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol":{"keccak256":"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab","urls":["bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89","dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xccb9b54747f3733f9ca435191745881587b2b48a12d6903358b59bc8ae39ea6b","urls":["bzz-raw://021b637b39bddc68e1beed71677cb52919d27880804b1c7160d53064342786bc","dweb:/ipfs/QmV3wgNQmoi9d6U3P7xwHAEKDoaQzGqGGjcSXsyWMf9rsK"],"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":"0x967996585c54704fd501d06738b0dc2463207929f6f9d8e5193770ca88035130","urls":["bzz-raw://c22d1c0daf76538514f93f524c1a6dca7bf5a97992537122ef3a7f8632fb3375","dweb:/ipfs/QmYpjvU5LV3HsQRvoCzy9CHzQMWxEro4mHYGvcgWkCPSPw"],"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":"0x7ae21669569f436e69e064814c8b8986e1936972bdd9ad559b859f3abe7251ae","urls":["bzz-raw://ad6d66b7acf76e9ad8703c2a04c1e62c0394cba2ad8f0fbd98cf06b3d9dbb403","dweb:/ipfs/QmSrJChs3MKqG6EFAi585MPJ1FyUvMxK66Bi7Pxm4e3qxU"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xc240f71206795cead02e49f999b3523414c230cec53423298d8457a7ce9d3ea4","urls":["bzz-raw://7d5813c665d5ea1b73e27844800eb45831b9ba608b2a9216ead318e246fd5e8f","dweb:/ipfs/QmNStA3tbwHZm1tXgdmY4wB3NbYKJtzYWADjKmDMhYHjyA"],"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/token/MOVEToken.sol":{"keccak256":"0x907babd7e2db7867a9401ab8edcecd579ad7db099ae4693a27e052887d91eb22","urls":["bzz-raw://a87e3b44d5e5409f0695ca2057be132b02b12a6cfa3d95a1a69382458e16b20a","dweb:/ipfs/QmPNA8kiRGr3jR4ngz8UeKLUM7QitN4J5xNbxxWYNncV9H"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/token/MOVEToken.sol","id":64430,"exportedSymbols":{"AccessControlUpgradeable":[39478],"ERC20PermitUpgradeable":[40714],"MOVEToken":[64429]},"nodeType":"SourceUnit","src":"32:1526:122","nodes":[{"id":64350,"nodeType":"PragmaDirective","src":"32:24:122","nodes":[],"literals":["solidity","^","0.8",".19"]},{"id":64352,"nodeType":"ImportDirective","src":"58:125:122","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":64430,"sourceUnit":40715,"symbolAliases":[{"foreign":{"id":64351,"name":"ERC20PermitUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40714,"src":"66:22:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":64354,"nodeType":"ImportDirective","src":"184:113:122","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol","nameLocation":"-1:-1:-1","scope":64430,"sourceUnit":39479,"symbolAliases":[{"foreign":{"id":64353,"name":"AccessControlUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39478,"src":"192:24:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":64429,"nodeType":"ContractDefinition","src":"299:1259:122","nodes":[{"id":64366,"nodeType":"FunctionDefinition","src":"447:39:122","nodes":[],"body":{"id":64365,"nodeType":"Block","src":"461:25:122","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":64362,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39700,"src":"462:20:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":64363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"462:22:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":64364,"nodeType":"ExpressionStatement","src":"462:22:122"}]},"documentation":{"id":64359,"nodeType":"StructuredDocumentation","src":"377:65:122","text":" @dev Disables potential implementation exploit"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":64360,"nodeType":"ParameterList","parameters":[],"src":"458:2:122"},"returnParameters":{"id":64361,"nodeType":"ParameterList","parameters":[],"src":"461:0:122"},"scope":64429,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":64418,"nodeType":"FunctionDefinition","src":"981:342:122","nodes":[],"body":{"id":64417,"nodeType":"Block","src":"1054:269:122","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":64389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":64382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":64377,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64369,"src":"1072:6:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":64380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1090:1:122","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":64379,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1082:7:122","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":64378,"name":"address","nodeType":"ElementaryTypeName","src":"1082:7:122","typeDescriptions":{}}},"id":64381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1082:10:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1072:20:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":64388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":64383,"name":"_custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64371,"src":"1096:8:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":64386,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1116:1:122","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":64385,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1108:7:122","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":64384,"name":"address","nodeType":"ElementaryTypeName","src":"1108:7:122","typeDescriptions":{}}},"id":64387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1108:10:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1096:22:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1072:46:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":64376,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1064:7:122","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":64390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1064:55:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":64391,"nodeType":"ExpressionStatement","src":"1064:55:122"},{"expression":{"arguments":[{"hexValue":"4d6f76656d656e74","id":64393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1142:10:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},"value":"Movement"},{"hexValue":"4d4f5645","id":64394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1154:6:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_94304e8d07ec49123c30284d16c4a1082e90258cc0faf510314d9c3808edcda0","typeString":"literal_string \"MOVE\""},"value":"MOVE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},{"typeIdentifier":"t_stringliteral_94304e8d07ec49123c30284d16c4a1082e90258cc0faf510314d9c3808edcda0","typeString":"literal_string \"MOVE\""}],"id":64392,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39996,"src":"1129:12:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":64395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1129:32:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":64396,"nodeType":"ExpressionStatement","src":"1129:32:122"},{"expression":{"arguments":[{"hexValue":"4d6f76656d656e74","id":64398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1195:10:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},"value":"Movement"},{"hexValue":"31","id":64399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1207:3:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""}],"id":64397,"name":"__EIP712_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40968,"src":"1171:23:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":64400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1171:40:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":64401,"nodeType":"ExpressionStatement","src":"1171:40:122"},{"expression":{"arguments":[{"id":64403,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39144,"src":"1232:18:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":64404,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64369,"src":"1252:6:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":64402,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39431,"src":"1221:10:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":64405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1221:38:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":64406,"nodeType":"ExpressionStatement","src":"1221:38:122"},{"expression":{"arguments":[{"id":64408,"name":"_custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64371,"src":"1275:8:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":64414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130303030303030303030","id":64409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1285:11:122","typeDescriptions":{"typeIdentifier":"t_rational_10000000000_by_1","typeString":"int_const 10000000000"},"value":"10000000000"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":64413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":64410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1299:2:122","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":64411,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[64428],"referencedDeclaration":64428,"src":"1305:8:122","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint8_$","typeString":"function () pure returns (uint8)"}},"id":64412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1305:10:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1299:16:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1285:30:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":64407,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40377,"src":"1269:5:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":64415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1269:47:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":64416,"nodeType":"ExpressionStatement","src":"1269:47:122"}]},"documentation":{"id":64367,"nodeType":"StructuredDocumentation","src":"492:484:122","text":" @dev Initializes the contract with initial parameters.\n @param _owner The address of the owner who receives default admin role.\n @param _custody The address of the custody account.\n @notice The ERC20 token is named \"Movement\" with symbol \"MOVE\".\n @notice EIP712 domain version is set to \"1\" for signatures.\n @notice The owner is granted the `DEFAULT_ADMIN_ROLE`.\n @notice 10 billion MOVE tokens are minted to the owner's address."},"functionSelector":"485cc955","implemented":true,"kind":"function","modifiers":[{"id":64374,"kind":"modifierInvocation","modifierName":{"id":64373,"name":"initializer","nameLocations":["1042:11:122"],"nodeType":"IdentifierPath","referencedDeclaration":39586,"src":"1042:11:122"},"nodeType":"ModifierInvocation","src":"1042:11:122"}],"name":"initialize","nameLocation":"990:10:122","parameters":{"id":64372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":64369,"mutability":"mutable","name":"_owner","nameLocation":"1009:6:122","nodeType":"VariableDeclaration","scope":64418,"src":"1001:14:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":64368,"name":"address","nodeType":"ElementaryTypeName","src":"1001:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":64371,"mutability":"mutable","name":"_custody","nameLocation":"1025:8:122","nodeType":"VariableDeclaration","scope":64418,"src":"1017:16:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":64370,"name":"address","nodeType":"ElementaryTypeName","src":"1017:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1000:34:122"},"returnParameters":{"id":64375,"nodeType":"ParameterList","parameters":[],"src":"1054:0:122"},"scope":64429,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":64428,"nodeType":"FunctionDefinition","src":"1474:82:122","nodes":[],"body":{"id":64427,"nodeType":"Block","src":"1531:25:122","nodes":[],"statements":[{"expression":{"hexValue":"38","id":64425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1548:1:122","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"functionReturnParameters":64424,"id":64426,"nodeType":"Return","src":"1541:8:122"}]},"baseFunctions":[40065],"documentation":{"id":64419,"nodeType":"StructuredDocumentation","src":"1329:140:122","text":" @dev Returns the number of decimals\n @notice decimals is set to 8, following the Movement network standard decimals"},"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"1483:8:122","overrides":{"id":64421,"nodeType":"OverrideSpecifier","overrides":[],"src":"1506:8:122"},"parameters":{"id":64420,"nodeType":"ParameterList","parameters":[],"src":"1491:2:122"},"returnParameters":{"id":64424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":64423,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":64428,"src":"1524:5:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":64422,"name":"uint8","nodeType":"ElementaryTypeName","src":"1524:5:122","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1523:7:122"},"scope":64429,"stateMutability":"pure","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":64355,"name":"ERC20PermitUpgradeable","nameLocations":["321:22:122"],"nodeType":"IdentifierPath","referencedDeclaration":40714,"src":"321:22:122"},"id":64356,"nodeType":"InheritanceSpecifier","src":"321:22:122"},{"baseName":{"id":64357,"name":"AccessControlUpgradeable","nameLocations":["345:24:122"],"nodeType":"IdentifierPath","referencedDeclaration":39478,"src":"345:24:122"},"id":64358,"nodeType":"InheritanceSpecifier","src":"345:24:122"}],"canonicalName":"MOVEToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[64429,39478,41255,47988,41634,40714,40871,41215,42938,43910,40545,42990,43874,43848,40760,39746],"name":"MOVEToken","nameLocation":"308:9:122","scope":64430,"usedErrors":[39495,39498,40580,40587,40774,41561,41564,42960,42965,42970,42979,42984,42989,47529,47534,47539],"usedEvents":[39503,41573,41582,41591,42918,43782,43791]}],"license":"MIT"},"id":122} \ No newline at end of file diff --git a/protocol/pcp/cli/client/abis/MovementStaking.json b/protocol/pcp/cli/client/abis/MovementStaking.json new file mode 100644 index 00000000..35f663ee --- /dev/null +++ b/protocol/pcp/cli/client/abis/MovementStaking.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"WHITELIST_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"acceptGenesisCeremony","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"computeAllStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"computeAllStakeForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"currentAcceptingEpochByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"currentAcceptingEpoch","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"domainGenesisAccepted","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"epochDurationByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"epochDuration","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStakeForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStakeForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochByL1BlockTime","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochDuration","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextAcceptingEpochWithException","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextPresentEpochWithException","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRegisteredAttesters","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRegisteredCustodians","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakeForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakedAttestersForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getUnstake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUnstakeForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"_token","type":"address","internalType":"contract IERC20"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"registerDomain","inputs":[{"name":"epochDuration","type":"uint256","internalType":"uint256"},{"name":"custodians","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeAddressFromWhitelist","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardArray","inputs":[{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"amounts","type":"uint256[]","internalType":"uint256[]"},{"name":"custodians","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardFromDomain","inputs":[{"name":"attester","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rollOverEpoch","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"newEpoch","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"slash","inputs":[{"name":"custodians","type":"address[]","internalType":"address[]"},{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"amounts","type":"uint256[]","internalType":"uint256[]"},{"name":"refundAmounts","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"contract IERC20"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakesByDomainEpochCustodian","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"stakesByDomainEpochCustodianAttester","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"unstake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unstakesByDomainEpochCustodianAttester","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"whitelistAddress","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AttesterEpochRolledOver","inputs":[{"name":"attester","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"unstake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AttesterStaked","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":false,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AttesterUnstaked","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":false,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EpochRolledOver","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"CustodianTransferAmountMismatch","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"EpochDurationNotSet","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"GenesisAlreadyAccepted","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"StakeExceedsGenesisStake","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a0604052306080523480156012575f80fd5b50600160095560805161319661003e5f395f8181611e5901528181611e820152611fc301526131965ff3fe6080604052600436106102a5575f3560e01c80635e00bf461161016f578063a78d1fef116100d8578063c4d66de811610092578063d547741f1161006d578063d547741f146108a8578063d980b40d146108c7578063e6e3fb3a146108e6578063fc0c546a1461092b575f80fd5b8063c4d66de81461083c578063d1ba90ff1461085b578063d37304f814610889575f80fd5b8063a78d1fef14610763578063a885c97514610782578063a887b71c146107a1578063ad3cb1cc146107b5578063b1de97f7146107f2578063bf6eac2f1461081d575f80fd5b806386af70d11161012957806386af70d1146106a357806391d14854146106df57806392a2ebf3146106fe57806393dfb85c146107125780639db92f6814610731578063a217fddf14610750575f80fd5b80635e00bf46146105f357806360829f8a14610612578063771fcfc4146106315780637a997ab7146106505780637d93768b146106705780638129fc1c1461068f575f80fd5b806336568abe116102115780634f1ef286116101cb5780634f1ef2861461053b57806352d1902d1461054e57806355bdbe4c14610562578063574663a91461058157806357dd6a94146105a05780635c534359146105bf575f80fd5b806336568abe146104755780633bccf635146104945780633debeadc146104bf57806341566585146104de5780634234a479146104fd5780634e76a1391461051c575f80fd5b8063248a9ca311610262578063248a9ca3146103bb57806324fdfddf146103da578063286dd3f5146103f95780632f2ff15d14610418578063341d5ef51461043757806334eada3a14610456575f80fd5b806301ffc9a7146102a95780630c8f522f146102dd5780630ce52af5146103305780631789aeb41461034f5780631dc8b9491461037b57806322fceb751461039c575b5f80fd5b3480156102b4575f80fd5b506102c86102c3366004612ae0565b610961565b60405190151581526020015b60405180910390f35b3480156102e8575f80fd5b506103226102f7366004612b1b565b600560209081525f948552604080862082529385528385208152918452828420909152825290205481565b6040519081526020016102d4565b34801561033b575f80fd5b5061032261034a366004612b6b565b610997565b34801561035a575f80fd5b5061036e610369366004612baa565b6109cc565b6040516102d49190612bc5565b348015610386575f80fd5b5061039a610395366004612c05565b610ab6565b005b3480156103a7575f80fd5b506103226103b6366004612baa565b610bf2565b3480156103c6575f80fd5b506103226103d5366004612c2f565b610c0c565b3480156103e5575f80fd5b506103226103f4366004612b6b565b610c2c565b348015610404575f80fd5b5061039a610413366004612baa565b610ca3565b348015610423575f80fd5b5061039a610432366004612c46565b610cc8565b348015610442575f80fd5b5061036e610451366004612baa565b610cea565b348015610461575f80fd5b50610322610470366004612c74565b610dcd565b348015610480575f80fd5b5061039a61048f366004612c46565b610dea565b34801561049f575f80fd5b506103226104ae366004612baa565b60016020525f908152604090205481565b3480156104ca575f80fd5b506103226104d9366004612cb1565b610e22565b3480156104e9575f80fd5b5061039a6104f8366004612baa565b610e36565b348015610508575f80fd5b5061036e610517366004612baa565b610e57565b348015610527575f80fd5b5061039a610536366004612d24565b610fa5565b61039a610549366004612dd4565b611042565b348015610559575f80fd5b5061032261105d565b34801561056d575f80fd5b5061032261057c366004612c05565b611078565b34801561058c575f80fd5b5061032261059b366004612baa565b61110d565b3480156105ab575f80fd5b506103226105ba366004612baa565b61111b565b3480156105ca575f80fd5b506103226105d9366004612baa565b6001600160a01b03165f9081526001602052604090205490565b3480156105fe575f80fd5b5061039a61060d366004612b6b565b61114a565b34801561061d575f80fd5b5061039a61062c366004612e97565b611168565b34801561063c575f80fd5b5061032261064b366004612baa565b6111fd565b34801561065b575f80fd5b506103225f8051602061310183398151915281565b34801561067b575f80fd5b5061032261068a366004612b1b565b611215565b34801561069a575f80fd5b5061039a611252565b3480156106ae575f80fd5b506103226106bd366004612b6b565b600760209081525f938452604080852082529284528284209052825290205481565b3480156106ea575f80fd5b506102c86106f9366004612c46565b611347565b348015610709575f80fd5b5061039a61137d565b34801561071d575f80fd5b5061032261072c366004612b1b565b61150f565b34801561073c575f80fd5b5061032261074b366004612cb1565b61154c565b34801561075b575f80fd5b506103225f81565b34801561076e575f80fd5b5061032261077d366004612c74565b611560565b34801561078d575f80fd5b5061039a61079c366004612ed5565b611575565b3480156107ac575f80fd5b5061039a611797565b3480156107c0575f80fd5b506107e5604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102d49190612f9f565b3480156107fd575f80fd5b5061032261080c366004612baa565b60026020525f908152604090205481565b348015610828575f80fd5b5061039a610837366004612e97565b6117a9565b348015610847575f80fd5b5061039a610856366004612baa565b6119d4565b348015610866575f80fd5b506102c8610875366004612baa565b60086020525f908152604090205460ff1681565b348015610894575f80fd5b5061039a6108a3366004612fd4565b611ae3565b3480156108b3575f80fd5b5061039a6108c2366004612c46565b611b61565b3480156108d2575f80fd5b506103226108e1366004612baa565b611b7d565b3480156108f1575f80fd5b50610322610900366004612b1b565b600660209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610936575f80fd5b505f54610949906001600160a01b031681565b6040516001600160a01b0390911681526020016102d4565b5f6001600160e01b03198216637965db0b60e01b148061099157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001600160a01b038084165f9081526007602090815260408083208684528252808320938516835292905220545b9392505050565b6001600160a01b0381165f908152600360205260408120606091906109f090611bd6565b6001600160401b03811115610a0757610a07612dc0565b604051908082528060200260200182016040528015610a30578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600360205260409020610a5590611bd6565b811015610aaf576001600160a01b0384165f908152600360205260409020610a7d9082611bdf565b828281518110610a8f57610a8f61301b565b6001600160a01b0390921660209283029190910190910152600101610a35565b5092915050565b610abf82611b7d565b811115610b255760405162461bcd60e51b815260206004820152602960248201527f4e45575f45504f43485f4d5553545f42455f4c4553535f5448414e5f5052455360448201526808a9ca8be8aa09e86960bb1b60648201526084015b60405180910390fd5b610b2e82610bf2565b8111610b905760405162461bcd60e51b815260206004820152602b60248201527f4e45575f45504f43485f4d5553545f42455f4849474845525f5448414e5f435560448201526a0a4a48a9ca8be8aa09e86960ab1b6064820152608401610b1c565b336001600160a01b03831614610bd75760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610b1c565b6001600160a01b039091165f90815260026020526040902055565b6001600160a01b03165f9081526002602052604090205490565b5f9081525f80516020613141833981519152602052604090206001015490565b5f80805b6001600160a01b0386165f908152600460205260409020610c5090611bd6565b811015610c9a576001600160a01b0386165f908152600460205260409020610c869087908790610c809085611bdf565b8761150f565b610c909083613043565b9150600101610c30565b50949350505050565b5f610cad81611bea565b610cc45f8051602061310183398151915283611b61565b5050565b610cd182610c0c565b610cda81611bea565b610ce48383611bf7565b50505050565b6001600160a01b0381165f90815260046020526040812060609190610d0e90611bd6565b6001600160401b03811115610d2557610d25612dc0565b604051908082528060200260200182016040528015610d4e578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600460205260409020610d7390611bd6565b811015610aaf576001600160a01b0384165f908152600460205260409020610d9b9082611bdf565b828281518110610dad57610dad61301b565b6001600160a01b0390921660209283029190910190910152600101610d53565b5f610de284610ddb86610bf2565b8585611215565b949350505050565b6001600160a01b0381163314610e135760405163334bd91960e11b815260040160405180910390fd5b610e1d8282611c98565b505050565b5f6109c583610e3085610bf2565b84610c2c565b5f610e4081611bea565b610cc45f8051602061310183398151915283610cc8565b6001600160a01b0381165f90815260036020526040812060609190610e7b90611bd6565b90505f805b82811015610ed3576001600160a01b0385165f908152600360205260408120610ea99083611bdf565b90505f610eb68783610e22565b1115610eca5782610ec681613056565b9350505b50600101610e80565b505f816001600160401b03811115610eed57610eed612dc0565b604051908082528060200260200182016040528015610f16578160200160208202803683370190505b5090505f805b84811015610f9a576001600160a01b0387165f908152600360205260408120610f459083611bdf565b90505f610f528983610e22565b1115610f915780848481518110610f6b57610f6b61301b565b6001600160a01b039092166020928302919091019091015282610f8d81613056565b9350505b50600101610f1c565b509095945050505050565b610fad611d11565b5f5b8581101561102f5761102733888884818110610fcd57610fcd61301b565b9050602002016020810190610fe29190612baa565b858585818110610ff457610ff461301b565b90506020020160208101906110099190612baa565b88888681811061101b5761101b61301b565b90506020020135611d3b565b600101610faf565b5061103a6001600955565b505050505050565b61104a611e4e565b61105382611ef2565b610cc48282611efc565b5f611066611fb8565b505f8051602061312183398151915290565b5f8061108384610cea565b90505f61108f856109cc565b90505f805b8351811015611103575f5b83518110156110fa576110e688888785815181106110bf576110bf61301b565b60200260200101518785815181106110d9576110d961301b565b602002602001015161150f565b6110f09084613043565b925060010161109f565b50600101611094565b5095945050505050565b5f6109918261057c84610bf2565b5f61112582610bf2565b156111435761113382611b7d565b61113e906001613043565b610991565b5f92915050565b611152611d11565b61115e33848385611d3b565b610e1d6001600955565b5f8051602061310183398151915261117f81611bea565b611187611d11565b61119c84611194866111fd565b853386612001565b826001600160a01b03166111af856111fd565b60408051338152602081018690526001600160a01b038816917fd41c64546a5c34c283150998874c7ee0412c8954f57aef484c681f6e137827df910160405180910390a4610ce46001600955565b5f61120782610bf2565b156111435761113382610bf2565b6001600160a01b039384165f9081526006602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f61125b612055565b805490915060ff600160401b82041615906001600160401b03165f811580156112815750825b90505f826001600160401b0316600114801561129c5750303b155b9050811580156112aa575080155b156112c85760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156112f257845460ff60401b1916600160401b1785555b6112fa61207d565b831561134057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f9182525f80516020613141833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611385611d11565b335f8181526008602052604090205460ff16156113b45760405162fe178760e01b815260040160405180910390fd5b6001600160a01b0381165f908152600860209081526040808320805460ff191660019081179091559091529020546113ee576113ee61306e565b6113f781611b7d565b6001600160a01b0382165f908152600260205260408120919091555b6001600160a01b0382165f90815260036020526040902061143390611bd6565b811015611501576001600160a01b0382165f90815260036020526040812061145b9083611bdf565b90505f5b6001600160a01b0384165f90815260046020526040902061147f90611bd6565b8110156114f7576001600160a01b0384165f9081526004602052604081206114a79083611bdf565b90505f6114b6865f848761150f565b90505f6114c287610bf2565b11156114ed575f6114d287610bf2565b11156114ed576114ed866114e588610bf2565b84878561208d565b505060010161145f565b5050600101611413565b505061150d6001600955565b565b6001600160a01b039384165f9081526005602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f6109c58361155a85610bf2565b84610997565b5f610de28461156e86610bf2565b858561150f565b61157d611d11565b5f5b85811015611782575f611646611607336115b98b8b878181106115a4576115a461301b565b90506020020160208101906103b69190612baa565b8d8d878181106115cb576115cb61301b565b90506020020160208101906115e09190612baa565b8c8c888181106115f2576115f261301b565b905060200201602081019061072c9190612baa565b61164188888681811061161c5761161c61301b565b905060200201358787878181106116355761163561301b565b90506020020135612118565b612118565b90506116a03089898581811061165e5761165e61301b565b90506020020160208101906116739190612baa565b8c8c868181106116855761168561301b565b905060200201602081019061169a9190612baa565b84612127565b611719336116ad33610bf2565b8c8c868181106116bf576116bf61301b565b90506020020160208101906116d49190612baa565b8b8b878181106116e6576116e661301b565b90506020020160208101906116fb9190612baa565b8a8a8881811061170d5761170d61301b565b90506020020135612194565b6117793361172633610bf2565b8c8c868181106117385761173861301b565b905060200201602081019061174d9190612baa565b8b8b8781811061175f5761175f61301b565b90506020020160208101906117749190612baa565b6121d4565b5060010161157f565b5061178d6001600955565b5050505050505050565b61150d336117a433610bf2565b612246565b5f805160206131018339815191526117c081611bea565b6117c8611d11565b6001600160a01b0384165f9081526003602052604090206117e99033612363565b505f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611830573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118549190613082565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303815f875af11580156118a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118cb9190613099565b506118d68382613043565b5f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561191b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193f9190613082565b1461195d57604051631910d68360e21b815260040160405180910390fd5b6119728561196a876111fd565b86338761208d565b836001600160a01b0316611985866111fd565b60408051338152602081018790526001600160a01b038916917f7be65c2ae4d3c544de23b1db5bea4d541c02b93a5f4302852f4dc9880e0cb554910160405180910390a450610ce46001600955565b5f6119dd612055565b805490915060ff600160401b82041615906001600160401b03165f81158015611a035750825b90505f826001600160401b03166001148015611a1e5750303b155b905081158015611a2c575080155b15611a4a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611a7457845460ff60401b1916600160401b1785555b611a7c612377565b5f80546001600160a01b0319166001600160a01b038816179055831561103a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b611aeb611d11565b335f8181526001602052604081208590555b82811015611b5557611b4c848483818110611b1a57611b1a61301b565b9050602002016020810190611b2f9190612baa565b6001600160a01b0384165f90815260046020526040902090612363565b50600101611afd565b5050610e1d6001600955565b611b6a82610c0c565b611b7381611bea565b610ce48383611c98565b6001600160a01b0381165f908152600160205260408120548103611bb45760405163143c378b60e01b815260040160405180910390fd5b6001600160a01b0382165f9081526001602052604090205461099190426130b8565b5f610991825490565b5f6109c58383612389565b611bf481336123af565b50565b5f5f80516020613141833981519152611c108484611347565b611c8f575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611c453390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610991565b5f915050610991565b5f5f80516020613141833981519152611cb18484611347565b15611c8f575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610991565b600260095403611d3457604051633ee5aeb560e01b815260040160405180910390fd5b6002600955565b303303611d805760405162461bcd60e51b81526020600482015260136024820152724f6e6c792065787465726e616c2063616c6c7360681b6044820152606401610b1c565b5f546001600160a01b03838116911614611dd25760405162461bcd60e51b815260206004820152601360248201527226bab9ba103ab9b2903130b9b2903a37b5b2b760691b6044820152606401610b1c565b5f546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201849052909116906323b872dd906064015b6020604051808303815f875af1158015611e2a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113409190613099565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611ed457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ec85f80516020613121833981519152546001600160a01b031690565b6001600160a01b031614155b1561150d5760405163703e46dd60e11b815260040160405180910390fd5b5f610cc481611bea565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611f56575060408051601f3d908101601f19168201909252611f5391810190613082565b60015b611f7e57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610b1c565b5f805160206131218339815191528114611fae57604051632a87526960e21b815260048101829052602401610b1c565b610e1d83836123e8565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461150d5760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b038086165f90815260066020908152604080832088845282528083208785168452825280832093861683529290529081208054839290612049908490613043565b90915550505050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610991565b61208561243d565b61150d612377565b6001600160a01b038086165f908152600560209081526040808320888452825280832087851684528252808320938616835292905290812080548392906120d5908490613043565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290612049908490613043565b5f8282188284100282186109c5565b306001600160a01b03851603612168575f546001600160a01b0380841691160361215c5761215784848484612462565b610ce4565b6121578484848461254e565b5f546001600160a01b038084169116036121885761215784848484611d3b565b610ce4848484846126d5565b835f6121a28783878761150f565b9050828110156121be576121b987838787856127ae565b6121cb565b6121cb87838787876127ae565b50505050505050565b5f6121e18585858561150f565b90505f6121ef856001613043565b90505f6121fe87838787611215565b9050828111156121cb576001600160a01b038088165f9081526006602090815260408083208684528252808320848a16845282528083209388168352929052208390556121cb565b5f5b6001600160a01b0383165f90815260036020526040902061226890611bd6565b8110156122fd576001600160a01b0383165f9081526003602052604081206122909083611bdf565b90505f5b6001600160a01b0385165f9081526004602052604090206122b490611bd6565b8110156122f3576001600160a01b0385165f9081526004602052604081206122dc9083611bdf565b90506122ea86868386612839565b50600101612294565b5050600101612248565b50612309816001613043565b6001600160a01b0383165f81815260026020526040908190209290925590517fb693195b5ff3e376f8b562486abc516e10fe2467b75f0e4165e79cf4ab70dc41906123579084815260200190565b60405180910390a25050565b5f6109c5836001600160a01b038416612902565b61237f61243d565b611bf45f33611bf7565b5f825f01828154811061239e5761239e61301b565b905f5260205f200154905092915050565b6123b98282611347565b610cc45760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610b1c565b6123f18261294e565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561243557610e1d82826129b1565b610cc4612a23565b612445612a42565b61150d57604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b03841630146124c45760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c79206044820152603160f81b6064820152608401610b1c565b5f546001600160a01b038381169116146125165760405162461bcd60e51b815260206004820152601360248201527226bab9ba103ab9b2903130b9b2903a37b5b2b760691b6044820152606401610b1c565b5f5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb90604401611e0e565b6001600160a01b03841630146125b05760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c79206044820152601960f91b6064820152608401610b1c565b5f546001600160a01b038084169116036126075760405162461bcd60e51b815260206004820152601860248201527726bab9ba103ab9b29031bab9ba37b234b0b7103a37b5b2b760411b6044820152606401610b1c565b5f5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015612656573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267a9190613099565b506040516318950c7160e01b81526001600160a01b038481166004830152602482018390528316906318950c71906044015b5f604051808303815f87803b1580156126c3575f80fd5b505af115801561178d573d5f803e3d5ffd5b30330361271a5760405162461bcd60e51b81526020600482015260136024820152724f6e6c792065787465726e616c2063616c6c7360681b6044820152606401610b1c565b5f546001600160a01b038084169116036127715760405162461bcd60e51b815260206004820152601860248201527726bab9ba103ab9b29031bab9ba37b234b0b7103a37b5b2b760411b6044820152606401610b1c565b60405163c4652d8360e01b81526001600160a01b03858116600483015284811660248301526044820183905283169063c4652d83906064016126ac565b6001600160a01b038086165f908152600560209081526040808320888452825280832087851684528252808320938616835292905290812080548392906127f69084906130d7565b90915550506001600160a01b038086165f9081526007602090815260408083208884528252808320938716835292905290812080548392906120499084906130d7565b5f6128468585858561150f565b90505f61285f86612858876001613043565b8686611215565b90508181111561286c5750805b5f61287782846130d7565b905061289087612888886001613043565b87878561208d565b81156128a2576128a230858785612462565b846001600160a01b031686856001600160a01b03167f3ddb7f725ac69363a1df8296c965af4d268f31b082480dcd8419d284fb7fd34286866040516128f1929190918252602082015260400190565b60405180910390a450505050505050565b5f81815260018301602052604081205461294757508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610991565b505f610991565b806001600160a01b03163b5f0361298357604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610b1c565b5f8051602061312183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516129cd91906130ea565b5f60405180830381855af49150503d805f8114612a05576040519150601f19603f3d011682016040523d82523d5f602084013e612a0a565b606091505b5091509150612a1a858383612a5b565b95945050505050565b341561150d5760405163b398979f60e01b815260040160405180910390fd5b5f612a4b612055565b54600160401b900460ff16919050565b606082612a7057612a6b82612ab7565b6109c5565b8151158015612a8757506001600160a01b0384163b155b15612ab057604051639996b31560e01b81526001600160a01b0385166004820152602401610b1c565b50806109c5565b805115612ac75780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215612af0575f80fd5b81356001600160e01b0319811681146109c5575f80fd5b6001600160a01b0381168114611bf4575f80fd5b5f805f8060808587031215612b2e575f80fd5b8435612b3981612b07565b9350602085013592506040850135612b5081612b07565b91506060850135612b6081612b07565b939692955090935050565b5f805f60608486031215612b7d575f80fd5b8335612b8881612b07565b9250602084013591506040840135612b9f81612b07565b809150509250925092565b5f60208284031215612bba575f80fd5b81356109c581612b07565b602080825282518282018190525f918401906040840190835b81811015610f9a5783516001600160a01b0316835260209384019390920191600101612bde565b5f8060408385031215612c16575f80fd5b8235612c2181612b07565b946020939093013593505050565b5f60208284031215612c3f575f80fd5b5035919050565b5f8060408385031215612c57575f80fd5b823591506020830135612c6981612b07565b809150509250929050565b5f805f60608486031215612c86575f80fd5b8335612c9181612b07565b92506020840135612ca181612b07565b91506040840135612b9f81612b07565b5f8060408385031215612cc2575f80fd5b8235612ccd81612b07565b91506020830135612c6981612b07565b5f8083601f840112612ced575f80fd5b5081356001600160401b03811115612d03575f80fd5b6020830191508360208260051b8501011115612d1d575f80fd5b9250929050565b5f805f805f8060608789031215612d39575f80fd5b86356001600160401b03811115612d4e575f80fd5b612d5a89828a01612cdd565b90975095505060208701356001600160401b03811115612d78575f80fd5b612d8489828a01612cdd565b90955093505060408701356001600160401b03811115612da2575f80fd5b612dae89828a01612cdd565b979a9699509497509295939492505050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612de5575f80fd5b8235612df081612b07565b915060208301356001600160401b03811115612e0a575f80fd5b8301601f81018513612e1a575f80fd5b80356001600160401b03811115612e3357612e33612dc0565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612e6157612e61612dc0565b604052818152828201602001871015612e78575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f805f60608486031215612ea9575f80fd5b8335612eb481612b07565b92506020840135612ec481612b07565b929592945050506040919091013590565b5f805f805f805f806080898b031215612eec575f80fd5b88356001600160401b03811115612f01575f80fd5b612f0d8b828c01612cdd565b90995097505060208901356001600160401b03811115612f2b575f80fd5b612f378b828c01612cdd565b90975095505060408901356001600160401b03811115612f55575f80fd5b612f618b828c01612cdd565b90955093505060608901356001600160401b03811115612f7f575f80fd5b612f8b8b828c01612cdd565b999c989b5096995094979396929594505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f60408486031215612fe6575f80fd5b8335925060208401356001600160401b03811115613002575f80fd5b61300e86828701612cdd565b9497909650939450505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156109915761099161302f565b5f600182016130675761306761302f565b5060010190565b634e487b7160e01b5f52600160045260245ffd5b5f60208284031215613092575f80fd5b5051919050565b5f602082840312156130a9575f80fd5b815180151581146109c5575f80fd5b5f826130d257634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156109915761099161302f565b5f82518060208501845e5f92019182525091905056fedc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212205571cc039e7ccc6c1aa4d5cd15eca00c52dcb54a09336b63667b5653e3e51d0264736f6c634300081a0033","sourceMap":"766:27108:118:-:0;;;1171:4:22;1128:48;;766:27108:118;;;;;;;;;-1:-1:-1;1857:1:60;2061:7;:21;766:27108:118;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106102a5575f3560e01c80635e00bf461161016f578063a78d1fef116100d8578063c4d66de811610092578063d547741f1161006d578063d547741f146108a8578063d980b40d146108c7578063e6e3fb3a146108e6578063fc0c546a1461092b575f80fd5b8063c4d66de81461083c578063d1ba90ff1461085b578063d37304f814610889575f80fd5b8063a78d1fef14610763578063a885c97514610782578063a887b71c146107a1578063ad3cb1cc146107b5578063b1de97f7146107f2578063bf6eac2f1461081d575f80fd5b806386af70d11161012957806386af70d1146106a357806391d14854146106df57806392a2ebf3146106fe57806393dfb85c146107125780639db92f6814610731578063a217fddf14610750575f80fd5b80635e00bf46146105f357806360829f8a14610612578063771fcfc4146106315780637a997ab7146106505780637d93768b146106705780638129fc1c1461068f575f80fd5b806336568abe116102115780634f1ef286116101cb5780634f1ef2861461053b57806352d1902d1461054e57806355bdbe4c14610562578063574663a91461058157806357dd6a94146105a05780635c534359146105bf575f80fd5b806336568abe146104755780633bccf635146104945780633debeadc146104bf57806341566585146104de5780634234a479146104fd5780634e76a1391461051c575f80fd5b8063248a9ca311610262578063248a9ca3146103bb57806324fdfddf146103da578063286dd3f5146103f95780632f2ff15d14610418578063341d5ef51461043757806334eada3a14610456575f80fd5b806301ffc9a7146102a95780630c8f522f146102dd5780630ce52af5146103305780631789aeb41461034f5780631dc8b9491461037b57806322fceb751461039c575b5f80fd5b3480156102b4575f80fd5b506102c86102c3366004612ae0565b610961565b60405190151581526020015b60405180910390f35b3480156102e8575f80fd5b506103226102f7366004612b1b565b600560209081525f948552604080862082529385528385208152918452828420909152825290205481565b6040519081526020016102d4565b34801561033b575f80fd5b5061032261034a366004612b6b565b610997565b34801561035a575f80fd5b5061036e610369366004612baa565b6109cc565b6040516102d49190612bc5565b348015610386575f80fd5b5061039a610395366004612c05565b610ab6565b005b3480156103a7575f80fd5b506103226103b6366004612baa565b610bf2565b3480156103c6575f80fd5b506103226103d5366004612c2f565b610c0c565b3480156103e5575f80fd5b506103226103f4366004612b6b565b610c2c565b348015610404575f80fd5b5061039a610413366004612baa565b610ca3565b348015610423575f80fd5b5061039a610432366004612c46565b610cc8565b348015610442575f80fd5b5061036e610451366004612baa565b610cea565b348015610461575f80fd5b50610322610470366004612c74565b610dcd565b348015610480575f80fd5b5061039a61048f366004612c46565b610dea565b34801561049f575f80fd5b506103226104ae366004612baa565b60016020525f908152604090205481565b3480156104ca575f80fd5b506103226104d9366004612cb1565b610e22565b3480156104e9575f80fd5b5061039a6104f8366004612baa565b610e36565b348015610508575f80fd5b5061036e610517366004612baa565b610e57565b348015610527575f80fd5b5061039a610536366004612d24565b610fa5565b61039a610549366004612dd4565b611042565b348015610559575f80fd5b5061032261105d565b34801561056d575f80fd5b5061032261057c366004612c05565b611078565b34801561058c575f80fd5b5061032261059b366004612baa565b61110d565b3480156105ab575f80fd5b506103226105ba366004612baa565b61111b565b3480156105ca575f80fd5b506103226105d9366004612baa565b6001600160a01b03165f9081526001602052604090205490565b3480156105fe575f80fd5b5061039a61060d366004612b6b565b61114a565b34801561061d575f80fd5b5061039a61062c366004612e97565b611168565b34801561063c575f80fd5b5061032261064b366004612baa565b6111fd565b34801561065b575f80fd5b506103225f8051602061310183398151915281565b34801561067b575f80fd5b5061032261068a366004612b1b565b611215565b34801561069a575f80fd5b5061039a611252565b3480156106ae575f80fd5b506103226106bd366004612b6b565b600760209081525f938452604080852082529284528284209052825290205481565b3480156106ea575f80fd5b506102c86106f9366004612c46565b611347565b348015610709575f80fd5b5061039a61137d565b34801561071d575f80fd5b5061032261072c366004612b1b565b61150f565b34801561073c575f80fd5b5061032261074b366004612cb1565b61154c565b34801561075b575f80fd5b506103225f81565b34801561076e575f80fd5b5061032261077d366004612c74565b611560565b34801561078d575f80fd5b5061039a61079c366004612ed5565b611575565b3480156107ac575f80fd5b5061039a611797565b3480156107c0575f80fd5b506107e5604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102d49190612f9f565b3480156107fd575f80fd5b5061032261080c366004612baa565b60026020525f908152604090205481565b348015610828575f80fd5b5061039a610837366004612e97565b6117a9565b348015610847575f80fd5b5061039a610856366004612baa565b6119d4565b348015610866575f80fd5b506102c8610875366004612baa565b60086020525f908152604090205460ff1681565b348015610894575f80fd5b5061039a6108a3366004612fd4565b611ae3565b3480156108b3575f80fd5b5061039a6108c2366004612c46565b611b61565b3480156108d2575f80fd5b506103226108e1366004612baa565b611b7d565b3480156108f1575f80fd5b50610322610900366004612b1b565b600660209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610936575f80fd5b505f54610949906001600160a01b031681565b6040516001600160a01b0390911681526020016102d4565b5f6001600160e01b03198216637965db0b60e01b148061099157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001600160a01b038084165f9081526007602090815260408083208684528252808320938516835292905220545b9392505050565b6001600160a01b0381165f908152600360205260408120606091906109f090611bd6565b6001600160401b03811115610a0757610a07612dc0565b604051908082528060200260200182016040528015610a30578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600360205260409020610a5590611bd6565b811015610aaf576001600160a01b0384165f908152600360205260409020610a7d9082611bdf565b828281518110610a8f57610a8f61301b565b6001600160a01b0390921660209283029190910190910152600101610a35565b5092915050565b610abf82611b7d565b811115610b255760405162461bcd60e51b815260206004820152602960248201527f4e45575f45504f43485f4d5553545f42455f4c4553535f5448414e5f5052455360448201526808a9ca8be8aa09e86960bb1b60648201526084015b60405180910390fd5b610b2e82610bf2565b8111610b905760405162461bcd60e51b815260206004820152602b60248201527f4e45575f45504f43485f4d5553545f42455f4849474845525f5448414e5f435560448201526a0a4a48a9ca8be8aa09e86960ab1b6064820152608401610b1c565b336001600160a01b03831614610bd75760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610b1c565b6001600160a01b039091165f90815260026020526040902055565b6001600160a01b03165f9081526002602052604090205490565b5f9081525f80516020613141833981519152602052604090206001015490565b5f80805b6001600160a01b0386165f908152600460205260409020610c5090611bd6565b811015610c9a576001600160a01b0386165f908152600460205260409020610c869087908790610c809085611bdf565b8761150f565b610c909083613043565b9150600101610c30565b50949350505050565b5f610cad81611bea565b610cc45f8051602061310183398151915283611b61565b5050565b610cd182610c0c565b610cda81611bea565b610ce48383611bf7565b50505050565b6001600160a01b0381165f90815260046020526040812060609190610d0e90611bd6565b6001600160401b03811115610d2557610d25612dc0565b604051908082528060200260200182016040528015610d4e578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600460205260409020610d7390611bd6565b811015610aaf576001600160a01b0384165f908152600460205260409020610d9b9082611bdf565b828281518110610dad57610dad61301b565b6001600160a01b0390921660209283029190910190910152600101610d53565b5f610de284610ddb86610bf2565b8585611215565b949350505050565b6001600160a01b0381163314610e135760405163334bd91960e11b815260040160405180910390fd5b610e1d8282611c98565b505050565b5f6109c583610e3085610bf2565b84610c2c565b5f610e4081611bea565b610cc45f8051602061310183398151915283610cc8565b6001600160a01b0381165f90815260036020526040812060609190610e7b90611bd6565b90505f805b82811015610ed3576001600160a01b0385165f908152600360205260408120610ea99083611bdf565b90505f610eb68783610e22565b1115610eca5782610ec681613056565b9350505b50600101610e80565b505f816001600160401b03811115610eed57610eed612dc0565b604051908082528060200260200182016040528015610f16578160200160208202803683370190505b5090505f805b84811015610f9a576001600160a01b0387165f908152600360205260408120610f459083611bdf565b90505f610f528983610e22565b1115610f915780848481518110610f6b57610f6b61301b565b6001600160a01b039092166020928302919091019091015282610f8d81613056565b9350505b50600101610f1c565b509095945050505050565b610fad611d11565b5f5b8581101561102f5761102733888884818110610fcd57610fcd61301b565b9050602002016020810190610fe29190612baa565b858585818110610ff457610ff461301b565b90506020020160208101906110099190612baa565b88888681811061101b5761101b61301b565b90506020020135611d3b565b600101610faf565b5061103a6001600955565b505050505050565b61104a611e4e565b61105382611ef2565b610cc48282611efc565b5f611066611fb8565b505f8051602061312183398151915290565b5f8061108384610cea565b90505f61108f856109cc565b90505f805b8351811015611103575f5b83518110156110fa576110e688888785815181106110bf576110bf61301b565b60200260200101518785815181106110d9576110d961301b565b602002602001015161150f565b6110f09084613043565b925060010161109f565b50600101611094565b5095945050505050565b5f6109918261057c84610bf2565b5f61112582610bf2565b156111435761113382611b7d565b61113e906001613043565b610991565b5f92915050565b611152611d11565b61115e33848385611d3b565b610e1d6001600955565b5f8051602061310183398151915261117f81611bea565b611187611d11565b61119c84611194866111fd565b853386612001565b826001600160a01b03166111af856111fd565b60408051338152602081018690526001600160a01b038816917fd41c64546a5c34c283150998874c7ee0412c8954f57aef484c681f6e137827df910160405180910390a4610ce46001600955565b5f61120782610bf2565b156111435761113382610bf2565b6001600160a01b039384165f9081526006602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f61125b612055565b805490915060ff600160401b82041615906001600160401b03165f811580156112815750825b90505f826001600160401b0316600114801561129c5750303b155b9050811580156112aa575080155b156112c85760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156112f257845460ff60401b1916600160401b1785555b6112fa61207d565b831561134057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f9182525f80516020613141833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611385611d11565b335f8181526008602052604090205460ff16156113b45760405162fe178760e01b815260040160405180910390fd5b6001600160a01b0381165f908152600860209081526040808320805460ff191660019081179091559091529020546113ee576113ee61306e565b6113f781611b7d565b6001600160a01b0382165f908152600260205260408120919091555b6001600160a01b0382165f90815260036020526040902061143390611bd6565b811015611501576001600160a01b0382165f90815260036020526040812061145b9083611bdf565b90505f5b6001600160a01b0384165f90815260046020526040902061147f90611bd6565b8110156114f7576001600160a01b0384165f9081526004602052604081206114a79083611bdf565b90505f6114b6865f848761150f565b90505f6114c287610bf2565b11156114ed575f6114d287610bf2565b11156114ed576114ed866114e588610bf2565b84878561208d565b505060010161145f565b5050600101611413565b505061150d6001600955565b565b6001600160a01b039384165f9081526005602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f6109c58361155a85610bf2565b84610997565b5f610de28461156e86610bf2565b858561150f565b61157d611d11565b5f5b85811015611782575f611646611607336115b98b8b878181106115a4576115a461301b565b90506020020160208101906103b69190612baa565b8d8d878181106115cb576115cb61301b565b90506020020160208101906115e09190612baa565b8c8c888181106115f2576115f261301b565b905060200201602081019061072c9190612baa565b61164188888681811061161c5761161c61301b565b905060200201358787878181106116355761163561301b565b90506020020135612118565b612118565b90506116a03089898581811061165e5761165e61301b565b90506020020160208101906116739190612baa565b8c8c868181106116855761168561301b565b905060200201602081019061169a9190612baa565b84612127565b611719336116ad33610bf2565b8c8c868181106116bf576116bf61301b565b90506020020160208101906116d49190612baa565b8b8b878181106116e6576116e661301b565b90506020020160208101906116fb9190612baa565b8a8a8881811061170d5761170d61301b565b90506020020135612194565b6117793361172633610bf2565b8c8c868181106117385761173861301b565b905060200201602081019061174d9190612baa565b8b8b8781811061175f5761175f61301b565b90506020020160208101906117749190612baa565b6121d4565b5060010161157f565b5061178d6001600955565b5050505050505050565b61150d336117a433610bf2565b612246565b5f805160206131018339815191526117c081611bea565b6117c8611d11565b6001600160a01b0384165f9081526003602052604090206117e99033612363565b505f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611830573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118549190613082565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303815f875af11580156118a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118cb9190613099565b506118d68382613043565b5f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561191b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193f9190613082565b1461195d57604051631910d68360e21b815260040160405180910390fd5b6119728561196a876111fd565b86338761208d565b836001600160a01b0316611985866111fd565b60408051338152602081018790526001600160a01b038916917f7be65c2ae4d3c544de23b1db5bea4d541c02b93a5f4302852f4dc9880e0cb554910160405180910390a450610ce46001600955565b5f6119dd612055565b805490915060ff600160401b82041615906001600160401b03165f81158015611a035750825b90505f826001600160401b03166001148015611a1e5750303b155b905081158015611a2c575080155b15611a4a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611a7457845460ff60401b1916600160401b1785555b611a7c612377565b5f80546001600160a01b0319166001600160a01b038816179055831561103a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b611aeb611d11565b335f8181526001602052604081208590555b82811015611b5557611b4c848483818110611b1a57611b1a61301b565b9050602002016020810190611b2f9190612baa565b6001600160a01b0384165f90815260046020526040902090612363565b50600101611afd565b5050610e1d6001600955565b611b6a82610c0c565b611b7381611bea565b610ce48383611c98565b6001600160a01b0381165f908152600160205260408120548103611bb45760405163143c378b60e01b815260040160405180910390fd5b6001600160a01b0382165f9081526001602052604090205461099190426130b8565b5f610991825490565b5f6109c58383612389565b611bf481336123af565b50565b5f5f80516020613141833981519152611c108484611347565b611c8f575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611c453390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610991565b5f915050610991565b5f5f80516020613141833981519152611cb18484611347565b15611c8f575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610991565b600260095403611d3457604051633ee5aeb560e01b815260040160405180910390fd5b6002600955565b303303611d805760405162461bcd60e51b81526020600482015260136024820152724f6e6c792065787465726e616c2063616c6c7360681b6044820152606401610b1c565b5f546001600160a01b03838116911614611dd25760405162461bcd60e51b815260206004820152601360248201527226bab9ba103ab9b2903130b9b2903a37b5b2b760691b6044820152606401610b1c565b5f546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201849052909116906323b872dd906064015b6020604051808303815f875af1158015611e2a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113409190613099565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611ed457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ec85f80516020613121833981519152546001600160a01b031690565b6001600160a01b031614155b1561150d5760405163703e46dd60e11b815260040160405180910390fd5b5f610cc481611bea565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611f56575060408051601f3d908101601f19168201909252611f5391810190613082565b60015b611f7e57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610b1c565b5f805160206131218339815191528114611fae57604051632a87526960e21b815260048101829052602401610b1c565b610e1d83836123e8565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461150d5760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b038086165f90815260066020908152604080832088845282528083208785168452825280832093861683529290529081208054839290612049908490613043565b90915550505050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610991565b61208561243d565b61150d612377565b6001600160a01b038086165f908152600560209081526040808320888452825280832087851684528252808320938616835292905290812080548392906120d5908490613043565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290612049908490613043565b5f8282188284100282186109c5565b306001600160a01b03851603612168575f546001600160a01b0380841691160361215c5761215784848484612462565b610ce4565b6121578484848461254e565b5f546001600160a01b038084169116036121885761215784848484611d3b565b610ce4848484846126d5565b835f6121a28783878761150f565b9050828110156121be576121b987838787856127ae565b6121cb565b6121cb87838787876127ae565b50505050505050565b5f6121e18585858561150f565b90505f6121ef856001613043565b90505f6121fe87838787611215565b9050828111156121cb576001600160a01b038088165f9081526006602090815260408083208684528252808320848a16845282528083209388168352929052208390556121cb565b5f5b6001600160a01b0383165f90815260036020526040902061226890611bd6565b8110156122fd576001600160a01b0383165f9081526003602052604081206122909083611bdf565b90505f5b6001600160a01b0385165f9081526004602052604090206122b490611bd6565b8110156122f3576001600160a01b0385165f9081526004602052604081206122dc9083611bdf565b90506122ea86868386612839565b50600101612294565b5050600101612248565b50612309816001613043565b6001600160a01b0383165f81815260026020526040908190209290925590517fb693195b5ff3e376f8b562486abc516e10fe2467b75f0e4165e79cf4ab70dc41906123579084815260200190565b60405180910390a25050565b5f6109c5836001600160a01b038416612902565b61237f61243d565b611bf45f33611bf7565b5f825f01828154811061239e5761239e61301b565b905f5260205f200154905092915050565b6123b98282611347565b610cc45760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610b1c565b6123f18261294e565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561243557610e1d82826129b1565b610cc4612a23565b612445612a42565b61150d57604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b03841630146124c45760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c79206044820152603160f81b6064820152608401610b1c565b5f546001600160a01b038381169116146125165760405162461bcd60e51b815260206004820152601360248201527226bab9ba103ab9b2903130b9b2903a37b5b2b760691b6044820152606401610b1c565b5f5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb90604401611e0e565b6001600160a01b03841630146125b05760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c79206044820152601960f91b6064820152608401610b1c565b5f546001600160a01b038084169116036126075760405162461bcd60e51b815260206004820152601860248201527726bab9ba103ab9b29031bab9ba37b234b0b7103a37b5b2b760411b6044820152606401610b1c565b5f5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015612656573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267a9190613099565b506040516318950c7160e01b81526001600160a01b038481166004830152602482018390528316906318950c71906044015b5f604051808303815f87803b1580156126c3575f80fd5b505af115801561178d573d5f803e3d5ffd5b30330361271a5760405162461bcd60e51b81526020600482015260136024820152724f6e6c792065787465726e616c2063616c6c7360681b6044820152606401610b1c565b5f546001600160a01b038084169116036127715760405162461bcd60e51b815260206004820152601860248201527726bab9ba103ab9b29031bab9ba37b234b0b7103a37b5b2b760411b6044820152606401610b1c565b60405163c4652d8360e01b81526001600160a01b03858116600483015284811660248301526044820183905283169063c4652d83906064016126ac565b6001600160a01b038086165f908152600560209081526040808320888452825280832087851684528252808320938616835292905290812080548392906127f69084906130d7565b90915550506001600160a01b038086165f9081526007602090815260408083208884528252808320938716835292905290812080548392906120499084906130d7565b5f6128468585858561150f565b90505f61285f86612858876001613043565b8686611215565b90508181111561286c5750805b5f61287782846130d7565b905061289087612888886001613043565b87878561208d565b81156128a2576128a230858785612462565b846001600160a01b031686856001600160a01b03167f3ddb7f725ac69363a1df8296c965af4d268f31b082480dcd8419d284fb7fd34286866040516128f1929190918252602082015260400190565b60405180910390a450505050505050565b5f81815260018301602052604081205461294757508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610991565b505f610991565b806001600160a01b03163b5f0361298357604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610b1c565b5f8051602061312183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516129cd91906130ea565b5f60405180830381855af49150503d805f8114612a05576040519150601f19603f3d011682016040523d82523d5f602084013e612a0a565b606091505b5091509150612a1a858383612a5b565b95945050505050565b341561150d5760405163b398979f60e01b815260040160405180910390fd5b5f612a4b612055565b54600160401b900460ff16919050565b606082612a7057612a6b82612ab7565b6109c5565b8151158015612a8757506001600160a01b0384163b155b15612ab057604051639996b31560e01b81526001600160a01b0385166004820152602401610b1c565b50806109c5565b805115612ac75780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215612af0575f80fd5b81356001600160e01b0319811681146109c5575f80fd5b6001600160a01b0381168114611bf4575f80fd5b5f805f8060808587031215612b2e575f80fd5b8435612b3981612b07565b9350602085013592506040850135612b5081612b07565b91506060850135612b6081612b07565b939692955090935050565b5f805f60608486031215612b7d575f80fd5b8335612b8881612b07565b9250602084013591506040840135612b9f81612b07565b809150509250925092565b5f60208284031215612bba575f80fd5b81356109c581612b07565b602080825282518282018190525f918401906040840190835b81811015610f9a5783516001600160a01b0316835260209384019390920191600101612bde565b5f8060408385031215612c16575f80fd5b8235612c2181612b07565b946020939093013593505050565b5f60208284031215612c3f575f80fd5b5035919050565b5f8060408385031215612c57575f80fd5b823591506020830135612c6981612b07565b809150509250929050565b5f805f60608486031215612c86575f80fd5b8335612c9181612b07565b92506020840135612ca181612b07565b91506040840135612b9f81612b07565b5f8060408385031215612cc2575f80fd5b8235612ccd81612b07565b91506020830135612c6981612b07565b5f8083601f840112612ced575f80fd5b5081356001600160401b03811115612d03575f80fd5b6020830191508360208260051b8501011115612d1d575f80fd5b9250929050565b5f805f805f8060608789031215612d39575f80fd5b86356001600160401b03811115612d4e575f80fd5b612d5a89828a01612cdd565b90975095505060208701356001600160401b03811115612d78575f80fd5b612d8489828a01612cdd565b90955093505060408701356001600160401b03811115612da2575f80fd5b612dae89828a01612cdd565b979a9699509497509295939492505050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612de5575f80fd5b8235612df081612b07565b915060208301356001600160401b03811115612e0a575f80fd5b8301601f81018513612e1a575f80fd5b80356001600160401b03811115612e3357612e33612dc0565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612e6157612e61612dc0565b604052818152828201602001871015612e78575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f805f60608486031215612ea9575f80fd5b8335612eb481612b07565b92506020840135612ec481612b07565b929592945050506040919091013590565b5f805f805f805f806080898b031215612eec575f80fd5b88356001600160401b03811115612f01575f80fd5b612f0d8b828c01612cdd565b90995097505060208901356001600160401b03811115612f2b575f80fd5b612f378b828c01612cdd565b90975095505060408901356001600160401b03811115612f55575f80fd5b612f618b828c01612cdd565b90955093505060608901356001600160401b03811115612f7f575f80fd5b612f8b8b828c01612cdd565b999c989b5096995094979396929594505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f60408486031215612fe6575f80fd5b8335925060208401356001600160401b03811115613002575f80fd5b61300e86828701612cdd565b9497909650939450505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156109915761099161302f565b5f600182016130675761306761302f565b5060010190565b634e487b7160e01b5f52600160045260245ffd5b5f60208284031215613092575f80fd5b5051919050565b5f602082840312156130a9575f80fd5b815180151581146109c5575f80fd5b5f826130d257634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156109915761099161302f565b5f82518060208501845e5f92019182525091905056fedc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212205571cc039e7ccc6c1aa4d5cd15eca00c52dcb54a09336b63667b5653e3e51d0264736f6c634300081a0033","sourceMap":"766:27108:118:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:20;;;;;;;;;;-1:-1:-1;3443:202:20;;;;;:::i;:::-;;:::i;:::-;;;470:14:147;;463:22;445:41;;433:2;418:18;3443:202:20;;;;;;;;1474:208:119;;;;;;;;;;-1:-1:-1;1474:208:119;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1434:25:147;;;1422:2;1407:18;1474:208:119;1288:177:147;10872:215:118;;;;;;;;;;-1:-1:-1;10872:215:118;;;;;:::i;:::-;;:::i;2321:419::-;;;;;;;;;;-1:-1:-1;2321:419:118;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4287:406::-;;;;;;;;;;-1:-1:-1;4287:406:118;;;;;:::i;:::-;;:::i;:::-;;8307:134;;;;;;;;;;-1:-1:-1;8307:134:118;;;;;:::i;:::-;;:::i;4759:191:20:-;;;;;;;;;;-1:-1:-1;4759:191:20;;;;;:::i;:::-;;:::i;11409:381:118:-;;;;;;;;;;-1:-1:-1;11409:381:118;;;;;:::i;:::-;;:::i;26739:151::-;;;;;;;;;;-1:-1:-1;26739:151:118;;;;;:::i;:::-;;:::i;5246:136:20:-;;;;;;;;;;-1:-1:-1;5246:136:20;;;;;:::i;:::-;;:::i;1686:554:118:-;;;;;;;;;;-1:-1:-1;1686:554:118;;;;;:::i;:::-;;:::i;10462:330::-;;;;;;;;;;-1:-1:-1;10462:330:118;;;;;:::i;:::-;;:::i;6348:245:20:-;;;;;;;;;;-1:-1:-1;6348:245:20;;;;;:::i;:::-;;:::i;650:77:119:-;;;;;;;;;;-1:-1:-1;650:77:119;;;;;:::i;:::-;;;;;;;;;;;;;;11796:192:118;;;;;;;;;;-1:-1:-1;11796:192:118;;;;;:::i;:::-;;:::i;26593:140::-;;;;;;;;;;-1:-1:-1;26593:140:118;;;;;:::i;:::-;;:::i;2827:1107::-;;;;;;;;;;-1:-1:-1;2827:1107:118;;;;;:::i;:::-;;:::i;25966:457::-;;;;;;;;;;-1:-1:-1;25966:457:118;;;;;:::i;:::-;;:::i;4161:214:22:-;;;;;;:::i;:::-;;:::i;3708:134::-;;;;;;;;;;;;;:::i;26982:542:118:-;;;;;;;;;;-1:-1:-1;26982:542:118;;;;;:::i;:::-;;:::i;27695:176::-;;;;;;;;;;-1:-1:-1;27695:176:118;;;;;:::i;:::-;;:::i;9069:182::-;;;;;;;;;;-1:-1:-1;9069:182:118;;;;;:::i;:::-;;:::i;4001:125::-;;;;;;;;;;-1:-1:-1;4001:125:118;;;;;:::i;:::-;-1:-1:-1;;;;;4090:29:118;4064:7;4090:29;;;:21;:29;;;;;;;4001:125;25461:244;;;;;;;;;;-1:-1:-1;25461:244:118;;;;;:::i;:::-;;:::i;13972:972::-;;;;;;;;;;-1:-1:-1;13972:972:118;;;;;:::i;:::-;;:::i;8661:180::-;;;;;;;;;;-1:-1:-1;8661:180:118;;;;;:::i;:::-;;:::i;2462:68:119:-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2462:68:119;;10109:254:118;;;;;;;;;;-1:-1:-1;10109:254:118;;;;;:::i;:::-;;:::i;514:86:120:-;;;;;;;;;;;;;:::i;2186:152:119:-;;;;;;;;;;-1:-1:-1;2186:152:119;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3732:207:20;;;;;;;;;;-1:-1:-1;3732:207:20;;;;;:::i;:::-;;:::i;4699:1563:118:-;;;;;;;;;;;;;:::i;9342:250::-;;;;;;;;;;-1:-1:-1;9342:250:118;;;;;:::i;:::-;;:::i;11173:230::-;;;;;;;;;;-1:-1:-1;11173:230:118;;;;;:::i;:::-;;:::i;2317:49:20:-;;;;;;;;;;-1:-1:-1;2317:49:20;2362:4;2317:49;;9689:326:118;;;;;;;;;;-1:-1:-1;9689:326:118;;;;;:::i;:::-;;:::i;19744:1588::-;;;;;;;;;;-1:-1:-1;19744:1588:118;;;;;:::i;:::-;;:::i;17307:108::-;;;;;;;;;;;;;:::i;1819:58:22:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:22;;;;;;;;;;;;:::i;977:93:119:-;;;;;;;;;;-1:-1:-1;977:93:119;;;;;:::i;:::-;;;;;;;;;;;;;;12036:1885:118;;;;;;;;;;-1:-1:-1;12036:1885:118;;;;;:::i;:::-;;:::i;1051:125::-;;;;;;;;;;-1:-1:-1;1051:125:118;;;;;:::i;:::-;;:::i;2345:60:119:-;;;;;;;;;;-1:-1:-1;2345:60:119;;;;;:::i;:::-;;;;;;;;;;;;;;;;1245:359:118;;;;;;;;;;-1:-1:-1;1245:359:118;;;;;:::i;:::-;;:::i;5662:138:20:-;;;;;;;;;;-1:-1:-1;5662:138:20;;;;;:::i;:::-;;:::i;8002:226:118:-;;;;;;;;;;-1:-1:-1;8002:226:118;;;;;:::i;:::-;;:::i;1832:210:119:-;;;;;;;;;;-1:-1:-1;1832:210:119;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;471:19;;;;;;;;;;-1:-1:-1;471:19:119;;;;-1:-1:-1;;;;;471:19:119;;;;;;-1:-1:-1;;;;;11558:32:147;;;11540:51;;11528:2;11513:18;471:19:119;11378:219:147;3443:202:20;3528:4;-1:-1:-1;;;;;;3551:47:20;;-1:-1:-1;;;3551:47:20;;:87;;-1:-1:-1;;;;;;;;;;1134:40:28;;;3602:36:20;3544:94;3443:202;-1:-1:-1;;3443:202:20:o;10872:215:118:-;-1:-1:-1;;;;;11026:36:118;;;11000:7;11026:36;;;:28;:36;;;;;;;;:43;;;;;;;;:54;;;;;;;;;;10872:215;;;;;;:::o;2321:419::-;-1:-1:-1;;;;;2488:35:118;;2432:26;2488:35;;;:27;:35;;;;;2404:16;;2432:26;2488:44;;:42;:44::i;:::-;-1:-1:-1;;;;;2461:81:118;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2461:81:118;;2432:110;;2557:9;2552:156;-1:-1:-1;;;;;2576:35:118;;;;;;:27;:35;;;;;:44;;:42;:44::i;:::-;2572:1;:48;2552:156;;;-1:-1:-1;;;;;2656:35:118;;;;;;:27;:35;;;;;:41;;2695:1;2656:38;:41::i;:::-;2641:9;2651:1;2641:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2641:56:118;;;:12;;;;;;;;;;;:56;2622:3;;2552:156;;;-1:-1:-1;2724:9:118;2321:419;-1:-1:-1;;2321:419:118:o;4287:406::-;4387:38;4417:6;4387:21;:38::i;:::-;4375:8;:50;;4367:104;;;;-1:-1:-1;;;4367:104:118;;11936:2:147;4367:104:118;;;11918:21:147;11975:2;11955:18;;;11948:30;12014:34;11994:18;;;11987:62;-1:-1:-1;;;12065:18:147;;;12058:39;12114:19;;4367:104:118;;;;;;;;;4500:25;4518:6;4500:17;:25::i;:::-;4489:8;:36;4481:92;;;;-1:-1:-1;;;4481:92:118;;12346:2:147;4481:92:118;;;12328:21:147;12385:2;12365:18;;;12358:30;12424:34;12404:18;;;12397:62;-1:-1:-1;;;12475:18:147;;;12468:41;12526:19;;4481:92:118;12144:407:147;4481:92:118;4591:10;-1:-1:-1;;;;;4591:20:118;;;4583:45;;;;-1:-1:-1;;;4583:45:118;;12758:2:147;4583:45:118;;;12740:21:147;12797:2;12777:18;;;12770:30;-1:-1:-1;;;12816:18:147;;;12809:42;12868:18;;4583:45:118;12556:336:147;4583:45:118;-1:-1:-1;;;;;4638:37:118;;;;;;;:29;:37;;;;;:48;4287:406::o;8307:134::-;-1:-1:-1;;;;;8397:37:118;8371:7;8397:37;;;:29;:37;;;;;;;8307:134::o;4759:191:20:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:20;;;;;:24;;;;4759:191::o;11409:381:118:-;11505:7;;;11559:195;-1:-1:-1;;;;;11583:36:118;;;;;;:28;:36;;;;;:45;;:43;:45::i;:::-;11579:1;:49;11559:195;;;-1:-1:-1;;;;;11690:36:118;;;;;;:28;:36;;;;;11666:77;;11675:6;;11683:5;;11690:42;;11730:1;11690:39;:42::i;:::-;11734:8;11666;:77::i;:::-;11649:94;;;;:::i;:::-;;-1:-1:-1;11630:3:118;;11559:195;;;-1:-1:-1;11770:13:118;11409:381;-1:-1:-1;;;;11409:381:118:o;26739:151::-;2362:4:20;3191:16;2362:4;3191:10;:16::i;:::-;26851:32:118::1;-1:-1:-1::0;;;;;;;;;;;26878:4:118::1;26851:10;:32::i;:::-;26739:151:::0;;:::o;5246:136:20:-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;1686:554:118:-;-1:-1:-1;;;;;1983:36:118;;1926:27;1983:36;;;:28;:36;;;;;1770:16;;1926:27;1983:45;;:43;:45::i;:::-;-1:-1:-1;;;;;1956:82:118;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1956:82:118;;1926:112;;2053:9;2048:159;-1:-1:-1;;;;;2072:36:118;;;;;;:28;:36;;;;;:45;;:43;:45::i;:::-;2068:1;:49;2048:159;;;-1:-1:-1;;;;;2154:36:118;;;;;;:28;:36;;;;;:42;;2194:1;2154:39;:42::i;:::-;2138:10;2149:1;2138:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2138:58:118;;;:13;;;;;;;;;;;:58;2119:3;;2048:159;;10462:330;10603:7;10641:144;10669:6;10693:25;10711:6;10693:17;:25::i;:::-;10736:9;10763:8;10641:10;:144::i;:::-;10622:163;10462:330;-1:-1:-1;;;;10462:330:118:o;6348:245:20:-;-1:-1:-1;;;;;6441:34:20;;966:10:25;6441:34:20;6437:102;;6498:30;;-1:-1:-1;;;6498:30:20;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;11796:192:118:-;11894:7;11920:61;11937:6;11945:25;11963:6;11945:17;:25::i;:::-;11972:8;11920:16;:61::i;26593:140::-;2362:4:20;3191:16;2362:4;3191:10;:16::i;:::-;26695:31:118::1;-1:-1:-1::0;;;;;;;;;;;26721:4:118::1;26695:9;:31::i;2827:1107::-:0;-1:-1:-1;;;;;3022:35:118;;2997:22;3022:35;;;:27;:35;;;;;2923:16;;2997:22;3022:44;;:42;:44::i;:::-;2997:69;;3123:27;3169:9;3164:258;3188:14;3184:1;:18;3164:258;;;-1:-1:-1;;;;;3242:35:118;;3223:16;3242:35;;;:27;:35;;;;;:41;;3281:1;3242:38;:41::i;:::-;3223:60;;3355:1;3301:51;3335:6;3343:8;3301:33;:51::i;:::-;:55;3297:115;;;3376:21;;;;:::i;:::-;;;;3297:115;-1:-1:-1;3204:3:118;;3164:258;;;;3476:32;3525:19;-1:-1:-1;;;;;3511:34:118;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3511:34:118;;3476:69;;3555:19;3593:9;3588:307;3612:14;3608:1;:18;3588:307;;;-1:-1:-1;;;;;3666:35:118;;3647:16;3666:35;;;:27;:35;;;;;:41;;3705:1;3666:38;:41::i;:::-;3647:60;;3779:1;3725:51;3759:6;3767:8;3725:33;:51::i;:::-;:55;3721:164;;;3831:8;3800:15;3816:11;3800:28;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3800:39:118;;;:28;;;;;;;;;;;:39;3857:13;;;;:::i;:::-;;;;3721:164;-1:-1:-1;3628:3:118;;3588:307;;;-1:-1:-1;3912:15:118;;2827:1107;-1:-1:-1;;;;;2827:1107:118:o;25966:457::-;2500:21:60;:19;:21::i;:::-;26265:9:118::1;26260:157;26280:20:::0;;::::1;26260:157;;;26321:85;26354:10;26366:9;;26376:1;26366:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26380:10;;26391:1;26380:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26395:7;;26403:1;26395:10;;;;;;;:::i;:::-;;;;;;;26321:32;:85::i;:::-;26302:3;;26260:157;;;;2542:20:60::0;1857:1;3068:7;:21;2888:208;2542:20;25966:457:118;;;;;;:::o;4161:214:22:-;2655:13;:11;:13::i;:::-;4276:36:::1;4294:17;4276;:36::i;:::-;4322:46;4344:17;4363:4;4322:21;:46::i;3708:134::-:0;3777:7;2926:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3708:134:22;:::o;26982:542:118:-;27081:7;27100:27;27130:31;27154:6;27130:23;:31::i;:::-;27100:61;;27171:26;27200:30;27223:6;27200:22;:30::i;:::-;27171:59;;27240:18;27278:9;27273:218;27297:10;:17;27293:1;:21;27273:218;;;27340:9;27335:146;27359:9;:16;27355:1;:20;27335:146;;;27414:52;27423:6;27431:5;27438:10;27449:1;27438:13;;;;;;;;:::i;:::-;;;;;;;27453:9;27463:1;27453:12;;;;;;;;:::i;:::-;;;;;;;27414:8;:52::i;:::-;27400:66;;;;:::i;:::-;;-1:-1:-1;27377:3:118;;27335:146;;;-1:-1:-1;27316:3:118;;27273:218;;;-1:-1:-1;27507:10:118;26982:542;-1:-1:-1;;;;;26982:542:118:o;27695:176::-;27788:7;27814:50;27830:6;27838:25;27856:6;27838:17;:25::i;9069:182::-;9148:7;9174:25;9192:6;9174:17;:25::i;:::-;:30;:70;;9211:29;9233:6;9211:21;:29::i;:::-;:33;;9243:1;9211:33;:::i;:::-;9174:70;;;9207:1;9167:77;9069:182;-1:-1:-1;;9069:182:118:o;25461:244::-;2500:21:60;:19;:21::i;:::-;25625:73:118::1;25658:10;25670:8;25680:9;25691:6;25625:32;:73::i;:::-;2542:20:60::0;1857:1;3068:7;:21;2888:208;13972:972:118;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;2500:21:60::1;:19;:21::i;:::-;14448:304:118::2;14473:6;14633:42;14668:6;14633:34;:42::i;:::-;14689:9;14712:10;14736:6;14448:11;:304::i;:::-;14874:9;-1:-1:-1::0;;;;;14768:169:118::2;14818:42;14853:6;14818:34;:42::i;:::-;14768:169;::::0;;14897:10:::2;13473:51:147::0;;13555:2;13540:18;;13533:34;;;-1:-1:-1;;;;;14768:169:118;::::2;::::0;::::2;::::0;13446:18:147;14768:169:118::2;;;;;;;2542:20:60::1;1857:1:::0;3068:7;:21;2888:208;8661:180:118;8742:7;8768:25;8786:6;8768:17;:25::i;:::-;:30;:66;;8805:25;8823:6;8805:17;:25::i;10109:254::-;-1:-1:-1;;;;;10282:46:118;;;10256:7;10282:46;;;:38;:46;;;;;;;;:53;;;;;;;;;:64;;;;;;;;;;;:74;;;;;;;;;;;;10109:254::o;514:86:120:-;4158:30:21;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:21;-1:-1:-1;;;4302:15:21;;;4301:16;;-1:-1:-1;;;;;4348:14:21;4279:19;4724:16;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4788:11;-1:-1:-1;;;;;4788:16:21;4803:1;4788:16;:50;;;;-1:-1:-1;4816:4:21;4808:25;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;-1:-1:-1;;;4906:23:21;;;;;;;;;;;4849:91;4949:18;;-1:-1:-1;;4949:18:21;4966:1;4949:18;;;4977:67;;;;5011:22;;-1:-1:-1;;;;5011:22:21;-1:-1:-1;;;5011:22:21;;;4977:67;573:20:120::1;:18;:20::i;:::-;5068:14:21::0;5064:101;;;5098:23;;-1:-1:-1;;;;5098:23:21;;;5140:14;;-1:-1:-1;13731:50:147;;5140:14:21;;13719:2:147;13704:18;5140:14:21;;;;;;;5064:101;4092:1079;;;;;514:86:120:o;3732:207:20:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:20;;;;;;;;-1:-1:-1;;;;;3901:31:20;;;;;;;;;;;;;;;3732:207::o;4699:1563:118:-;2500:21:60;:19;:21::i;:::-;4779:10:118::1;4762:14;4804:29:::0;;;:21:::1;:29;::::0;;;;;::::1;;4800:66;;;4842:24;;-1:-1:-1::0;;;4842:24:118::1;;;;;;;;;;;4800:66;-1:-1:-1::0;;;;;4876:29:118;::::1;;::::0;;;:21:::1;:29;::::0;;;;;;;:36;;-1:-1:-1;;4876:36:118::1;4908:4;4876:36:::0;;::::1;::::0;;;4938:29;;;;;;4931:41:::1;;;;:::i;:::-;5094:29;5116:6;5094:21;:29::i;:::-;-1:-1:-1::0;;;;;5054:37:118;::::1;;::::0;;;:29:::1;:37;::::0;;;;:69;;;;5134:1122:::1;-1:-1:-1::0;;;;;5158:35:118;::::1;;::::0;;;:27:::1;:35;::::0;;;;:44:::1;::::0;:42:::1;:44::i;:::-;5154:1;:48;5134:1122;;;-1:-1:-1::0;;;;;5242:35:118;::::1;5223:16;5242:35:::0;;;:27:::1;:35;::::0;;;;:41:::1;::::0;5281:1;5242:38:::1;:41::i;:::-;5223:60;;5303:9;5298:952;-1:-1:-1::0;;;;;5322:36:118;::::1;;::::0;;;:28:::1;:36;::::0;;;;:45:::1;::::0;:43:::1;:45::i;:::-;5318:1;:49;5298:952;;;-1:-1:-1::0;;;;;5412:36:118;::::1;5392:17;5412:36:::0;;;:28:::1;:36;::::0;;;;:42:::1;::::0;5452:1;5412:39:::1;:42::i;:::-;5392:62;;5531:21;5555:138;5585:6;5613:1;5636:9;5667:8;5555;:138::i;:::-;5531:162;;5907:1;5879:25;5897:6;5879:17;:25::i;:::-;:29;5875:365;;;5960:1;5932:25;5950:6;5932:17;:25::i;:::-;:29;5928:298;;;5985:222;6020:6;6052:25;6070:6;6052:17;:25::i;:::-;6103:9;6138:8;6172:13;5985:9;:222::i;:::-;-1:-1:-1::0;;5369:3:118::1;;5298:952;;;-1:-1:-1::0;;5204:3:118::1;;5134:1122;;;;4752:1510;2542:20:60::0;1857:1;3068:7;:21;2888:208;2542:20;4699:1563:118:o;9342:250::-;-1:-1:-1;;;;;9513:44:118;;;9487:7;9513:44;;;:36;:44;;;;;;;;:51;;;;;;;;;:62;;;;;;;;;;;:72;;;;;;;;;;;;9342:250::o;11173:230::-;11295:7;11333:63;11351:6;11359:25;11377:6;11359:17;:25::i;:::-;11386:9;11333:17;:63::i;9689:326::-;9828:7;9866:142;9892:6;9916:25;9934:6;9916:17;:25::i;:::-;9959:9;9986:8;9866;:142::i;19744:1588::-;2500:21:60;:19;:21::i;:::-;19955:9:118::1;19950:1376;19970:20:::0;;::::1;19950:1376;;;20238:20;20261:276;20287:180;20317:10;20349:31;20367:9;;20377:1;20367:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;20349:31::-;20402:10;;20413:1;20402:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20437:9;;20447:1;20437:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;20287:180::-;20485:38;20494:7;;20502:1;20494:10;;;;;;;:::i;:::-;;;;;;;20506:13;;20520:1;20506:16;;;;;;;:::i;:::-;;;;;;;20485:8;:38::i;:::-;20261:8;:276::i;:::-;20238:299;;20551:238;20601:4;20702:9;;20712:1;20702:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20732:10;;20743:1;20732:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20763:12;20551:24;:238::i;:::-;20948:189;20977:10;21005:29;21023:10;21005:17;:29::i;:::-;21052:10;;21063:1;21052:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21083:9;;21093:1;21083:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21113:7;;21121:1;21113:10;;;;;;;:::i;:::-;;;;;;;20948:11;:189::i;:::-;21152:163;21183:10;21211:29;21229:10;21211:17;:29::i;:::-;21258:10;;21269:1;21258:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21289:9;;21299:1;21289:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21152:13;:163::i;:::-;-1:-1:-1::0;19992:3:118::1;;19950:1376;;;;2542:20:60::0;1857:1;3068:7;:21;2888:208;2542:20;19744:1588:118;;;;;;;;:::o;17307:108::-;17351:57;17366:10;17378:29;17396:10;17378:17;:29::i;:::-;17351:14;:57::i;12036:1885::-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;2500:21:60::1;:19;:21::i;:::-;-1:-1:-1::0;;;;;12241:35:118;::::2;;::::0;;;:27:::2;:35;::::0;;;;:51:::2;::::0;12281:10:::2;12241:39;:51::i;:::-;-1:-1:-1::0;12666:21:118::2;12690:5:::0;;:30:::2;::::0;-1:-1:-1;;;12690:30:118;;12714:4:::2;12690:30;::::0;::::2;11540:51:147::0;-1:-1:-1;;;;;12690:5:118;;::::2;::::0;:15:::2;::::0;11513:18:147;;12690:30:118::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13009:57;::::0;-1:-1:-1;;;13009:57:118;;13032:10:::2;13009:57;::::0;::::2;14523:51:147::0;13052:4:118::2;14590:18:147::0;;;14583:60;14659:18;;;14652:34;;;12666:54:118;;-1:-1:-1;;;;;;13009:22:118;::::2;::::0;::::2;::::0;14496:18:147;;13009:57:118::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;13199:22:118::2;13215:6:::0;13199:13;:22:::2;:::i;:::-;13165:5;::::0;:30:::2;::::0;-1:-1:-1;;;13165:30:118;;13189:4:::2;13165:30;::::0;::::2;11540:51:147::0;-1:-1:-1;;;;;13165:5:118;;::::2;::::0;:15:::2;::::0;11513:18:147;;13165:30:118::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;13161:114;;13242:33;;-1:-1:-1::0;;;13242:33:118::2;;;;;;;;;;;13161:114;13352:311;13375:6;13535:42;13570:6;13535:34;:42::i;:::-;13599:9;13623:10;13647:6;13352:9;:311::i;:::-;13850:9;-1:-1:-1::0;;;;;13738:176:118::2;13786:42;13821:6;13786:34;:42::i;:::-;13738:176;::::0;;13874:10:::2;13473:51:147::0;;13555:2;13540:18;;13533:34;;;-1:-1:-1;;;;;13738:176:118;::::2;::::0;::::2;::::0;13446:18:147;13738:176:118::2;;;;;;;12178:1743;2542:20:60::1;1857:1:::0;3068:7;:21;2888:208;1051:125:118;4158:30:21;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:21;-1:-1:-1;;;4302:15:21;;;4301:16;;-1:-1:-1;;;;;4348:14:21;4279:19;4724:16;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4788:11;-1:-1:-1;;;;;4788:16:21;4803:1;4788:16;:50;;;;-1:-1:-1;4816:4:21;4808:25;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;-1:-1:-1;;;4906:23:21;;;;;;;;;;;4849:91;4949:18;;-1:-1:-1;;4949:18:21;4966:1;4949:18;;;4977:67;;;;5011:22;;-1:-1:-1;;;;5011:22:21;-1:-1:-1;;;5011:22:21;;;4977:67;1115:30:118::1;:28;:30::i;:::-;1155:5;:14:::0;;-1:-1:-1;;;;;;1155:14:118::1;-1:-1:-1::0;;;;;1155:14:118;::::1;;::::0;;5064:101:21;;;;5098:23;;-1:-1:-1;;;;5098:23:21;;;5140:14;;-1:-1:-1;13731:50:147;;5140:14:21;;13719:2:147;13704:18;5140:14:21;;;;;;;4092:1079;;;;;1051:125:118;:::o;1245:359::-;2500:21:60;:19;:21::i;:::-;1394:10:118::1;1377:14;1414:29:::0;;;:21:::1;:29;::::0;;;;:45;;;1470:128:::1;1490:21:::0;;::::1;1470:128;;;1532:55;1573:10;;1584:1;1573:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1532:36:118;::::1;;::::0;;;:28:::1;:36;::::0;;;;;:40:::1;:55::i;:::-;-1:-1:-1::0;1513:3:118::1;;1470:128;;;;1367:237;2542:20:60::0;1857:1;3068:7;:21;2888:208;5662:138:20;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;8002:226:118:-:0;-1:-1:-1;;;;;8093:29:118;;8070:7;8093:29;;;:21;:29;;;;;;:34;;8089:68;;8136:21;;-1:-1:-1;;;8136:21:118;;;;;;;;;;;8089:68;-1:-1:-1;;;;;8192:29:118;;;;;;:21;:29;;;;;;8174:47;;:15;:47;:::i;10530:115:71:-;10593:7;10619:19;10627:3;5202:18;;5120:107;10987:156;11061:7;11111:22;11115:3;11127:5;11111:3;:22::i;4148:103:20:-;4214:30;4225:4;966:10:25;4214::20;:30::i;:::-;4148:103;:::o;7270:387::-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:20;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:20;;;;;;;;;:38;;-1:-1:-1;;7475:38:20;7509:4;7475:38;;;7559:12;966:10:25;;887:96;7559:12:20;-1:-1:-1;;;;;7532:40:20;7550:7;-1:-1:-1;;;;;7532:40:20;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7894:388;7972:4;-1:-1:-1;;;;;;;;;;;8061:22:20;8069:4;8075:7;8061;:22::i;:::-;8057:219;;;8133:5;8099:14;;;;;;;;;;;-1:-1:-1;;;;;8099:31:20;;;;;;;;;;:39;;-1:-1:-1;;8099:39:20;;;8157:40;966:10:25;;8099:14:20;;8157:40;;8133:5;8157:40;8218:4;8211:11;;;;;2575:307:60;1899:1;2702:7;;:18;2698:86;;2743:30;;-1:-1:-1;;;2743:30:60;;;;;;;;;;;2698:86;1899:1;2858:7;:17;2575:307::o;24467:315:118:-;24625:4;24603:10;:27;24595:59;;;;-1:-1:-1;;;24595:59:118;;15403:2:147;24595:59:118;;;15385:21:147;15442:2;15422:18;;;15415:30;-1:-1:-1;;;15461:18:147;;;15454:49;15520:18;;24595:59:118;15201:343:147;24595:59:118;24680:5;;-1:-1:-1;;;;;24672:27:118;;;24680:5;;24672:27;24664:59;;;;-1:-1:-1;;;24664:59:118;;15751:2:147;24664:59:118;;;15733:21:147;15790:2;15770:18;;;15763:30;-1:-1:-1;;;15809:18:147;;;15802:49;15868:18;;24664:59:118;15549:343:147;24664:59:118;24733:5;;:42;;-1:-1:-1;;;24733:42:118;;-1:-1:-1;;;;;14541:32:147;;;24733:42:118;;;14523:51:147;14610:32;;;14590:18;;;14583:60;14659:18;;;14652:34;;;24733:5:118;;;;:18;;14496::147;;24733:42:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4578:312:22:-;4658:4;-1:-1:-1;;;;;4667:6:22;4650:23;;;:120;;;4764:6;-1:-1:-1;;;;;4728:42:22;:32;-1:-1:-1;;;;;;;;;;;1519:53:41;-1:-1:-1;;;;;1519:53:41;;1441:138;4728:32:22;-1:-1:-1;;;;;4728:42:22;;;4650:120;4633:251;;;4844:29;;-1:-1:-1;;;4844:29:22;;;;;;;;;;;965:103:120;2362:4:20;3191:16;2362:4;3191:10;:16::i;6032:538:22:-;6149:17;-1:-1:-1;;;;;6131:50:22;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6131:52:22;;;;;;;;-1:-1:-1;;6131:52:22;;;;;;;;;;;;:::i;:::-;;;6127:437;;6493:60;;-1:-1:-1;;;6493:60:22;;-1:-1:-1;;;;;11558:32:147;;6493:60:22;;;11540:51:147;11513:18;;6493:60:22;11378:219:147;6127:437:22;-1:-1:-1;;;;;;;;;;;6225:40:22;;6221:120;;6292:34;;-1:-1:-1;;;6292:34:22;;;;;1434:25:147;;;1407:18;;6292:34:22;1288:177:147;6221:120:22;6354:54;6384:17;6403:4;6354:29;:54::i;5007:213::-;5081:4;-1:-1:-1;;;;;5090:6:22;5073:23;;5069:145;;5174:29;;-1:-1:-1;;;5174:29:22;;;;;;;;;;;6945:261:118;-1:-1:-1;;;;;7115:46:118;;;;;;;:38;:46;;;;;;;;:53;;;;;;;;:64;;;;;;;;;;:74;;;;;;;;;;;:84;;7193:6;;7115:46;:84;;7193:6;;7115:84;:::i;:::-;;;;-1:-1:-1;;;;;;;6945:261:118:o;9071:205:21:-;9129:30;;3147:66;9186:27;8819:122;606:103:120;6929:20:21;:18;:20::i;:::-;672:30:120::1;:28;:30::i;6268:331:118:-:0;-1:-1:-1;;;;;6436:44:118;;;;;;;:36;:44;;;;;;;;:51;;;;;;;;:62;;;;;;;;;;:72;;;;;;;;;;;:82;;6512:6;;6436:44;:82;;6512:6;;6436:82;:::i;:::-;;;;-1:-1:-1;;;;;;;6528:36:118;;;;;;;:28;:36;;;;;;;;:43;;;;;;;;:54;;;;;;;;;;;:64;;6586:6;;6528:36;:64;;6586:6;;6528:64;:::i;5617:111:68:-;5675:7;5312:5;;;5709;;;5311:36;5306:42;;5701:20;5071:294;21690:1458:118;21868:4;-1:-1:-1;;;;;21852:21:118;;;21848:1294;;21953:5;;-1:-1:-1;;;;;21945:27:118;;;21953:5;;21945:27;21941:413;;22068:67;22101:4;22107:8;22117:9;22128:6;22068:32;:67::i;:::-;21848:1294;;21941:413;22268:71;22305:4;22311:8;22321:9;22332:6;22268:36;:71::i;21848:1294::-;22752:5;;-1:-1:-1;;;;;22744:27:118;;;22752:5;;22744:27;22740:392;;22863:67;22896:4;22902:8;22912:9;22923:6;22863:32;:67::i;22740:392::-;23046:71;23083:4;23089:8;23099:9;23110:6;23046:36;:71::i;17722:796::-;17967:5;17945:19;18006:108;18028:6;17967:5;18073:9;18096:8;18006;:108::i;:::-;17982:132;;18223:6;18207:13;:22;18203:309;;;18245:163;18275:6;18299:11;18328:9;18355:8;18381:13;18245:12;:163::i;:::-;18203:309;;;18439:62;18452:6;18460:11;18473:9;18484:8;18494:6;18439:12;:62::i;:::-;17882:636;;17722:796;;;;;:::o;18850:888::-;19057:21;19081:102;19103:6;19123:5;19142:9;19165:8;19081;:102::i;:::-;19057:126;-1:-1:-1;19193:19:118;19215:9;:5;19223:1;19215:9;:::i;:::-;19193:31;;19234:23;19260:110;19284:6;19304:11;19329:9;19352:8;19260:10;:110::i;:::-;19234:136;;19403:13;19385:15;:31;19381:351;;;-1:-1:-1;;;;;7652:46:118;;;;;;;:38;:46;;;;;;;;:53;;;;;;;;:64;;;;;;;;;;:74;;;;;;;;;:83;;;19559:162;7482:260;16491:810;16720:9;16715:423;-1:-1:-1;;;;;16739:35:118;;;;;;:27;:35;;;;;:44;;:42;:44::i;:::-;16735:1;:48;16715:423;;;-1:-1:-1;;;;;16823:35:118;;16804:16;16823:35;;;:27;:35;;;;;:41;;16862:1;16823:38;:41::i;:::-;16804:60;;16884:9;16879:249;-1:-1:-1;;;;;16903:36:118;;;;;;:28;:36;;;;;:45;;:43;:45::i;:::-;16899:1;:49;16879:249;;;-1:-1:-1;;;;;16993:36:118;;16973:17;16993:36;;;:28;:36;;;;;:42;;17033:1;16993:39;:42::i;:::-;16973:62;;17054:59;17072:6;17080:11;17093:9;17104:8;17054:17;:59::i;:::-;-1:-1:-1;16950:3:118;;16879:249;;;-1:-1:-1;;16785:3:118;;16715:423;;;-1:-1:-1;17227:15:118;:11;17241:1;17227:15;:::i;:::-;-1:-1:-1;;;;;17187:37:118;;;;;;:29;:37;;;;;;;:55;;;;17258:36;;;;;;17282:11;1434:25:147;;1422:2;1407:18;;1288:177;17258:36:118;;;;;;;;16491:810;;:::o;9332:150:71:-;9402:4;9425:50;9430:3;-1:-1:-1;;;;;9450:23:71;;9425:4;:50::i;715:125:120:-;6929:20:21;:18;:20::i;:::-;791:42:120::1;2362:4:20;822:10:120;791;:42::i;5569:118:71:-:0;5636:7;5662:3;:11;;5674:5;5662:18;;;;;;;;:::i;:::-;;;;;;;;;5655:25;;5569:118;;;;:::o;4381:197:20:-;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:20;;-1:-1:-1;;;;;13491:32:147;;4514:47:20;;;13473:51:147;13540:18;;;13533:34;;;13446:18;;4514:47:20;13299:274:147;2264:344:41;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:41;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;2454:148::-;2573:18;:16;:18::i;7082:141:21:-;7149:17;:15;:17::i;:::-;7144:73;;7189:17;;-1:-1:-1;;;7189:17:21;;;;;;;;;;;23282:313:118;-1:-1:-1;;;;;23418:21:118;;23434:4;23418:21;23410:67;;;;-1:-1:-1;;;23410:67:118;;16567:2:147;23410:67:118;;;16549:21:147;16606:2;16586:18;;;16579:30;16645:34;16625:18;;;16618:62;-1:-1:-1;;;16696:18:147;;;16689:31;16737:19;;23410:67:118;16365:397:147;23410:67:118;23503:5;;-1:-1:-1;;;;;23495:27:118;;;23503:5;;23495:27;23487:59;;;;-1:-1:-1;;;23487:59:118;;15751:2:147;23487:59:118;;;15733:21:147;15790:2;15770:18;;;15763:30;-1:-1:-1;;;15809:18:147;;;15802:49;15868:18;;23487:59:118;15549:343:147;23487:59:118;23556:5;;:32;;-1:-1:-1;;;23556:32:118;;-1:-1:-1;;;;;13491:32:147;;;23556::118;;;13473:51:147;13540:18;;;13533:34;;;23556:5:118;;;;:14;;13446:18:147;;23556:32:118;13299:274:147;23664:394:118;-1:-1:-1;;;;;23804:21:118;;23820:4;23804:21;23796:67;;;;-1:-1:-1;;;23796:67:118;;16969:2:147;23796:67:118;;;16951:21:147;17008:2;16988:18;;;16981:30;17047:34;17027:18;;;17020:62;-1:-1:-1;;;17098:18:147;;;17091:31;17139:19;;23796:67:118;16767:397:147;23796:67:118;23889:5;;-1:-1:-1;;;;;23881:27:118;;;23889:5;;23881:27;23873:64;;;;-1:-1:-1;;;23873:64:118;;17371:2:147;23873:64:118;;;17353:21:147;17410:2;17390:18;;;17383:30;-1:-1:-1;;;17429:18:147;;;17422:54;17493:18;;23873:64:118;17169:348:147;23873:64:118;23947:5;;:32;;-1:-1:-1;;;23947:32:118;;-1:-1:-1;;;;;13491:32:147;;;23947::118;;;13473:51:147;13540:18;;;13533:34;;;23947:5:118;;;;:13;;13446:18:147;;23947:32:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;23989:62:118;;-1:-1:-1;;;23989:62:118;;-1:-1:-1;;;;;13491:32:147;;;23989:62:118;;;13473:51:147;13540:18;;;13533:34;;;23989:44:118;;;;;13446:18:147;;23989:62:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24859:354;25021:4;24999:10;:27;24991:59;;;;-1:-1:-1;;;24991:59:118;;15403:2:147;24991:59:118;;;15385:21:147;15442:2;15422:18;;;15415:30;-1:-1:-1;;;15461:18:147;;;15454:49;15520:18;;24991:59:118;15201:343:147;24991:59:118;25076:5;;-1:-1:-1;;;;;25068:27:118;;;25076:5;;25068:27;25060:64;;;;-1:-1:-1;;;25060:64:118;;17371:2:147;25060:64:118;;;17353:21:147;17410:2;17390:18;;;17383:30;-1:-1:-1;;;17429:18:147;;;17422:54;17493:18;;25060:64:118;17169:348:147;25060:64:118;25134:72;;-1:-1:-1;;;25134:72:118;;-1:-1:-1;;;;;14541:32:147;;;25134:72:118;;;14523:51:147;14610:32;;;14590:18;;;14583:60;14659:18;;;14652:34;;;25134:48:118;;;;;14496:18:147;;25134:72:118;14321:371:147;6605:334:118;-1:-1:-1;;;;;6776:44:118;;;;;;;:36;:44;;;;;;;;:51;;;;;;;;:62;;;;;;;;;;:72;;;;;;;;;;;:82;;6852:6;;6776:44;:82;;6852:6;;6776:82;:::i;:::-;;;;-1:-1:-1;;;;;;;6868:36:118;;;;;;;:28;:36;;;;;;;;:43;;;;;;;;:54;;;;;;;;;;;:64;;6926:6;;6868:36;:64;;6926:6;;6868:64;:::i;15011:1474::-;15265:19;15287:108;15309:6;15329:11;15354:9;15377:8;15287;:108::i;:::-;15265:130;-1:-1:-1;15405:21:118;15429:114;15453:6;15473:15;:11;15487:1;15473:15;:::i;:::-;15502:9;15525:8;15429:10;:114::i;:::-;15405:138;;15573:11;15557:13;:27;15553:85;;;-1:-1:-1;15616:11:118;15553:85;15647:17;15667:27;15681:13;15667:11;:27;:::i;:::-;15647:47;-1:-1:-1;15705:66:118;15715:6;15723:15;:11;15737:1;15723:15;:::i;:::-;15740:9;15751:8;15761:9;15705;:66::i;:::-;16181:17;;16177:131;;16214:83;16255:4;16262:8;16272:9;16283:13;16214:32;:83::i;:::-;16407:9;-1:-1:-1;;;;;16323:155:118;16382:11;16360:8;-1:-1:-1;;;;;16323:155:118;;16430:11;16455:13;16323:155;;;;;;17829:25:147;;;17885:2;17870:18;;17863:34;17817:2;17802:18;;17655:248;16323:155:118;;;;;;;;15159:1326;;;15011:1474;;;;:::o;2336:406:71:-;2399:4;5006:21;;;:14;;;:21;;;;;;2415:321;;-1:-1:-1;2457:23:71;;;;;;;;:11;:23;;;;;;;;;;;;;2639:18;;2615:21;;;:14;;;:21;;;;;;:42;;;;2671:11;;2415:321;-1:-1:-1;2720:5:71;2713:12;;1671:281:41;1748:17;-1:-1:-1;;;;;1748:29:41;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:41;;-1:-1:-1;;;;;11558:32:147;;1805:47:41;;;11540:51:147;11513:18;;1805:47:41;11378:219:147;1744:119:41;-1:-1:-1;;;;;;;;;;;1872:73:41;;-1:-1:-1;;;;;;1872:73:41;-1:-1:-1;;;;;1872:73:41;;;;;;;;;;1671:281::o;3916:253:54:-;3999:12;4024;4038:23;4065:6;-1:-1:-1;;;;;4065:19:54;4085:4;4065:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4023:67;;;;4107:55;4134:6;4142:7;4151:10;4107:26;:55::i;:::-;4100:62;3916:253;-1:-1:-1;;;;;3916:253:54:o;6113:122:41:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:41;;;;;;;;;;;8485:120:21;8535:4;8558:26;:24;:26::i;:::-;:40;-1:-1:-1;;;8558:40:21;;;;;;-1:-1:-1;8485:120:21:o;4437:582:54:-;4581:12;4610:7;4605:408;;4633:19;4641:10;4633:7;:19::i;:::-;4605:408;;;4857:17;;:22;:49;;;;-1:-1:-1;;;;;;4883:18:54;;;:23;4857:49;4853:119;;;4933:24;;-1:-1:-1;;;4933:24:54;;-1:-1:-1;;;;;11558:32:147;;4933:24:54;;;11540:51:147;11513:18;;4933:24:54;11378:219:147;4853:119:54;-1:-1:-1;4992:10:54;4985:17;;5559:487;5690:17;;:21;5686:354;;5887:10;5881:17;5943:15;5930:10;5926:2;5922:19;5915:44;5686:354;6010:19;;-1:-1:-1;;;6010:19:54;;;;;;;;;;;14:286:147;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:147;;209:43;;199:71;;266:1;263;256:12;497:131;-1:-1:-1;;;;;572:31:147;;562:42;;552:70;;618:1;615;608:12;633:650;719:6;727;735;743;796:3;784:9;775:7;771:23;767:33;764:53;;;813:1;810;803:12;764:53;852:9;839:23;871:31;896:5;871:31;:::i;:::-;921:5;-1:-1:-1;999:2:147;984:18;;971:32;;-1:-1:-1;1081:2:147;1066:18;;1053:32;1094:33;1053:32;1094:33;:::i;:::-;1146:7;-1:-1:-1;1205:2:147;1190:18;;1177:32;1218:33;1177:32;1218:33;:::i;:::-;633:650;;;;-1:-1:-1;633:650:147;;-1:-1:-1;;633:650:147:o;1470:508::-;1547:6;1555;1563;1616:2;1604:9;1595:7;1591:23;1587:32;1584:52;;;1632:1;1629;1622:12;1584:52;1671:9;1658:23;1690:31;1715:5;1690:31;:::i;:::-;1740:5;-1:-1:-1;1818:2:147;1803:18;;1790:32;;-1:-1:-1;1900:2:147;1885:18;;1872:32;1913:33;1872:32;1913:33;:::i;:::-;1965:7;1955:17;;;1470:508;;;;;:::o;1983:247::-;2042:6;2095:2;2083:9;2074:7;2070:23;2066:32;2063:52;;;2111:1;2108;2101:12;2063:52;2150:9;2137:23;2169:31;2194:5;2169:31;:::i;2235:637::-;2425:2;2437:21;;;2507:13;;2410:18;;;2529:22;;;2377:4;;2608:15;;;2582:2;2567:18;;;2377:4;2651:195;2665:6;2662:1;2659:13;2651:195;;;2730:13;;-1:-1:-1;;;;;2726:39:147;2714:52;;2795:2;2821:15;;;;2786:12;;;;2762:1;2680:9;2651:195;;2877:367;2945:6;2953;3006:2;2994:9;2985:7;2981:23;2977:32;2974:52;;;3022:1;3019;3012:12;2974:52;3061:9;3048:23;3080:31;3105:5;3080:31;:::i;:::-;3130:5;3208:2;3193:18;;;;3180:32;;-1:-1:-1;;;2877:367:147:o;3249:226::-;3308:6;3361:2;3349:9;3340:7;3336:23;3332:32;3329:52;;;3377:1;3374;3367:12;3329:52;-1:-1:-1;3422:23:147;;3249:226;-1:-1:-1;3249:226:147:o;3662:367::-;3730:6;3738;3791:2;3779:9;3770:7;3766:23;3762:32;3759:52;;;3807:1;3804;3797:12;3759:52;3852:23;;;-1:-1:-1;3951:2:147;3936:18;;3923:32;3964:33;3923:32;3964:33;:::i;:::-;4016:7;4006:17;;;3662:367;;;;;:::o;4034:529::-;4111:6;4119;4127;4180:2;4168:9;4159:7;4155:23;4151:32;4148:52;;;4196:1;4193;4186:12;4148:52;4235:9;4222:23;4254:31;4279:5;4254:31;:::i;:::-;4304:5;-1:-1:-1;4361:2:147;4346:18;;4333:32;4374:33;4333:32;4374:33;:::i;:::-;4426:7;-1:-1:-1;4485:2:147;4470:18;;4457:32;4498:33;4457:32;4498:33;:::i;4568:388::-;4636:6;4644;4697:2;4685:9;4676:7;4672:23;4668:32;4665:52;;;4713:1;4710;4703:12;4665:52;4752:9;4739:23;4771:31;4796:5;4771:31;:::i;:::-;4821:5;-1:-1:-1;4878:2:147;4863:18;;4850:32;4891:33;4850:32;4891:33;:::i;4961:367::-;5024:8;5034:6;5088:3;5081:4;5073:6;5069:17;5065:27;5055:55;;5106:1;5103;5096:12;5055:55;-1:-1:-1;5129:20:147;;-1:-1:-1;;;;;5161:30:147;;5158:50;;;5204:1;5201;5194:12;5158:50;5241:4;5233:6;5229:17;5217:29;;5301:3;5294:4;5284:6;5281:1;5277:14;5269:6;5265:27;5261:38;5258:47;5255:67;;;5318:1;5315;5308:12;5255:67;4961:367;;;;;:::o;5333:1099::-;5491:6;5499;5507;5515;5523;5531;5584:2;5572:9;5563:7;5559:23;5555:32;5552:52;;;5600:1;5597;5590:12;5552:52;5640:9;5627:23;-1:-1:-1;;;;;5665:6:147;5662:30;5659:50;;;5705:1;5702;5695:12;5659:50;5744:70;5806:7;5797:6;5786:9;5782:22;5744:70;:::i;:::-;5833:8;;-1:-1:-1;5718:96:147;-1:-1:-1;;5921:2:147;5906:18;;5893:32;-1:-1:-1;;;;;5937:32:147;;5934:52;;;5982:1;5979;5972:12;5934:52;6021:72;6085:7;6074:8;6063:9;6059:24;6021:72;:::i;:::-;6112:8;;-1:-1:-1;5995:98:147;-1:-1:-1;;6200:2:147;6185:18;;6172:32;-1:-1:-1;;;;;6216:32:147;;6213:52;;;6261:1;6258;6251:12;6213:52;6300:72;6364:7;6353:8;6342:9;6338:24;6300:72;:::i;:::-;5333:1099;;;;-1:-1:-1;5333:1099:147;;-1:-1:-1;5333:1099:147;;6391:8;;5333:1099;-1:-1:-1;;;5333:1099:147:o;6437:127::-;6498:10;6493:3;6489:20;6486:1;6479:31;6529:4;6526:1;6519:15;6553:4;6550:1;6543:15;6569:1079;6646:6;6654;6707:2;6695:9;6686:7;6682:23;6678:32;6675:52;;;6723:1;6720;6713:12;6675:52;6762:9;6749:23;6781:31;6806:5;6781:31;:::i;:::-;6831:5;-1:-1:-1;6887:2:147;6872:18;;6859:32;-1:-1:-1;;;;;6903:30:147;;6900:50;;;6946:1;6943;6936:12;6900:50;6969:22;;7022:4;7014:13;;7010:27;-1:-1:-1;7000:55:147;;7051:1;7048;7041:12;7000:55;7091:2;7078:16;-1:-1:-1;;;;;7109:6:147;7106:30;7103:56;;;7139:18;;:::i;:::-;7188:2;7182:9;7280:2;7242:17;;-1:-1:-1;;7238:31:147;;;7271:2;7234:40;7230:54;7218:67;;-1:-1:-1;;;;;7300:34:147;;7336:22;;;7297:62;7294:88;;;7362:18;;:::i;:::-;7398:2;7391:22;7422;;;7463:15;;;7480:2;7459:24;7456:37;-1:-1:-1;7453:57:147;;;7506:1;7503;7496:12;7453:57;7562:6;7557:2;7553;7549:11;7544:2;7536:6;7532:15;7519:50;7615:1;7610:2;7601:6;7593;7589:19;7585:28;7578:39;7636:6;7626:16;;;;;6569:1079;;;;;:::o;7653:508::-;7730:6;7738;7746;7799:2;7787:9;7778:7;7774:23;7770:32;7767:52;;;7815:1;7812;7805:12;7767:52;7854:9;7841:23;7873:31;7898:5;7873:31;:::i;:::-;7923:5;-1:-1:-1;7980:2:147;7965:18;;7952:32;7993:33;7952:32;7993:33;:::i;:::-;7653:508;;8045:7;;-1:-1:-1;;;8125:2:147;8110:18;;;;8097:32;;7653:508::o;8166:1431::-;8360:6;8368;8376;8384;8392;8400;8408;8416;8469:3;8457:9;8448:7;8444:23;8440:33;8437:53;;;8486:1;8483;8476:12;8437:53;8526:9;8513:23;-1:-1:-1;;;;;8551:6:147;8548:30;8545:50;;;8591:1;8588;8581:12;8545:50;8630:70;8692:7;8683:6;8672:9;8668:22;8630:70;:::i;:::-;8719:8;;-1:-1:-1;8604:96:147;-1:-1:-1;;8807:2:147;8792:18;;8779:32;-1:-1:-1;;;;;8823:32:147;;8820:52;;;8868:1;8865;8858:12;8820:52;8907:72;8971:7;8960:8;8949:9;8945:24;8907:72;:::i;:::-;8998:8;;-1:-1:-1;8881:98:147;-1:-1:-1;;9086:2:147;9071:18;;9058:32;-1:-1:-1;;;;;9102:32:147;;9099:52;;;9147:1;9144;9137:12;9099:52;9186:72;9250:7;9239:8;9228:9;9224:24;9186:72;:::i;:::-;9277:8;;-1:-1:-1;9160:98:147;-1:-1:-1;;9365:2:147;9350:18;;9337:32;-1:-1:-1;;;;;9381:32:147;;9378:52;;;9426:1;9423;9416:12;9378:52;9465:72;9529:7;9518:8;9507:9;9503:24;9465:72;:::i;:::-;8166:1431;;;;-1:-1:-1;8166:1431:147;;-1:-1:-1;8166:1431:147;;;;;;9556:8;-1:-1:-1;;;8166:1431:147:o;9602:418::-;9751:2;9740:9;9733:21;9714:4;9783:6;9777:13;9826:6;9821:2;9810:9;9806:18;9799:34;9885:6;9880:2;9872:6;9868:15;9863:2;9852:9;9848:18;9842:50;9941:1;9936:2;9927:6;9916:9;9912:22;9908:31;9901:42;10011:2;10004;10000:7;9995:2;9987:6;9983:15;9979:29;9968:9;9964:45;9960:54;9952:62;;;9602:418;;;;:::o;10822:551::-;10917:6;10925;10933;10986:2;10974:9;10965:7;10961:23;10957:32;10954:52;;;11002:1;10999;10992:12;10954:52;11047:23;;;-1:-1:-1;11145:2:147;11130:18;;11117:32;-1:-1:-1;;;;;11161:30:147;;11158:50;;;11204:1;11201;11194:12;11158:50;11243:70;11305:7;11296:6;11285:9;11281:22;11243:70;:::i;:::-;10822:551;;11332:8;;-1:-1:-1;11217:96:147;;-1:-1:-1;;;;10822:551:147:o;11602:127::-;11663:10;11658:3;11654:20;11651:1;11644:31;11694:4;11691:1;11684:15;11718:4;11715:1;11708:15;12897:127;12958:10;12953:3;12949:20;12946:1;12939:31;12989:4;12986:1;12979:15;13013:4;13010:1;13003:15;13029:125;13094:9;;;13115:10;;;13112:36;;;13128:18;;:::i;13159:135::-;13198:3;13219:17;;;13216:43;;13239:18;;:::i;:::-;-1:-1:-1;13286:1:147;13275:13;;13159:135::o;13792:127::-;13853:10;13848:3;13844:20;13841:1;13834:31;13884:4;13881:1;13874:15;13908:4;13905:1;13898:15;14132:184;14202:6;14255:2;14243:9;14234:7;14230:23;14226:32;14223:52;;;14271:1;14268;14261:12;14223:52;-1:-1:-1;14294:16:147;;14132:184;-1:-1:-1;14132:184:147:o;14697:277::-;14764:6;14817:2;14805:9;14796:7;14792:23;14788:32;14785:52;;;14833:1;14830;14823:12;14785:52;14865:9;14859:16;14918:5;14911:13;14904:21;14897:5;14894:32;14884:60;;14940:1;14937;14930:12;14979:217;15019:1;15045;15035:132;;15089:10;15084:3;15080:20;15077:1;15070:31;15124:4;15121:1;15114:15;15152:4;15149:1;15142:15;15035:132;-1:-1:-1;15181:9:147;;14979:217::o;17522:128::-;17589:9;;;17610:11;;;17607:37;;;17624:18;;:::i;17908:301::-;18037:3;18075:6;18069:13;18121:6;18114:4;18106:6;18102:17;18097:3;18091:37;18183:1;18147:16;;18172:13;;;-1:-1:-1;18147:16:147;17908:301;-1:-1:-1;17908:301:147:o","linkReferences":{},"immutableReferences":{"39766":[{"start":7769,"length":32},{"start":7810,"length":32},{"start":8131,"length":32}]}},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","WHITELIST_ROLE()":"7a997ab7","acceptGenesisCeremony()":"92a2ebf3","computeAllStake(address,uint256)":"55bdbe4c","computeAllStakeForAcceptingEpoch(address)":"574663a9","currentAcceptingEpochByDomain(address)":"b1de97f7","domainGenesisAccepted(address)":"d1ba90ff","epochDurationByDomain(address)":"3bccf635","getAcceptingEpoch(address)":"22fceb75","getAttesterStake(address,uint256,address)":"24fdfddf","getAttesterStakeForAcceptingEpoch(address,address)":"3debeadc","getCustodianStake(address,uint256,address)":"0ce52af5","getCustodianStakeForAcceptingEpoch(address,address)":"9db92f68","getEpochByL1BlockTime(address)":"d980b40d","getEpochDuration(address)":"5c534359","getNextAcceptingEpochWithException(address)":"771fcfc4","getNextPresentEpochWithException(address)":"57dd6a94","getRegisteredAttesters(address)":"1789aeb4","getRegisteredCustodians(address)":"341d5ef5","getRoleAdmin(bytes32)":"248a9ca3","getStake(address,uint256,address,address)":"93dfb85c","getStakeForAcceptingEpoch(address,address,address)":"a78d1fef","getStakedAttestersForAcceptingEpoch(address)":"4234a479","getUnstake(address,uint256,address,address)":"7d93768b","getUnstakeForAcceptingEpoch(address,address,address)":"34eada3a","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize()":"8129fc1c","initialize(address)":"c4d66de8","proxiableUUID()":"52d1902d","registerDomain(uint256,address[])":"d37304f8","removeAddressFromWhitelist(address)":"286dd3f5","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","rewardArray(address[],uint256[],address[])":"4e76a139","rewardFromDomain(address,uint256,address)":"5e00bf46","rollOverEpoch()":"a887b71c","setAcceptingEpoch(address,uint256)":"1dc8b949","slash(address[],address[],uint256[],uint256[])":"a885c975","stake(address,address,uint256)":"bf6eac2f","stakesByDomainEpochCustodian(address,uint256,address)":"86af70d1","stakesByDomainEpochCustodianAttester(address,uint256,address,address)":"0c8f522f","supportsInterface(bytes4)":"01ffc9a7","token()":"fc0c546a","unstake(address,address,uint256)":"60829f8a","unstakesByDomainEpochCustodianAttester(address,uint256,address,address)":"e6e3fb3a","upgradeToAndCall(address,bytes)":"4f1ef286","whitelistAddress(address)":"41566585"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodianTransferAmountMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EpochDurationNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GenesisAlreadyAccepted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakeExceedsGenesisStake\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unstake\",\"type\":\"uint256\"}],\"name\":\"AttesterEpochRolledOver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"name\":\"AttesterStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"name\":\"AttesterUnstaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"EpochRolledOver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WHITELIST_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"computeAllStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"computeAllStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"currentAcceptingEpochByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentAcceptingEpoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"domainGenesisAccepted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"epochDurationByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochDuration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getEpochByL1BlockTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getEpochDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getNextAcceptingEpochWithException\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getNextPresentEpochWithException\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getRegisteredAttesters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getRegisteredCustodians\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getStakedAttestersForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getUnstake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getUnstakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epochDuration\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"}],\"name\":\"registerDomain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"removeAddressFromWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"}],\"name\":\"rewardArray\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"rewardFromDomain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollOverEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newEpoch\",\"type\":\"uint256\"}],\"name\":\"setAcceptingEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"refundAmounts\",\"type\":\"uint256[]\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"stakesByDomainEpochCustodian\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"stakesByDomainEpochCustodianAttester\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"unstakesByDomainEpochCustodianAttester\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"whitelistAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"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.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"computeAllStakeForAcceptingEpoch(address)\":{\"params\":{\"domain\":\"The domain to compute total stake for\"}},\"getCustodianStake(address,uint256,address)\":{\"details\":\"gets the total stake for a given epoch for a given custodian\"},\"getCustodianStakeForAcceptingEpoch(address,address)\":{\"details\":\"gets the total stake for the accepting epoch for a given custodian\"},\"getNextAcceptingEpochWithException(address)\":{\"details\":\"Special handling for genesis state (epoch 0):If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes\"},\"getNextPresentEpochWithException(address)\":{\"details\":\"Special handling for genesis state (accepting epoch 0):If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getStake(address,uint256,address,address)\":{\"details\":\"gets the stake for a given epoch for a given {attester,custodian} tuple\"},\"getStakeForAcceptingEpoch(address,address,address)\":{\"details\":\"gets the stake for the accepting epoch for a given {attester,custodian} tuple\"},\"getUnstake(address,uint256,address,address)\":{\"details\":\"gets the unstake for a given epoch for a given {attester,custodian} tuple\"},\"getUnstakeForAcceptingEpoch(address,address,address)\":{\"details\":\"gets the unstake for the accepting epoch for a given {attester,custodian} tuple\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize()\":{\"details\":\"Initialize the contract\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"rewardArray(address[],uint256[],address[])\":{\"params\":{\"amounts\":\"The amounts to reward\",\"attesters\":\"The attesters to reward\",\"custodians\":\"The custodians of the token from which to reward the attesters \"}},\"rewardFromDomain(address,uint256,address)\":{\"params\":{\"amount\":\"The amount to reward\",\"attester\":\"The attester to reward\",\"custodian\":\"The custodian of the token from which to reward the attester, here it is the domain\"}},\"setAcceptingEpoch(address,uint256)\":{\"params\":{\"domain\":\"The domain address\",\"newEpoch\":\"The new accepting epoch value\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"EpochDurationNotSet()\":[{\"notice\":\"Error thrown when trying to get epoch but duration not set\"}]},\"kind\":\"user\",\"methods\":{\"computeAllStake(address,uint256)\":{\"notice\":\"Computes total stake across all custodians and attesters for an epoch\"},\"computeAllStakeForAcceptingEpoch(address)\":{\"notice\":\"Computes total stake across all custodians and attesters for the current accepting epoch\"},\"getEpochDuration(address)\":{\"notice\":\"Gets the epoch duration for the given domain\"},\"getNextAcceptingEpochWithException(address)\":{\"notice\":\"Gets the next accepting epoch number\"},\"getNextPresentEpochWithException(address)\":{\"notice\":\"Gets the next present epoch number\"},\"getRegisteredAttesters(address)\":{\"notice\":\"Gets all attesters who are registered for the given domain\"},\"getRegisteredCustodians(address)\":{\"notice\":\"Gets all custodians who are registered for the given domain\"},\"getStakedAttestersForAcceptingEpoch(address)\":{\"notice\":\"Gets all attesters who have stake in the current accepting epoch\"},\"registerDomain(uint256,address[])\":{\"notice\":\"Registers a domain and sets the epoch duration\"},\"rewardArray(address[],uint256[],address[])\":{\"notice\":\"An array of custodians reward an array of attesters\"},\"rewardFromDomain(address,uint256,address)\":{\"notice\":\"Domain rewards an attester\"},\"setAcceptingEpoch(address,uint256)\":{\"notice\":\"Sets the accepting epoch for a given domain\"},\"stake(address,address,uint256)\":{\"notice\":\"Stakes for the next epoch\"},\"whitelistAddress(address)\":{\"notice\":\"Whitelist an address to be used as an attester or custodian. Whitelisting means that the address is allowed to stake and unstake\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/staking/MovementStaking.sol\":\"MovementStaking\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x949f1b87232ce60ae1d7651dfc4272f258a388448e08b4d624b1acbe05d8b39b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://469b7e1cab4c319957fddef8ad610ce347e2494d15389f3d3f689c4be66c1f7d\",\"dweb:/ipfs/QmdC9UdUZAYzjyZ2ULJgJ5QxhDHRtVJ8MJhHKjiotNfCeY\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x13c2d19041c51b246233f96874a66c0094b8a5ff78af3b85ea27867f302dcbbb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f1bc47de2e6e12b3680e47a4dd5b6e3c1e85b65851378aa1d617309edbc1200d\",\"dweb:/ipfs/QmSPcJ9HmkmsSDvMS4KZijnxoGMAEn8HbQuY4fe8DroZEE\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0xe1448f559716952220b5c696a5cc34d1f11f958bfbfcd05988543f6fd8bfff96\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ebd19cec65d3998dad25dc9beecd33055b1900f26c3f61377c78926ca0637c9a\",\"dweb:/ipfs/QmUda1jFjWf2ptQrahTgU6953SZY7ZWksRaTo2dKGX4BMK\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x37b2d71a3d12d55076e87942fb75e80ec8b6bacecd19b6562474952f6973d87b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4261c708ec31ae8764d242089617dc60c5e54a20ec781a42704886eda988a37a\",\"dweb:/ipfs/QmQqFiotrcCfB36B2pSfwGz4Bi4zhRgwwGAJ8VFBaEtzQ1\"]},\"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/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89\",\"dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xccb9b54747f3733f9ca435191745881587b2b48a12d6903358b59bc8ae39ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://021b637b39bddc68e1beed71677cb52919d27880804b1c7160d53064342786bc\",\"dweb:/ipfs/QmV3wgNQmoi9d6U3P7xwHAEKDoaQzGqGGjcSXsyWMf9rsK\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70\",\"dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"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/utils/SafeERC20.sol\":{\"keccak256\":\"0x6dd0cb67846da3fa1241c520faaa215d6bec8226e37beac6056c51e8af44d24e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://650e533e62b30dcc6edea2b6c91358d5659da3bde42e56adf7316c493b916a15\",\"dweb:/ipfs/QmYkmK2vPE6FjdAoQVpZSJxamTLGno9wzGS495TcMNFViV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e\",\"dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR\"]},\"lib/openzeppelin-contracts/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xb4d040e2cc1d4a66d08b174b97332aa3dbf330bc74f91c725d7ff653efca7eb1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da205f459aac15cadd00538691b525eef81f098a95bc3eedea12968bcb70706\",\"dweb:/ipfs/QmcqTJET3rNsXMGT3UvqLgFS3RrKaHe5x97m4dcfUCWMoW\"]},\"lib/openzeppelin-contracts/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"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/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x91832f9744a308318ef3344caf2122345d6a949e25017461322d13a4ede53f10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77f5fa6ce1145a3637406a77940cd1ab50523187c8ac7281805b3fc2bd6ffd5e\",\"dweb:/ipfs/QmewJyTg2SoBee1bKwks3vktT2wTQhB7TtzZg9xKvzvfUf\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xc240f71206795cead02e49f999b3523414c230cec53423298d8457a7ce9d3ea4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d5813c665d5ea1b73e27844800eb45831b9ba608b2a9216ead318e246fd5e8f\",\"dweb:/ipfs/QmNStA3tbwHZm1tXgdmY4wB3NbYKJtzYWADjKmDMhYHjyA\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x804753930b59f27c3a6747a4cf58b4d291f2c942a2a76edd43d4571a5f6b02bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f05286cf2babfc5bf1c347c447477ca24147bea09bb4f5ba01fe9afd98ab409\",\"dweb:/ipfs/QmUcTFzF4y2U9VoBbv7kx3PDTACdNMoYQuTe89ot2pAqqA\"]},\"src/staking/MovementStaking.sol\":{\"keccak256\":\"0xb61e04fbc6fce5f3d2e64269f2adccea1f27060f714259634ec20eab1cff468f\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0bf80557c4c9156a247c44cc476c5747028fddd392f9d3e3c7cea1a7fac1f670\",\"dweb:/ipfs/QmQ6A6bPUsm2b7yy5eSsJ7MXgQGAF8zWEkJf7uL7sZNXi9\"]},\"src/staking/MovementStakingStorage.sol\":{\"keccak256\":\"0xcb909fbdd31da45891f983aca5387eff88693b31c60d304b6ab7c1128c814225\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fcfd3aadf8c9e714c6e0f5b8b7f6000b54a1a0eeb219d25cb23848411ae17edb\",\"dweb:/ipfs/QmTKyTFmGKHKWk1wKncaAvXBZH9MwJfkdhFbmTUAwTX7UP\"]},\"src/staking/base/BaseStaking.sol\":{\"keccak256\":\"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46\",\"dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx\"]},\"src/staking/interfaces/IMovementStaking.sol\":{\"keccak256\":\"0x250f5a72809b363ebefe5fbcdce50b62a9ff49672a863c8273e0fbe4d59f8933\",\"urls\":[\"bzz-raw://5a4385f838da317ce90fb84cdd83a724d132f7e6c287191673f4e2ce1a486bbe\",\"dweb:/ipfs/Qmbwq1kBumZDyREvc4ryHMNMQ4sgT39fNAK4bUNRoXqchj\"]},\"src/token/base/BaseToken.sol\":{\"keccak256\":\"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e\",\"dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd\"]},\"src/token/base/MintableToken.sol\":{\"keccak256\":\"0xba4c9b5e900564cb3abb081d11b95f23e5f39a5ee799cda54c9f1a49a7aa8a13\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://94ca441f7acc6b312fc3d1d6ce4dab9971fd1cdf176ae5251fe2f28c4c52a35a\",\"dweb:/ipfs/QmXAuDzaJqydZho7CFyKKKtyYATHedyAUHTKAS839oji3o\"]},\"src/token/base/WrappedToken.sol\":{\"keccak256\":\"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885\",\"dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4\"]},\"src/token/base/WrappedTokenStorage.sol\":{\"keccak256\":\"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08\",\"dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj\"]},\"src/token/custodian/CustodianToken.sol\":{\"keccak256\":\"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04\",\"dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"CustodianTransferAmountMismatch"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"EpochDurationNotSet"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[],"type":"error","name":"GenesisAlreadyAccepted"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[],"type":"error","name":"StakeExceedsGenesisStake"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"address","name":"attester","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false},{"internalType":"uint256","name":"unstake","type":"uint256","indexed":false}],"type":"event","name":"AttesterEpochRolledOver","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"address","name":"attester","type":"address","indexed":false},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false}],"type":"event","name":"AttesterStaked","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"address","name":"attester","type":"address","indexed":false},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false}],"type":"event","name":"AttesterUnstaked","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":false}],"type":"event","name":"EpochRolledOver","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"WHITELIST_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptGenesisCeremony"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"}],"stateMutability":"view","type":"function","name":"computeAllStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"computeAllStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"currentAcceptingEpochByDomain","outputs":[{"internalType":"uint256","name":"currentAcceptingEpoch","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"domainGenesisAccepted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"epochDurationByDomain","outputs":[{"internalType":"uint256","name":"epochDuration","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getEpochByL1BlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getEpochDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getNextAcceptingEpochWithException","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getNextPresentEpochWithException","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getRegisteredAttesters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getRegisteredCustodians","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getStakedAttestersForAcceptingEpoch","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getUnstake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getUnstakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epochDuration","type":"uint256"},{"internalType":"address[]","name":"custodians","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"registerDomain"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"removeAddressFromWhitelist"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address[]","name":"custodians","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"rewardArray"},{"inputs":[{"internalType":"address","name":"attester","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"rewardFromDomain"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"rollOverEpoch"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"newEpoch","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setAcceptingEpoch"},{"inputs":[{"internalType":"address[]","name":"custodians","type":"address[]"},{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"refundAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"slash"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"contract IERC20","name":"custodian","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"stake"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"stakesByDomainEpochCustodian","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"stakesByDomainEpochCustodianAttester","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"unstake"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"unstakesByDomainEpochCustodianAttester","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"whitelistAddress"}],"devdoc":{"kind":"dev","methods":{"computeAllStakeForAcceptingEpoch(address)":{"params":{"domain":"The domain to compute total stake for"}},"getCustodianStake(address,uint256,address)":{"details":"gets the total stake for a given epoch for a given custodian"},"getCustodianStakeForAcceptingEpoch(address,address)":{"details":"gets the total stake for the accepting epoch for a given custodian"},"getNextAcceptingEpochWithException(address)":{"details":"Special handling for genesis state (epoch 0):If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes"},"getNextPresentEpochWithException(address)":{"details":"Special handling for genesis state (accepting epoch 0):If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes"},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"getStake(address,uint256,address,address)":{"details":"gets the stake for a given epoch for a given {attester,custodian} tuple"},"getStakeForAcceptingEpoch(address,address,address)":{"details":"gets the stake for the accepting epoch for a given {attester,custodian} tuple"},"getUnstake(address,uint256,address,address)":{"details":"gets the unstake for a given epoch for a given {attester,custodian} tuple"},"getUnstakeForAcceptingEpoch(address,address,address)":{"details":"gets the unstake for the accepting epoch for a given {attester,custodian} tuple"},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize()":{"details":"Initialize the contract"},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"rewardArray(address[],uint256[],address[])":{"params":{"amounts":"The amounts to reward","attesters":"The attesters to reward","custodians":"The custodians of the token from which to reward the attesters "}},"rewardFromDomain(address,uint256,address)":{"params":{"amount":"The amount to reward","attester":"The attester to reward","custodian":"The custodian of the token from which to reward the attester, here it is the domain"}},"setAcceptingEpoch(address,uint256)":{"params":{"domain":"The domain address","newEpoch":"The new accepting epoch value"}},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"computeAllStake(address,uint256)":{"notice":"Computes total stake across all custodians and attesters for an epoch"},"computeAllStakeForAcceptingEpoch(address)":{"notice":"Computes total stake across all custodians and attesters for the current accepting epoch"},"getEpochDuration(address)":{"notice":"Gets the epoch duration for the given domain"},"getNextAcceptingEpochWithException(address)":{"notice":"Gets the next accepting epoch number"},"getNextPresentEpochWithException(address)":{"notice":"Gets the next present epoch number"},"getRegisteredAttesters(address)":{"notice":"Gets all attesters who are registered for the given domain"},"getRegisteredCustodians(address)":{"notice":"Gets all custodians who are registered for the given domain"},"getStakedAttestersForAcceptingEpoch(address)":{"notice":"Gets all attesters who have stake in the current accepting epoch"},"registerDomain(uint256,address[])":{"notice":"Registers a domain and sets the epoch duration"},"rewardArray(address[],uint256[],address[])":{"notice":"An array of custodians reward an array of attesters"},"rewardFromDomain(address,uint256,address)":{"notice":"Domain rewards an attester"},"setAcceptingEpoch(address,uint256)":{"notice":"Sets the accepting epoch for a given domain"},"stake(address,address,uint256)":{"notice":"Stakes for the next epoch"},"whitelistAddress(address)":{"notice":"Whitelist an address to be used as an attester or custodian. Whitelisting means that the address is allowed to stake and unstake"}},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/staking/MovementStaking.sol":"MovementStaking"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x949f1b87232ce60ae1d7651dfc4272f258a388448e08b4d624b1acbe05d8b39b","urls":["bzz-raw://469b7e1cab4c319957fddef8ad610ce347e2494d15389f3d3f689c4be66c1f7d","dweb:/ipfs/QmdC9UdUZAYzjyZ2ULJgJ5QxhDHRtVJ8MJhHKjiotNfCeY"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x13c2d19041c51b246233f96874a66c0094b8a5ff78af3b85ea27867f302dcbbb","urls":["bzz-raw://f1bc47de2e6e12b3680e47a4dd5b6e3c1e85b65851378aa1d617309edbc1200d","dweb:/ipfs/QmSPcJ9HmkmsSDvMS4KZijnxoGMAEn8HbQuY4fe8DroZEE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0xe1448f559716952220b5c696a5cc34d1f11f958bfbfcd05988543f6fd8bfff96","urls":["bzz-raw://ebd19cec65d3998dad25dc9beecd33055b1900f26c3f61377c78926ca0637c9a","dweb:/ipfs/QmUda1jFjWf2ptQrahTgU6953SZY7ZWksRaTo2dKGX4BMK"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x37b2d71a3d12d55076e87942fb75e80ec8b6bacecd19b6562474952f6973d87b","urls":["bzz-raw://4261c708ec31ae8764d242089617dc60c5e54a20ec781a42704886eda988a37a","dweb:/ipfs/QmQqFiotrcCfB36B2pSfwGz4Bi4zhRgwwGAJ8VFBaEtzQ1"],"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/introspection/ERC165Upgradeable.sol":{"keccak256":"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab","urls":["bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89","dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xccb9b54747f3733f9ca435191745881587b2b48a12d6903358b59bc8ae39ea6b","urls":["bzz-raw://021b637b39bddc68e1beed71677cb52919d27880804b1c7160d53064342786bc","dweb:/ipfs/QmV3wgNQmoi9d6U3P7xwHAEKDoaQzGqGGjcSXsyWMf9rsK"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol":{"keccak256":"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7","urls":["bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b","dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"keccak256":"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724","urls":["bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a","dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486","urls":["bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d","dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c","urls":["bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba","dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d","urls":["bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196","dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA"],"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/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898","urls":["bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70","dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2"],"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/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/utils/SafeERC20.sol":{"keccak256":"0x6dd0cb67846da3fa1241c520faaa215d6bec8226e37beac6056c51e8af44d24e","urls":["bzz-raw://650e533e62b30dcc6edea2b6c91358d5659da3bde42e56adf7316c493b916a15","dweb:/ipfs/QmYkmK2vPE6FjdAoQVpZSJxamTLGno9wzGS495TcMNFViV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c","urls":["bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e","dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Arrays.sol":{"keccak256":"0xb4d040e2cc1d4a66d08b174b97332aa3dbf330bc74f91c725d7ff653efca7eb1","urls":["bzz-raw://9da205f459aac15cadd00538691b525eef81f098a95bc3eedea12968bcb70706","dweb:/ipfs/QmcqTJET3rNsXMGT3UvqLgFS3RrKaHe5x97m4dcfUCWMoW"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Comparators.sol":{"keccak256":"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58","urls":["bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd","dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC"],"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/ReentrancyGuard.sol":{"keccak256":"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3","urls":["bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a","dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x91832f9744a308318ef3344caf2122345d6a949e25017461322d13a4ede53f10","urls":["bzz-raw://77f5fa6ce1145a3637406a77940cd1ab50523187c8ac7281805b3fc2bd6ffd5e","dweb:/ipfs/QmewJyTg2SoBee1bKwks3vktT2wTQhB7TtzZg9xKvzvfUf"],"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/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xc240f71206795cead02e49f999b3523414c230cec53423298d8457a7ce9d3ea4","urls":["bzz-raw://7d5813c665d5ea1b73e27844800eb45831b9ba608b2a9216ead318e246fd5e8f","dweb:/ipfs/QmNStA3tbwHZm1tXgdmY4wB3NbYKJtzYWADjKmDMhYHjyA"],"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/structs/EnumerableSet.sol":{"keccak256":"0x804753930b59f27c3a6747a4cf58b4d291f2c942a2a76edd43d4571a5f6b02bc","urls":["bzz-raw://6f05286cf2babfc5bf1c347c447477ca24147bea09bb4f5ba01fe9afd98ab409","dweb:/ipfs/QmUcTFzF4y2U9VoBbv7kx3PDTACdNMoYQuTe89ot2pAqqA"],"license":"MIT"},"src/staking/MovementStaking.sol":{"keccak256":"0xb61e04fbc6fce5f3d2e64269f2adccea1f27060f714259634ec20eab1cff468f","urls":["bzz-raw://0bf80557c4c9156a247c44cc476c5747028fddd392f9d3e3c7cea1a7fac1f670","dweb:/ipfs/QmQ6A6bPUsm2b7yy5eSsJ7MXgQGAF8zWEkJf7uL7sZNXi9"],"license":"UNLICENSED"},"src/staking/MovementStakingStorage.sol":{"keccak256":"0xcb909fbdd31da45891f983aca5387eff88693b31c60d304b6ab7c1128c814225","urls":["bzz-raw://fcfd3aadf8c9e714c6e0f5b8b7f6000b54a1a0eeb219d25cb23848411ae17edb","dweb:/ipfs/QmTKyTFmGKHKWk1wKncaAvXBZH9MwJfkdhFbmTUAwTX7UP"],"license":"UNLICENSED"},"src/staking/base/BaseStaking.sol":{"keccak256":"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393","urls":["bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46","dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx"],"license":"MIT"},"src/staking/interfaces/IMovementStaking.sol":{"keccak256":"0x250f5a72809b363ebefe5fbcdce50b62a9ff49672a863c8273e0fbe4d59f8933","urls":["bzz-raw://5a4385f838da317ce90fb84cdd83a724d132f7e6c287191673f4e2ce1a486bbe","dweb:/ipfs/Qmbwq1kBumZDyREvc4ryHMNMQ4sgT39fNAK4bUNRoXqchj"],"license":null},"src/token/base/BaseToken.sol":{"keccak256":"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2","urls":["bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e","dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd"],"license":"MIT"},"src/token/base/MintableToken.sol":{"keccak256":"0xba4c9b5e900564cb3abb081d11b95f23e5f39a5ee799cda54c9f1a49a7aa8a13","urls":["bzz-raw://94ca441f7acc6b312fc3d1d6ce4dab9971fd1cdf176ae5251fe2f28c4c52a35a","dweb:/ipfs/QmXAuDzaJqydZho7CFyKKKtyYATHedyAUHTKAS839oji3o"],"license":"MIT"},"src/token/base/WrappedToken.sol":{"keccak256":"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45","urls":["bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885","dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4"],"license":"MIT"},"src/token/base/WrappedTokenStorage.sol":{"keccak256":"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e","urls":["bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08","dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj"],"license":"MIT"},"src/token/custodian/CustodianToken.sol":{"keccak256":"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350","urls":["bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04","dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":63950,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"token","offset":0,"slot":"0","type":"t_contract(IERC20)43848"},{"astId":63955,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochDurationByDomain","offset":0,"slot":"1","type":"t_mapping(t_address,t_uint256)"},{"astId":63960,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"currentAcceptingEpochByDomain","offset":0,"slot":"2","type":"t_mapping(t_address,t_uint256)"},{"astId":63965,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"registeredAttestersByDomain","offset":0,"slot":"3","type":"t_mapping(t_address,t_struct(AddressSet)51902_storage)"},{"astId":63970,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"registeredCustodiansByDomain","offset":0,"slot":"4","type":"t_mapping(t_address,t_struct(AddressSet)51902_storage)"},{"astId":63981,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"stakesByDomainEpochCustodianAttester","offset":0,"slot":"5","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))"},{"astId":63992,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"unstakesByDomainEpochCustodianAttester","offset":0,"slot":"6","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))"},{"astId":64001,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"stakesByDomainEpochCustodian","offset":0,"slot":"7","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_uint256)))"},{"astId":64005,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"domainGenesisAccepted","offset":0,"slot":"8","type":"t_mapping(t_address,t_bool)"},{"astId":45804,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_status","offset":0,"slot":"9","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_bytes32)dyn_storage":{"encoding":"dynamic_array","label":"bytes32[]","numberOfBytes":"32","base":"t_bytes32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IERC20)43848":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))"},"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_uint256)))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => mapping(address => uint256)))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},"t_mapping(t_address,t_struct(AddressSet)51902_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct EnumerableSet.AddressSet)","numberOfBytes":"32","value":"t_struct(AddressSet)51902_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => mapping(address => uint256)))","numberOfBytes":"32","value":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},"t_mapping(t_uint256,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_struct(AddressSet)51902_storage":{"encoding":"inplace","label":"struct EnumerableSet.AddressSet","numberOfBytes":"64","members":[{"astId":51901,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_inner","offset":0,"slot":"0","type":"t_struct(Set)51531_storage"}]},"t_struct(Set)51531_storage":{"encoding":"inplace","label":"struct EnumerableSet.Set","numberOfBytes":"64","members":[{"astId":51526,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_values","offset":0,"slot":"0","type":"t_array(t_bytes32)dyn_storage"},{"astId":51530,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_positions","offset":0,"slot":"1","type":"t_mapping(t_bytes32,t_uint256)"}]},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/staking/MovementStaking.sol","id":63932,"exportedSymbols":{"Address":[44679],"BaseStaking":[64066],"EnumerableSet":[52215],"ICustodianToken":[65013],"IERC20":[43848],"IMovementStaking":[64348],"Math":[49609],"MovementStaking":[63931],"MovementStakingStorage":[64011],"ReentrancyGuard":[45862],"SafeERC20":[44374]},"nodeType":"SourceUnit","src":"39:27836:118","nodes":[{"id":62079,"nodeType":"PragmaDirective","src":"39:24:118","nodes":[],"literals":["solidity","^","0.8",".13"]},{"id":62081,"nodeType":"ImportDirective","src":"64:51:118","nodes":[],"absolutePath":"src/staking/base/BaseStaking.sol","file":"./base/BaseStaking.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":64067,"symbolAliases":[{"foreign":{"id":62080,"name":"BaseStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64066,"src":"72:11:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62083,"nodeType":"ImportDirective","src":"116:82:118","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":44375,"symbolAliases":[{"foreign":{"id":62082,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44374,"src":"124:9:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62085,"nodeType":"ImportDirective","src":"199:69:118","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol","file":"@openzeppelin/contracts/interfaces/IERC20.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":42914,"symbolAliases":[{"foreign":{"id":62084,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43848,"src":"207:6:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62087,"nodeType":"ImportDirective","src":"269:66:118","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":44680,"symbolAliases":[{"foreign":{"id":62086,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44679,"src":"277:7:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62089,"nodeType":"ImportDirective","src":"336:70:118","nodes":[],"absolutePath":"src/token/custodian/CustodianToken.sol","file":"../token/custodian/CustodianToken.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":65349,"symbolAliases":[{"foreign":{"id":62088,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65013,"src":"344:15:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62091,"nodeType":"ImportDirective","src":"407:65:118","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/math/Math.sol","file":"@openzeppelin/contracts/utils/math/Math.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":49610,"symbolAliases":[{"foreign":{"id":62090,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49609,"src":"415:4:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62094,"nodeType":"ImportDirective","src":"473:83:118","nodes":[],"absolutePath":"src/staking/MovementStakingStorage.sol","file":"./MovementStakingStorage.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":64012,"symbolAliases":[{"foreign":{"id":62092,"name":"MovementStakingStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64011,"src":"481:22:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":62093,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52215,"src":"505:13:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62096,"nodeType":"ImportDirective","src":"557:67:118","nodes":[],"absolutePath":"src/staking/interfaces/IMovementStaking.sol","file":"./interfaces/IMovementStaking.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":64349,"symbolAliases":[{"foreign":{"id":62095,"name":"IMovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64348,"src":"565:16:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62097,"nodeType":"ImportDirective","src":"625:59:118","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":45863,"symbolAliases":[],"unitAlias":""},{"id":63931,"nodeType":"ContractDefinition","src":"766:27108:118","nodes":[{"id":62109,"nodeType":"UsingForDirective","src":"887:49:118","nodes":[],"global":false,"libraryName":{"id":62106,"name":"EnumerableSet","nameLocations":["893:13:118"],"nodeType":"IdentifierPath","referencedDeclaration":52215,"src":"893:13:118"},"typeName":{"id":62108,"nodeType":"UserDefinedTypeName","pathNode":{"id":62107,"name":"EnumerableSet.AddressSet","nameLocations":["911:13:118","925:10:118"],"nodeType":"IdentifierPath","referencedDeclaration":51902,"src":"911:24:118"},"referencedDeclaration":51902,"src":"911:24:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},{"id":62112,"nodeType":"ErrorDefinition","src":"1017:28:118","nodes":[],"documentation":{"id":62110,"nodeType":"StructuredDocumentation","src":"942:70:118","text":"@notice Error thrown when trying to get epoch but duration not set"},"errorSelector":"143c378b","name":"EpochDurationNotSet","nameLocation":"1023:19:118","parameters":{"id":62111,"nodeType":"ParameterList","parameters":[],"src":"1042:2:118"}},{"id":62128,"nodeType":"FunctionDefinition","src":"1051:125:118","nodes":[],"body":{"id":62127,"nodeType":"Block","src":"1105:71:118","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":62120,"name":"__BaseStaking_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64054,"src":"1115:28:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":62121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1115:30:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62122,"nodeType":"ExpressionStatement","src":"1115:30:118"},{"expression":{"id":62125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":62123,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"1155:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":62124,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62115,"src":"1163:6:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"src":"1155:14:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"id":62126,"nodeType":"ExpressionStatement","src":"1155:14:118"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":62118,"kind":"modifierInvocation","modifierName":{"id":62117,"name":"initializer","nameLocations":["1093:11:118"],"nodeType":"IdentifierPath","referencedDeclaration":39586,"src":"1093:11:118"},"nodeType":"ModifierInvocation","src":"1093:11:118"}],"name":"initialize","nameLocation":"1060:10:118","parameters":{"id":62116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62115,"mutability":"mutable","name":"_token","nameLocation":"1078:6:118","nodeType":"VariableDeclaration","scope":62128,"src":"1071:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"},"typeName":{"id":62114,"nodeType":"UserDefinedTypeName","pathNode":{"id":62113,"name":"IERC20","nameLocations":["1071:6:118"],"nodeType":"IdentifierPath","referencedDeclaration":43848,"src":"1071:6:118"},"referencedDeclaration":43848,"src":"1071:6:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1070:15:118"},"returnParameters":{"id":62119,"nodeType":"ParameterList","parameters":[],"src":"1105:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":62173,"nodeType":"FunctionDefinition","src":"1245:359:118","nodes":[],"body":{"id":62172,"nodeType":"Block","src":"1367:237:118","nodes":[],"statements":[{"assignments":[62140],"declarations":[{"constant":false,"id":62140,"mutability":"mutable","name":"domain","nameLocation":"1385:6:118","nodeType":"VariableDeclaration","scope":62172,"src":"1377:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62139,"name":"address","nodeType":"ElementaryTypeName","src":"1377:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":62143,"initialValue":{"expression":{"id":62141,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1394:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":62142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1398:6:118","memberName":"sender","nodeType":"MemberAccess","src":"1394:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1377:27:118"},{"expression":{"id":62148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":62144,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63955,"src":"1414:21:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62146,"indexExpression":{"id":62145,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62140,"src":"1436:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1414:29:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":62147,"name":"epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62131,"src":"1446:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1414:45:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62149,"nodeType":"ExpressionStatement","src":"1414:45:118"},{"body":{"id":62170,"nodeType":"Block","src":"1518:80:118","statements":[{"expression":{"arguments":[{"baseExpression":{"id":62165,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62134,"src":"1573:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":62167,"indexExpression":{"id":62166,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62151,"src":"1584:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1573:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":62161,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"1532:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62163,"indexExpression":{"id":62162,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62140,"src":"1561:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1532:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62164,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1569:3:118","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":51929,"src":"1532:40:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$51902_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":62168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1532:55:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62169,"nodeType":"ExpressionStatement","src":"1532:55:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62154,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62151,"src":"1490:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":62155,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62134,"src":"1494:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":62156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1505:6:118","memberName":"length","nodeType":"MemberAccess","src":"1494:17:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1490:21:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62171,"initializationExpression":{"assignments":[62151],"declarations":[{"constant":false,"id":62151,"mutability":"mutable","name":"i","nameLocation":"1483:1:118","nodeType":"VariableDeclaration","scope":62171,"src":"1475:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62150,"name":"uint256","nodeType":"ElementaryTypeName","src":"1475:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62153,"initialValue":{"hexValue":"30","id":62152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1487:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1475:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1513:3:118","subExpression":{"id":62158,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62151,"src":"1513:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62160,"nodeType":"ExpressionStatement","src":"1513:3:118"},"nodeType":"ForStatement","src":"1470:128:118"}]},"baseFunctions":[64078],"documentation":{"id":62129,"nodeType":"StructuredDocumentation","src":"1182:58:118","text":"@notice Registers a domain and sets the epoch duration"},"functionSelector":"d37304f8","implemented":true,"kind":"function","modifiers":[{"id":62137,"kind":"modifierInvocation","modifierName":{"id":62136,"name":"nonReentrant","nameLocations":["1354:12:118"],"nodeType":"IdentifierPath","referencedDeclaration":45826,"src":"1354:12:118"},"nodeType":"ModifierInvocation","src":"1354:12:118"}],"name":"registerDomain","nameLocation":"1254:14:118","parameters":{"id":62135,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62131,"mutability":"mutable","name":"epochDuration","nameLocation":"1286:13:118","nodeType":"VariableDeclaration","scope":62173,"src":"1278:21:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62130,"name":"uint256","nodeType":"ElementaryTypeName","src":"1278:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62134,"mutability":"mutable","name":"custodians","nameLocation":"1328:10:118","nodeType":"VariableDeclaration","scope":62173,"src":"1309:29:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62132,"name":"address","nodeType":"ElementaryTypeName","src":"1309:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62133,"nodeType":"ArrayTypeName","src":"1309:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1268:76:118"},"returnParameters":{"id":62138,"nodeType":"ParameterList","parameters":[],"src":"1367:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":62227,"nodeType":"FunctionDefinition","src":"1686:554:118","nodes":[],"body":{"id":62226,"nodeType":"Block","src":"1788:452:118","nodes":[],"statements":[{"assignments":[62186],"declarations":[{"constant":false,"id":62186,"mutability":"mutable","name":"custodians","nameLocation":"1943:10:118","nodeType":"VariableDeclaration","scope":62226,"src":"1926:27:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62184,"name":"address","nodeType":"ElementaryTypeName","src":"1926:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62185,"nodeType":"ArrayTypeName","src":"1926:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":62196,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62190,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"1983:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62192,"indexExpression":{"id":62191,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62176,"src":"2012:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1983:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62193,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2020:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"1983:43:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1983:45:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":62189,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1956:13:118","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":62187,"name":"address","nodeType":"ElementaryTypeName","src":"1960:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62188,"nodeType":"ArrayTypeName","src":"1960:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":62195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1956:82:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1926:112:118"},{"body":{"id":62222,"nodeType":"Block","src":"2124:83:118","statements":[{"expression":{"id":62220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":62211,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62186,"src":"2138:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":62213,"indexExpression":{"id":62212,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62198,"src":"2149:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2138:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":62218,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62198,"src":"2194:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":62214,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"2154:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62216,"indexExpression":{"id":62215,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62176,"src":"2183:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2154:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62217,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2191:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"2154:39:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":62219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2154:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2138:58:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62221,"nodeType":"ExpressionStatement","src":"2138:58:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62201,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62198,"src":"2068:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62202,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"2072:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62204,"indexExpression":{"id":62203,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62176,"src":"2101:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2072:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62205,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2109:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"2072:43:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2072:45:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2068:49:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62223,"initializationExpression":{"assignments":[62198],"declarations":[{"constant":false,"id":62198,"mutability":"mutable","name":"i","nameLocation":"2061:1:118","nodeType":"VariableDeclaration","scope":62223,"src":"2053:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62197,"name":"uint256","nodeType":"ElementaryTypeName","src":"2053:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62200,"initialValue":{"hexValue":"30","id":62199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2065:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2053:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2119:3:118","subExpression":{"id":62208,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62198,"src":"2119:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62210,"nodeType":"ExpressionStatement","src":"2119:3:118"},"nodeType":"ForStatement","src":"2048:159:118"},{"expression":{"id":62224,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62186,"src":"2223:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":62181,"id":62225,"nodeType":"Return","src":"2216:17:118"}]},"baseFunctions":[64204],"documentation":{"id":62174,"nodeType":"StructuredDocumentation","src":"1610:71:118","text":"@notice Gets all custodians who are registered for the given domain"},"functionSelector":"341d5ef5","implemented":true,"kind":"function","modifiers":[],"name":"getRegisteredCustodians","nameLocation":"1695:23:118","parameters":{"id":62177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62176,"mutability":"mutable","name":"domain","nameLocation":"1736:6:118","nodeType":"VariableDeclaration","scope":62227,"src":"1728:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62175,"name":"address","nodeType":"ElementaryTypeName","src":"1728:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1718:30:118"},"returnParameters":{"id":62181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62180,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62227,"src":"1770:16:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62178,"name":"address","nodeType":"ElementaryTypeName","src":"1770:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62179,"nodeType":"ArrayTypeName","src":"1770:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1769:18:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62281,"nodeType":"FunctionDefinition","src":"2321:419:118","nodes":[],"body":{"id":62280,"nodeType":"Block","src":"2422:318:118","nodes":[],"statements":[{"assignments":[62240],"declarations":[{"constant":false,"id":62240,"mutability":"mutable","name":"attesters","nameLocation":"2449:9:118","nodeType":"VariableDeclaration","scope":62280,"src":"2432:26:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62238,"name":"address","nodeType":"ElementaryTypeName","src":"2432:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62239,"nodeType":"ArrayTypeName","src":"2432:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":62250,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62244,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"2488:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62246,"indexExpression":{"id":62245,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62230,"src":"2516:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2488:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62247,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2524:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"2488:42:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2488:44:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":62243,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2461:13:118","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":62241,"name":"address","nodeType":"ElementaryTypeName","src":"2465:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62242,"nodeType":"ArrayTypeName","src":"2465:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":62249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2461:81:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2432:110:118"},{"body":{"id":62276,"nodeType":"Block","src":"2627:81:118","statements":[{"expression":{"id":62274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":62265,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62240,"src":"2641:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":62267,"indexExpression":{"id":62266,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62252,"src":"2651:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2641:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":62272,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62252,"src":"2695:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":62268,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"2656:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62270,"indexExpression":{"id":62269,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62230,"src":"2684:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2656:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62271,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2692:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"2656:38:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":62273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2656:41:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2641:56:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62275,"nodeType":"ExpressionStatement","src":"2641:56:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62255,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62252,"src":"2572:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62256,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"2576:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62258,"indexExpression":{"id":62257,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62230,"src":"2604:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2576:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62259,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2612:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"2576:42:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2576:44:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2572:48:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62277,"initializationExpression":{"assignments":[62252],"declarations":[{"constant":false,"id":62252,"mutability":"mutable","name":"i","nameLocation":"2565:1:118","nodeType":"VariableDeclaration","scope":62277,"src":"2557:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62251,"name":"uint256","nodeType":"ElementaryTypeName","src":"2557:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62254,"initialValue":{"hexValue":"30","id":62253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2569:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2557:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2622:3:118","subExpression":{"id":62262,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62252,"src":"2622:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62264,"nodeType":"ExpressionStatement","src":"2622:3:118"},"nodeType":"ForStatement","src":"2552:156:118"},{"expression":{"id":62278,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62240,"src":"2724:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":62235,"id":62279,"nodeType":"Return","src":"2717:16:118"}]},"baseFunctions":[64212],"documentation":{"id":62228,"nodeType":"StructuredDocumentation","src":"2246:70:118","text":"@notice Gets all attesters who are registered for the given domain"},"functionSelector":"1789aeb4","implemented":true,"kind":"function","modifiers":[],"name":"getRegisteredAttesters","nameLocation":"2330:22:118","parameters":{"id":62231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62230,"mutability":"mutable","name":"domain","nameLocation":"2370:6:118","nodeType":"VariableDeclaration","scope":62281,"src":"2362:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62229,"name":"address","nodeType":"ElementaryTypeName","src":"2362:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2352:30:118"},"returnParameters":{"id":62235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62234,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62281,"src":"2404:16:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62232,"name":"address","nodeType":"ElementaryTypeName","src":"2404:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62233,"nodeType":"ArrayTypeName","src":"2404:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2403:18:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62390,"nodeType":"FunctionDefinition","src":"2827:1107:118","nodes":[],"body":{"id":62389,"nodeType":"Block","src":"2941:993:118","nodes":[],"statements":[{"assignments":[62291],"declarations":[{"constant":false,"id":62291,"mutability":"mutable","name":"totalAttesters","nameLocation":"3005:14:118","nodeType":"VariableDeclaration","scope":62389,"src":"2997:22:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62290,"name":"uint256","nodeType":"ElementaryTypeName","src":"2997:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62297,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62292,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"3022:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62294,"indexExpression":{"id":62293,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62284,"src":"3050:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3022:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62295,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3058:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"3022:42:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3022:44:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2997:69:118"},{"assignments":[62299],"declarations":[{"constant":false,"id":62299,"mutability":"mutable","name":"activeAttesterCount","nameLocation":"3131:19:118","nodeType":"VariableDeclaration","scope":62389,"src":"3123:27:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62298,"name":"uint256","nodeType":"ElementaryTypeName","src":"3123:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62301,"initialValue":{"hexValue":"30","id":62300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3153:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3123:31:118"},{"body":{"id":62332,"nodeType":"Block","src":"3209:213:118","statements":[{"assignments":[62313],"declarations":[{"constant":false,"id":62313,"mutability":"mutable","name":"attester","nameLocation":"3231:8:118","nodeType":"VariableDeclaration","scope":62332,"src":"3223:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62312,"name":"address","nodeType":"ElementaryTypeName","src":"3223:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":62320,"initialValue":{"arguments":[{"id":62318,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62303,"src":"3281:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":62314,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"3242:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62316,"indexExpression":{"id":62315,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62284,"src":"3270:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3242:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62317,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3278:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"3242:38:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":62319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3242:41:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3223:60:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62322,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62284,"src":"3335:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62323,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62313,"src":"3343:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62321,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63000,"src":"3301:33:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":62324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3301:51:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":62325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3355:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3301:55:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62331,"nodeType":"IfStatement","src":"3297:115:118","trueBody":{"id":62330,"nodeType":"Block","src":"3358:54:118","statements":[{"expression":{"id":62328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3376:21:118","subExpression":{"id":62327,"name":"activeAttesterCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62299,"src":"3376:19:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62329,"nodeType":"ExpressionStatement","src":"3376:21:118"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62306,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62303,"src":"3184:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":62307,"name":"totalAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62291,"src":"3188:14:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3184:18:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62333,"initializationExpression":{"assignments":[62303],"declarations":[{"constant":false,"id":62303,"mutability":"mutable","name":"i","nameLocation":"3177:1:118","nodeType":"VariableDeclaration","scope":62333,"src":"3169:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62302,"name":"uint256","nodeType":"ElementaryTypeName","src":"3169:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62305,"initialValue":{"hexValue":"30","id":62304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3181:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3169:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3204:3:118","subExpression":{"id":62309,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62303,"src":"3204:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62311,"nodeType":"ExpressionStatement","src":"3204:3:118"},"nodeType":"ForStatement","src":"3164:258:118"},{"assignments":[62338],"declarations":[{"constant":false,"id":62338,"mutability":"mutable","name":"activeAttesters","nameLocation":"3493:15:118","nodeType":"VariableDeclaration","scope":62389,"src":"3476:32:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62336,"name":"address","nodeType":"ElementaryTypeName","src":"3476:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62337,"nodeType":"ArrayTypeName","src":"3476:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":62344,"initialValue":{"arguments":[{"id":62342,"name":"activeAttesterCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62299,"src":"3525:19:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":62341,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3511:13:118","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":62339,"name":"address","nodeType":"ElementaryTypeName","src":"3515:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62340,"nodeType":"ArrayTypeName","src":"3515:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":62343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3511:34:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3476:69:118"},{"assignments":[62346],"declarations":[{"constant":false,"id":62346,"mutability":"mutable","name":"activeIndex","nameLocation":"3563:11:118","nodeType":"VariableDeclaration","scope":62389,"src":"3555:19:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62345,"name":"uint256","nodeType":"ElementaryTypeName","src":"3555:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62348,"initialValue":{"hexValue":"30","id":62347,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3577:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3555:23:118"},{"body":{"id":62385,"nodeType":"Block","src":"3633:262:118","statements":[{"assignments":[62360],"declarations":[{"constant":false,"id":62360,"mutability":"mutable","name":"attester","nameLocation":"3655:8:118","nodeType":"VariableDeclaration","scope":62385,"src":"3647:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62359,"name":"address","nodeType":"ElementaryTypeName","src":"3647:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":62367,"initialValue":{"arguments":[{"id":62365,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62350,"src":"3705:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":62361,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"3666:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62363,"indexExpression":{"id":62362,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62284,"src":"3694:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3666:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62364,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3702:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"3666:38:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":62366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3666:41:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3647:60:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62369,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62284,"src":"3759:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62370,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62360,"src":"3767:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62368,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63000,"src":"3725:33:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":62371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3725:51:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":62372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3779:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3725:55:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62384,"nodeType":"IfStatement","src":"3721:164:118","trueBody":{"id":62383,"nodeType":"Block","src":"3782:103:118","statements":[{"expression":{"id":62378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":62374,"name":"activeAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62338,"src":"3800:15:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":62376,"indexExpression":{"id":62375,"name":"activeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62346,"src":"3816:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3800:28:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":62377,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62360,"src":"3831:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3800:39:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62379,"nodeType":"ExpressionStatement","src":"3800:39:118"},{"expression":{"id":62381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3857:13:118","subExpression":{"id":62380,"name":"activeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62346,"src":"3857:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62382,"nodeType":"ExpressionStatement","src":"3857:13:118"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62353,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62350,"src":"3608:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":62354,"name":"totalAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62291,"src":"3612:14:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3608:18:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62386,"initializationExpression":{"assignments":[62350],"declarations":[{"constant":false,"id":62350,"mutability":"mutable","name":"i","nameLocation":"3601:1:118","nodeType":"VariableDeclaration","scope":62386,"src":"3593:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62349,"name":"uint256","nodeType":"ElementaryTypeName","src":"3593:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62352,"initialValue":{"hexValue":"30","id":62351,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3605:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3593:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3628:3:118","subExpression":{"id":62356,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62350,"src":"3628:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62358,"nodeType":"ExpressionStatement","src":"3628:3:118"},"nodeType":"ForStatement","src":"3588:307:118"},{"expression":{"id":62387,"name":"activeAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62338,"src":"3912:15:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":62289,"id":62388,"nodeType":"Return","src":"3905:22:118"}]},"baseFunctions":[64296],"documentation":{"id":62282,"nodeType":"StructuredDocumentation","src":"2746:76:118","text":"@notice Gets all attesters who have stake in the current accepting epoch"},"functionSelector":"4234a479","implemented":true,"kind":"function","modifiers":[],"name":"getStakedAttestersForAcceptingEpoch","nameLocation":"2836:35:118","parameters":{"id":62285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62284,"mutability":"mutable","name":"domain","nameLocation":"2889:6:118","nodeType":"VariableDeclaration","scope":62390,"src":"2881:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62283,"name":"address","nodeType":"ElementaryTypeName","src":"2881:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2871:30:118"},"returnParameters":{"id":62289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62288,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62390,"src":"2923:16:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62286,"name":"address","nodeType":"ElementaryTypeName","src":"2923:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62287,"nodeType":"ArrayTypeName","src":"2923:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2922:18:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62403,"nodeType":"FunctionDefinition","src":"4001:125:118","nodes":[],"body":{"id":62402,"nodeType":"Block","src":"4073:53:118","nodes":[],"statements":[{"expression":{"baseExpression":{"id":62398,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63955,"src":"4090:21:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62400,"indexExpression":{"id":62399,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62393,"src":"4112:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4090:29:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62397,"id":62401,"nodeType":"Return","src":"4083:36:118"}]},"baseFunctions":[64340],"documentation":{"id":62391,"nodeType":"StructuredDocumentation","src":"3940:56:118","text":"@notice Gets the epoch duration for the given domain"},"functionSelector":"5c534359","implemented":true,"kind":"function","modifiers":[],"name":"getEpochDuration","nameLocation":"4010:16:118","parameters":{"id":62394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62393,"mutability":"mutable","name":"domain","nameLocation":"4035:6:118","nodeType":"VariableDeclaration","scope":62403,"src":"4027:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62392,"name":"address","nodeType":"ElementaryTypeName","src":"4027:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4026:16:118"},"returnParameters":{"id":62397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62396,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62403,"src":"4064:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62395,"name":"uint256","nodeType":"ElementaryTypeName","src":"4064:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4063:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62447,"nodeType":"FunctionDefinition","src":"4287:406:118","nodes":[],"body":{"id":62446,"nodeType":"Block","src":"4357:336:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62412,"name":"newEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62408,"src":"4375:8:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"arguments":[{"id":62416,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62406,"src":"4417:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62415,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4409:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":62414,"name":"address","nodeType":"ElementaryTypeName","src":"4409:7:118","typeDescriptions":{}}},"id":62417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4409:15:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62413,"name":"getEpochByL1BlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62744,"src":"4387:21:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4387:38:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4375:50:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4e45575f45504f43485f4d5553545f42455f4c4553535f5448414e5f50524553454e545f45504f4348","id":62420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4427:43:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_bafb0cf99a53f47fa38d345ccc72a9af618a38afdc4637810d95112bae4fd5da","typeString":"literal_string \"NEW_EPOCH_MUST_BE_LESS_THAN_PRESENT_EPOCH\""},"value":"NEW_EPOCH_MUST_BE_LESS_THAN_PRESENT_EPOCH"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bafb0cf99a53f47fa38d345ccc72a9af618a38afdc4637810d95112bae4fd5da","typeString":"literal_string \"NEW_EPOCH_MUST_BE_LESS_THAN_PRESENT_EPOCH\""}],"id":62411,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4367:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":62421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4367:104:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62422,"nodeType":"ExpressionStatement","src":"4367:104:118"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62424,"name":"newEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62408,"src":"4489:8:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"id":62426,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62406,"src":"4518:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62425,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"4500:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4500:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4489:36:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4e45575f45504f43485f4d5553545f42455f4849474845525f5448414e5f43555252454e545f45504f4348","id":62429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4527:45:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_855bed83e45ffd12caf7970c2a2c68213b0e5206360b8dce424893928859487b","typeString":"literal_string \"NEW_EPOCH_MUST_BE_HIGHER_THAN_CURRENT_EPOCH\""},"value":"NEW_EPOCH_MUST_BE_HIGHER_THAN_CURRENT_EPOCH"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_855bed83e45ffd12caf7970c2a2c68213b0e5206360b8dce424893928859487b","typeString":"literal_string \"NEW_EPOCH_MUST_BE_HIGHER_THAN_CURRENT_EPOCH\""}],"id":62423,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4481:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":62430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4481:92:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62431,"nodeType":"ExpressionStatement","src":"4481:92:118"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":62436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":62433,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4591:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":62434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4595:6:118","memberName":"sender","nodeType":"MemberAccess","src":"4591:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":62435,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62406,"src":"4605:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4591:20:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a4544","id":62437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4613:14:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_269df367cd41cace5897a935d0e0858fe4543b5619d45e09af6b124c1bb3d528","typeString":"literal_string \"UNAUTHORIZED\""},"value":"UNAUTHORIZED"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_269df367cd41cace5897a935d0e0858fe4543b5619d45e09af6b124c1bb3d528","typeString":"literal_string \"UNAUTHORIZED\""}],"id":62432,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4583:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":62438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4583:45:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62439,"nodeType":"ExpressionStatement","src":"4583:45:118"},{"expression":{"id":62444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":62440,"name":"currentAcceptingEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63960,"src":"4638:29:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62442,"indexExpression":{"id":62441,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62406,"src":"4668:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4638:37:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":62443,"name":"newEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62408,"src":"4678:8:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4638:48:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62445,"nodeType":"ExpressionStatement","src":"4638:48:118"}]},"baseFunctions":[64347],"documentation":{"id":62404,"nodeType":"StructuredDocumentation","src":"4132:150:118","text":"@notice Sets the accepting epoch for a given domain\n @param domain The domain address\n @param newEpoch The new accepting epoch value"},"functionSelector":"1dc8b949","implemented":true,"kind":"function","modifiers":[],"name":"setAcceptingEpoch","nameLocation":"4296:17:118","parameters":{"id":62409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62406,"mutability":"mutable","name":"domain","nameLocation":"4322:6:118","nodeType":"VariableDeclaration","scope":62447,"src":"4314:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62405,"name":"address","nodeType":"ElementaryTypeName","src":"4314:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62408,"mutability":"mutable","name":"newEpoch","nameLocation":"4338:8:118","nodeType":"VariableDeclaration","scope":62447,"src":"4330:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62407,"name":"uint256","nodeType":"ElementaryTypeName","src":"4330:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4313:34:118"},"returnParameters":{"id":62410,"nodeType":"ParameterList","parameters":[],"src":"4357:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":62570,"nodeType":"FunctionDefinition","src":"4699:1563:118","nodes":[],"body":{"id":62569,"nodeType":"Block","src":"4752:1510:118","nodes":[],"statements":[{"assignments":[62453],"declarations":[{"constant":false,"id":62453,"mutability":"mutable","name":"domain","nameLocation":"4770:6:118","nodeType":"VariableDeclaration","scope":62569,"src":"4762:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62452,"name":"address","nodeType":"ElementaryTypeName","src":"4762:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":62456,"initialValue":{"expression":{"id":62454,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4779:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":62455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4783:6:118","memberName":"sender","nodeType":"MemberAccess","src":"4779:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4762:27:118"},{"condition":{"baseExpression":{"id":62457,"name":"domainGenesisAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64005,"src":"4804:21:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":62459,"indexExpression":{"id":62458,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"4826:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4804:29:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62463,"nodeType":"IfStatement","src":"4800:66:118","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":62460,"name":"GenesisAlreadyAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64288,"src":"4842:22:118","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":62461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4842:24:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":62462,"nodeType":"RevertStatement","src":"4835:31:118"}},{"expression":{"id":62468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":62464,"name":"domainGenesisAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64005,"src":"4876:21:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":62466,"indexExpression":{"id":62465,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"4898:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4876:29:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":62467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4908:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4876:36:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62469,"nodeType":"ExpressionStatement","src":"4876:36:118"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":62471,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63955,"src":"4938:21:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62473,"indexExpression":{"id":62472,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"4960:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4938:29:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":62474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4970:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4938:33:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":62470,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"4931:6:118","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":62476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4931:41:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62477,"nodeType":"ExpressionStatement","src":"4931:41:118"},{"expression":{"id":62484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":62478,"name":"currentAcceptingEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63960,"src":"5054:29:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62480,"indexExpression":{"id":62479,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5084:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5054:37:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":62482,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5116:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62481,"name":"getEpochByL1BlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62744,"src":"5094:21:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5094:29:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5054:69:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62485,"nodeType":"ExpressionStatement","src":"5054:69:118"},{"body":{"id":62567,"nodeType":"Block","src":"5209:1047:118","statements":[{"assignments":[62501],"declarations":[{"constant":false,"id":62501,"mutability":"mutable","name":"attester","nameLocation":"5231:8:118","nodeType":"VariableDeclaration","scope":62567,"src":"5223:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62500,"name":"address","nodeType":"ElementaryTypeName","src":"5223:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":62508,"initialValue":{"arguments":[{"id":62506,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62487,"src":"5281:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":62502,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"5242:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62504,"indexExpression":{"id":62503,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5270:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5242:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62505,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5278:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"5242:38:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":62507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5242:41:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5223:60:118"},{"body":{"id":62565,"nodeType":"Block","src":"5374:876:118","statements":[{"assignments":[62524],"declarations":[{"constant":false,"id":62524,"mutability":"mutable","name":"custodian","nameLocation":"5400:9:118","nodeType":"VariableDeclaration","scope":62565,"src":"5392:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62523,"name":"address","nodeType":"ElementaryTypeName","src":"5392:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":62531,"initialValue":{"arguments":[{"id":62529,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62510,"src":"5452:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":62525,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"5412:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62527,"indexExpression":{"id":62526,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5441:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5412:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62528,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5449:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"5412:39:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":62530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5412:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5392:62:118"},{"assignments":[62533],"declarations":[{"constant":false,"id":62533,"mutability":"mutable","name":"attesterStake","nameLocation":"5539:13:118","nodeType":"VariableDeclaration","scope":62565,"src":"5531:21:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62532,"name":"uint256","nodeType":"ElementaryTypeName","src":"5531:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62540,"initialValue":{"arguments":[{"id":62535,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5585:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":62536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5613:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":62537,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62524,"src":"5636:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62538,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62501,"src":"5667:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62534,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"5555:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":62539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5555:138:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5531:162:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62542,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5897:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62541,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"5879:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5879:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":62544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5907:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5879:29:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62564,"nodeType":"IfStatement","src":"5875:365:118","trueBody":{"id":62563,"nodeType":"Block","src":"5910:330:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62547,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5950:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62546,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"5932:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5932:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":62549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5960:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5932:29:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62562,"nodeType":"IfStatement","src":"5928:298:118","trueBody":{"id":62561,"nodeType":"Block","src":"5963:263:118","statements":[{"expression":{"arguments":[{"id":62552,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"6020:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":62554,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"6070:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62553,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"6052:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6052:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":62556,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62524,"src":"6103:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62557,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62501,"src":"6138:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62558,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62533,"src":"6172:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":62551,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62606,"src":"5985:9:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":62559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5985:222:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62560,"nodeType":"ExpressionStatement","src":"5985:222:118"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62513,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62510,"src":"5318:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62514,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"5322:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62516,"indexExpression":{"id":62515,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5351:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5322:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62517,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5359:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"5322:43:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5322:45:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5318:49:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62566,"initializationExpression":{"assignments":[62510],"declarations":[{"constant":false,"id":62510,"mutability":"mutable","name":"j","nameLocation":"5311:1:118","nodeType":"VariableDeclaration","scope":62566,"src":"5303:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62509,"name":"uint256","nodeType":"ElementaryTypeName","src":"5303:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62512,"initialValue":{"hexValue":"30","id":62511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5315:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5303:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5369:3:118","subExpression":{"id":62520,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62510,"src":"5369:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62522,"nodeType":"ExpressionStatement","src":"5369:3:118"},"nodeType":"ForStatement","src":"5298:952:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62490,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62487,"src":"5154:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62491,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"5158:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62493,"indexExpression":{"id":62492,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5186:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5158:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62494,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5194:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"5158:42:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5158:44:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5154:48:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62568,"initializationExpression":{"assignments":[62487],"declarations":[{"constant":false,"id":62487,"mutability":"mutable","name":"i","nameLocation":"5147:1:118","nodeType":"VariableDeclaration","scope":62568,"src":"5139:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62486,"name":"uint256","nodeType":"ElementaryTypeName","src":"5139:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62489,"initialValue":{"hexValue":"30","id":62488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5151:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5139:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5204:3:118","subExpression":{"id":62497,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62487,"src":"5204:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62499,"nodeType":"ExpressionStatement","src":"5204:3:118"},"nodeType":"ForStatement","src":"5134:1122:118"}]},"baseFunctions":[64081],"functionSelector":"92a2ebf3","implemented":true,"kind":"function","modifiers":[{"id":62450,"kind":"modifierInvocation","modifierName":{"id":62449,"name":"nonReentrant","nameLocations":["4739:12:118"],"nodeType":"IdentifierPath","referencedDeclaration":45826,"src":"4739:12:118"},"nodeType":"ModifierInvocation","src":"4739:12:118"}],"name":"acceptGenesisCeremony","nameLocation":"4708:21:118","parameters":{"id":62448,"nodeType":"ParameterList","parameters":[],"src":"4729:2:118"},"returnParameters":{"id":62451,"nodeType":"ParameterList","parameters":[],"src":"4752:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":62606,"nodeType":"FunctionDefinition","src":"6268:331:118","nodes":[],"body":{"id":62605,"nodeType":"Block","src":"6426:173:118","nodes":[],"statements":[{"expression":{"id":62593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62583,"name":"stakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63981,"src":"6436:36:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":62588,"indexExpression":{"id":62584,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62572,"src":"6473:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6436:44:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":62589,"indexExpression":{"id":62585,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62574,"src":"6481:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6436:51:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":62590,"indexExpression":{"id":62586,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62576,"src":"6488:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6436:62:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62591,"indexExpression":{"id":62587,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62578,"src":"6499:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6436:72:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":62592,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62580,"src":"6512:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6436:82:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62594,"nodeType":"ExpressionStatement","src":"6436:82:118"},{"expression":{"id":62603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62595,"name":"stakesByDomainEpochCustodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64001,"src":"6528:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":62599,"indexExpression":{"id":62596,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62572,"src":"6557:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6528:36:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":62600,"indexExpression":{"id":62597,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62574,"src":"6565:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6528:43:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62601,"indexExpression":{"id":62598,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62576,"src":"6572:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6528:54:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":62602,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62580,"src":"6586:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6528:64:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62604,"nodeType":"ExpressionStatement","src":"6528:64:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_addStake","nameLocation":"6277:9:118","parameters":{"id":62581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62572,"mutability":"mutable","name":"domain","nameLocation":"6304:6:118","nodeType":"VariableDeclaration","scope":62606,"src":"6296:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62571,"name":"address","nodeType":"ElementaryTypeName","src":"6296:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62574,"mutability":"mutable","name":"epoch","nameLocation":"6328:5:118","nodeType":"VariableDeclaration","scope":62606,"src":"6320:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62573,"name":"uint256","nodeType":"ElementaryTypeName","src":"6320:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62576,"mutability":"mutable","name":"custodian","nameLocation":"6351:9:118","nodeType":"VariableDeclaration","scope":62606,"src":"6343:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62575,"name":"address","nodeType":"ElementaryTypeName","src":"6343:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62578,"mutability":"mutable","name":"attester","nameLocation":"6378:8:118","nodeType":"VariableDeclaration","scope":62606,"src":"6370:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62577,"name":"address","nodeType":"ElementaryTypeName","src":"6370:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62580,"mutability":"mutable","name":"amount","nameLocation":"6404:6:118","nodeType":"VariableDeclaration","scope":62606,"src":"6396:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62579,"name":"uint256","nodeType":"ElementaryTypeName","src":"6396:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6286:130:118"},"returnParameters":{"id":62582,"nodeType":"ParameterList","parameters":[],"src":"6426:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":62642,"nodeType":"FunctionDefinition","src":"6605:334:118","nodes":[],"body":{"id":62641,"nodeType":"Block","src":"6766:173:118","nodes":[],"statements":[{"expression":{"id":62629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62619,"name":"stakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63981,"src":"6776:36:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":62624,"indexExpression":{"id":62620,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62608,"src":"6813:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6776:44:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":62625,"indexExpression":{"id":62621,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62610,"src":"6821:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6776:51:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":62626,"indexExpression":{"id":62622,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62612,"src":"6828:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6776:62:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62627,"indexExpression":{"id":62623,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62614,"src":"6839:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6776:72:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":62628,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62616,"src":"6852:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6776:82:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62630,"nodeType":"ExpressionStatement","src":"6776:82:118"},{"expression":{"id":62639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62631,"name":"stakesByDomainEpochCustodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64001,"src":"6868:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":62635,"indexExpression":{"id":62632,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62608,"src":"6897:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6868:36:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":62636,"indexExpression":{"id":62633,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62610,"src":"6905:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6868:43:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62637,"indexExpression":{"id":62634,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62612,"src":"6912:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6868:54:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":62638,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62616,"src":"6926:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6868:64:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62640,"nodeType":"ExpressionStatement","src":"6868:64:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeStake","nameLocation":"6614:12:118","parameters":{"id":62617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62608,"mutability":"mutable","name":"domain","nameLocation":"6644:6:118","nodeType":"VariableDeclaration","scope":62642,"src":"6636:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62607,"name":"address","nodeType":"ElementaryTypeName","src":"6636:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62610,"mutability":"mutable","name":"epoch","nameLocation":"6668:5:118","nodeType":"VariableDeclaration","scope":62642,"src":"6660:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62609,"name":"uint256","nodeType":"ElementaryTypeName","src":"6660:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62612,"mutability":"mutable","name":"custodian","nameLocation":"6691:9:118","nodeType":"VariableDeclaration","scope":62642,"src":"6683:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62611,"name":"address","nodeType":"ElementaryTypeName","src":"6683:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62614,"mutability":"mutable","name":"attester","nameLocation":"6718:8:118","nodeType":"VariableDeclaration","scope":62642,"src":"6710:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62613,"name":"address","nodeType":"ElementaryTypeName","src":"6710:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62616,"mutability":"mutable","name":"amount","nameLocation":"6744:6:118","nodeType":"VariableDeclaration","scope":62642,"src":"6736:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62615,"name":"uint256","nodeType":"ElementaryTypeName","src":"6736:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6626:130:118"},"returnParameters":{"id":62618,"nodeType":"ParameterList","parameters":[],"src":"6766:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":62668,"nodeType":"FunctionDefinition","src":"6945:261:118","nodes":[],"body":{"id":62667,"nodeType":"Block","src":"7105:101:118","nodes":[],"statements":[{"expression":{"id":62665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62655,"name":"unstakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63992,"src":"7115:38:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":62660,"indexExpression":{"id":62656,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62644,"src":"7154:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7115:46:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":62661,"indexExpression":{"id":62657,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62646,"src":"7162:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7115:53:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":62662,"indexExpression":{"id":62658,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62648,"src":"7169:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7115:64:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62663,"indexExpression":{"id":62659,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62650,"src":"7180:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7115:74:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":62664,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62652,"src":"7193:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7115:84:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62666,"nodeType":"ExpressionStatement","src":"7115:84:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_addUnstake","nameLocation":"6954:11:118","parameters":{"id":62653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62644,"mutability":"mutable","name":"domain","nameLocation":"6983:6:118","nodeType":"VariableDeclaration","scope":62668,"src":"6975:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62643,"name":"address","nodeType":"ElementaryTypeName","src":"6975:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62646,"mutability":"mutable","name":"epoch","nameLocation":"7007:5:118","nodeType":"VariableDeclaration","scope":62668,"src":"6999:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62645,"name":"uint256","nodeType":"ElementaryTypeName","src":"6999:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62648,"mutability":"mutable","name":"custodian","nameLocation":"7030:9:118","nodeType":"VariableDeclaration","scope":62668,"src":"7022:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62647,"name":"address","nodeType":"ElementaryTypeName","src":"7022:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62650,"mutability":"mutable","name":"attester","nameLocation":"7057:8:118","nodeType":"VariableDeclaration","scope":62668,"src":"7049:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62649,"name":"address","nodeType":"ElementaryTypeName","src":"7049:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62652,"mutability":"mutable","name":"amount","nameLocation":"7083:6:118","nodeType":"VariableDeclaration","scope":62668,"src":"7075:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62651,"name":"uint256","nodeType":"ElementaryTypeName","src":"7075:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6965:130:118"},"returnParameters":{"id":62654,"nodeType":"ParameterList","parameters":[],"src":"7105:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":62694,"nodeType":"FunctionDefinition","src":"7212:264:118","nodes":[],"body":{"id":62693,"nodeType":"Block","src":"7375:101:118","nodes":[],"statements":[{"expression":{"id":62691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62681,"name":"unstakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63992,"src":"7385:38:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":62686,"indexExpression":{"id":62682,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62670,"src":"7424:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7385:46:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":62687,"indexExpression":{"id":62683,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62672,"src":"7432:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7385:53:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":62688,"indexExpression":{"id":62684,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62674,"src":"7439:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7385:64:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62689,"indexExpression":{"id":62685,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62676,"src":"7450:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7385:74:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":62690,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62678,"src":"7463:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7385:84:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62692,"nodeType":"ExpressionStatement","src":"7385:84:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeUnstake","nameLocation":"7221:14:118","parameters":{"id":62679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62670,"mutability":"mutable","name":"domain","nameLocation":"7253:6:118","nodeType":"VariableDeclaration","scope":62694,"src":"7245:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62669,"name":"address","nodeType":"ElementaryTypeName","src":"7245:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62672,"mutability":"mutable","name":"epoch","nameLocation":"7277:5:118","nodeType":"VariableDeclaration","scope":62694,"src":"7269:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62671,"name":"uint256","nodeType":"ElementaryTypeName","src":"7269:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62674,"mutability":"mutable","name":"custodian","nameLocation":"7300:9:118","nodeType":"VariableDeclaration","scope":62694,"src":"7292:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62673,"name":"address","nodeType":"ElementaryTypeName","src":"7292:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62676,"mutability":"mutable","name":"attester","nameLocation":"7327:8:118","nodeType":"VariableDeclaration","scope":62694,"src":"7319:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62675,"name":"address","nodeType":"ElementaryTypeName","src":"7319:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62678,"mutability":"mutable","name":"amount","nameLocation":"7353:6:118","nodeType":"VariableDeclaration","scope":62694,"src":"7345:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62677,"name":"uint256","nodeType":"ElementaryTypeName","src":"7345:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7235:130:118"},"returnParameters":{"id":62680,"nodeType":"ParameterList","parameters":[],"src":"7375:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":62720,"nodeType":"FunctionDefinition","src":"7482:260:118","nodes":[],"body":{"id":62719,"nodeType":"Block","src":"7642:100:118","nodes":[],"statements":[{"expression":{"id":62717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62707,"name":"unstakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63992,"src":"7652:38:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":62712,"indexExpression":{"id":62708,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62696,"src":"7691:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7652:46:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":62713,"indexExpression":{"id":62709,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62698,"src":"7699:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7652:53:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":62714,"indexExpression":{"id":62710,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62700,"src":"7706:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7652:64:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62715,"indexExpression":{"id":62711,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62702,"src":"7717:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7652:74:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":62716,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62704,"src":"7729:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7652:83:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62718,"nodeType":"ExpressionStatement","src":"7652:83:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setUnstake","nameLocation":"7491:11:118","parameters":{"id":62705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62696,"mutability":"mutable","name":"domain","nameLocation":"7520:6:118","nodeType":"VariableDeclaration","scope":62720,"src":"7512:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62695,"name":"address","nodeType":"ElementaryTypeName","src":"7512:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62698,"mutability":"mutable","name":"epoch","nameLocation":"7544:5:118","nodeType":"VariableDeclaration","scope":62720,"src":"7536:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62697,"name":"uint256","nodeType":"ElementaryTypeName","src":"7536:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62700,"mutability":"mutable","name":"custodian","nameLocation":"7567:9:118","nodeType":"VariableDeclaration","scope":62720,"src":"7559:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62699,"name":"address","nodeType":"ElementaryTypeName","src":"7559:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62702,"mutability":"mutable","name":"attester","nameLocation":"7594:8:118","nodeType":"VariableDeclaration","scope":62720,"src":"7586:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62701,"name":"address","nodeType":"ElementaryTypeName","src":"7586:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62704,"mutability":"mutable","name":"amount","nameLocation":"7620:6:118","nodeType":"VariableDeclaration","scope":62720,"src":"7612:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62703,"name":"uint256","nodeType":"ElementaryTypeName","src":"7612:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7502:130:118"},"returnParameters":{"id":62706,"nodeType":"ParameterList","parameters":[],"src":"7642:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":62744,"nodeType":"FunctionDefinition","src":"8002:226:118","nodes":[],"body":{"id":62743,"nodeType":"Block","src":"8079:149:118","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":62727,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63955,"src":"8093:21:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62729,"indexExpression":{"id":62728,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62722,"src":"8115:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8093:29:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":62730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8126:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8093:34:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62735,"nodeType":"IfStatement","src":"8089:68:118","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":62732,"name":"EpochDurationNotSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62112,"src":"8136:19:118","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":62733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8136:21:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":62734,"nodeType":"RevertStatement","src":"8129:28:118"}},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":62736,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"8174:5:118","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":62737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8180:9:118","memberName":"timestamp","nodeType":"MemberAccess","src":"8174:15:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"id":62738,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63955,"src":"8192:21:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62740,"indexExpression":{"id":62739,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62722,"src":"8214:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8192:29:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8174:47:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62726,"id":62742,"nodeType":"Return","src":"8167:54:118"}]},"baseFunctions":[64088],"functionSelector":"d980b40d","implemented":true,"kind":"function","modifiers":[],"name":"getEpochByL1BlockTime","nameLocation":"8011:21:118","parameters":{"id":62723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62722,"mutability":"mutable","name":"domain","nameLocation":"8041:6:118","nodeType":"VariableDeclaration","scope":62744,"src":"8033:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62721,"name":"address","nodeType":"ElementaryTypeName","src":"8033:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8032:16:118"},"returnParameters":{"id":62726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62725,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62744,"src":"8070:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62724,"name":"uint256","nodeType":"ElementaryTypeName","src":"8070:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8069:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62756,"nodeType":"FunctionDefinition","src":"8307:134:118","nodes":[],"body":{"id":62755,"nodeType":"Block","src":"8380:61:118","nodes":[],"statements":[{"expression":{"baseExpression":{"id":62751,"name":"currentAcceptingEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63960,"src":"8397:29:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62753,"indexExpression":{"id":62752,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62746,"src":"8427:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8397:37:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62750,"id":62754,"nodeType":"Return","src":"8390:44:118"}]},"baseFunctions":[64095],"functionSelector":"22fceb75","implemented":true,"kind":"function","modifiers":[],"name":"getAcceptingEpoch","nameLocation":"8316:17:118","parameters":{"id":62747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62746,"mutability":"mutable","name":"domain","nameLocation":"8342:6:118","nodeType":"VariableDeclaration","scope":62756,"src":"8334:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62745,"name":"address","nodeType":"ElementaryTypeName","src":"8334:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8333:16:118"},"returnParameters":{"id":62750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62749,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62756,"src":"8371:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62748,"name":"uint256","nodeType":"ElementaryTypeName","src":"8371:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8370:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62778,"nodeType":"FunctionDefinition","src":"8661:180:118","nodes":[],"body":{"id":62777,"nodeType":"Block","src":"8751:90:118","nodes":[],"statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62765,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62759,"src":"8786:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62764,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"8768:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8768:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":62767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8797:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8768:30:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62771,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62759,"src":"8823:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62770,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"8805:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8805:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":62773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8833:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8805:29:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8768:66:118","trueExpression":{"hexValue":"30","id":62769,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8801:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62763,"id":62776,"nodeType":"Return","src":"8761:73:118"}]},"baseFunctions":[64102],"documentation":{"id":62757,"nodeType":"StructuredDocumentation","src":"8447:209:118","text":"@notice Gets the next accepting epoch number\n @dev Special handling for genesis state (epoch 0):\n @dev If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes"},"functionSelector":"771fcfc4","implemented":true,"kind":"function","modifiers":[],"name":"getNextAcceptingEpochWithException","nameLocation":"8670:34:118","parameters":{"id":62760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62759,"mutability":"mutable","name":"domain","nameLocation":"8713:6:118","nodeType":"VariableDeclaration","scope":62778,"src":"8705:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62758,"name":"address","nodeType":"ElementaryTypeName","src":"8705:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8704:16:118"},"returnParameters":{"id":62763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62762,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62778,"src":"8742:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62761,"name":"uint256","nodeType":"ElementaryTypeName","src":"8742:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8741:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62800,"nodeType":"FunctionDefinition","src":"9069:182:118","nodes":[],"body":{"id":62799,"nodeType":"Block","src":"9157:94:118","nodes":[],"statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62787,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62781,"src":"9192:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62786,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"9174:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9174:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":62789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9203:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9174:30:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62793,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62781,"src":"9233:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62792,"name":"getEpochByL1BlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62744,"src":"9211:21:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9211:29:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":62795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9243:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9211:33:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9174:70:118","trueExpression":{"hexValue":"30","id":62791,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9207:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62785,"id":62798,"nodeType":"Return","src":"9167:77:118"}]},"baseFunctions":[64109],"documentation":{"id":62779,"nodeType":"StructuredDocumentation","src":"8847:217:118","text":"@notice Gets the next present epoch number\n @dev Special handling for genesis state (accepting epoch 0):\n @dev If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes"},"functionSelector":"57dd6a94","implemented":true,"kind":"function","modifiers":[],"name":"getNextPresentEpochWithException","nameLocation":"9078:32:118","parameters":{"id":62782,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62781,"mutability":"mutable","name":"domain","nameLocation":"9119:6:118","nodeType":"VariableDeclaration","scope":62800,"src":"9111:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62780,"name":"address","nodeType":"ElementaryTypeName","src":"9111:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9110:16:118"},"returnParameters":{"id":62785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62784,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62800,"src":"9148:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62783,"name":"uint256","nodeType":"ElementaryTypeName","src":"9148:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9147:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62825,"nodeType":"FunctionDefinition","src":"9342:250:118","nodes":[],"body":{"id":62824,"nodeType":"Block","src":"9496:96:118","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62814,"name":"stakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63981,"src":"9513:36:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":62816,"indexExpression":{"id":62815,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62803,"src":"9550:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9513:44:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":62818,"indexExpression":{"id":62817,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62805,"src":"9558:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9513:51:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":62820,"indexExpression":{"id":62819,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62807,"src":"9565:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9513:62:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62822,"indexExpression":{"id":62821,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62809,"src":"9576:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9513:72:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62813,"id":62823,"nodeType":"Return","src":"9506:79:118"}]},"baseFunctions":[64122],"documentation":{"id":62801,"nodeType":"StructuredDocumentation","src":"9257:80:118","text":"@dev gets the stake for a given epoch for a given {attester,custodian} tuple"},"functionSelector":"93dfb85c","implemented":true,"kind":"function","modifiers":[],"name":"getStake","nameLocation":"9351:8:118","parameters":{"id":62810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62803,"mutability":"mutable","name":"domain","nameLocation":"9377:6:118","nodeType":"VariableDeclaration","scope":62825,"src":"9369:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62802,"name":"address","nodeType":"ElementaryTypeName","src":"9369:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62805,"mutability":"mutable","name":"epoch","nameLocation":"9401:5:118","nodeType":"VariableDeclaration","scope":62825,"src":"9393:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62804,"name":"uint256","nodeType":"ElementaryTypeName","src":"9393:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62807,"mutability":"mutable","name":"custodian","nameLocation":"9424:9:118","nodeType":"VariableDeclaration","scope":62825,"src":"9416:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62806,"name":"address","nodeType":"ElementaryTypeName","src":"9416:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62809,"mutability":"mutable","name":"attester","nameLocation":"9451:8:118","nodeType":"VariableDeclaration","scope":62825,"src":"9443:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62808,"name":"address","nodeType":"ElementaryTypeName","src":"9443:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9359:106:118"},"returnParameters":{"id":62813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62812,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62825,"src":"9487:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62811,"name":"uint256","nodeType":"ElementaryTypeName","src":"9487:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9486:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62847,"nodeType":"FunctionDefinition","src":"9689:326:118","nodes":[],"body":{"id":62846,"nodeType":"Block","src":"9837:178:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":62838,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62828,"src":"9892:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":62840,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62828,"src":"9934:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62839,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"9916:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9916:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":62842,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62830,"src":"9959:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62843,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62832,"src":"9986:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62837,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"9866:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":62844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9866:142:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62836,"id":62845,"nodeType":"Return","src":"9847:161:118"}]},"baseFunctions":[64133],"documentation":{"id":62826,"nodeType":"StructuredDocumentation","src":"9598:86:118","text":"@dev gets the stake for the accepting epoch for a given {attester,custodian} tuple"},"functionSelector":"a78d1fef","implemented":true,"kind":"function","modifiers":[],"name":"getStakeForAcceptingEpoch","nameLocation":"9698:25:118","parameters":{"id":62833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62828,"mutability":"mutable","name":"domain","nameLocation":"9741:6:118","nodeType":"VariableDeclaration","scope":62847,"src":"9733:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62827,"name":"address","nodeType":"ElementaryTypeName","src":"9733:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62830,"mutability":"mutable","name":"custodian","nameLocation":"9765:9:118","nodeType":"VariableDeclaration","scope":62847,"src":"9757:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62829,"name":"address","nodeType":"ElementaryTypeName","src":"9757:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62832,"mutability":"mutable","name":"attester","nameLocation":"9792:8:118","nodeType":"VariableDeclaration","scope":62847,"src":"9784:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62831,"name":"address","nodeType":"ElementaryTypeName","src":"9784:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9723:83:118"},"returnParameters":{"id":62836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62835,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62847,"src":"9828:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62834,"name":"uint256","nodeType":"ElementaryTypeName","src":"9828:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9827:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62872,"nodeType":"FunctionDefinition","src":"10109:254:118","nodes":[],"body":{"id":62871,"nodeType":"Block","src":"10265:98:118","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62861,"name":"unstakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63992,"src":"10282:38:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":62863,"indexExpression":{"id":62862,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62850,"src":"10321:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10282:46:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":62865,"indexExpression":{"id":62864,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62852,"src":"10329:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10282:53:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":62867,"indexExpression":{"id":62866,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62854,"src":"10336:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10282:64:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62869,"indexExpression":{"id":62868,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62856,"src":"10347:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10282:74:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62860,"id":62870,"nodeType":"Return","src":"10275:81:118"}]},"baseFunctions":[64146],"documentation":{"id":62848,"nodeType":"StructuredDocumentation","src":"10021:83:118","text":"@dev gets the unstake for a given epoch for a given {attester,custodian} tuple"},"functionSelector":"7d93768b","implemented":true,"kind":"function","modifiers":[],"name":"getUnstake","nameLocation":"10118:10:118","parameters":{"id":62857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62850,"mutability":"mutable","name":"domain","nameLocation":"10146:6:118","nodeType":"VariableDeclaration","scope":62872,"src":"10138:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62849,"name":"address","nodeType":"ElementaryTypeName","src":"10138:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62852,"mutability":"mutable","name":"epoch","nameLocation":"10170:5:118","nodeType":"VariableDeclaration","scope":62872,"src":"10162:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62851,"name":"uint256","nodeType":"ElementaryTypeName","src":"10162:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62854,"mutability":"mutable","name":"custodian","nameLocation":"10193:9:118","nodeType":"VariableDeclaration","scope":62872,"src":"10185:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62853,"name":"address","nodeType":"ElementaryTypeName","src":"10185:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62856,"mutability":"mutable","name":"attester","nameLocation":"10220:8:118","nodeType":"VariableDeclaration","scope":62872,"src":"10212:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62855,"name":"address","nodeType":"ElementaryTypeName","src":"10212:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10128:106:118"},"returnParameters":{"id":62860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62859,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62872,"src":"10256:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62858,"name":"uint256","nodeType":"ElementaryTypeName","src":"10256:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10255:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62894,"nodeType":"FunctionDefinition","src":"10462:330:118","nodes":[],"body":{"id":62893,"nodeType":"Block","src":"10612:180:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":62885,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62875,"src":"10669:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":62887,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62875,"src":"10711:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62886,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"10693:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10693:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":62889,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62877,"src":"10736:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62890,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62879,"src":"10763:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62884,"name":"getUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62872,"src":"10641:10:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":62891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10641:144:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62883,"id":62892,"nodeType":"Return","src":"10622:163:118"}]},"baseFunctions":[64157],"documentation":{"id":62873,"nodeType":"StructuredDocumentation","src":"10369:88:118","text":"@dev gets the unstake for the accepting epoch for a given {attester,custodian} tuple"},"functionSelector":"34eada3a","implemented":true,"kind":"function","modifiers":[],"name":"getUnstakeForAcceptingEpoch","nameLocation":"10471:27:118","parameters":{"id":62880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62875,"mutability":"mutable","name":"domain","nameLocation":"10516:6:118","nodeType":"VariableDeclaration","scope":62894,"src":"10508:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62874,"name":"address","nodeType":"ElementaryTypeName","src":"10508:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62877,"mutability":"mutable","name":"custodian","nameLocation":"10540:9:118","nodeType":"VariableDeclaration","scope":62894,"src":"10532:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62876,"name":"address","nodeType":"ElementaryTypeName","src":"10532:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62879,"mutability":"mutable","name":"attester","nameLocation":"10567:8:118","nodeType":"VariableDeclaration","scope":62894,"src":"10559:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62878,"name":"address","nodeType":"ElementaryTypeName","src":"10559:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10498:83:118"},"returnParameters":{"id":62883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62882,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62894,"src":"10603:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62881,"name":"uint256","nodeType":"ElementaryTypeName","src":"10603:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10602:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62915,"nodeType":"FunctionDefinition","src":"10872:215:118","nodes":[],"body":{"id":62914,"nodeType":"Block","src":"11009:78:118","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62906,"name":"stakesByDomainEpochCustodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64001,"src":"11026:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":62908,"indexExpression":{"id":62907,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62897,"src":"11055:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11026:36:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":62910,"indexExpression":{"id":62909,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62899,"src":"11063:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11026:43:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62912,"indexExpression":{"id":62911,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62901,"src":"11070:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11026:54:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62905,"id":62913,"nodeType":"Return","src":"11019:61:118"}]},"baseFunctions":[64168],"documentation":{"id":62895,"nodeType":"StructuredDocumentation","src":"10798:69:118","text":"@dev gets the total stake for a given epoch for a given custodian"},"functionSelector":"0ce52af5","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStake","nameLocation":"10881:17:118","parameters":{"id":62902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62897,"mutability":"mutable","name":"domain","nameLocation":"10916:6:118","nodeType":"VariableDeclaration","scope":62915,"src":"10908:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62896,"name":"address","nodeType":"ElementaryTypeName","src":"10908:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62899,"mutability":"mutable","name":"epoch","nameLocation":"10940:5:118","nodeType":"VariableDeclaration","scope":62915,"src":"10932:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62898,"name":"uint256","nodeType":"ElementaryTypeName","src":"10932:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62901,"mutability":"mutable","name":"custodian","nameLocation":"10963:9:118","nodeType":"VariableDeclaration","scope":62915,"src":"10955:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62900,"name":"address","nodeType":"ElementaryTypeName","src":"10955:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10898:80:118"},"returnParameters":{"id":62905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62904,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62915,"src":"11000:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62903,"name":"uint256","nodeType":"ElementaryTypeName","src":"11000:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10999:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62934,"nodeType":"FunctionDefinition","src":"11173:230:118","nodes":[],"body":{"id":62933,"nodeType":"Block","src":"11304:99:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":62926,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62918,"src":"11351:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":62928,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62918,"src":"11377:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62927,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"11359:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11359:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":62930,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62920,"src":"11386:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62925,"name":"getCustodianStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62915,"src":"11333:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view returns (uint256)"}},"id":62931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11333:63:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62924,"id":62932,"nodeType":"Return","src":"11314:82:118"}]},"baseFunctions":[64177],"documentation":{"id":62916,"nodeType":"StructuredDocumentation","src":"11093:75:118","text":"@dev gets the total stake for the accepting epoch for a given custodian"},"functionSelector":"9db92f68","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStakeForAcceptingEpoch","nameLocation":"11182:34:118","parameters":{"id":62921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62918,"mutability":"mutable","name":"domain","nameLocation":"11234:6:118","nodeType":"VariableDeclaration","scope":62934,"src":"11226:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62917,"name":"address","nodeType":"ElementaryTypeName","src":"11226:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62920,"mutability":"mutable","name":"custodian","nameLocation":"11258:9:118","nodeType":"VariableDeclaration","scope":62934,"src":"11250:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62919,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11216:57:118"},"returnParameters":{"id":62924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62923,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62934,"src":"11295:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62922,"name":"uint256","nodeType":"ElementaryTypeName","src":"11295:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11294:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62982,"nodeType":"FunctionDefinition","src":"11409:381:118","nodes":[],"body":{"id":62981,"nodeType":"Block","src":"11514:276:118","nodes":[],"statements":[{"assignments":[62946],"declarations":[{"constant":false,"id":62946,"mutability":"mutable","name":"attesterStake","nameLocation":"11532:13:118","nodeType":"VariableDeclaration","scope":62981,"src":"11524:21:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62945,"name":"uint256","nodeType":"ElementaryTypeName","src":"11524:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62948,"initialValue":{"hexValue":"30","id":62947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11548:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11524:25:118"},{"body":{"id":62977,"nodeType":"Block","src":"11635:119:118","statements":[{"expression":{"id":62975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":62963,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62946,"src":"11649:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":62965,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62936,"src":"11675:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62966,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62938,"src":"11683:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":62971,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62950,"src":"11730:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":62967,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"11690:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62969,"indexExpression":{"id":62968,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62936,"src":"11719:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11690:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62970,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11727:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"11690:39:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":62972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11690:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62973,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62940,"src":"11734:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62964,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"11666:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":62974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11666:77:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11649:94:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62976,"nodeType":"ExpressionStatement","src":"11649:94:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62953,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62950,"src":"11579:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62954,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"11583:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62956,"indexExpression":{"id":62955,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62936,"src":"11612:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11583:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62957,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11620:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"11583:43:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11583:45:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11579:49:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62978,"initializationExpression":{"assignments":[62950],"declarations":[{"constant":false,"id":62950,"mutability":"mutable","name":"i","nameLocation":"11572:1:118","nodeType":"VariableDeclaration","scope":62978,"src":"11564:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62949,"name":"uint256","nodeType":"ElementaryTypeName","src":"11564:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62952,"initialValue":{"hexValue":"30","id":62951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11576:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11564:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11630:3:118","subExpression":{"id":62960,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62950,"src":"11630:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62962,"nodeType":"ExpressionStatement","src":"11630:3:118"},"nodeType":"ForStatement","src":"11559:195:118"},{"expression":{"id":62979,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62946,"src":"11770:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62944,"id":62980,"nodeType":"Return","src":"11763:20:118"}]},"functionSelector":"24fdfddf","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStake","nameLocation":"11418:16:118","parameters":{"id":62941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62936,"mutability":"mutable","name":"domain","nameLocation":"11443:6:118","nodeType":"VariableDeclaration","scope":62982,"src":"11435:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62935,"name":"address","nodeType":"ElementaryTypeName","src":"11435:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62938,"mutability":"mutable","name":"epoch","nameLocation":"11459:5:118","nodeType":"VariableDeclaration","scope":62982,"src":"11451:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62937,"name":"uint256","nodeType":"ElementaryTypeName","src":"11451:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62940,"mutability":"mutable","name":"attester","nameLocation":"11474:8:118","nodeType":"VariableDeclaration","scope":62982,"src":"11466:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62939,"name":"address","nodeType":"ElementaryTypeName","src":"11466:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11434:49:118"},"returnParameters":{"id":62944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62943,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62982,"src":"11505:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62942,"name":"uint256","nodeType":"ElementaryTypeName","src":"11505:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11504:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":63000,"nodeType":"FunctionDefinition","src":"11796:192:118","nodes":[],"body":{"id":62999,"nodeType":"Block","src":"11903:85:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":62992,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62984,"src":"11937:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":62994,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62984,"src":"11963:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62993,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"11945:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11945:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":62996,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62986,"src":"11972:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62991,"name":"getAttesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62982,"src":"11920:16:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view returns (uint256)"}},"id":62997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11920:61:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62990,"id":62998,"nodeType":"Return","src":"11913:68:118"}]},"baseFunctions":[64312],"functionSelector":"3debeadc","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStakeForAcceptingEpoch","nameLocation":"11805:33:118","parameters":{"id":62987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62984,"mutability":"mutable","name":"domain","nameLocation":"11847:6:118","nodeType":"VariableDeclaration","scope":63000,"src":"11839:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62983,"name":"address","nodeType":"ElementaryTypeName","src":"11839:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62986,"mutability":"mutable","name":"attester","nameLocation":"11863:8:118","nodeType":"VariableDeclaration","scope":63000,"src":"11855:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62985,"name":"address","nodeType":"ElementaryTypeName","src":"11855:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11838:34:118"},"returnParameters":{"id":62990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62989,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":63000,"src":"11894:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62988,"name":"uint256","nodeType":"ElementaryTypeName","src":"11894:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11893:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":63090,"nodeType":"FunctionDefinition","src":"12036:1885:118","nodes":[],"body":{"id":63089,"nodeType":"Block","src":"12178:1743:118","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":63020,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12281:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12285:6:118","memberName":"sender","nodeType":"MemberAccess","src":"12281:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":63016,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"12241:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":63018,"indexExpression":{"id":63017,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63003,"src":"12269:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12241:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":63019,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12277:3:118","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":51929,"src":"12241:39:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$51902_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":63022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12241:51:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63023,"nodeType":"ExpressionStatement","src":"12241:51:118"},{"assignments":[63025],"declarations":[{"constant":false,"id":63025,"mutability":"mutable","name":"balanceBefore","nameLocation":"12674:13:118","nodeType":"VariableDeclaration","scope":63089,"src":"12666:21:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63024,"name":"uint256","nodeType":"ElementaryTypeName","src":"12666:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63033,"initialValue":{"arguments":[{"arguments":[{"id":63030,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12714:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63029,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12706:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63028,"name":"address","nodeType":"ElementaryTypeName","src":"12706:7:118","typeDescriptions":{}}},"id":63031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12706:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":63026,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"12690:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"id":63027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12696:9:118","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43805,"src":"12690:15:118","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":63032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12690:30:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12666:54:118"},{"expression":{"arguments":[{"expression":{"id":63037,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13032:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13036:6:118","memberName":"sender","nodeType":"MemberAccess","src":"13032:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":63041,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"13052:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63040,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13044:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63039,"name":"address","nodeType":"ElementaryTypeName","src":"13044:7:118","typeDescriptions":{}}},"id":63042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13044:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63043,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63008,"src":"13059:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":63034,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63006,"src":"13009:9:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"id":63036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13019:12:118","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43847,"src":"13009:22: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":63044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13009:57:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63045,"nodeType":"ExpressionStatement","src":"13009:57:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":63050,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"13189:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13181:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63048,"name":"address","nodeType":"ElementaryTypeName","src":"13181:7:118","typeDescriptions":{}}},"id":63051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13181:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":63046,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"13165:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"id":63047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13171:9:118","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43805,"src":"13165:15:118","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":63052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13165:30:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63053,"name":"balanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63025,"src":"13199:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":63054,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63008,"src":"13215:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13199:22:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13165:56:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63060,"nodeType":"IfStatement","src":"13161:114:118","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":63057,"name":"CustodianTransferAmountMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64286,"src":"13242:31:118","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":63058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13242:33:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":63059,"nodeType":"RevertStatement","src":"13235:40:118"}},{"expression":{"arguments":[{"id":63062,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63003,"src":"13375:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":63064,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63003,"src":"13570:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63063,"name":"getNextAcceptingEpochWithException","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62778,"src":"13535:34:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13535:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":63068,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63006,"src":"13599:9:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63067,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13591:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63066,"name":"address","nodeType":"ElementaryTypeName","src":"13591:7:118","typeDescriptions":{}}},"id":63069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13591:18:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":63070,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13623:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13627:6:118","memberName":"sender","nodeType":"MemberAccess","src":"13623:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63072,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63008,"src":"13647:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63061,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62606,"src":"13352:9:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13352:311:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63074,"nodeType":"ExpressionStatement","src":"13352:311:118"},{"eventCall":{"arguments":[{"id":63076,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63003,"src":"13766:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":63078,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63003,"src":"13821:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63077,"name":"getNextAcceptingEpochWithException","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62778,"src":"13786:34:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13786:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":63082,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63006,"src":"13850:9:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63081,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13842:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63080,"name":"address","nodeType":"ElementaryTypeName","src":"13842:7:118","typeDescriptions":{}}},"id":63083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13842:18:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":63084,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13874:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13878:6:118","memberName":"sender","nodeType":"MemberAccess","src":"13874:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63086,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63008,"src":"13898:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63075,"name":"AttesterStaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64252,"src":"13738:14:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13738:176:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63088,"nodeType":"EmitStatement","src":"13733:181:118"}]},"baseFunctions":[64187],"documentation":{"id":63001,"nodeType":"StructuredDocumentation","src":"11994:37:118","text":"@notice Stakes for the next epoch"},"functionSelector":"bf6eac2f","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":63011,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64010,"src":"12149:14:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":63012,"kind":"modifierInvocation","modifierName":{"id":63010,"name":"onlyRole","nameLocations":["12140:8:118"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"12140:8:118"},"nodeType":"ModifierInvocation","src":"12140:24:118"},{"id":63014,"kind":"modifierInvocation","modifierName":{"id":63013,"name":"nonReentrant","nameLocations":["12165:12:118"],"nodeType":"IdentifierPath","referencedDeclaration":45826,"src":"12165:12:118"},"nodeType":"ModifierInvocation","src":"12165:12:118"}],"name":"stake","nameLocation":"12045:5:118","parameters":{"id":63009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63003,"mutability":"mutable","name":"domain","nameLocation":"12068:6:118","nodeType":"VariableDeclaration","scope":63090,"src":"12060:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63002,"name":"address","nodeType":"ElementaryTypeName","src":"12060:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63006,"mutability":"mutable","name":"custodian","nameLocation":"12091:9:118","nodeType":"VariableDeclaration","scope":63090,"src":"12084:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"},"typeName":{"id":63005,"nodeType":"UserDefinedTypeName","pathNode":{"id":63004,"name":"IERC20","nameLocations":["12084:6:118"],"nodeType":"IdentifierPath","referencedDeclaration":43848,"src":"12084:6:118"},"referencedDeclaration":43848,"src":"12084:6:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":63008,"mutability":"mutable","name":"amount","nameLocation":"12118:6:118","nodeType":"VariableDeclaration","scope":63090,"src":"12110:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63007,"name":"uint256","nodeType":"ElementaryTypeName","src":"12110:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12050:80:118"},"returnParameters":{"id":63015,"nodeType":"ParameterList","parameters":[],"src":"12178:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":63127,"nodeType":"FunctionDefinition","src":"13972:972:118","nodes":[],"body":{"id":63126,"nodeType":"Block","src":"14117:827:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":63105,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63092,"src":"14473:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":63107,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63092,"src":"14668:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63106,"name":"getNextAcceptingEpochWithException","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62778,"src":"14633:34:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14633:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63109,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63094,"src":"14689:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":63110,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14712:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14716:6:118","memberName":"sender","nodeType":"MemberAccess","src":"14712:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63112,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63096,"src":"14736:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63104,"name":"_addUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62668,"src":"14448:11:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14448:304:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63114,"nodeType":"ExpressionStatement","src":"14448:304:118"},{"eventCall":{"arguments":[{"id":63116,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63092,"src":"14798:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":63118,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63092,"src":"14853:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63117,"name":"getNextAcceptingEpochWithException","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62778,"src":"14818:34:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14818:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63120,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63094,"src":"14874:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":63121,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14897:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14901:6:118","memberName":"sender","nodeType":"MemberAccess","src":"14897:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63123,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63096,"src":"14921:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63115,"name":"AttesterUnstaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64264,"src":"14768:16:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14768:169:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63125,"nodeType":"EmitStatement","src":"14763:174:118"}]},"baseFunctions":[64196],"functionSelector":"60829f8a","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":63099,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64010,"src":"14088:14:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":63100,"kind":"modifierInvocation","modifierName":{"id":63098,"name":"onlyRole","nameLocations":["14079:8:118"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"14079:8:118"},"nodeType":"ModifierInvocation","src":"14079:24:118"},{"id":63102,"kind":"modifierInvocation","modifierName":{"id":63101,"name":"nonReentrant","nameLocations":["14104:12:118"],"nodeType":"IdentifierPath","referencedDeclaration":45826,"src":"14104:12:118"},"nodeType":"ModifierInvocation","src":"14104:12:118"}],"name":"unstake","nameLocation":"13981:7:118","parameters":{"id":63097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63092,"mutability":"mutable","name":"domain","nameLocation":"14006:6:118","nodeType":"VariableDeclaration","scope":63127,"src":"13998:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63091,"name":"address","nodeType":"ElementaryTypeName","src":"13998:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63094,"mutability":"mutable","name":"custodian","nameLocation":"14030:9:118","nodeType":"VariableDeclaration","scope":63127,"src":"14022:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63093,"name":"address","nodeType":"ElementaryTypeName","src":"14022:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63096,"mutability":"mutable","name":"amount","nameLocation":"14057:6:118","nodeType":"VariableDeclaration","scope":63127,"src":"14049:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63095,"name":"uint256","nodeType":"ElementaryTypeName","src":"14049:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13988:81:118"},"returnParameters":{"id":63103,"nodeType":"ParameterList","parameters":[],"src":"14117:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":63207,"nodeType":"FunctionDefinition","src":"15011:1474:118","nodes":[],"body":{"id":63206,"nodeType":"Block","src":"15159:1326:118","nodes":[],"statements":[{"assignments":[63139],"declarations":[{"constant":false,"id":63139,"mutability":"mutable","name":"stakeAmount","nameLocation":"15273:11:118","nodeType":"VariableDeclaration","scope":63206,"src":"15265:19:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63138,"name":"uint256","nodeType":"ElementaryTypeName","src":"15265:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63146,"initialValue":{"arguments":[{"id":63141,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63129,"src":"15309:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63142,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63131,"src":"15329:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63143,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63133,"src":"15354:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63144,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63135,"src":"15377:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63140,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"15287:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":63145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15287:108:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15265:130:118"},{"assignments":[63148],"declarations":[{"constant":false,"id":63148,"mutability":"mutable","name":"unstakeAmount","nameLocation":"15413:13:118","nodeType":"VariableDeclaration","scope":63206,"src":"15405:21:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63147,"name":"uint256","nodeType":"ElementaryTypeName","src":"15405:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63157,"initialValue":{"arguments":[{"id":63150,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63129,"src":"15453:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63151,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63131,"src":"15473:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":63152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15487:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15473:15:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63154,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63133,"src":"15502:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63155,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63135,"src":"15525:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63149,"name":"getUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62872,"src":"15429:10:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":63156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15429:114:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15405:138:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63158,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63148,"src":"15557:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":63159,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63139,"src":"15573:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15557:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63166,"nodeType":"IfStatement","src":"15553:85:118","trueBody":{"id":63165,"nodeType":"Block","src":"15586:52:118","statements":[{"expression":{"id":63163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":63161,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63148,"src":"15600:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":63162,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63139,"src":"15616:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15600:27:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63164,"nodeType":"ExpressionStatement","src":"15600:27:118"}]}},{"assignments":[63168],"declarations":[{"constant":false,"id":63168,"mutability":"mutable","name":"remainder","nameLocation":"15655:9:118","nodeType":"VariableDeclaration","scope":63206,"src":"15647:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63167,"name":"uint256","nodeType":"ElementaryTypeName","src":"15647:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63172,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63169,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63139,"src":"15667:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":63170,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63148,"src":"15681:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15667:27:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15647:47:118"},{"expression":{"arguments":[{"id":63174,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63129,"src":"15715:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63175,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63131,"src":"15723:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":63176,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15737:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15723:15:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63178,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63133,"src":"15740:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63179,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63135,"src":"15751:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63180,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63168,"src":"15761:9:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63173,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62606,"src":"15705:9:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15705:66:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63182,"nodeType":"ExpressionStatement","src":"15705:66:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63183,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63148,"src":"16181:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":63184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16197:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16181:17:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63197,"nodeType":"IfStatement","src":"16177:131:118","trueBody":{"id":63196,"nodeType":"Block","src":"16200:108:118","statements":[{"expression":{"arguments":[{"arguments":[{"id":63189,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16255:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63188,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16247:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63187,"name":"address","nodeType":"ElementaryTypeName","src":"16247:7:118","typeDescriptions":{}}},"id":63190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16247:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63191,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63135,"src":"16262:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63192,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63133,"src":"16272:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63193,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63148,"src":"16283:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63186,"name":"_payAttesterFromContractDirectly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63614,"src":"16214:32:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16214:83:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63195,"nodeType":"ExpressionStatement","src":"16214:83:118"}]}},{"eventCall":{"arguments":[{"id":63199,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63135,"src":"16360:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63200,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63131,"src":"16382:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63201,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63133,"src":"16407:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63202,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63139,"src":"16430:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63203,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63148,"src":"16455:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63198,"name":"AttesterEpochRolledOver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64276,"src":"16323:23:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,uint256,uint256)"}},"id":63204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16323:155:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63205,"nodeType":"EmitStatement","src":"16318:160:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_rollOverAttester","nameLocation":"15020:17:118","parameters":{"id":63136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63129,"mutability":"mutable","name":"domain","nameLocation":"15055:6:118","nodeType":"VariableDeclaration","scope":63207,"src":"15047:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63128,"name":"address","nodeType":"ElementaryTypeName","src":"15047:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63131,"mutability":"mutable","name":"epochNumber","nameLocation":"15079:11:118","nodeType":"VariableDeclaration","scope":63207,"src":"15071:19:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63130,"name":"uint256","nodeType":"ElementaryTypeName","src":"15071:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":63133,"mutability":"mutable","name":"custodian","nameLocation":"15108:9:118","nodeType":"VariableDeclaration","scope":63207,"src":"15100:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63132,"name":"address","nodeType":"ElementaryTypeName","src":"15100:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63135,"mutability":"mutable","name":"attester","nameLocation":"15135:8:118","nodeType":"VariableDeclaration","scope":63207,"src":"15127:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63134,"name":"address","nodeType":"ElementaryTypeName","src":"15127:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15037:112:118"},"returnParameters":{"id":63137,"nodeType":"ParameterList","parameters":[],"src":"15159:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63285,"nodeType":"FunctionDefinition","src":"16491:810:118","nodes":[],"body":{"id":63284,"nodeType":"Block","src":"16561:740:118","nodes":[],"statements":[{"body":{"id":63269,"nodeType":"Block","src":"16790:348:118","statements":[{"assignments":[63229],"declarations":[{"constant":false,"id":63229,"mutability":"mutable","name":"attester","nameLocation":"16812:8:118","nodeType":"VariableDeclaration","scope":63269,"src":"16804:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63228,"name":"address","nodeType":"ElementaryTypeName","src":"16804:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":63236,"initialValue":{"arguments":[{"id":63234,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63215,"src":"16862:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":63230,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"16823:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":63232,"indexExpression":{"id":63231,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63209,"src":"16851:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16823:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":63233,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16859:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"16823:38:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":63235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16823:41:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16804:60:118"},{"body":{"id":63267,"nodeType":"Block","src":"16955:173:118","statements":[{"assignments":[63252],"declarations":[{"constant":false,"id":63252,"mutability":"mutable","name":"custodian","nameLocation":"16981:9:118","nodeType":"VariableDeclaration","scope":63267,"src":"16973:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63251,"name":"address","nodeType":"ElementaryTypeName","src":"16973:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":63259,"initialValue":{"arguments":[{"id":63257,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63238,"src":"17033:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":63253,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"16993:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":63255,"indexExpression":{"id":63254,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63209,"src":"17022:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16993:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":63256,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17030:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"16993:39:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":63258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16993:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16973:62:118"},{"expression":{"arguments":[{"id":63261,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63209,"src":"17072:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63262,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63211,"src":"17080:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63263,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63252,"src":"17093:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63264,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63229,"src":"17104:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63260,"name":"_rollOverAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63207,"src":"17054:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,uint256,address,address)"}},"id":63265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17054:59:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63266,"nodeType":"ExpressionStatement","src":"17054:59:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63241,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63238,"src":"16899:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":63242,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"16903:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":63244,"indexExpression":{"id":63243,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63209,"src":"16932:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16903:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":63245,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16940:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"16903:43:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":63246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16903:45:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16899:49:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63268,"initializationExpression":{"assignments":[63238],"declarations":[{"constant":false,"id":63238,"mutability":"mutable","name":"j","nameLocation":"16892:1:118","nodeType":"VariableDeclaration","scope":63268,"src":"16884:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63237,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63240,"initialValue":{"hexValue":"30","id":63239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16896:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16884:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":63249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16950:3:118","subExpression":{"id":63248,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63238,"src":"16950:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63250,"nodeType":"ExpressionStatement","src":"16950:3:118"},"nodeType":"ForStatement","src":"16879:249:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63218,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63215,"src":"16735:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":63219,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"16739:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":63221,"indexExpression":{"id":63220,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63209,"src":"16767:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16739:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":63222,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16775:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"16739:42:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":63223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16739:44:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16735:48:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63270,"initializationExpression":{"assignments":[63215],"declarations":[{"constant":false,"id":63215,"mutability":"mutable","name":"i","nameLocation":"16728:1:118","nodeType":"VariableDeclaration","scope":63270,"src":"16720:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63214,"name":"uint256","nodeType":"ElementaryTypeName","src":"16720:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63217,"initialValue":{"hexValue":"30","id":63216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16732:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16720:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":63226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16785:3:118","subExpression":{"id":63225,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63215,"src":"16785:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63227,"nodeType":"ExpressionStatement","src":"16785:3:118"},"nodeType":"ForStatement","src":"16715:423:118"},{"expression":{"id":63277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":63271,"name":"currentAcceptingEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63960,"src":"17187:29:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":63273,"indexExpression":{"id":63272,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63209,"src":"17217:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"17187:37:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63274,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63211,"src":"17227:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":63275,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17241:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"17227:15:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17187:55:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63278,"nodeType":"ExpressionStatement","src":"17187:55:118"},{"eventCall":{"arguments":[{"id":63280,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63209,"src":"17274:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63281,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63211,"src":"17282:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63279,"name":"EpochRolledOver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64282,"src":"17258:15:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":63282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17258:36:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63283,"nodeType":"EmitStatement","src":"17253:41:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_rollOverEpoch","nameLocation":"16500:14:118","parameters":{"id":63212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63209,"mutability":"mutable","name":"domain","nameLocation":"16523:6:118","nodeType":"VariableDeclaration","scope":63285,"src":"16515:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63208,"name":"address","nodeType":"ElementaryTypeName","src":"16515:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63211,"mutability":"mutable","name":"epochNumber","nameLocation":"16539:11:118","nodeType":"VariableDeclaration","scope":63285,"src":"16531:19:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63210,"name":"uint256","nodeType":"ElementaryTypeName","src":"16531:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16514:37:118"},"returnParameters":{"id":63213,"nodeType":"ParameterList","parameters":[],"src":"16561:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63298,"nodeType":"FunctionDefinition","src":"17307:108:118","nodes":[],"body":{"id":63297,"nodeType":"Block","src":"17341:74:118","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":63289,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17366:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17370:6:118","memberName":"sender","nodeType":"MemberAccess","src":"17366:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":63292,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17396:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17400:6:118","memberName":"sender","nodeType":"MemberAccess","src":"17396:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63291,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"17378:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17378:29:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63288,"name":"_rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63285,"src":"17351:14:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":63295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17351:57:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63296,"nodeType":"ExpressionStatement","src":"17351:57:118"}]},"baseFunctions":[64215],"functionSelector":"a887b71c","implemented":true,"kind":"function","modifiers":[],"name":"rollOverEpoch","nameLocation":"17316:13:118","parameters":{"id":63286,"nodeType":"ParameterList","parameters":[],"src":"17329:2:118"},"returnParameters":{"id":63287,"nodeType":"ParameterList","parameters":[],"src":"17341:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":63348,"nodeType":"FunctionDefinition","src":"17722:796:118","nodes":[],"body":{"id":63347,"nodeType":"Block","src":"17882:636:118","nodes":[],"statements":[{"assignments":[63313],"declarations":[{"constant":false,"id":63313,"mutability":"mutable","name":"targetEpoch","nameLocation":"17953:11:118","nodeType":"VariableDeclaration","scope":63347,"src":"17945:19:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63312,"name":"uint256","nodeType":"ElementaryTypeName","src":"17945:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63315,"initialValue":{"id":63314,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63303,"src":"17967:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17945:27:118"},{"assignments":[63317],"declarations":[{"constant":false,"id":63317,"mutability":"mutable","name":"stakeForEpoch","nameLocation":"17990:13:118","nodeType":"VariableDeclaration","scope":63347,"src":"17982:21:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63316,"name":"uint256","nodeType":"ElementaryTypeName","src":"17982:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63324,"initialValue":{"arguments":[{"id":63319,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63301,"src":"18028:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63320,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63313,"src":"18048:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63321,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63305,"src":"18073:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63322,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63307,"src":"18096:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63318,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"18006:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":63323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18006:108:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17982:132:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63325,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63317,"src":"18207:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":63326,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63309,"src":"18223:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18207:22:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":63345,"nodeType":"Block","src":"18425:87:118","statements":[{"expression":{"arguments":[{"id":63338,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63301,"src":"18452:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63339,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63313,"src":"18460:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63340,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63305,"src":"18473:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63341,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63307,"src":"18484:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63342,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63309,"src":"18494:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63337,"name":"_removeStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62642,"src":"18439:12:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18439:62:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63344,"nodeType":"ExpressionStatement","src":"18439:62:118"}]},"id":63346,"nodeType":"IfStatement","src":"18203:309:118","trueBody":{"id":63336,"nodeType":"Block","src":"18231:188:118","statements":[{"expression":{"arguments":[{"id":63329,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63301,"src":"18275:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63330,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63313,"src":"18299:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63331,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63305,"src":"18328:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63332,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63307,"src":"18355:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63333,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63317,"src":"18381:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63328,"name":"_removeStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62642,"src":"18245:12:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18245:163:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63335,"nodeType":"ExpressionStatement","src":"18245:163:118"}]}}]},"documentation":{"id":63299,"nodeType":"StructuredDocumentation","src":"17421:296:118","text":" @dev Slash an attester's stake\n @param domain The domain of the attester\n @param epoch The epoch in which the slash is attempted\n @param custodian The custodian of the token\n @param attester The attester to slash\n @param amount The amount to slash"},"implemented":true,"kind":"function","modifiers":[],"name":"_slashStake","nameLocation":"17731:11:118","parameters":{"id":63310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63301,"mutability":"mutable","name":"domain","nameLocation":"17760:6:118","nodeType":"VariableDeclaration","scope":63348,"src":"17752:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63300,"name":"address","nodeType":"ElementaryTypeName","src":"17752:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63303,"mutability":"mutable","name":"epoch","nameLocation":"17784:5:118","nodeType":"VariableDeclaration","scope":63348,"src":"17776:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63302,"name":"uint256","nodeType":"ElementaryTypeName","src":"17776:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":63305,"mutability":"mutable","name":"custodian","nameLocation":"17807:9:118","nodeType":"VariableDeclaration","scope":63348,"src":"17799:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63304,"name":"address","nodeType":"ElementaryTypeName","src":"17799:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63307,"mutability":"mutable","name":"attester","nameLocation":"17834:8:118","nodeType":"VariableDeclaration","scope":63348,"src":"17826:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63306,"name":"address","nodeType":"ElementaryTypeName","src":"17826:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63309,"mutability":"mutable","name":"amount","nameLocation":"17860:6:118","nodeType":"VariableDeclaration","scope":63348,"src":"17852:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63308,"name":"uint256","nodeType":"ElementaryTypeName","src":"17852:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17742:130:118"},"returnParameters":{"id":63311,"nodeType":"ParameterList","parameters":[],"src":"17882:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63398,"nodeType":"FunctionDefinition","src":"18850:888:118","nodes":[],"body":{"id":63397,"nodeType":"Block","src":"18988:750:118","nodes":[],"statements":[{"assignments":[63361],"declarations":[{"constant":false,"id":63361,"mutability":"mutable","name":"stakeForEpoch","nameLocation":"19065:13:118","nodeType":"VariableDeclaration","scope":63397,"src":"19057:21:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63360,"name":"uint256","nodeType":"ElementaryTypeName","src":"19057:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63368,"initialValue":{"arguments":[{"id":63363,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63351,"src":"19103:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63364,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63353,"src":"19123:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63365,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63355,"src":"19142:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63366,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63357,"src":"19165:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63362,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"19081:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":63367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19081:102:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19057:126:118"},{"assignments":[63370],"declarations":[{"constant":false,"id":63370,"mutability":"mutable","name":"targetEpoch","nameLocation":"19201:11:118","nodeType":"VariableDeclaration","scope":63397,"src":"19193:19:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63369,"name":"uint256","nodeType":"ElementaryTypeName","src":"19193:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63374,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63371,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63353,"src":"19215:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":63372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19223:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"19215:9:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19193:31:118"},{"assignments":[63376],"declarations":[{"constant":false,"id":63376,"mutability":"mutable","name":"unstakeForEpoch","nameLocation":"19242:15:118","nodeType":"VariableDeclaration","scope":63397,"src":"19234:23:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63375,"name":"uint256","nodeType":"ElementaryTypeName","src":"19234:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63383,"initialValue":{"arguments":[{"id":63378,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63351,"src":"19284:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63379,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63370,"src":"19304:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63380,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63355,"src":"19329:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63381,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63357,"src":"19352:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63377,"name":"getUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62872,"src":"19260:10:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":63382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19260:110:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19234:136:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63384,"name":"unstakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63376,"src":"19385:15:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":63385,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63361,"src":"19403:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19385:31:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63396,"nodeType":"IfStatement","src":"19381:351:118","trueBody":{"id":63395,"nodeType":"Block","src":"19418:314:118","statements":[{"expression":{"arguments":[{"id":63388,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63351,"src":"19588:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63389,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63370,"src":"19612:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63390,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63355,"src":"19641:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63391,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63357,"src":"19668:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63392,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63361,"src":"19694:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63387,"name":"_setUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62720,"src":"19559:11:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19559:162:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63394,"nodeType":"ExpressionStatement","src":"19559:162:118"}]}}]},"documentation":{"id":63349,"nodeType":"StructuredDocumentation","src":"18524:321:118","text":" @dev Slash an attester's unstake\n @param domain The domain of the attester\n @param epoch The epoch in which the slash is attempted, i.e., epoch - 1 of the epoch where the unstake will be removed\n @param custodian The custodian of the token\n @param attester The attester to slash"},"implemented":true,"kind":"function","modifiers":[],"name":"_slashUnstake","nameLocation":"18859:13:118","parameters":{"id":63358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63351,"mutability":"mutable","name":"domain","nameLocation":"18890:6:118","nodeType":"VariableDeclaration","scope":63398,"src":"18882:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63350,"name":"address","nodeType":"ElementaryTypeName","src":"18882:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63353,"mutability":"mutable","name":"epoch","nameLocation":"18914:5:118","nodeType":"VariableDeclaration","scope":63398,"src":"18906:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63352,"name":"uint256","nodeType":"ElementaryTypeName","src":"18906:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":63355,"mutability":"mutable","name":"custodian","nameLocation":"18937:9:118","nodeType":"VariableDeclaration","scope":63398,"src":"18929:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63354,"name":"address","nodeType":"ElementaryTypeName","src":"18929:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63357,"mutability":"mutable","name":"attester","nameLocation":"18964:8:118","nodeType":"VariableDeclaration","scope":63398,"src":"18956:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63356,"name":"address","nodeType":"ElementaryTypeName","src":"18956:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18872:106:118"},"returnParameters":{"id":63359,"nodeType":"ParameterList","parameters":[],"src":"18988:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63506,"nodeType":"FunctionDefinition","src":"19744:1588:118","nodes":[],"body":{"id":63505,"nodeType":"Block","src":"19940:1392:118","nodes":[],"statements":[{"body":{"id":63503,"nodeType":"Block","src":"19997:1329:118","statements":[{"assignments":[63427],"declarations":[{"constant":false,"id":63427,"mutability":"mutable","name":"refundAmount","nameLocation":"20246:12:118","nodeType":"VariableDeclaration","scope":63503,"src":"20238:20:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63426,"name":"uint256","nodeType":"ElementaryTypeName","src":"20238:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63455,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":63431,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20317:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20321:6:118","memberName":"sender","nodeType":"MemberAccess","src":"20317:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":63434,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63404,"src":"20367:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63436,"indexExpression":{"id":63435,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"20377:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20367:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63433,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"20349:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20349:31:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":63438,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63401,"src":"20402:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63440,"indexExpression":{"id":63439,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"20413:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20402:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63441,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63404,"src":"20437:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63443,"indexExpression":{"id":63442,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"20447:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20437:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63430,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"20287:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":63444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20287:180:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"baseExpression":{"id":63447,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63407,"src":"20494:7:118","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":63449,"indexExpression":{"id":63448,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"20502:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20494:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":63450,"name":"refundAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63410,"src":"20506:13:118","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":63452,"indexExpression":{"id":63451,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"20520:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20506:16:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":63445,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49609,"src":"20485:4:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$49609_$","typeString":"type(library Math)"}},"id":63446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20490:3:118","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":48315,"src":"20485:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":63453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20485:38:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":63428,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49609,"src":"20261:4:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$49609_$","typeString":"type(library Math)"}},"id":63429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20266:3:118","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":48315,"src":"20261:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":63454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20261:276:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20238:299:118"},{"expression":{"arguments":[{"arguments":[{"id":63459,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"20601:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63458,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20593:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63457,"name":"address","nodeType":"ElementaryTypeName","src":"20593:7:118","typeDescriptions":{}}},"id":63460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20593:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63461,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63404,"src":"20702:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63463,"indexExpression":{"id":63462,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"20712:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20702:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63464,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63401,"src":"20732:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63466,"indexExpression":{"id":63465,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"20743:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20732:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63467,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63427,"src":"20763:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63456,"name":"_payAttesterWithSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63574,"src":"20551:24:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20551:238:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63469,"nodeType":"ExpressionStatement","src":"20551:238:118"},{"expression":{"arguments":[{"expression":{"id":63471,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20977:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20981:6:118","memberName":"sender","nodeType":"MemberAccess","src":"20977:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":63474,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"21023:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21027:6:118","memberName":"sender","nodeType":"MemberAccess","src":"21023:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63473,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"21005:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21005:29:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":63477,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63401,"src":"21052:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63479,"indexExpression":{"id":63478,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"21063:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21052:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63480,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63404,"src":"21083:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63482,"indexExpression":{"id":63481,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"21093:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21083:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63483,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63407,"src":"21113:7:118","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":63485,"indexExpression":{"id":63484,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"21121:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21113:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63470,"name":"_slashStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63348,"src":"20948:11:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20948:189:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63487,"nodeType":"ExpressionStatement","src":"20948:189:118"},{"expression":{"arguments":[{"expression":{"id":63489,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"21183:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21187:6:118","memberName":"sender","nodeType":"MemberAccess","src":"21183:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":63492,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"21229:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21233:6:118","memberName":"sender","nodeType":"MemberAccess","src":"21229:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63491,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"21211:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21211:29:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":63495,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63401,"src":"21258:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63497,"indexExpression":{"id":63496,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"21269:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21258:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63498,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63404,"src":"21289:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63500,"indexExpression":{"id":63499,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"21299:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21289:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63488,"name":"_slashUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63398,"src":"21152:13:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,uint256,address,address)"}},"id":63501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21152:163:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63502,"nodeType":"ExpressionStatement","src":"21152:163:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63419,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"19970:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":63420,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63404,"src":"19974:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19984:6:118","memberName":"length","nodeType":"MemberAccess","src":"19974:16:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19970:20:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63504,"initializationExpression":{"assignments":[63416],"declarations":[{"constant":false,"id":63416,"mutability":"mutable","name":"i","nameLocation":"19963:1:118","nodeType":"VariableDeclaration","scope":63504,"src":"19955:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63415,"name":"uint256","nodeType":"ElementaryTypeName","src":"19955:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63418,"initialValue":{"hexValue":"30","id":63417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19967:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"19955:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":63424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19992:3:118","subExpression":{"id":63423,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"19992:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63425,"nodeType":"ExpressionStatement","src":"19992:3:118"},"nodeType":"ForStatement","src":"19950:1376:118"}]},"baseFunctions":[64230],"functionSelector":"a885c975","implemented":true,"kind":"function","modifiers":[{"id":63413,"kind":"modifierInvocation","modifierName":{"id":63412,"name":"nonReentrant","nameLocations":["19927:12:118"],"nodeType":"IdentifierPath","referencedDeclaration":45826,"src":"19927:12:118"},"nodeType":"ModifierInvocation","src":"19927:12:118"}],"name":"slash","nameLocation":"19753:5:118","parameters":{"id":63411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63401,"mutability":"mutable","name":"custodians","nameLocation":"19787:10:118","nodeType":"VariableDeclaration","scope":63506,"src":"19768:29:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":63399,"name":"address","nodeType":"ElementaryTypeName","src":"19768:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":63400,"nodeType":"ArrayTypeName","src":"19768:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":63404,"mutability":"mutable","name":"attesters","nameLocation":"19826:9:118","nodeType":"VariableDeclaration","scope":63506,"src":"19807:28:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":63402,"name":"address","nodeType":"ElementaryTypeName","src":"19807:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":63403,"nodeType":"ArrayTypeName","src":"19807:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":63407,"mutability":"mutable","name":"amounts","nameLocation":"19864:7:118","nodeType":"VariableDeclaration","scope":63506,"src":"19845:26:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":63405,"name":"uint256","nodeType":"ElementaryTypeName","src":"19845:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63406,"nodeType":"ArrayTypeName","src":"19845:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":63410,"mutability":"mutable","name":"refundAmounts","nameLocation":"19900:13:118","nodeType":"VariableDeclaration","scope":63506,"src":"19881:32:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":63408,"name":"uint256","nodeType":"ElementaryTypeName","src":"19881:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63409,"nodeType":"ArrayTypeName","src":"19881:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"19758:161:118"},"returnParameters":{"id":63414,"nodeType":"ParameterList","parameters":[],"src":"19940:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":63574,"nodeType":"FunctionDefinition","src":"21690:1458:118","nodes":[],"body":{"id":63573,"nodeType":"Block","src":"21838:1310:118","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63518,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63509,"src":"21852:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":63521,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"21868:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63520,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21860:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63519,"name":"address","nodeType":"ElementaryTypeName","src":"21860:7:118","typeDescriptions":{}}},"id":63522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21860:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21852:21:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":63571,"nodeType":"Block","src":"22370:772:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":63550,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"22752:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63549,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22744:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63548,"name":"address","nodeType":"ElementaryTypeName","src":"22744:7:118","typeDescriptions":{}}},"id":63551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22744:14:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":63552,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63513,"src":"22762:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"22744:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":63569,"nodeType":"Block","src":"22951:181:118","statements":[{"expression":{"arguments":[{"id":63563,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63509,"src":"23083:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63564,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63511,"src":"23089:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63565,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63513,"src":"23099:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63566,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63515,"src":"23110:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63562,"name":"_payAttesterFromExternalViaCustodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63747,"src":"23046:36:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23046:71:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63568,"nodeType":"ExpressionStatement","src":"23046:71:118"}]},"id":63570,"nodeType":"IfStatement","src":"22740:392:118","trueBody":{"id":63561,"nodeType":"Block","src":"22773:172:118","statements":[{"expression":{"arguments":[{"id":63555,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63509,"src":"22896:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63556,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63511,"src":"22902:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63557,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63513,"src":"22912:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63558,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63515,"src":"22923:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63554,"name":"_payAttesterFromExternalDirectly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63704,"src":"22863:32:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22863:67:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63560,"nodeType":"ExpressionStatement","src":"22863:67:118"}]}}]},"id":63572,"nodeType":"IfStatement","src":"21848:1294:118","trueBody":{"id":63547,"nodeType":"Block","src":"21875:489:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":63526,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"21953:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63525,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21945:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63524,"name":"address","nodeType":"ElementaryTypeName","src":"21945:7:118","typeDescriptions":{}}},"id":63527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21945:14:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":63528,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63513,"src":"21963:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21945:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":63545,"nodeType":"Block","src":"22156:198:118","statements":[{"expression":{"arguments":[{"id":63539,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63509,"src":"22305:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63540,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63511,"src":"22311:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63541,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63513,"src":"22321:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63542,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63515,"src":"22332:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63538,"name":"_payAttesterFromContractViaCustodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63662,"src":"22268:36:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22268:71:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63544,"nodeType":"ExpressionStatement","src":"22268:71:118"}]},"id":63546,"nodeType":"IfStatement","src":"21941:413:118","trueBody":{"id":63537,"nodeType":"Block","src":"21974:176:118","statements":[{"expression":{"arguments":[{"id":63531,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63509,"src":"22101:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63532,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63511,"src":"22107:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63533,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63513,"src":"22117:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63534,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63515,"src":"22128:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63530,"name":"_payAttesterFromContractDirectly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63614,"src":"22068:32:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22068:67:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63536,"nodeType":"ExpressionStatement","src":"22068:67:118"}]}}]}}]},"documentation":{"id":63507,"nodeType":"StructuredDocumentation","src":"21338:347:118","text":"@notice Routes attester payment to appropriate function based on conditions\n @param from The address initiating the payment (this contract or external)\n @param attester The address receiving the payment\n @param custodian The custodian token address (or base token if direct payment)\n @param amount The amount to pay"},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttesterWithSelector","nameLocation":"21699:24:118","parameters":{"id":63516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63509,"mutability":"mutable","name":"from","nameLocation":"21741:4:118","nodeType":"VariableDeclaration","scope":63574,"src":"21733:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63508,"name":"address","nodeType":"ElementaryTypeName","src":"21733:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63511,"mutability":"mutable","name":"attester","nameLocation":"21763:8:118","nodeType":"VariableDeclaration","scope":63574,"src":"21755:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63510,"name":"address","nodeType":"ElementaryTypeName","src":"21755:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63513,"mutability":"mutable","name":"custodian","nameLocation":"21789:9:118","nodeType":"VariableDeclaration","scope":63574,"src":"21781:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63512,"name":"address","nodeType":"ElementaryTypeName","src":"21781:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63515,"mutability":"mutable","name":"amount","nameLocation":"21816:6:118","nodeType":"VariableDeclaration","scope":63574,"src":"21808:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63514,"name":"uint256","nodeType":"ElementaryTypeName","src":"21808:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21723:105:118"},"returnParameters":{"id":63517,"nodeType":"ParameterList","parameters":[],"src":"21838:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63614,"nodeType":"FunctionDefinition","src":"23282:313:118","nodes":[],"body":{"id":63613,"nodeType":"Block","src":"23400:195:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63587,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63577,"src":"23418:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":63590,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"23434:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23426:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63588,"name":"address","nodeType":"ElementaryTypeName","src":"23426:7:118","typeDescriptions":{}}},"id":63591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23426:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23418:21:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c792031","id":63593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23441:35:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_0f1708bf867ac54e96e29dd93f681d12908fbf35a8ede654650d46510a77cb5d","typeString":"literal_string \"Only contract can call directly 1\""},"value":"Only contract can call directly 1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0f1708bf867ac54e96e29dd93f681d12908fbf35a8ede654650d46510a77cb5d","typeString":"literal_string \"Only contract can call directly 1\""}],"id":63586,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23410:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23410:67:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63595,"nodeType":"ExpressionStatement","src":"23410:67:118"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":63599,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"23503:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63598,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23495:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63597,"name":"address","nodeType":"ElementaryTypeName","src":"23495:7:118","typeDescriptions":{}}},"id":63600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23495:14:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":63601,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63581,"src":"23513:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23495:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d75737420757365206261736520746f6b656e","id":63603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23524:21:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_bc613066773cc3393ba2034b10aecd37cf0fd2b9ca236e3823d8166e2e771fe3","typeString":"literal_string \"Must use base token\""},"value":"Must use base token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bc613066773cc3393ba2034b10aecd37cf0fd2b9ca236e3823d8166e2e771fe3","typeString":"literal_string \"Must use base token\""}],"id":63596,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23487:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23487:59:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63605,"nodeType":"ExpressionStatement","src":"23487:59:118"},{"expression":{"arguments":[{"id":63609,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63579,"src":"23571:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63610,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63583,"src":"23581:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":63606,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"23556:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"id":63608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23562:8:118","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":43815,"src":"23556:14:118","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":63611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23556:32:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63612,"nodeType":"ExpressionStatement","src":"23556:32:118"}]},"documentation":{"id":63575,"nodeType":"StructuredDocumentation","src":"23154:59:118","text":"@notice Contract pays attester directly with base token"},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttesterFromContractDirectly","nameLocation":"23291:32:118","parameters":{"id":63584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63577,"mutability":"mutable","name":"from","nameLocation":"23332:4:118","nodeType":"VariableDeclaration","scope":63614,"src":"23324:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63576,"name":"address","nodeType":"ElementaryTypeName","src":"23324:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63579,"mutability":"mutable","name":"attester","nameLocation":"23346:8:118","nodeType":"VariableDeclaration","scope":63614,"src":"23338:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63578,"name":"address","nodeType":"ElementaryTypeName","src":"23338:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63581,"mutability":"mutable","name":"custodian","nameLocation":"23364:9:118","nodeType":"VariableDeclaration","scope":63614,"src":"23356:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63580,"name":"address","nodeType":"ElementaryTypeName","src":"23356:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63583,"mutability":"mutable","name":"amount","nameLocation":"23383:6:118","nodeType":"VariableDeclaration","scope":63614,"src":"23375:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63582,"name":"uint256","nodeType":"ElementaryTypeName","src":"23375:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23323:67:118"},"returnParameters":{"id":63585,"nodeType":"ParameterList","parameters":[],"src":"23400:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63662,"nodeType":"FunctionDefinition","src":"23664:394:118","nodes":[],"body":{"id":63661,"nodeType":"Block","src":"23786:272:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63627,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63617,"src":"23804:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":63630,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"23820:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23812:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63628,"name":"address","nodeType":"ElementaryTypeName","src":"23812:7:118","typeDescriptions":{}}},"id":63631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23812:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23804:21:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c792032","id":63633,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23827:35:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_55315d8a57d191891b5e288e7e61a0e55314dfa6f15f2961a8a3eb948b6a731c","typeString":"literal_string \"Only contract can call directly 2\""},"value":"Only contract can call directly 2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_55315d8a57d191891b5e288e7e61a0e55314dfa6f15f2961a8a3eb948b6a731c","typeString":"literal_string \"Only contract can call directly 2\""}],"id":63626,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23796:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23796:67:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63635,"nodeType":"ExpressionStatement","src":"23796:67:118"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":63639,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"23889:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63638,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23881:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63637,"name":"address","nodeType":"ElementaryTypeName","src":"23881:7:118","typeDescriptions":{}}},"id":63640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23881:14:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":63641,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63621,"src":"23899:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23881:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d7573742075736520637573746f6469616e20746f6b656e","id":63643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23910:26:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_625c61961be03bbe0874e1337fdd6dfea88bf797382890551820b152199956ec","typeString":"literal_string \"Must use custodian token\""},"value":"Must use custodian token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_625c61961be03bbe0874e1337fdd6dfea88bf797382890551820b152199956ec","typeString":"literal_string \"Must use custodian token\""}],"id":63636,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23873:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23873:64:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63645,"nodeType":"ExpressionStatement","src":"23873:64:118"},{"expression":{"arguments":[{"id":63649,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63621,"src":"23961:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63650,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63623,"src":"23972:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":63646,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"23947:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"id":63648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23953:7:118","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":43835,"src":"23947:13:118","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":63651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23947:32:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63652,"nodeType":"ExpressionStatement","src":"23947:32:118"},{"expression":{"arguments":[{"id":63657,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63619,"src":"24034:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63658,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63623,"src":"24044:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":63654,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63621,"src":"24005:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63653,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65013,"src":"23989:15:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICustodianToken_$65013_$","typeString":"type(contract ICustodianToken)"}},"id":63655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23989:26:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICustodianToken_$65013","typeString":"contract ICustodianToken"}},"id":63656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24016:17:118","memberName":"buyCustodialToken","nodeType":"MemberAccess","referencedDeclaration":65003,"src":"23989:44:118","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":63659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23989:62:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63660,"nodeType":"ExpressionStatement","src":"23989:62:118"}]},"documentation":{"id":63615,"nodeType":"StructuredDocumentation","src":"23601:58:118","text":"@notice Contract pays attester through custodian token"},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttesterFromContractViaCustodian","nameLocation":"23673:36:118","parameters":{"id":63624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63617,"mutability":"mutable","name":"from","nameLocation":"23718:4:118","nodeType":"VariableDeclaration","scope":63662,"src":"23710:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63616,"name":"address","nodeType":"ElementaryTypeName","src":"23710:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63619,"mutability":"mutable","name":"attester","nameLocation":"23732:8:118","nodeType":"VariableDeclaration","scope":63662,"src":"23724:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63618,"name":"address","nodeType":"ElementaryTypeName","src":"23724:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63621,"mutability":"mutable","name":"custodian","nameLocation":"23750:9:118","nodeType":"VariableDeclaration","scope":63662,"src":"23742:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63620,"name":"address","nodeType":"ElementaryTypeName","src":"23742:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63623,"mutability":"mutable","name":"amount","nameLocation":"23769:6:118","nodeType":"VariableDeclaration","scope":63662,"src":"23761:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63622,"name":"uint256","nodeType":"ElementaryTypeName","src":"23761:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23709:67:118"},"returnParameters":{"id":63625,"nodeType":"ParameterList","parameters":[],"src":"23786:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63704,"nodeType":"FunctionDefinition","src":"24467:315:118","nodes":[],"body":{"id":63703,"nodeType":"Block","src":"24585:197:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":63675,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"24603:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24607:6:118","memberName":"sender","nodeType":"MemberAccess","src":"24603:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":63679,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"24625:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63678,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24617:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63677,"name":"address","nodeType":"ElementaryTypeName","src":"24617:7:118","typeDescriptions":{}}},"id":63680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24617:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24603:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f6e6c792065787465726e616c2063616c6c73","id":63682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24632:21:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_367278d280804749c40a2b54193b2d030c9f08a76b2a9338e0b2e7109240e55e","typeString":"literal_string \"Only external calls\""},"value":"Only external calls"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_367278d280804749c40a2b54193b2d030c9f08a76b2a9338e0b2e7109240e55e","typeString":"literal_string \"Only external calls\""}],"id":63674,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"24595:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24595:59:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63684,"nodeType":"ExpressionStatement","src":"24595:59:118"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":63688,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"24680:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63687,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24672:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63686,"name":"address","nodeType":"ElementaryTypeName","src":"24672:7:118","typeDescriptions":{}}},"id":63689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24672:14:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":63690,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63669,"src":"24690:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24672:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d75737420757365206261736520746f6b656e","id":63692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24701:21:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_bc613066773cc3393ba2034b10aecd37cf0fd2b9ca236e3823d8166e2e771fe3","typeString":"literal_string \"Must use base token\""},"value":"Must use base token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bc613066773cc3393ba2034b10aecd37cf0fd2b9ca236e3823d8166e2e771fe3","typeString":"literal_string \"Must use base token\""}],"id":63685,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"24664:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24664:59:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63694,"nodeType":"ExpressionStatement","src":"24664:59:118"},{"expression":{"arguments":[{"id":63698,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63665,"src":"24752:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63699,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63667,"src":"24758:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63700,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63671,"src":"24768:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":63695,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"24733:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"id":63697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24739:12:118","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43847,"src":"24733:18: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":63701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24733:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63702,"nodeType":"ExpressionStatement","src":"24733:42:118"}]},"documentation":{"id":63663,"nodeType":"StructuredDocumentation","src":"24064:67:118","text":"@notice External account pays attester directly with base token"},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttesterFromExternalDirectly","nameLocation":"24476:32:118","parameters":{"id":63672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63665,"mutability":"mutable","name":"from","nameLocation":"24517:4:118","nodeType":"VariableDeclaration","scope":63704,"src":"24509:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63664,"name":"address","nodeType":"ElementaryTypeName","src":"24509:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63667,"mutability":"mutable","name":"attester","nameLocation":"24531:8:118","nodeType":"VariableDeclaration","scope":63704,"src":"24523:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63666,"name":"address","nodeType":"ElementaryTypeName","src":"24523:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63669,"mutability":"mutable","name":"custodian","nameLocation":"24549:9:118","nodeType":"VariableDeclaration","scope":63704,"src":"24541:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63668,"name":"address","nodeType":"ElementaryTypeName","src":"24541:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63671,"mutability":"mutable","name":"amount","nameLocation":"24568:6:118","nodeType":"VariableDeclaration","scope":63704,"src":"24560:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63670,"name":"uint256","nodeType":"ElementaryTypeName","src":"24560:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24508:67:118"},"returnParameters":{"id":63673,"nodeType":"ParameterList","parameters":[],"src":"24585:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63747,"nodeType":"FunctionDefinition","src":"24859:354:118","nodes":[],"body":{"id":63746,"nodeType":"Block","src":"24981:232:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":63717,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"24999:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25003:6:118","memberName":"sender","nodeType":"MemberAccess","src":"24999:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":63721,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"25021:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63720,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25013:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63719,"name":"address","nodeType":"ElementaryTypeName","src":"25013:7:118","typeDescriptions":{}}},"id":63722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25013:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24999:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f6e6c792065787465726e616c2063616c6c73","id":63724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"25028:21:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_367278d280804749c40a2b54193b2d030c9f08a76b2a9338e0b2e7109240e55e","typeString":"literal_string \"Only external calls\""},"value":"Only external calls"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_367278d280804749c40a2b54193b2d030c9f08a76b2a9338e0b2e7109240e55e","typeString":"literal_string \"Only external calls\""}],"id":63716,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"24991:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24991:59:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63726,"nodeType":"ExpressionStatement","src":"24991:59:118"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":63730,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"25076:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63729,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25068:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63728,"name":"address","nodeType":"ElementaryTypeName","src":"25068:7:118","typeDescriptions":{}}},"id":63731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25068:14:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":63732,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63711,"src":"25086:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"25068:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d7573742075736520637573746f6469616e20746f6b656e","id":63734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"25097:26:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_625c61961be03bbe0874e1337fdd6dfea88bf797382890551820b152199956ec","typeString":"literal_string \"Must use custodian token\""},"value":"Must use custodian token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_625c61961be03bbe0874e1337fdd6dfea88bf797382890551820b152199956ec","typeString":"literal_string \"Must use custodian token\""}],"id":63727,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"25060:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25060:64:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63736,"nodeType":"ExpressionStatement","src":"25060:64:118"},{"expression":{"arguments":[{"id":63741,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63707,"src":"25183:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63742,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63709,"src":"25189:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63743,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63713,"src":"25199:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":63738,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63711,"src":"25150:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63737,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65013,"src":"25134:15:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICustodianToken_$65013_$","typeString":"type(contract ICustodianToken)"}},"id":63739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25134:26:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICustodianToken_$65013","typeString":"contract ICustodianToken"}},"id":63740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25161:21:118","memberName":"buyCustodialTokenFrom","nodeType":"MemberAccess","referencedDeclaration":65012,"src":"25134:48:118","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":63744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25134:72:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63745,"nodeType":"ExpressionStatement","src":"25134:72:118"}]},"documentation":{"id":63705,"nodeType":"StructuredDocumentation","src":"24788:66:118","text":"@notice External account pays attester through custodian token"},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttesterFromExternalViaCustodian","nameLocation":"24868:36:118","parameters":{"id":63714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63707,"mutability":"mutable","name":"from","nameLocation":"24913:4:118","nodeType":"VariableDeclaration","scope":63747,"src":"24905:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63706,"name":"address","nodeType":"ElementaryTypeName","src":"24905:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63709,"mutability":"mutable","name":"attester","nameLocation":"24927:8:118","nodeType":"VariableDeclaration","scope":63747,"src":"24919:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63708,"name":"address","nodeType":"ElementaryTypeName","src":"24919:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63711,"mutability":"mutable","name":"custodian","nameLocation":"24945:9:118","nodeType":"VariableDeclaration","scope":63747,"src":"24937:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63710,"name":"address","nodeType":"ElementaryTypeName","src":"24937:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63713,"mutability":"mutable","name":"amount","nameLocation":"24964:6:118","nodeType":"VariableDeclaration","scope":63747,"src":"24956:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63712,"name":"uint256","nodeType":"ElementaryTypeName","src":"24956:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24904:67:118"},"returnParameters":{"id":63715,"nodeType":"ParameterList","parameters":[],"src":"24981:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63768,"nodeType":"FunctionDefinition","src":"25461:244:118","nodes":[],"body":{"id":63767,"nodeType":"Block","src":"25615:90:118","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":63760,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"25658:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25662:6:118","memberName":"sender","nodeType":"MemberAccess","src":"25658:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63762,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63750,"src":"25670:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63763,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63754,"src":"25680:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63764,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63752,"src":"25691:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63759,"name":"_payAttesterFromExternalDirectly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63704,"src":"25625:32:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25625:73:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63766,"nodeType":"ExpressionStatement","src":"25625:73:118"}]},"baseFunctions":[64321],"documentation":{"id":63748,"nodeType":"StructuredDocumentation","src":"25219:237:118","text":"@notice Domain rewards an attester\n @param attester The attester to reward\n @param amount The amount to reward\n @param custodian The custodian of the token from which to reward the attester, here it is the domain"},"functionSelector":"5e00bf46","implemented":true,"kind":"function","modifiers":[{"id":63757,"kind":"modifierInvocation","modifierName":{"id":63756,"name":"nonReentrant","nameLocations":["25602:12:118"],"nodeType":"IdentifierPath","referencedDeclaration":45826,"src":"25602:12:118"},"nodeType":"ModifierInvocation","src":"25602:12:118"}],"name":"rewardFromDomain","nameLocation":"25470:16:118","parameters":{"id":63755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63750,"mutability":"mutable","name":"attester","nameLocation":"25504:8:118","nodeType":"VariableDeclaration","scope":63768,"src":"25496:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63749,"name":"address","nodeType":"ElementaryTypeName","src":"25496:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63752,"mutability":"mutable","name":"amount","nameLocation":"25530:6:118","nodeType":"VariableDeclaration","scope":63768,"src":"25522:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63751,"name":"uint256","nodeType":"ElementaryTypeName","src":"25522:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":63754,"mutability":"mutable","name":"custodian","nameLocation":"25554:9:118","nodeType":"VariableDeclaration","scope":63768,"src":"25546:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63753,"name":"address","nodeType":"ElementaryTypeName","src":"25546:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"25486:108:118"},"returnParameters":{"id":63758,"nodeType":"ParameterList","parameters":[],"src":"25615:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":63811,"nodeType":"FunctionDefinition","src":"25966:457:118","nodes":[],"body":{"id":63810,"nodeType":"Block","src":"26126:297:118","nodes":[],"statements":[{"body":{"id":63808,"nodeType":"Block","src":"26307:110:118","statements":[{"expression":{"arguments":[{"expression":{"id":63795,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"26354:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26358:6:118","memberName":"sender","nodeType":"MemberAccess","src":"26354:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63797,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63772,"src":"26366:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63799,"indexExpression":{"id":63798,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63784,"src":"26376:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26366:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63800,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63778,"src":"26380:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63802,"indexExpression":{"id":63801,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63784,"src":"26391:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26380:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63803,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63775,"src":"26395:7:118","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":63805,"indexExpression":{"id":63804,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63784,"src":"26403:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26395:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63794,"name":"_payAttesterFromExternalDirectly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63704,"src":"26321:32:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26321:85:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63807,"nodeType":"ExpressionStatement","src":"26321:85:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63787,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63784,"src":"26280:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":63788,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63772,"src":"26284:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26294:6:118","memberName":"length","nodeType":"MemberAccess","src":"26284:16:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26280:20:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63809,"initializationExpression":{"assignments":[63784],"declarations":[{"constant":false,"id":63784,"mutability":"mutable","name":"i","nameLocation":"26273:1:118","nodeType":"VariableDeclaration","scope":63809,"src":"26265:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63783,"name":"uint256","nodeType":"ElementaryTypeName","src":"26265:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63786,"initialValue":{"hexValue":"30","id":63785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26277:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"26265:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":63792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"26302:3:118","subExpression":{"id":63791,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63784,"src":"26302:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63793,"nodeType":"ExpressionStatement","src":"26302:3:118"},"nodeType":"ForStatement","src":"26260:157:118"}]},"baseFunctions":[64333],"documentation":{"id":63769,"nodeType":"StructuredDocumentation","src":"25711:250:118","text":"@notice An array of custodians reward an array of attesters\n @param attesters The attesters to reward\n @param amounts The amounts to reward\n @param custodians The custodians of the token from which to reward the attesters "},"functionSelector":"4e76a139","implemented":true,"kind":"function","modifiers":[{"id":63781,"kind":"modifierInvocation","modifierName":{"id":63780,"name":"nonReentrant","nameLocations":["26113:12:118"],"nodeType":"IdentifierPath","referencedDeclaration":45826,"src":"26113:12:118"},"nodeType":"ModifierInvocation","src":"26113:12:118"}],"name":"rewardArray","nameLocation":"25975:11:118","parameters":{"id":63779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63772,"mutability":"mutable","name":"attesters","nameLocation":"26015:9:118","nodeType":"VariableDeclaration","scope":63811,"src":"25996:28:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":63770,"name":"address","nodeType":"ElementaryTypeName","src":"25996:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":63771,"nodeType":"ArrayTypeName","src":"25996:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":63775,"mutability":"mutable","name":"amounts","nameLocation":"26053:7:118","nodeType":"VariableDeclaration","scope":63811,"src":"26034:26:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":63773,"name":"uint256","nodeType":"ElementaryTypeName","src":"26034:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63774,"nodeType":"ArrayTypeName","src":"26034:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":63778,"mutability":"mutable","name":"custodians","nameLocation":"26089:10:118","nodeType":"VariableDeclaration","scope":63811,"src":"26070:29:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":63776,"name":"address","nodeType":"ElementaryTypeName","src":"26070:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":63777,"nodeType":"ArrayTypeName","src":"26070:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"25986:119:118"},"returnParameters":{"id":63782,"nodeType":"ParameterList","parameters":[],"src":"26126:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":63826,"nodeType":"FunctionDefinition","src":"26593:140:118","nodes":[],"body":{"id":63825,"nodeType":"Block","src":"26685:48:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":63821,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64010,"src":"26705:14:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":63822,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63814,"src":"26721:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63820,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39306,"src":"26695:9:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":63823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26695:31:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63824,"nodeType":"ExpressionStatement","src":"26695:31:118"}]},"baseFunctions":[64235],"documentation":{"id":63812,"nodeType":"StructuredDocumentation","src":"26431:157:118","text":"@notice Whitelist an address to be used as an attester or custodian. \n @notice Whitelisting means that the address is allowed to stake and unstake"},"functionSelector":"41566585","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":63817,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39144,"src":"26665:18:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":63818,"kind":"modifierInvocation","modifierName":{"id":63816,"name":"onlyRole","nameLocations":["26656:8:118"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"26656:8:118"},"nodeType":"ModifierInvocation","src":"26656:28:118"}],"name":"whitelistAddress","nameLocation":"26602:16:118","parameters":{"id":63815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63814,"mutability":"mutable","name":"addr","nameLocation":"26636:4:118","nodeType":"VariableDeclaration","scope":63826,"src":"26628:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63813,"name":"address","nodeType":"ElementaryTypeName","src":"26628:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26618:28:118"},"returnParameters":{"id":63819,"nodeType":"ParameterList","parameters":[],"src":"26685:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":63840,"nodeType":"FunctionDefinition","src":"26739:151:118","nodes":[],"body":{"id":63839,"nodeType":"Block","src":"26841:49:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":63835,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64010,"src":"26862:14:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":63836,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63828,"src":"26878:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63834,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39325,"src":"26851:10:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":63837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26851:32:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63838,"nodeType":"ExpressionStatement","src":"26851:32:118"}]},"baseFunctions":[64240],"functionSelector":"286dd3f5","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":63831,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39144,"src":"26821:18:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":63832,"kind":"modifierInvocation","modifierName":{"id":63830,"name":"onlyRole","nameLocations":["26812:8:118"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"26812:8:118"},"nodeType":"ModifierInvocation","src":"26812:28:118"}],"name":"removeAddressFromWhitelist","nameLocation":"26748:26:118","parameters":{"id":63829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63828,"mutability":"mutable","name":"addr","nameLocation":"26792:4:118","nodeType":"VariableDeclaration","scope":63840,"src":"26784:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63827,"name":"address","nodeType":"ElementaryTypeName","src":"26784:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26774:28:118"},"returnParameters":{"id":63833,"nodeType":"ParameterList","parameters":[],"src":"26841:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":63914,"nodeType":"FunctionDefinition","src":"26982:542:118","nodes":[],"body":{"id":63913,"nodeType":"Block","src":"27090:434:118","nodes":[],"statements":[{"assignments":[63854],"declarations":[{"constant":false,"id":63854,"mutability":"mutable","name":"custodians","nameLocation":"27117:10:118","nodeType":"VariableDeclaration","scope":63913,"src":"27100:27:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":63852,"name":"address","nodeType":"ElementaryTypeName","src":"27100:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":63853,"nodeType":"ArrayTypeName","src":"27100:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":63858,"initialValue":{"arguments":[{"id":63856,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63843,"src":"27154:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63855,"name":"getRegisteredCustodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62227,"src":"27130:23:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view returns (address[] memory)"}},"id":63857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27130:31:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"27100:61:118"},{"assignments":[63863],"declarations":[{"constant":false,"id":63863,"mutability":"mutable","name":"attesters","nameLocation":"27188:9:118","nodeType":"VariableDeclaration","scope":63913,"src":"27171:26:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":63861,"name":"address","nodeType":"ElementaryTypeName","src":"27171:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":63862,"nodeType":"ArrayTypeName","src":"27171:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":63867,"initialValue":{"arguments":[{"id":63865,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63843,"src":"27223:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63864,"name":"getRegisteredAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62281,"src":"27200:22:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view returns (address[] memory)"}},"id":63866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27200:30:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"27171:59:118"},{"assignments":[63869],"declarations":[{"constant":false,"id":63869,"mutability":"mutable","name":"totalStake","nameLocation":"27248:10:118","nodeType":"VariableDeclaration","scope":63913,"src":"27240:18:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63868,"name":"uint256","nodeType":"ElementaryTypeName","src":"27240:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63871,"initialValue":{"hexValue":"30","id":63870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27261:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"27240:22:118"},{"body":{"id":63909,"nodeType":"Block","src":"27321:170:118","statements":[{"body":{"id":63907,"nodeType":"Block","src":"27382:99:118","statements":[{"expression":{"id":63905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":63894,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63869,"src":"27400:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":63896,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63843,"src":"27423:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63897,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63845,"src":"27431:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":63898,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63854,"src":"27438:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":63900,"indexExpression":{"id":63899,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63873,"src":"27449:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27438:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63901,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63863,"src":"27453:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":63903,"indexExpression":{"id":63902,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63884,"src":"27463:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27453:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63895,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"27414:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":63904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27414:52:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27400:66:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63906,"nodeType":"ExpressionStatement","src":"27400:66:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63887,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63884,"src":"27355:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":63888,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63863,"src":"27359:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":63889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27369:6:118","memberName":"length","nodeType":"MemberAccess","src":"27359:16:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27355:20:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63908,"initializationExpression":{"assignments":[63884],"declarations":[{"constant":false,"id":63884,"mutability":"mutable","name":"j","nameLocation":"27348:1:118","nodeType":"VariableDeclaration","scope":63908,"src":"27340:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63883,"name":"uint256","nodeType":"ElementaryTypeName","src":"27340:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63886,"initialValue":{"hexValue":"30","id":63885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27352:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"27340:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":63892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"27377:3:118","subExpression":{"id":63891,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63884,"src":"27377:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63893,"nodeType":"ExpressionStatement","src":"27377:3:118"},"nodeType":"ForStatement","src":"27335:146:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63876,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63873,"src":"27293:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":63877,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63854,"src":"27297:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":63878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27308:6:118","memberName":"length","nodeType":"MemberAccess","src":"27297:17:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27293:21:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63910,"initializationExpression":{"assignments":[63873],"declarations":[{"constant":false,"id":63873,"mutability":"mutable","name":"i","nameLocation":"27286:1:118","nodeType":"VariableDeclaration","scope":63910,"src":"27278:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63872,"name":"uint256","nodeType":"ElementaryTypeName","src":"27278:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63875,"initialValue":{"hexValue":"30","id":63874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27290:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"27278:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":63881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"27316:3:118","subExpression":{"id":63880,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63873,"src":"27316:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63882,"nodeType":"ExpressionStatement","src":"27316:3:118"},"nodeType":"ForStatement","src":"27273:218:118"},{"expression":{"id":63911,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63869,"src":"27507:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":63849,"id":63912,"nodeType":"Return","src":"27500:17:118"}]},"documentation":{"id":63841,"nodeType":"StructuredDocumentation","src":"26896:81:118","text":"@notice Computes total stake across all custodians and attesters for an epoch"},"functionSelector":"55bdbe4c","implemented":true,"kind":"function","modifiers":[],"name":"computeAllStake","nameLocation":"26991:15:118","parameters":{"id":63846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63843,"mutability":"mutable","name":"domain","nameLocation":"27024:6:118","nodeType":"VariableDeclaration","scope":63914,"src":"27016:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63842,"name":"address","nodeType":"ElementaryTypeName","src":"27016:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63845,"mutability":"mutable","name":"epoch","nameLocation":"27048:5:118","nodeType":"VariableDeclaration","scope":63914,"src":"27040:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63844,"name":"uint256","nodeType":"ElementaryTypeName","src":"27040:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27006:53:118"},"returnParameters":{"id":63849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63848,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":63914,"src":"27081:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63847,"name":"uint256","nodeType":"ElementaryTypeName","src":"27081:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27080:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":63930,"nodeType":"FunctionDefinition","src":"27695:176:118","nodes":[],"body":{"id":63929,"nodeType":"Block","src":"27797:74:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":63923,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63917,"src":"27830:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":63925,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63917,"src":"27856:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63924,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"27838:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27838:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63922,"name":"computeAllStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63914,"src":"27814:15:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256) view returns (uint256)"}},"id":63927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27814:50:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":63921,"id":63928,"nodeType":"Return","src":"27807:57:118"}]},"baseFunctions":[64303],"documentation":{"id":63915,"nodeType":"StructuredDocumentation","src":"27530:160:118","text":"@notice Computes total stake across all custodians and attesters for the current accepting epoch\n @param domain The domain to compute total stake for"},"functionSelector":"574663a9","implemented":true,"kind":"function","modifiers":[],"name":"computeAllStakeForAcceptingEpoch","nameLocation":"27704:32:118","parameters":{"id":63918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63917,"mutability":"mutable","name":"domain","nameLocation":"27754:6:118","nodeType":"VariableDeclaration","scope":63930,"src":"27746:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63916,"name":"address","nodeType":"ElementaryTypeName","src":"27746:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"27736:30:118"},"returnParameters":{"id":63921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63920,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":63930,"src":"27788:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63919,"name":"uint256","nodeType":"ElementaryTypeName","src":"27788:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27787:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":62098,"name":"MovementStakingStorage","nameLocations":["798:22:118"],"nodeType":"IdentifierPath","referencedDeclaration":64011,"src":"798:22:118"},"id":62099,"nodeType":"InheritanceSpecifier","src":"798:22:118"},{"baseName":{"id":62100,"name":"IMovementStaking","nameLocations":["826:16:118"],"nodeType":"IdentifierPath","referencedDeclaration":64348,"src":"826:16:118"},"id":62101,"nodeType":"InheritanceSpecifier","src":"826:16:118"},{"baseName":{"id":62102,"name":"BaseStaking","nameLocations":["848:11:118"],"nodeType":"IdentifierPath","referencedDeclaration":64066,"src":"848:11:118"},"id":62103,"nodeType":"InheritanceSpecifier","src":"848:11:118"},{"baseName":{"id":62104,"name":"ReentrancyGuard","nameLocations":["865:15:118"],"nodeType":"IdentifierPath","referencedDeclaration":45862,"src":"865:15:118"},"id":62105,"nodeType":"InheritanceSpecifier","src":"865:15:118"}],"canonicalName":"MovementStaking","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[63931,45862,64066,39928,42948,39478,41255,47988,41634,40760,39746,64348,64011],"name":"MovementStaking","nameLocation":"775:15:118","scope":63932,"usedErrors":[39495,39498,39773,39778,41561,41564,43143,43156,44429,45732,45807,62112,64284,64286,64288],"usedEvents":[39503,41573,41582,41591,42896,64252,64264,64276,64282]}],"license":"UNLICENSED"},"id":118} \ No newline at end of file diff --git a/protocol/pcp/cli/client/abis/PCP.json b/protocol/pcp/cli/client/abis/PCP.json new file mode 100644 index 00000000..8a666980 --- /dev/null +++ b/protocol/pcp/cli/client/abis/PCP.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"COMMITMENT_ADMIN","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"TRUSTED_ATTESTER","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"acceptGenesisCeremony","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"attesterRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"points","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchGrantCommitmentAdmin","inputs":[{"name":"accounts","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"batchGrantTrustedAttester","inputs":[{"name":"attesters","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitmentFirstSeenAt","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"timestamp","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"commitmentStake","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"commitement","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"commitments","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"createSuperBlockCommitment","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"pure"},{"type":"function","name":"forceLatestCommitment","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStakeForAcceptingEpoch","inputs":[{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCommitmentByAttester","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"getCommitmentFirstSeenAt","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStakeForAcceptingEpoch","inputs":[{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochStartTime","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getLastPostconfirmedSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getMaxTolerableSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getMinCommitmentAgeForPostconfirmation","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextAcceptingEpochWithException","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmedCommitment","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerPrivilegeDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"postconfirmer","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerStartTime","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPresentEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakeForAcceptingEpoch","inputs":[{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakedAttestersForAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getSuperBlockHeightAssignedEpoch","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStakeForAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getValidatorCommitmentAtSuperBlockHeight","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"grantCommitmentAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantTrustedAttester","inputs":[{"name":"attester","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_stakingContract","type":"address","internalType":"contract IMovementStaking"},{"name":"_lastPostconfirmedSuperBlockHeight","type":"uint256","internalType":"uint256"},{"name":"_leadingSuperBlockTolerance","type":"uint256","internalType":"uint256"},{"name":"_epochDuration","type":"uint256","internalType":"uint256"},{"name":"_custodians","type":"address[]","internalType":"address[]"},{"name":"_postconfirmerDuration","type":"uint256","internalType":"uint256"},{"name":"_moveTokenAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isCommitted","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isPostconfirmed","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isWithinPostconfirmerPrivilegeDuration","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"lastPostconfirmedSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"leadingSuperBlockTolerance","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"minCommitmentAgeForPostconfirmation","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"moveTokenAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"openAttestationEnabled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"postconfirmSuperBlocksAndRollover","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"postconfirmedAtL1BlockHeight","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockHeight","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedAtL1BlockHeightByPostconfirmer","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockHeight","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedAtL1BlockTimestamp","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockTimestamp","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedBy","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"attester","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedByPostconfirmer","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedSuperBlocks","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedSuperBlocksVersion","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmerDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmerPrivilegeDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmerRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"postconfirmer","type":"address","internalType":"address"}],"outputs":[{"name":"points","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardPerAttestationPoint","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"rewardPerPostconfirmationPoint","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"setAcceptingEpoch","inputs":[{"name":"newEpoch","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMinCommitmentAgeForPostconfirmation","inputs":[{"name":"_minCommitmentAgeForPostconfirmation","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOpenAttestationEnabled","inputs":[{"name":"enabled","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPostconfirmedCommitmentAtBlockHeight","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPostconfirmerDuration","inputs":[{"name":"_postconfirmerDuration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPostconfirmerPrivilegeDuration","inputs":[{"name":"_postconfirmerPrivilegeDuration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRewardPerAttestationPoint","inputs":[{"name":"rewardPerPoint","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRewardPerPostconfirmationPoint","inputs":[{"name":"rewardPerPoint","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakingContract","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IMovementStaking"}],"stateMutability":"view"},{"type":"function","name":"submitBatchSuperBlockCommitment","inputs":[{"name":"superBlockCommitments","type":"tuple[]","internalType":"struct PCPStorage.SuperBlockCommitment[]","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitSuperBlockCommitment","inputs":[{"name":"commitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"superBlockHeightAssignedEpoch","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epoch","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"versionedPostconfirmedSuperBlocks","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SuperBlockCommitmentSubmitted","inputs":[{"name":"blockHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"stateCommitment","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"attesterStake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SuperBlockPostconfirmed","inputs":[{"name":"blockHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"stateCommitment","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"height","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AttesterAlreadyCommitted","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"PostconfirmerDurationTooLong","inputs":[]},{"type":"error","name":"PostconfirmerDurationTooLongForEpoch","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"UnacceptableSuperBlockCommitment","inputs":[]},{"type":"error","name":"minCommitmentAgeForPostconfirmationTooLong","inputs":[]},{"type":"error","name":"postconfirmerPrivilegeDurationTooLong","inputs":[]}],"bytecode":{"object":"0x60a0604052306080523480156012575f80fd5b50608051613a736100395f395f81816125e10152818161260a015261274b0152613a735ff3fe6080604052600436106104b0575f3560e01c80636c713af81161026d578063bff92c8c1161014a578063e07472ef116100be578063ed8a1d5911610083578063ed8a1d591461102b578063eda67fc41461106c578063ee99205c146110a6578063ef9ae15c146110c4578063f1949add1461092e578063fdafe9ca146110dd575f80fd5b8063e07472ef14610f25578063e4a3fb7414610f5f578063e90d4c0614610f97578063ec18c18614610fdc578063ec23ec2e14610ff1575f80fd5b8063d283392e1161010f578063d283392e14610e52578063d3eef4cc14610e7d578063d440116d14610e92578063d547741f14610eb1578063d783068814610ed0578063da7d28b614610f06575f80fd5b8063bff92c8c14610daa578063c19b406c14610dbf578063cf6772ad14610df5578063d03509ec14610e14578063d2526fef14610e33575f80fd5b806391d14854116101e1578063a217fddf116101a6578063a217fddf14610ce7578063aa0d6fcd14610cfa578063ab208ebd14610d1b578063ad3cb1cc14610d2f578063ba26513e14610d6c578063bb04bd2f14610d8b575f80fd5b806391d1485414610c5657806392a2ebf314610c75578063943b79e214610c89578063949d7c2a14610c9d578063a207fe2f14610cbc575f80fd5b806380e460f01161023257806380e460f014610b905780638129fc1c14610bb057806381df174614610bc457806385e6b8c214610be357806390879f6414610c0e57806391807e4f14610c22575f80fd5b80636c713af814610ad15780636f86529414610ae55780637aa81c2a14610b1b5780637ac561c814610b3a5780637cfd820514610b65575f80fd5b806336568abe1161039b578063556d97c81161030f5780635d3ea8f1116102d45780635d3ea8f114610a145780635db916ab14610a285780635f4d642e14610a485780635f83c7d514610a5c578063622e361614610a715780636978ab1214610a90575f80fd5b8063556d97c81461092e57806355b8119d146109ad57806357342282146109c257806358376877146109e157806359b9959714610a00575f80fd5b806345367f231161036057806345367f2314610895578063491d0467146108b45780634b47d955146108d35780634ceb2e66146108f25780634f1ef2861461090757806352d1902d1461091a575f80fd5b806336568abe146107cf5780633752d675146107ee57806337d7f58f146108025780633ba18005146108165780633d64592714610876575f80fd5b80631241ebe311610432578063248a9ca3116103f7578063248a9ca3146106c357806326624e37146106e25780632bfd11d6146106f65780632f2ff15d146107655780633119edd41461078457806335ea1c63146107a3575f80fd5b80631241ebe31461062757806314e380261461063b5780631db859c71461064f5780631de38fe1146106855780631f83e2a3146106a4575f80fd5b806308c7050f1161047857806308c7050f1461058a5780630cf6b6bd146105ab5780630d39f7f0146105ca5780630e74b609146105e9578063107e21ca14610608575f80fd5b806301ffc9a7146104b4578063026583d7146104e8578063028e490a1461052957806303d3f7fd1461054757806308750a321461055c575b5f80fd5b3480156104bf575f80fd5b506104d36104ce366004613279565b6110f2565b60405190151581526020015b60405180910390f35b3480156104f3575f80fd5b506105076105023660046132a0565b611128565b60408051825181526020808401519082015291810151908201526060016104df565b348015610534575f80fd5b506006545b6040519081526020016104df565b348015610552575f80fd5b5061053960025481565b348015610567575f80fd5b506104d36105763660046132c9565b600c6020525f908152604090205460ff1681565b348015610595575f80fd5b506105a96105a436600461337a565b611161565b005b3480156105b6575f80fd5b506104d36105c536600461337a565b6111ee565b3480156105d5575f80fd5b506105a96105e43660046132c9565b61126d565b3480156105f4575f80fd5b506105a961060336600461337a565b61128a565b348015610613575f80fd5b506105a961062236600461343d565b6112d3565b348015610632575f80fd5b50600454610539565b348015610646575f80fd5b5061053961149e565b34801561065a575f80fd5b506105396106693660046134c1565b601560209081525f928352604080842090915290825290205481565b348015610690575f80fd5b5061053961069f3660046134c1565b6114af565b3480156106af575f80fd5b506105a96106be3660046132c9565b611528565b3480156106ce575f80fd5b506105396106dd3660046132c9565b6115da565b3480156106ed575f80fd5b506105a96115fa565b348015610701575f80fd5b506105076107103660046132c9565b60408051606080820183525f8083526020808401829052928401819052601354815260128352838120948152938252928290208251938401835280548452600181015491840191909152600201549082015290565b348015610770575f80fd5b506105a961077f3660046134c1565b611605565b34801561078f575f80fd5b506105a961079e36600461337a565b611627565b3480156107ae575f80fd5b506107b76116f3565b6040516001600160a01b0390911681526020016104df565b3480156107da575f80fd5b506105a96107e93660046134c1565b6117f2565b3480156107f9575f80fd5b5061053961182a565b34801561080d575f80fd5b50610539611895565b348015610821575f80fd5b5061085b6108303660046134ef565b601260209081525f928352604080842090915290825290208054600182015460029092015490919083565b604080519384526020840192909252908201526060016104df565b348015610881575f80fd5b506105a96108903660046132c9565b6118c5565b3480156108a0575f80fd5b506105396108af3660046132c9565b611979565b3480156108bf575f80fd5b506105396108ce36600461350f565b611a32565b3480156108de575f80fd5b506105a96108ed36600461352a565b611a44565b3480156108fd575f80fd5b5061053960045481565b6105a961091536600461355b565b611ab1565b348015610925575f80fd5b50610539611acc565b348015610939575f80fd5b506105076109483660046134c1565b604080516060810182525f8082526020820181905291810191909152505f9182526008602090815260408084206001600160a01b0393909316845291815291819020815160608101835281548152600182015493810193909352600201549082015290565b3480156109b8575f80fd5b5061053960065481565b3480156109cd575f80fd5b506105a96109dc3660046132c9565b611ae7565b3480156109ec575f80fd5b506001546107b7906001600160a01b031681565b348015610a0b575f80fd5b50600354610539565b348015610a1f575f80fd5b50610539611b04565b348015610a33575f80fd5b506105395f80516020613a1e83398151915281565b348015610a53575f80fd5b50610539611b34565b348015610a67575f80fd5b5061053960165481565b348015610a7c575f80fd5b506105a9610a8b366004613600565b611bcd565b348015610a9b575f80fd5b50610539610aaa3660046134c1565b5f9182526014602090815260408084206001600160a01b0393909316845291905290205490565b348015610adc575f80fd5b50610539611c42565b348015610af0575f80fd5b50610539610aff3660046134c1565b601460209081525f928352604080842090915290825290205481565b348015610b26575f80fd5b50610539610b3536600461369a565b611c72565b348015610b45575f80fd5b50610539610b543660046132c9565b600d6020525f908152604090205481565b348015610b70575f80fd5b50610539610b7f3660046132c9565b600f6020525f908152604090205481565b348015610b9b575f80fd5b506105395f805160206139be83398151915281565b348015610bbb575f80fd5b506105a9611cfb565b348015610bcf575f80fd5b506105a9610bde36600461350f565b611df0565b348015610bee575f80fd5b50610539610bfd3660046132c9565b60076020525f908152604090205481565b348015610c19575f80fd5b50610539611e1e565b348015610c2d575f80fd5b506107b7610c3c3660046132c9565b600b6020525f90815260409020546001600160a01b031681565b348015610c61575f80fd5b506104d3610c703660046134c1565b611ea2565b348015610c80575f80fd5b506105a9611ed8565b348015610c94575f80fd5b50610539611f8d565b348015610ca8575f80fd5b506105a9610cb736600461350f565b611f9e565b348015610cc7575f80fd5b50610539610cd63660046132c9565b600e6020525f908152604090205481565b348015610cf2575f80fd5b506105395f81565b348015610d05575f80fd5b50610d0e611fdb565b6040516104df919061371c565b348015610d26575f80fd5b50600554610539565b348015610d3a575f80fd5b50610d5f604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516104df919061372e565b348015610d77575f80fd5b50610539610d863660046134c1565b612047565b348015610d96575f80fd5b50610539610da5366004613763565b612102565b348015610db5575f80fd5b5061053960055481565b348015610dca575f80fd5b50610539610dd93660046134ef565b600960209081525f928352604080842090915290825290205481565b348015610e00575f80fd5b506105a9610e0f36600461352a565b612115565b348015610e1f575f80fd5b506105a9610e2e3660046132c9565b612162565b348015610e3e575f80fd5b506105a9610e4d36600461378f565b6121db565b348015610e5d575f80fd5b50610539610e6c3660046132c9565b5f9081526007602052604090205490565b348015610e88575f80fd5b5061053960175481565b348015610e9d575f80fd5b50610539610eac36600461350f565b612206565b348015610ebc575f80fd5b506105a9610ecb3660046134c1565b612218565b348015610edb575f80fd5b50610539610eea3660046134ef565b600a60209081525f928352604080842090915290825290205481565b348015610f11575f80fd5b506105a9610f203660046132c9565b612234565b348015610f30575f80fd5b50610539610f3f36600461337a565b80515f908152600a60209081526040808320938201518352929052205490565b348015610f6a575f80fd5b506104d3610f793660046132c9565b5f908152600860209081526040808320338452909152902054151590565b348015610fa2575f80fd5b5061085b610fb13660046134c1565b600860209081525f928352604080842090915290825290208054600182015460029092015490919083565b348015610fe7575f80fd5b5061053960135481565b348015610ffc575f80fd5b506104d361100b3660046132c9565b6013545f9081526012602090815260408083209383529290522054151590565b348015611036575f80fd5b506105396110453660046134c1565b5f9182526015602090815260408084206001600160a01b0393909316845291905290205490565b348015611077575f80fd5b5061085b6110863660046132c9565b60106020525f908152604090208054600182015460029092015490919083565b3480156110b1575f80fd5b505f546107b7906001600160a01b031681565b3480156110cf575f80fd5b506011546104d39060ff1681565b3480156110e8575f80fd5b5061053960035481565b5f6001600160e01b03198216637965db0b60e01b148061112257506301ffc9a760e01b6001600160e01b03198316145b92915050565b60408051606080820183525f808352602080840182905292840152825190810183528581529081018490529081018290525b9392505050565b6111785f805160206139be83398151915233611ea2565b6111e25760405162461bcd60e51b815260206004820152603060248201527f464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d4960448201526f544d454e545f41444d494e5f4f4e4c5960801b60648201526084015b60405180910390fd5b6111eb81611627565b50565b80515f908152600a602090815260408083208285015184529091528120545f0361121957505f919050565b4261122360065490565b60055484515f908152600a6020908152604080832082890151845290915290205461124e91906137c2565b61125891906137c2565b101561126557505f919050565b506001919050565b5f805160206139be833981519152611284816122e6565b50601655565b60115460ff16806112ad57506112ad5f80516020613a1e83398151915233611ea2565b6112c95760405162461bcd60e51b81526004016111d9906137d5565b6111eb33826122f0565b5f6112dc612464565b805490915060ff600160401b82041615906001600160401b03165f811580156113025750825b90505f826001600160401b0316600114801561131d5750303b155b90508115801561132b575080155b156113495760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561137357845460ff60401b1916600160401b1785555b61137b61248c565b5f80546001600160a01b0319166001600160a01b038e1690811790915560028b905560038c9055604051631a6e609f60e31b815263d37304f8906113c5908c908c90600401613817565b5f604051808303815f87803b1580156113dc575f80fd5b505af11580156113ee573d5f803e3d5ffd5b505050506113fb33611f9e565b61140433611df0565b6004879055600180546001600160a01b0319166001600160a01b03881617905561142f600a8a613843565b60055561143d600a8a613843565b60065560016016819055601755831561149057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b5f6114aa6108af611c42565b905090565b5f8054604051630ce52af560e01b8152306004820152602481018590526001600160a01b03848116604483015290911690630ce52af590606401602060405180830381865afa158015611504573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115a9190613856565b5f805160206139be83398151915261153f816122e6565b6006545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015611587573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ab9190613856565b6115b5919061386d565b82106115d45760405163a7075e5f60e01b815260040160405180910390fd5b50600555565b5f9081525f805160206139fe833981519152602052604090206001015490565b6116033361249e565b565b61160e826115da565b611617816122e6565b61162183836124bc565b50505050565b61163e5f805160206139be83398151915233611ea2565b6116be5760405162461bcd60e51b8152602060048201526044602482018190527f5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e908201527f545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f6064820152634f4e4c5960e01b608482015260a4016111d9565b6013545f9081526012602090815260408083208451845282529182902083518155908301516001820155910151600290910155565b5f806116fd611b34565b90505f611708611e1e565b5f8054604051634234a47960e01b815230600482015292935090916001600160a01b0390911690634234a479906024015f60405180830381865afa158015611752573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526117799190810190613880565b905080515f0361178c575f935050505090565b5f815184846040516020016117ab929190918252602082015260400190565b604051602081830303815290604052805190602001205f1c6117cd919061390f565b90508181815181106117e1576117e1613922565b602002602001015194505050505090565b6001600160a01b038116331461181b5760405163334bd91960e11b815260040160405180910390fd5b611825828261255d565b505050565b5f8054604051631dc7f3f160e21b81523060048201526001600160a01b039091169063771fcfc4906024015b602060405180830381865afa158015611871573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114aa9190613856565b5f805460405163d980b40d60e01b81523060048201526001600160a01b039091169063d980b40d90602401611856565b5f805160206139be8339815191526118dc816122e6565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015611922573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119469190613856565b905080611954846002613936565b10611972576040516360bc402f60e01b815260040160405180910390fd5b5050600455565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa1580156119be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119e59190810190613880565b90505f805b8251811015611a2a57611a1685848381518110611a0957611a09613922565b60200260200101516114af565b611a2090836137c2565b91506001016119ea565b509392505050565b5f611122611a3e611c42565b83612047565b611a4e5f33611ea2565b611a6a5760405162461bcd60e51b81526004016111d99061394d565b5f5b8151811015611aad57611aa55f805160206139be833981519152838381518110611a9857611a98613922565b6020026020010151611605565b600101611a6c565b5050565b611ab96125d6565b611ac28261267a565b611aad8282612684565b5f611ad5612740565b505f805160206139de83398151915290565b5f805160206139be833981519152611afe816122e6565b50601755565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401611856565b5f8054604051635c53435960e01b8152306004820152429183916001600160a01b0390911690635c53435990602401602060405180830381865afa158015611b7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ba29190613856565b611bac908361390f565b905060045481611bbc919061390f565b611bc6908261386d565b9250505090565b60115460ff1680611bf05750611bf05f80516020613a1e83398151915233611ea2565b611c0c5760405162461bcd60e51b81526004016111d9906137d5565b5f5b8151811015611aad57611c3a33838381518110611c2d57611c2d613922565b60200260200101516122f0565b600101611c0e565b5f80546040516322fceb7560e01b81523060048201526001600160a01b03909116906322fceb7590602401611856565b5f80546040516324f7ee1760e21b8152306004820152602481018690526001600160a01b0385811660448301528481166064830152909116906393dfb85c90608401602060405180830381865afa158015611ccf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf39190613856565b949350505050565b5f611d04612464565b805490915060ff600160401b82041615906001600160401b03165f81158015611d2a5750825b90505f826001600160401b03166001148015611d455750303b155b905081158015611d53575080155b15611d715760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611d9b57845460ff60401b1916600160401b1785555b611da3612789565b8315611de957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f805160206139be833981519152611e07816122e6565b611aad5f80516020613a1e83398151915283611605565b5f8054604051635c53435960e01b815230600482015242916001600160a01b031690635c53435990602401602060405180830381865afa158015611e64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e889190613856565b611e92908261390f565b611e9c908261386d565b91505090565b5f9182525f805160206139fe833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611ee25f33611ea2565b611f3c5760405162461bcd60e51b815260206004820152602560248201527f4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e6044820152645f4f4e4c5960d81b60648201526084016111d9565b5f8054604080516392a2ebf360e01b815290516001600160a01b03909216926392a2ebf39260048084019382900301818387803b158015611f7b575f80fd5b505af1158015611621573d5f803e3d5ffd5b5f6002546003546114aa91906137c2565b611fa85f33611ea2565b611fc45760405162461bcd60e51b81526004016111d99061394d565b6111eb5f805160206139be83398151915282611605565b5f54604051634234a47960e01b81523060048201526060916001600160a01b031690634234a479906024015f60405180830381865afa158015612020573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114aa9190810190613880565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa15801561208c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120b39190810190613880565b90505f805b82518110156120f9576120e5868483815181106120d7576120d7613922565b602002602001015187611c72565b6120ef90836137c2565b91506001016120b8565b50949350505050565b5f61115a61210e611c42565b8484611c72565b5f805160206139be83398151915261212c816122e6565b5f5b82518110156118255761215a5f80516020613a1e833981519152848381518110611a9857611a98613922565b60010161212e565b5f805160206139be833981519152612179816122e6565b5f54604051631dc8b94960e01b8152306004820152602481018490526001600160a01b0390911690631dc8b949906044015f604051808303815f87803b1580156121c1575f80fd5b505af11580156121d3573d5f803e3d5ffd5b505050505050565b5f805160206139be8339815191526121f2816122e6565b506011805460ff1916911515919091179055565b5f611122612212611c42565b836114af565b612221826115da565b61222a816122e6565b611621838361255d565b5f805160206139be83398151915261224b816122e6565b6005545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015612293573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122b79190613856565b6122c1919061386d565b82106122e057604051633c9f1a5360e01b815260040160405180910390fd5b50600655565b6111eb8133612799565b80515f9081526008602090815260408083206001600160a01b03861684529091529020541561233257604051630ae09ad960e41b815260040160405180910390fd5b805160025460035461234491906137c2565b101561236357604051630ae09ad960e41b815260040160405180910390fd5b80515f90815260076020526040812054900361239257612381611895565b81515f908152600760205260409020555b80515f9081526008602090815260408083206001600160a01b038616845282529182902083518082559184015160018201819055928401516002909101556123da91426127d2565b5f6123e483611a32565b82515f9081526009602090815260408083208287015184529091528120805492935083929091906124169084906137c2565b9091555050604080830151602080850151835190815290810184905290917fa8445a6b8a16633ad62fbc0954848ec55c4d5323d90b9745dbda4121ec5ce12b910160405180910390a2505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00611122565b61249461281c565b6111eb5f336124bc565b6124b560035460016124b091906137c2565b612841565b61249e5750565b5f5f805160206139fe8339815191526124d58484611ea2565b612554575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561250a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050611122565b5f915050611122565b5f5f805160206139fe8339815191526125768484611ea2565b15612554575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050611122565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061265c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126505f805160206139de833981519152546001600160a01b031690565b6001600160a01b031614155b156116035760405163703e46dd60e11b815260040160405180910390fd5b5f611aad816122e6565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156126de575060408051601f3d908101601f191682019092526126db91810190613856565b60015b61270657604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111d9565b5f805160206139de833981519152811461273657604051632a87526960e21b8152600481018290526024016111d9565b6118258383612aaa565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116035760405163703e46dd60e11b815260040160405180910390fd5b61279161281c565b61160361248c565b6127a38282611ea2565b611aad5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111d9565b5f838152600a60209081526040808320858452909152902054156127f557505050565b805f0361280157505050565b5f928352600a60209081526040808520938552929052912055565b612824612aff565b61160357604051631afcd79f60e31b815260040160405180910390fd5b5f818152600760205260408120546003541561290d575f60078161286660018761386d565b81526020019081526020015f205490508082101561290b575f612887611fdb565b90505f5b81518110156129055760085f8781526020019081526020015f205f8383815181106128b8576128b8613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f01545f146128fd575f868152600760205260409020839055612905565b60010161288b565b50819250505b505b80612916611c42565b101561292957612924612b18565b61290d565b5f600361293583611979565b612940906002613936565b61294a9190613843565b6129559060016137c2565b90505f612960611fdb565b90505f805b8251811015612a6a575f83828151811061298157612981613922565b6020908102919091018101515f8a81526008835260408082206001600160a01b038416835284529081902081516060810183528154808252600183015495820195909552600290910154918101919091529092509089146129e3575050612a62565b80515f908152600960209081526040808320828501518452909152902054868110612a5e5781515f908152600a60209081526040808320828601518452909152902054600554612a3390826137c2565b421015612a435750505050612a6a565b612a4d8333612e58565b5060019a9950505050505050505050565b5050505b600101612965565b5080158015612a865750612a7c611c42565b612a84611895565b115b15612a9f57612a93612b18565b50600195945050505050565b505f95945050505050565b612ab382613100565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612af7576118258282613163565b611aad6131d5565b5f612b08612464565b54600160401b900460ff16919050565b5f612b21611c42565b90505f612b2c611fdb565b90505f5b8151811015612e18575f83815260146020526040812083518290859085908110612b5c57612b5c613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612cab575f612bad838381518110612ba057612ba0613922565b6020026020010151611a32565b60165460145f8781526020019081526020015f205f868681518110612bd457612bd4613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612c069190613936565b612c109190613936565b5f5484519192506001600160a01b031690635e00bf4690859085908110612c3957612c39613922565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612c93575f80fd5b505af1158015612ca5573d5f803e3d5ffd5b50505050505b5f83815260156020526040812083518290859085908110612cce57612cce613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612e10575f612d12838381518110612ba057612ba0613922565b60175460155f8781526020019081526020015f205f868681518110612d3957612d39613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612d6b9190613936565b612d759190613936565b5f5484519192506001600160a01b031690635e00bf4690859085908110612d9e57612d9e613922565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612df8575f80fd5b505af1158015612e0a573d5f803e3d5ffd5b50505050505b600101612b30565b505f805460408051632a21edc760e21b815290516001600160a01b039092169263a887b71c9260048084019382900301818387803b1580156121c1575f80fd5b5f612e61611c42565b83515f908152600760205260409020549091508114612e9357604051631f2d18b160e31b815260040160405180910390fd5b8251612ea19060019061386d565b60035414612ec257604051631f2d18b160e31b815260040160405180910390fd5b5f612ecb611fdb565b90505f5b8151811015612f9d57846020015160085f875f015181526020019081526020015f205f848481518110612f0457612f04613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206001015403612f955760145f8481526020019081526020015f205f838381518110612f5857612f58613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f815480929190612f8f9061398f565b91905055505b600101612ecf565b50612fa7846111ee565b612fe8575f8281526015602090815260408083206001600160a01b03871684529091528120805460019290612fdd9084906137c2565b909155506130409050565b826001600160a01b0316612ffa6116f3565b6001600160a01b031603613040575f8281526015602090815260408083206001600160a01b0387168452909152812080546001929061303a9084906137c2565b90915550505b6013545f90815260126020908152604080832087518452825280832087518082558884018051600184015589840180516002909401939093556003829055908552600b845282852080546001600160a01b0319166001600160a01b038a1617905588518552600d845282852043905588518552600e84529382902042905551925187518251918252928101929092527fc28fbeddd1d6ba9496d1b91564f9aa2bc4dffed78aae631bbc6ef67296ad3c3c910160405180910390a250505050565b806001600160a01b03163b5f0361313557604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111d9565b5f805160206139de83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b03168460405161317f91906139a7565b5f60405180830381855af49150503d805f81146131b7576040519150601f19603f3d011682016040523d82523d5f602084013e6131bc565b606091505b50915091506131cc8583836131f4565b95945050505050565b34156116035760405163b398979f60e01b815260040160405180910390fd5b6060826132095761320482613250565b61115a565b815115801561322057506001600160a01b0384163b155b1561324957604051639996b31560e01b81526001600160a01b03851660048201526024016111d9565b508061115a565b8051156132605780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215613289575f80fd5b81356001600160e01b03198116811461115a575f80fd5b5f805f606084860312156132b2575f80fd5b505081359360208301359350604090920135919050565b5f602082840312156132d9575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561331c5761331c6132e0565b604052919050565b5f60608284031215613334575f80fd5b604051606081016001600160401b0381118282101715613356576133566132e0565b60409081528335825260208085013590830152928301359281019290925250919050565b5f6060828403121561338a575f80fd5b61115a8383613324565b6001600160a01b03811681146111eb575f80fd5b5f6001600160401b038211156133c0576133c06132e0565b5060051b60200190565b5f82601f8301126133d9575f80fd5b81356133ec6133e7826133a8565b6132f4565b8082825260208201915060208360051b86010192508583111561340d575f80fd5b602085015b8381101561343357803561342581613394565b835260209283019201613412565b5095945050505050565b5f805f805f805f60e0888a031215613453575f80fd5b873561345e81613394565b965060208801359550604088013594506060880135935060808801356001600160401b0381111561348d575f80fd5b6134998a828b016133ca565b93505060a0880135915060c08801356134b181613394565b8091505092959891949750929550565b5f80604083850312156134d2575f80fd5b8235915060208301356134e481613394565b809150509250929050565b5f8060408385031215613500575f80fd5b50508035926020909101359150565b5f6020828403121561351f575f80fd5b813561115a81613394565b5f6020828403121561353a575f80fd5b81356001600160401b0381111561354f575f80fd5b611cf3848285016133ca565b5f806040838503121561356c575f80fd5b823561357781613394565b915060208301356001600160401b03811115613591575f80fd5b8301601f810185136135a1575f80fd5b80356001600160401b038111156135ba576135ba6132e0565b6135cd601f8201601f19166020016132f4565b8181528660208385010111156135e1575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f60208284031215613610575f80fd5b81356001600160401b03811115613625575f80fd5b8201601f81018413613635575f80fd5b80356136436133e7826133a8565b80828252602082019150602060608402850101925086831115613664575f80fd5b6020840193505b828410156136905761367d8785613324565b825260208201915060608401935061366b565b9695505050505050565b5f805f606084860312156136ac575f80fd5b8335925060208401356136be81613394565b915060408401356136ce81613394565b809150509250925092565b5f8151808452602084019350602083015f5b828110156137125781516001600160a01b03168652602095860195909101906001016136eb565b5093949350505050565b602081525f61115a60208301846136d9565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215613774575f80fd5b823561377f81613394565b915060208301356134e481613394565b5f6020828403121561379f575f80fd5b8135801515811461115a575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115611122576111226137ae565b60208082526022908201527f554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d45604082015261139560f21b606082015260800190565b828152604060208201525f611cf360408301846136d9565b634e487b7160e01b5f52601260045260245ffd5b5f826138515761385161382f565b500490565b5f60208284031215613866575f80fd5b5051919050565b81810381811115611122576111226137ae565b5f60208284031215613890575f80fd5b81516001600160401b038111156138a5575f80fd5b8201601f810184136138b5575f80fd5b80516138c36133e7826133a8565b8082825260208201915060208360051b8501019250868311156138e4575f80fd5b6020840193505b828410156136905783516138fe81613394565b8252602093840193909101906138eb565b5f8261391d5761391d61382f565b500690565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417611122576111226137ae565b60208082526022908201527f4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e6040820152614c5960f01b606082015260800190565b5f600182016139a0576139a06137ae565b5060010190565b5f82518060208501845e5f92019182525091905056fedb2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18a26469706673582212205c57ace4d11ef4f14745cfa900bbfba3b877027ff6007e947931e207f05d43d964736f6c634300081a0033","sourceMap":"545:34540:114:-:0;;;1171:4:22;1128:48;;545:34540:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106104b0575f3560e01c80636c713af81161026d578063bff92c8c1161014a578063e07472ef116100be578063ed8a1d5911610083578063ed8a1d591461102b578063eda67fc41461106c578063ee99205c146110a6578063ef9ae15c146110c4578063f1949add1461092e578063fdafe9ca146110dd575f80fd5b8063e07472ef14610f25578063e4a3fb7414610f5f578063e90d4c0614610f97578063ec18c18614610fdc578063ec23ec2e14610ff1575f80fd5b8063d283392e1161010f578063d283392e14610e52578063d3eef4cc14610e7d578063d440116d14610e92578063d547741f14610eb1578063d783068814610ed0578063da7d28b614610f06575f80fd5b8063bff92c8c14610daa578063c19b406c14610dbf578063cf6772ad14610df5578063d03509ec14610e14578063d2526fef14610e33575f80fd5b806391d14854116101e1578063a217fddf116101a6578063a217fddf14610ce7578063aa0d6fcd14610cfa578063ab208ebd14610d1b578063ad3cb1cc14610d2f578063ba26513e14610d6c578063bb04bd2f14610d8b575f80fd5b806391d1485414610c5657806392a2ebf314610c75578063943b79e214610c89578063949d7c2a14610c9d578063a207fe2f14610cbc575f80fd5b806380e460f01161023257806380e460f014610b905780638129fc1c14610bb057806381df174614610bc457806385e6b8c214610be357806390879f6414610c0e57806391807e4f14610c22575f80fd5b80636c713af814610ad15780636f86529414610ae55780637aa81c2a14610b1b5780637ac561c814610b3a5780637cfd820514610b65575f80fd5b806336568abe1161039b578063556d97c81161030f5780635d3ea8f1116102d45780635d3ea8f114610a145780635db916ab14610a285780635f4d642e14610a485780635f83c7d514610a5c578063622e361614610a715780636978ab1214610a90575f80fd5b8063556d97c81461092e57806355b8119d146109ad57806357342282146109c257806358376877146109e157806359b9959714610a00575f80fd5b806345367f231161036057806345367f2314610895578063491d0467146108b45780634b47d955146108d35780634ceb2e66146108f25780634f1ef2861461090757806352d1902d1461091a575f80fd5b806336568abe146107cf5780633752d675146107ee57806337d7f58f146108025780633ba18005146108165780633d64592714610876575f80fd5b80631241ebe311610432578063248a9ca3116103f7578063248a9ca3146106c357806326624e37146106e25780632bfd11d6146106f65780632f2ff15d146107655780633119edd41461078457806335ea1c63146107a3575f80fd5b80631241ebe31461062757806314e380261461063b5780631db859c71461064f5780631de38fe1146106855780631f83e2a3146106a4575f80fd5b806308c7050f1161047857806308c7050f1461058a5780630cf6b6bd146105ab5780630d39f7f0146105ca5780630e74b609146105e9578063107e21ca14610608575f80fd5b806301ffc9a7146104b4578063026583d7146104e8578063028e490a1461052957806303d3f7fd1461054757806308750a321461055c575b5f80fd5b3480156104bf575f80fd5b506104d36104ce366004613279565b6110f2565b60405190151581526020015b60405180910390f35b3480156104f3575f80fd5b506105076105023660046132a0565b611128565b60408051825181526020808401519082015291810151908201526060016104df565b348015610534575f80fd5b506006545b6040519081526020016104df565b348015610552575f80fd5b5061053960025481565b348015610567575f80fd5b506104d36105763660046132c9565b600c6020525f908152604090205460ff1681565b348015610595575f80fd5b506105a96105a436600461337a565b611161565b005b3480156105b6575f80fd5b506104d36105c536600461337a565b6111ee565b3480156105d5575f80fd5b506105a96105e43660046132c9565b61126d565b3480156105f4575f80fd5b506105a961060336600461337a565b61128a565b348015610613575f80fd5b506105a961062236600461343d565b6112d3565b348015610632575f80fd5b50600454610539565b348015610646575f80fd5b5061053961149e565b34801561065a575f80fd5b506105396106693660046134c1565b601560209081525f928352604080842090915290825290205481565b348015610690575f80fd5b5061053961069f3660046134c1565b6114af565b3480156106af575f80fd5b506105a96106be3660046132c9565b611528565b3480156106ce575f80fd5b506105396106dd3660046132c9565b6115da565b3480156106ed575f80fd5b506105a96115fa565b348015610701575f80fd5b506105076107103660046132c9565b60408051606080820183525f8083526020808401829052928401819052601354815260128352838120948152938252928290208251938401835280548452600181015491840191909152600201549082015290565b348015610770575f80fd5b506105a961077f3660046134c1565b611605565b34801561078f575f80fd5b506105a961079e36600461337a565b611627565b3480156107ae575f80fd5b506107b76116f3565b6040516001600160a01b0390911681526020016104df565b3480156107da575f80fd5b506105a96107e93660046134c1565b6117f2565b3480156107f9575f80fd5b5061053961182a565b34801561080d575f80fd5b50610539611895565b348015610821575f80fd5b5061085b6108303660046134ef565b601260209081525f928352604080842090915290825290208054600182015460029092015490919083565b604080519384526020840192909252908201526060016104df565b348015610881575f80fd5b506105a96108903660046132c9565b6118c5565b3480156108a0575f80fd5b506105396108af3660046132c9565b611979565b3480156108bf575f80fd5b506105396108ce36600461350f565b611a32565b3480156108de575f80fd5b506105a96108ed36600461352a565b611a44565b3480156108fd575f80fd5b5061053960045481565b6105a961091536600461355b565b611ab1565b348015610925575f80fd5b50610539611acc565b348015610939575f80fd5b506105076109483660046134c1565b604080516060810182525f8082526020820181905291810191909152505f9182526008602090815260408084206001600160a01b0393909316845291815291819020815160608101835281548152600182015493810193909352600201549082015290565b3480156109b8575f80fd5b5061053960065481565b3480156109cd575f80fd5b506105a96109dc3660046132c9565b611ae7565b3480156109ec575f80fd5b506001546107b7906001600160a01b031681565b348015610a0b575f80fd5b50600354610539565b348015610a1f575f80fd5b50610539611b04565b348015610a33575f80fd5b506105395f80516020613a1e83398151915281565b348015610a53575f80fd5b50610539611b34565b348015610a67575f80fd5b5061053960165481565b348015610a7c575f80fd5b506105a9610a8b366004613600565b611bcd565b348015610a9b575f80fd5b50610539610aaa3660046134c1565b5f9182526014602090815260408084206001600160a01b0393909316845291905290205490565b348015610adc575f80fd5b50610539611c42565b348015610af0575f80fd5b50610539610aff3660046134c1565b601460209081525f928352604080842090915290825290205481565b348015610b26575f80fd5b50610539610b3536600461369a565b611c72565b348015610b45575f80fd5b50610539610b543660046132c9565b600d6020525f908152604090205481565b348015610b70575f80fd5b50610539610b7f3660046132c9565b600f6020525f908152604090205481565b348015610b9b575f80fd5b506105395f805160206139be83398151915281565b348015610bbb575f80fd5b506105a9611cfb565b348015610bcf575f80fd5b506105a9610bde36600461350f565b611df0565b348015610bee575f80fd5b50610539610bfd3660046132c9565b60076020525f908152604090205481565b348015610c19575f80fd5b50610539611e1e565b348015610c2d575f80fd5b506107b7610c3c3660046132c9565b600b6020525f90815260409020546001600160a01b031681565b348015610c61575f80fd5b506104d3610c703660046134c1565b611ea2565b348015610c80575f80fd5b506105a9611ed8565b348015610c94575f80fd5b50610539611f8d565b348015610ca8575f80fd5b506105a9610cb736600461350f565b611f9e565b348015610cc7575f80fd5b50610539610cd63660046132c9565b600e6020525f908152604090205481565b348015610cf2575f80fd5b506105395f81565b348015610d05575f80fd5b50610d0e611fdb565b6040516104df919061371c565b348015610d26575f80fd5b50600554610539565b348015610d3a575f80fd5b50610d5f604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516104df919061372e565b348015610d77575f80fd5b50610539610d863660046134c1565b612047565b348015610d96575f80fd5b50610539610da5366004613763565b612102565b348015610db5575f80fd5b5061053960055481565b348015610dca575f80fd5b50610539610dd93660046134ef565b600960209081525f928352604080842090915290825290205481565b348015610e00575f80fd5b506105a9610e0f36600461352a565b612115565b348015610e1f575f80fd5b506105a9610e2e3660046132c9565b612162565b348015610e3e575f80fd5b506105a9610e4d36600461378f565b6121db565b348015610e5d575f80fd5b50610539610e6c3660046132c9565b5f9081526007602052604090205490565b348015610e88575f80fd5b5061053960175481565b348015610e9d575f80fd5b50610539610eac36600461350f565b612206565b348015610ebc575f80fd5b506105a9610ecb3660046134c1565b612218565b348015610edb575f80fd5b50610539610eea3660046134ef565b600a60209081525f928352604080842090915290825290205481565b348015610f11575f80fd5b506105a9610f203660046132c9565b612234565b348015610f30575f80fd5b50610539610f3f36600461337a565b80515f908152600a60209081526040808320938201518352929052205490565b348015610f6a575f80fd5b506104d3610f793660046132c9565b5f908152600860209081526040808320338452909152902054151590565b348015610fa2575f80fd5b5061085b610fb13660046134c1565b600860209081525f928352604080842090915290825290208054600182015460029092015490919083565b348015610fe7575f80fd5b5061053960135481565b348015610ffc575f80fd5b506104d361100b3660046132c9565b6013545f9081526012602090815260408083209383529290522054151590565b348015611036575f80fd5b506105396110453660046134c1565b5f9182526015602090815260408084206001600160a01b0393909316845291905290205490565b348015611077575f80fd5b5061085b6110863660046132c9565b60106020525f908152604090208054600182015460029092015490919083565b3480156110b1575f80fd5b505f546107b7906001600160a01b031681565b3480156110cf575f80fd5b506011546104d39060ff1681565b3480156110e8575f80fd5b5061053960035481565b5f6001600160e01b03198216637965db0b60e01b148061112257506301ffc9a760e01b6001600160e01b03198316145b92915050565b60408051606080820183525f808352602080840182905292840152825190810183528581529081018490529081018290525b9392505050565b6111785f805160206139be83398151915233611ea2565b6111e25760405162461bcd60e51b815260206004820152603060248201527f464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d4960448201526f544d454e545f41444d494e5f4f4e4c5960801b60648201526084015b60405180910390fd5b6111eb81611627565b50565b80515f908152600a602090815260408083208285015184529091528120545f0361121957505f919050565b4261122360065490565b60055484515f908152600a6020908152604080832082890151845290915290205461124e91906137c2565b61125891906137c2565b101561126557505f919050565b506001919050565b5f805160206139be833981519152611284816122e6565b50601655565b60115460ff16806112ad57506112ad5f80516020613a1e83398151915233611ea2565b6112c95760405162461bcd60e51b81526004016111d9906137d5565b6111eb33826122f0565b5f6112dc612464565b805490915060ff600160401b82041615906001600160401b03165f811580156113025750825b90505f826001600160401b0316600114801561131d5750303b155b90508115801561132b575080155b156113495760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561137357845460ff60401b1916600160401b1785555b61137b61248c565b5f80546001600160a01b0319166001600160a01b038e1690811790915560028b905560038c9055604051631a6e609f60e31b815263d37304f8906113c5908c908c90600401613817565b5f604051808303815f87803b1580156113dc575f80fd5b505af11580156113ee573d5f803e3d5ffd5b505050506113fb33611f9e565b61140433611df0565b6004879055600180546001600160a01b0319166001600160a01b03881617905561142f600a8a613843565b60055561143d600a8a613843565b60065560016016819055601755831561149057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b5f6114aa6108af611c42565b905090565b5f8054604051630ce52af560e01b8152306004820152602481018590526001600160a01b03848116604483015290911690630ce52af590606401602060405180830381865afa158015611504573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115a9190613856565b5f805160206139be83398151915261153f816122e6565b6006545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015611587573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ab9190613856565b6115b5919061386d565b82106115d45760405163a7075e5f60e01b815260040160405180910390fd5b50600555565b5f9081525f805160206139fe833981519152602052604090206001015490565b6116033361249e565b565b61160e826115da565b611617816122e6565b61162183836124bc565b50505050565b61163e5f805160206139be83398151915233611ea2565b6116be5760405162461bcd60e51b8152602060048201526044602482018190527f5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e908201527f545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f6064820152634f4e4c5960e01b608482015260a4016111d9565b6013545f9081526012602090815260408083208451845282529182902083518155908301516001820155910151600290910155565b5f806116fd611b34565b90505f611708611e1e565b5f8054604051634234a47960e01b815230600482015292935090916001600160a01b0390911690634234a479906024015f60405180830381865afa158015611752573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526117799190810190613880565b905080515f0361178c575f935050505090565b5f815184846040516020016117ab929190918252602082015260400190565b604051602081830303815290604052805190602001205f1c6117cd919061390f565b90508181815181106117e1576117e1613922565b602002602001015194505050505090565b6001600160a01b038116331461181b5760405163334bd91960e11b815260040160405180910390fd5b611825828261255d565b505050565b5f8054604051631dc7f3f160e21b81523060048201526001600160a01b039091169063771fcfc4906024015b602060405180830381865afa158015611871573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114aa9190613856565b5f805460405163d980b40d60e01b81523060048201526001600160a01b039091169063d980b40d90602401611856565b5f805160206139be8339815191526118dc816122e6565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015611922573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119469190613856565b905080611954846002613936565b10611972576040516360bc402f60e01b815260040160405180910390fd5b5050600455565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa1580156119be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119e59190810190613880565b90505f805b8251811015611a2a57611a1685848381518110611a0957611a09613922565b60200260200101516114af565b611a2090836137c2565b91506001016119ea565b509392505050565b5f611122611a3e611c42565b83612047565b611a4e5f33611ea2565b611a6a5760405162461bcd60e51b81526004016111d99061394d565b5f5b8151811015611aad57611aa55f805160206139be833981519152838381518110611a9857611a98613922565b6020026020010151611605565b600101611a6c565b5050565b611ab96125d6565b611ac28261267a565b611aad8282612684565b5f611ad5612740565b505f805160206139de83398151915290565b5f805160206139be833981519152611afe816122e6565b50601755565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401611856565b5f8054604051635c53435960e01b8152306004820152429183916001600160a01b0390911690635c53435990602401602060405180830381865afa158015611b7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ba29190613856565b611bac908361390f565b905060045481611bbc919061390f565b611bc6908261386d565b9250505090565b60115460ff1680611bf05750611bf05f80516020613a1e83398151915233611ea2565b611c0c5760405162461bcd60e51b81526004016111d9906137d5565b5f5b8151811015611aad57611c3a33838381518110611c2d57611c2d613922565b60200260200101516122f0565b600101611c0e565b5f80546040516322fceb7560e01b81523060048201526001600160a01b03909116906322fceb7590602401611856565b5f80546040516324f7ee1760e21b8152306004820152602481018690526001600160a01b0385811660448301528481166064830152909116906393dfb85c90608401602060405180830381865afa158015611ccf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf39190613856565b949350505050565b5f611d04612464565b805490915060ff600160401b82041615906001600160401b03165f81158015611d2a5750825b90505f826001600160401b03166001148015611d455750303b155b905081158015611d53575080155b15611d715760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611d9b57845460ff60401b1916600160401b1785555b611da3612789565b8315611de957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f805160206139be833981519152611e07816122e6565b611aad5f80516020613a1e83398151915283611605565b5f8054604051635c53435960e01b815230600482015242916001600160a01b031690635c53435990602401602060405180830381865afa158015611e64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e889190613856565b611e92908261390f565b611e9c908261386d565b91505090565b5f9182525f805160206139fe833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611ee25f33611ea2565b611f3c5760405162461bcd60e51b815260206004820152602560248201527f4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e6044820152645f4f4e4c5960d81b60648201526084016111d9565b5f8054604080516392a2ebf360e01b815290516001600160a01b03909216926392a2ebf39260048084019382900301818387803b158015611f7b575f80fd5b505af1158015611621573d5f803e3d5ffd5b5f6002546003546114aa91906137c2565b611fa85f33611ea2565b611fc45760405162461bcd60e51b81526004016111d99061394d565b6111eb5f805160206139be83398151915282611605565b5f54604051634234a47960e01b81523060048201526060916001600160a01b031690634234a479906024015f60405180830381865afa158015612020573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114aa9190810190613880565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa15801561208c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120b39190810190613880565b90505f805b82518110156120f9576120e5868483815181106120d7576120d7613922565b602002602001015187611c72565b6120ef90836137c2565b91506001016120b8565b50949350505050565b5f61115a61210e611c42565b8484611c72565b5f805160206139be83398151915261212c816122e6565b5f5b82518110156118255761215a5f80516020613a1e833981519152848381518110611a9857611a98613922565b60010161212e565b5f805160206139be833981519152612179816122e6565b5f54604051631dc8b94960e01b8152306004820152602481018490526001600160a01b0390911690631dc8b949906044015f604051808303815f87803b1580156121c1575f80fd5b505af11580156121d3573d5f803e3d5ffd5b505050505050565b5f805160206139be8339815191526121f2816122e6565b506011805460ff1916911515919091179055565b5f611122612212611c42565b836114af565b612221826115da565b61222a816122e6565b611621838361255d565b5f805160206139be83398151915261224b816122e6565b6005545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015612293573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122b79190613856565b6122c1919061386d565b82106122e057604051633c9f1a5360e01b815260040160405180910390fd5b50600655565b6111eb8133612799565b80515f9081526008602090815260408083206001600160a01b03861684529091529020541561233257604051630ae09ad960e41b815260040160405180910390fd5b805160025460035461234491906137c2565b101561236357604051630ae09ad960e41b815260040160405180910390fd5b80515f90815260076020526040812054900361239257612381611895565b81515f908152600760205260409020555b80515f9081526008602090815260408083206001600160a01b038616845282529182902083518082559184015160018201819055928401516002909101556123da91426127d2565b5f6123e483611a32565b82515f9081526009602090815260408083208287015184529091528120805492935083929091906124169084906137c2565b9091555050604080830151602080850151835190815290810184905290917fa8445a6b8a16633ad62fbc0954848ec55c4d5323d90b9745dbda4121ec5ce12b910160405180910390a2505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00611122565b61249461281c565b6111eb5f336124bc565b6124b560035460016124b091906137c2565b612841565b61249e5750565b5f5f805160206139fe8339815191526124d58484611ea2565b612554575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561250a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050611122565b5f915050611122565b5f5f805160206139fe8339815191526125768484611ea2565b15612554575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050611122565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061265c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126505f805160206139de833981519152546001600160a01b031690565b6001600160a01b031614155b156116035760405163703e46dd60e11b815260040160405180910390fd5b5f611aad816122e6565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156126de575060408051601f3d908101601f191682019092526126db91810190613856565b60015b61270657604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111d9565b5f805160206139de833981519152811461273657604051632a87526960e21b8152600481018290526024016111d9565b6118258383612aaa565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116035760405163703e46dd60e11b815260040160405180910390fd5b61279161281c565b61160361248c565b6127a38282611ea2565b611aad5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111d9565b5f838152600a60209081526040808320858452909152902054156127f557505050565b805f0361280157505050565b5f928352600a60209081526040808520938552929052912055565b612824612aff565b61160357604051631afcd79f60e31b815260040160405180910390fd5b5f818152600760205260408120546003541561290d575f60078161286660018761386d565b81526020019081526020015f205490508082101561290b575f612887611fdb565b90505f5b81518110156129055760085f8781526020019081526020015f205f8383815181106128b8576128b8613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f01545f146128fd575f868152600760205260409020839055612905565b60010161288b565b50819250505b505b80612916611c42565b101561292957612924612b18565b61290d565b5f600361293583611979565b612940906002613936565b61294a9190613843565b6129559060016137c2565b90505f612960611fdb565b90505f805b8251811015612a6a575f83828151811061298157612981613922565b6020908102919091018101515f8a81526008835260408082206001600160a01b038416835284529081902081516060810183528154808252600183015495820195909552600290910154918101919091529092509089146129e3575050612a62565b80515f908152600960209081526040808320828501518452909152902054868110612a5e5781515f908152600a60209081526040808320828601518452909152902054600554612a3390826137c2565b421015612a435750505050612a6a565b612a4d8333612e58565b5060019a9950505050505050505050565b5050505b600101612965565b5080158015612a865750612a7c611c42565b612a84611895565b115b15612a9f57612a93612b18565b50600195945050505050565b505f95945050505050565b612ab382613100565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612af7576118258282613163565b611aad6131d5565b5f612b08612464565b54600160401b900460ff16919050565b5f612b21611c42565b90505f612b2c611fdb565b90505f5b8151811015612e18575f83815260146020526040812083518290859085908110612b5c57612b5c613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612cab575f612bad838381518110612ba057612ba0613922565b6020026020010151611a32565b60165460145f8781526020019081526020015f205f868681518110612bd457612bd4613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612c069190613936565b612c109190613936565b5f5484519192506001600160a01b031690635e00bf4690859085908110612c3957612c39613922565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612c93575f80fd5b505af1158015612ca5573d5f803e3d5ffd5b50505050505b5f83815260156020526040812083518290859085908110612cce57612cce613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612e10575f612d12838381518110612ba057612ba0613922565b60175460155f8781526020019081526020015f205f868681518110612d3957612d39613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612d6b9190613936565b612d759190613936565b5f5484519192506001600160a01b031690635e00bf4690859085908110612d9e57612d9e613922565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612df8575f80fd5b505af1158015612e0a573d5f803e3d5ffd5b50505050505b600101612b30565b505f805460408051632a21edc760e21b815290516001600160a01b039092169263a887b71c9260048084019382900301818387803b1580156121c1575f80fd5b5f612e61611c42565b83515f908152600760205260409020549091508114612e9357604051631f2d18b160e31b815260040160405180910390fd5b8251612ea19060019061386d565b60035414612ec257604051631f2d18b160e31b815260040160405180910390fd5b5f612ecb611fdb565b90505f5b8151811015612f9d57846020015160085f875f015181526020019081526020015f205f848481518110612f0457612f04613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206001015403612f955760145f8481526020019081526020015f205f838381518110612f5857612f58613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f815480929190612f8f9061398f565b91905055505b600101612ecf565b50612fa7846111ee565b612fe8575f8281526015602090815260408083206001600160a01b03871684529091528120805460019290612fdd9084906137c2565b909155506130409050565b826001600160a01b0316612ffa6116f3565b6001600160a01b031603613040575f8281526015602090815260408083206001600160a01b0387168452909152812080546001929061303a9084906137c2565b90915550505b6013545f90815260126020908152604080832087518452825280832087518082558884018051600184015589840180516002909401939093556003829055908552600b845282852080546001600160a01b0319166001600160a01b038a1617905588518552600d845282852043905588518552600e84529382902042905551925187518251918252928101929092527fc28fbeddd1d6ba9496d1b91564f9aa2bc4dffed78aae631bbc6ef67296ad3c3c910160405180910390a250505050565b806001600160a01b03163b5f0361313557604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111d9565b5f805160206139de83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b03168460405161317f91906139a7565b5f60405180830381855af49150503d805f81146131b7576040519150601f19603f3d011682016040523d82523d5f602084013e6131bc565b606091505b50915091506131cc8583836131f4565b95945050505050565b34156116035760405163b398979f60e01b815260040160405180910390fd5b6060826132095761320482613250565b61115a565b815115801561322057506001600160a01b0384163b155b1561324957604051639996b31560e01b81526001600160a01b03851660048201526024016111d9565b508061115a565b8051156132605780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215613289575f80fd5b81356001600160e01b03198116811461115a575f80fd5b5f805f606084860312156132b2575f80fd5b505081359360208301359350604090920135919050565b5f602082840312156132d9575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561331c5761331c6132e0565b604052919050565b5f60608284031215613334575f80fd5b604051606081016001600160401b0381118282101715613356576133566132e0565b60409081528335825260208085013590830152928301359281019290925250919050565b5f6060828403121561338a575f80fd5b61115a8383613324565b6001600160a01b03811681146111eb575f80fd5b5f6001600160401b038211156133c0576133c06132e0565b5060051b60200190565b5f82601f8301126133d9575f80fd5b81356133ec6133e7826133a8565b6132f4565b8082825260208201915060208360051b86010192508583111561340d575f80fd5b602085015b8381101561343357803561342581613394565b835260209283019201613412565b5095945050505050565b5f805f805f805f60e0888a031215613453575f80fd5b873561345e81613394565b965060208801359550604088013594506060880135935060808801356001600160401b0381111561348d575f80fd5b6134998a828b016133ca565b93505060a0880135915060c08801356134b181613394565b8091505092959891949750929550565b5f80604083850312156134d2575f80fd5b8235915060208301356134e481613394565b809150509250929050565b5f8060408385031215613500575f80fd5b50508035926020909101359150565b5f6020828403121561351f575f80fd5b813561115a81613394565b5f6020828403121561353a575f80fd5b81356001600160401b0381111561354f575f80fd5b611cf3848285016133ca565b5f806040838503121561356c575f80fd5b823561357781613394565b915060208301356001600160401b03811115613591575f80fd5b8301601f810185136135a1575f80fd5b80356001600160401b038111156135ba576135ba6132e0565b6135cd601f8201601f19166020016132f4565b8181528660208385010111156135e1575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f60208284031215613610575f80fd5b81356001600160401b03811115613625575f80fd5b8201601f81018413613635575f80fd5b80356136436133e7826133a8565b80828252602082019150602060608402850101925086831115613664575f80fd5b6020840193505b828410156136905761367d8785613324565b825260208201915060608401935061366b565b9695505050505050565b5f805f606084860312156136ac575f80fd5b8335925060208401356136be81613394565b915060408401356136ce81613394565b809150509250925092565b5f8151808452602084019350602083015f5b828110156137125781516001600160a01b03168652602095860195909101906001016136eb565b5093949350505050565b602081525f61115a60208301846136d9565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215613774575f80fd5b823561377f81613394565b915060208301356134e481613394565b5f6020828403121561379f575f80fd5b8135801515811461115a575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115611122576111226137ae565b60208082526022908201527f554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d45604082015261139560f21b606082015260800190565b828152604060208201525f611cf360408301846136d9565b634e487b7160e01b5f52601260045260245ffd5b5f826138515761385161382f565b500490565b5f60208284031215613866575f80fd5b5051919050565b81810381811115611122576111226137ae565b5f60208284031215613890575f80fd5b81516001600160401b038111156138a5575f80fd5b8201601f810184136138b5575f80fd5b80516138c36133e7826133a8565b8082825260208201915060208360051b8501019250868311156138e4575f80fd5b6020840193505b828410156136905783516138fe81613394565b8252602093840193909101906138eb565b5f8261391d5761391d61382f565b500690565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417611122576111226137ae565b60208082526022908201527f4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e6040820152614c5960f01b606082015260800190565b5f600182016139a0576139a06137ae565b5060010190565b5f82518060208501845e5f92019182525091905056fedb2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18a26469706673582212205c57ace4d11ef4f14745cfa900bbfba3b877027ff6007e947931e207f05d43d964736f6c634300081a0033","sourceMap":"545:34540:114:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:20;;;;;;;;;;-1:-1:-1;3443:202:20;;;;;:::i;:::-;;:::i;:::-;;;470:14:147;;463:22;445:41;;433:2;418:18;3443:202:20;;;;;;;;11507:242:114;;;;;;;;;;-1:-1:-1;11507:242:114;;;;;:::i;:::-;;:::i;:::-;;;;1210:13:147;;1192:32;;1280:4;1268:17;;;1262:24;1240:20;;;1233:54;1331:17;;;1325:24;1303:20;;;1296:54;1180:2;1165:18;11507:242:114;968:388:147;6474:129:114;;;;;;;;;;-1:-1:-1;6566:30:114;;6474:129;;;1507:25:147;;;1495:2;1480:18;6474:129:114;1361:177:147;1406:41:115;;;;;;;;;;;;;;;;3846:77;;;;;;;;;;-1:-1:-1;3846:77:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;18915:308:114;;;;;;;;;;-1:-1:-1;18915:308:114;;;;;:::i;:::-;;:::i;:::-;;24939:683;;;;;;;;;;-1:-1:-1;24939:683:114;;;;;:::i;:::-;;:::i;33669:155::-;;;;;;;;;;-1:-1:-1;33669:155:114;;;;;:::i;:::-;;:::i;13996:317::-;;;;;;;;;;-1:-1:-1;13996:317:114;;;;;:::i;:::-;;:::i;2789:1624::-;;;;;;;;;;-1:-1:-1;2789:1624:114;;;;;:::i;:::-;;:::i;5413:111::-;;;;;;;;;;-1:-1:-1;5496:21:114;;5413:111;;33505:158;;;;;;;;;;;;;:::i;5318:107:115:-;;;;;;;;;;-1:-1:-1;5318:107:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;32341:287:114;;;;;;;;;;-1:-1:-1;32341:287:114;;;;;:::i;:::-;;:::i;7053:533::-;;;;;;;;;;-1:-1:-1;7053:533:114;;;;;:::i;:::-;;:::i;4759:191:20:-;;;;;;;;;;-1:-1:-1;4759:191:20;;;;;:::i;:::-;;:::i;17025:115:114:-;;;;;;;;;;;;;:::i;19229:200::-;;;;;;;;;;-1:-1:-1;19229:200:114;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;19382:31:114;;19348:66;;:33;:66;;;;;:74;;;;;;;;;;19341:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19229:200;5246:136:20;;;;;;;;;;-1:-1:-1;5246:136:20;;;;;:::i;:::-;;:::i;18315:405:114:-;;;;;;;;;;-1:-1:-1;18315:405:114;;;;;:::i;:::-;;:::i;9951:929::-;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;6818:32:147;;;6800:51;;6788:2;6773:18;9951:929:114;6654:203:147;6348:245:20;;;;;;;;;;-1:-1:-1;6348:245:20;;;;;:::i;:::-;;:::i;8946:165:114:-;;;;;;;;;;;;;:::i;8574:133::-;;;;;;;;;;;;;:::i;4950:118:115:-;;;;;;;;;;-1:-1:-1;4950:118:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7415:25:147;;;7471:2;7456:18;;7449:34;;;;7499:18;;;7492:34;7403:2;7388:18;4950:118:115;7213:319:147;4837:570:114;;;;;;;;;;-1:-1:-1;4837:570:114;;;;;:::i;:::-;;:::i;32634:607::-;;;;;;;;;;-1:-1:-1;32634:607:114;;;;;:::i;:::-;;:::i;32088:176::-;;;;;;;;;;-1:-1:-1;32088:176:114;;;;;:::i;:::-;;:::i;1866:326::-;;;;;;;;;;-1:-1:-1;1866:326:114;;;;;:::i;:::-;;:::i;1978:36:115:-;;;;;;;;;;;;;;;;4161:214:22;;;;;;:::i;:::-;;:::i;3708:134::-;;;;;;;;;;;;;:::i;14754:209:114:-;;;;;;;;;;-1:-1:-1;14754:209:114;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;14927:19:114;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;14927:29:114;;;;;;;;;;;;;14920:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14754:209;2261:45:115;;;;;;;;;;;;;;;;33830:165:114;;;;;;;;;;-1:-1:-1;33830:165:114;;;;;:::i;:::-;;:::i;405:31:115:-;;;;;;;;;;-1:-1:-1;405:31:115;;;;-1:-1:-1;;;;;405:31:115;;;16884:135:114;;;;;;;;;;-1:-1:-1;16979:33:114;;16884:135;;8131:129;;;;;;;;;;;;;:::i;764:72::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;764:72:114;;9197:414;;;;;;;;;;;;;:::i;5480:40:115:-;;;;;;;;;;;;;;;;14319:430:114;;;;;;;;;;-1:-1:-1;14319:430:114;;;;;:::i;:::-;;:::i;34073:157::-;;;;;;;;;;-1:-1:-1;34073:157:114;;;;;:::i;:::-;34160:7;34186:27;;;:20;:27;;;;;;;;-1:-1:-1;;;;;34186:37:114;;;;;;;;;;;;;34073:157;8745:131;;;;;;;;;;;;;:::i;5168:97:115:-;;;;;;;;;;-1:-1:-1;5168:97:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;30780:311:114;;;;;;;;;;-1:-1:-1;30780:311:114;;;;;:::i;:::-;;:::i;4005:94:115:-;;;;;;;;;;-1:-1:-1;4005:94:115;;;;;:::i;:::-;;;;;;;;;;;;;;4539:109;;;;;;;;;;-1:-1:-1;4539:109:115;;;;;:::i;:::-;;;;;;;;;;;;;;654:72:114;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;654:72:114;;528:89:117;;;;;;;;;;;;;:::i;2198:136:114:-;;;;;;;;;;-1:-1:-1;2198:136:114;;;;;:::i;:::-;;:::i;2880:87:115:-;;;;;;;;;;-1:-1:-1;2880:87:115;;;;;:::i;:::-;;;;;;;;;;;;;;8331:207:114;;;;;;;;;;;;;:::i;3625:76:115:-;;;;;;;;;;-1:-1:-1;3625:76:115;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3625:76:115;;;3732:207:20;;;;;;;;;;-1:-1:-1;3732:207:20;;;;;:::i;:::-;;:::i;4465:195:114:-;;;;;;;;;;;;;:::i;15017:159::-;;;;;;;;;;;;;:::i;1623:237::-;;;;;;;;;;-1:-1:-1;1623:237:114;;;;;:::i;:::-;;:::i;4336:100:115:-;;;;;;;;;;-1:-1:-1;4336:100:115;;;;;:::i;:::-;;;;;;;;;;;;;;2317:49:20;;;;;;;;;;-1:-1:-1;2317:49:20;2362:4;2317:49;;34580:177:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7592:139::-;;;;;;;;;;-1:-1:-1;7689:35:114;;7592:139;;1819:58:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:22;;;;;;;;;;;;:::i;31523:484:114:-;;;;;;;;;;-1:-1:-1;31523:484:114;;;;;:::i;:::-;;:::i;31191:198::-;;;;;;;;;;-1:-1:-1;31191:198:114;;;;;:::i;:::-;;:::i;2106:50:115:-;;;;;;;;;;;;;;;;3248:105;;;;;;;;;;-1:-1:-1;3248:105:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2340:226:114;;;;;;;;;;-1:-1:-1;2340:226:114;;;;;:::i;:::-;;:::i;11026:250::-;;;;;;;;;;-1:-1:-1;11026:250:114;;;;;:::i;:::-;;:::i;7737:132::-;;;;;;;;;;-1:-1:-1;7737:132:114;;;;;:::i;:::-;;:::i;15500:149::-;;;;;;;;;;-1:-1:-1;15500:149:114;;;;;:::i;:::-;15579:7;15605:37;;;:29;:37;;;;;;;15500:149;5580:45:115;;;;;;;;;;;;;;;;33319:180:114;;;;;;;;;;-1:-1:-1;33319:180:114;;;;;:::i;:::-;;:::i;5662:138:20:-;;;;;;;;;;-1:-1:-1;5662:138:20;;;;;:::i;:::-;;:::i;3436:114:115:-;;;;;;;;;;-1:-1:-1;3436:114:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;5787:464:114;;;;;;;;;;-1:-1:-1;5787:464:114;;;;;:::i;:::-;;:::i;15855:221::-;;;;;;;;;;-1:-1:-1;15855:221:114;;;;;:::i;:::-;16008:27;;15960:7;15986:50;;;:21;:50;;;;;;;;16037:31;;;;15986:83;;;;;;;;15855:221;34763:133;;;;;;;;;;-1:-1:-1;34763:133:114;;;;;:::i;:::-;34823:4;34846:19;;;:11;:19;;;;;;;;34866:10;34846:31;;;;;;;:38;:43;;;34763:133;3049:105:115;;;;;;;;;;-1:-1:-1;3049:105:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5074:46;;;;;;;;;;;;;;;;34902:180:114;;;;;;;;;;-1:-1:-1;34902:180:114;;;;;:::i;:::-;35023:31;;34966:4;34989:66;;;:33;:66;;;;;;;;:74;;;;;;;:81;:86;;;34902:180;34316:177;;;;;;;;;;-1:-1:-1;34316:177:114;;;;;:::i;:::-;34413:7;34439:32;;;:25;:32;;;;;;;;-1:-1:-1;;;;;34439:47:114;;;;;;;;;;;;;34316:177;4718:89:115;;;;;;;;;;-1:-1:-1;4718:89:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;261:39;;;;;;;;;;-1:-1:-1;261:39:115;;;;-1:-1:-1;;;;;261:39:115;;;4855:34;;;;;;;;;;-1:-1:-1;4855:34:115;;;;;;;;1598:48;;;;;;;;;;;;;;;;3443:202:20;3528:4;-1:-1:-1;;;;;;3551:47:20;;-1:-1:-1;;;3551:47:20;;:87;;-1:-1:-1;;;;;;;;;;1134:40:28;;;3602:36:20;3544:94;3443:202;-1:-1:-1;;3443:202:20:o;11507:242:114:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;11693:49:114;;;;;;;;;;;;;;;;;;;;;;11507:242;;;;;;:::o;18915:308::-;19034:37;-1:-1:-1;;;;;;;;;;;19060:10:114;19034:7;:37::i;:::-;19013:132;;;;-1:-1:-1;;;19013:132:114;;13236:2:147;19013:132:114;;;13218:21:147;13275:2;13255:18;;;13248:30;13314:34;13294:18;;;13287:62;-1:-1:-1;;;13365:18:147;;;13358:46;13421:19;;19013:132:114;;;;;;;;;19155:61;19195:20;19155:39;:61::i;:::-;18915:308;:::o;24939:683::-;16008:27;;25058:4;15986:50;;;:21;:50;;;;;;;;16037:31;;;;15986:83;;;;;;;;25128:1;25078:51;25074:94;;-1:-1:-1;25152:5:114;;24939:683;-1:-1:-1;24939:683:114:o;25074:94::-;25541:15;25490:35;6566:30;;;6474:129;25490:35;7689;;16008:27;;15960:7;15986:50;;;:21;:50;;;;;;;;16037:31;;;;15986:83;;;;;;;;25372:102;;;;:::i;:::-;:153;;;;:::i;:::-;:184;25368:227;;;-1:-1:-1;25579:5:114;;24939:683;-1:-1:-1;24939:683:114:o;25368:227::-;-1:-1:-1;25611:4:114;;24939:683;-1:-1:-1;24939:683:114:o;33669:155::-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;-1:-1:-1;33775:25:114::1;:42:::0;33669:155::o;13996:317::-;14112:22;;;;;:63;;;14138:37;-1:-1:-1;;;;;;;;;;;14164:10:114;14138:7;:37::i;:::-;14091:144;;;;-1:-1:-1;;;14091:144:114;;;;;;;:::i;:::-;14245:61;14283:10;14295;14245:37;:61::i;2789:1624::-;4158:30:21;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:21;-1:-1:-1;;;4302:15:21;;;4301:16;;-1:-1:-1;;;;;4348:14:21;4279:19;4724:16;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4788:11;-1:-1:-1;;;;;4788:16:21;4803:1;4788:16;:50;;;;-1:-1:-1;4816:4:21;4808:25;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;-1:-1:-1;;;4906:23:21;;;;;;;;;;;4849:91;4949:18;;-1:-1:-1;;4949:18:21;4966:1;4949:18;;;4977:67;;;;5011:22;;-1:-1:-1;;;;5011:22:21;-1:-1:-1;;;5011:22:21;;;4977:67;3225:33:114::1;:31;:33::i;:::-;3268:15;:34:::0;;-1:-1:-1;;;;;;3268:34:114::1;-1:-1:-1::0;;;;;3268:34:114;::::1;::::0;;::::1;::::0;;;3312:26:::1;:56:::0;;;3378:33:::1;:70:::0;;;3458:59:::1;::::0;-1:-1:-1;;;3458:59:114;;:30:::1;::::0;:59:::1;::::0;3489:14;;3505:11;;3458:59:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3527:32;3548:10;3527:20;:32::i;:::-;3569;3590:10;3569:20;:32::i;:::-;3611:21;:46:::0;;;3667:16:::1;:36:::0;;-1:-1:-1;;;;;;3667:36:114::1;-1:-1:-1::0;;;;;3667:36:114;::::1;;::::0;;4242:19:::1;4259:2;4242:14:::0;:19:::1;:::i;:::-;4204:35;:57:::0;4304:19:::1;4321:2;4304:14:::0;:19:::1;:::i;:::-;4271:30;:52:::0;4361:1:::1;4333:25;:29:::0;;;4372:30:::1;:34:::0;5064:101:21;;;;5098:23;;-1:-1:-1;;;;5098:23:21;;;5140:14;;-1:-1:-1;14863:50:147;;5140:14:21;;14851:2:147;14836:18;5140:14:21;;;;;;;5064:101;4092:1079;;;;;2789:1624:114;;;;;;;:::o;33505:158::-;33592:7;33622:34;33636:19;:17;:19::i;33622:34::-;33615:41;;33505:158;:::o;32341:287::-;32445:7;32483:15;;:138;;-1:-1:-1;;;32483:138:114;;32542:4;32483:138;;;15126:51:147;15193:18;;;15186:34;;;-1:-1:-1;;;;;15256:32:147;;;15236:18;;;15229:60;32483:15:114;;;;:33;;15099:18:147;;32483:138:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7053:533::-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;6566:30:114;;7333:15:::1;::::0;:47:::1;::::0;-1:-1:-1;;;7333:47:114;;7374:4:::1;7333:47;::::0;::::1;6800:51:147::0;-1:-1:-1;;;;;7333:15:114;;::::1;::::0;:32:::1;::::0;6773:18:147;;7333:47:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:85;;;;:::i;:::-;7293:36;:125;7289:207;;7441:44;;-1:-1:-1::0;;;7441:44:114::1;;;;;;;;;;;7289:207;-1:-1:-1::0;7505:35:114::1;:74:::0;7053:533::o;4759:191:20:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:20;;;;;:24;;;;4759:191::o;17025:115:114:-;17087:46;17122:10;17087:34;:46::i;:::-;17025:115::o;5246:136:20:-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;18315:405:114:-;18452:37;-1:-1:-1;;;;;;;;;;;18478:10:114;18452:7;:37::i;:::-;18431:152;;;;-1:-1:-1;;;18431:152:114;;15824:2:147;18431:152:114;;;15806:21:147;15863:2;15843:18;;;15836:30;;;15902:34;15882:18;;;15875:62;15973:34;15953:18;;;15946:62;-1:-1:-1;;;16024:19:147;;;16017:35;16069:19;;18431:152:114;15622:472:147;18431:152:114;18627:31;;18593:66;;;;:33;:66;;;;;;;;18660:27;;18593:95;;;;;;;;:118;;;;;;;;;;;;;;;;;;;;18315:405::o;9951:929::-;10000:7;10392:17;10412:27;:25;:27::i;:::-;10392:47;;10449:17;10469:19;:17;:19::i;:::-;10498:26;10527:15;;:66;;-1:-1:-1;;;10527:66:114;;10587:4;10527:66;;;6800:51:147;10449:39:114;;-1:-1:-1;10498:26:114;;-1:-1:-1;;;;;10527:15:114;;;;:51;;6773:18:147;;10527:66:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10527:66:114;;;;;;;;;;;;:::i;:::-;10498:95;;10607:9;:16;10627:1;10607:21;10603:69;;10659:1;10644:17;;;;;9951:929;:::o;10603:69::-;10681:26;10771:9;:16;10745:9;10756;10728:38;;;;;;;;17230:19:147;;;17274:2;17265:12;;17258:28;17311:2;17302:12;;17073:247;10728:38:114;;;;;;;;;;;;;10718:49;;;;;;10710:58;;:77;;;;:::i;:::-;10681:106;;10844:9;10854:18;10844:29;;;;;;;;:::i;:::-;;;;;;;10837:36;;;;;;9951:929;:::o;6348:245:20:-;-1:-1:-1;;;;;6441:34:20;;966:10:25;6441:34:20;6437:102;;6498:30;;-1:-1:-1;;;6498:30:20;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;8946:165:114:-;9013:7;9039:15;;:65;;-1:-1:-1;;;9039:65:114;;9098:4;9039:65;;;6800:51:147;-1:-1:-1;;;;;9039:15:114;;;;:50;;6773:18:147;;9039:65:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8574:133::-;8622:7;8648:15;;:52;;-1:-1:-1;;;8648:52:114;;8694:4;8648:52;;;6800:51:147;-1:-1:-1;;;;;8648:15:114;;;;:37;;6773:18:147;;8648:52:114;6654:203:147;4837:570:114;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;5033:21:114::1;5057:15:::0;;:47:::1;::::0;-1:-1:-1;;;5057:47:114;;5098:4:::1;5057:47;::::0;::::1;6800:51:147::0;-1:-1:-1;;;;;5057:15:114;;::::1;::::0;:32:::1;::::0;6773:18:147;;5057:47:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5033:71:::0;-1:-1:-1;5033:71:114;5229:26:::1;5233:22:::0;5229:1:::1;:26;:::i;:::-;:43;5225:120;;5296:38;;-1:-1:-1::0;;;5296:38:114::1;;;;;;;;;;;5225:120;-1:-1:-1::0;;5354:21:114::1;:46:::0;4837:570::o;32634:607::-;32707:7;32909:15;;:76;;-1:-1:-1;;;32909:76:114;;32970:4;32909:76;;;6800:51:147;32707:7:114;;-1:-1:-1;;;;;32909:15:114;;:39;;6773:18:147;;32909:76:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32909:76:114;;;;;;;;;;;;:::i;:::-;32879:106;;32995:18;33032:9;33027:181;33051:10;:17;33047:1;:21;33027:181;;;33158:39;33176:5;33183:10;33194:1;33183:13;;;;;;;;:::i;:::-;;;;;;;33158:17;:39::i;:::-;33144:53;;;;:::i;:::-;;-1:-1:-1;33070:3:114;;33027:181;;;-1:-1:-1;33224:10:114;32634:607;-1:-1:-1;;;32634:607:114:o;32088:176::-;32184:7;32210:47;32227:19;:17;:19::i;:::-;32248:8;32210:16;:47::i;1866:326::-;1966:39;2362:4:20;1994:10:114;1966:7;:39::i;:::-;1945:120;;;;-1:-1:-1;;;1945:120:114;;;;;;;:::i;:::-;2080:9;2075:111;2099:8;:15;2095:1;:19;2075:111;;;2135:40;-1:-1:-1;;;;;;;;;;;2163:8:114;2172:1;2163:11;;;;;;;;:::i;:::-;;;;;;;2135:9;:40::i;:::-;2116:3;;2075:111;;;;1866:326;:::o;4161:214:22:-;2655:13;:11;:13::i;:::-;4276:36:::1;4294:17;4276;:36::i;:::-;4322:46;4344:17;4363:4;4322:21;:46::i;3708:134::-:0;3777:7;2926:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3708:134:22;:::o;33830:165:114:-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;-1:-1:-1;33941:30:114::1;:47:::0;33830:165::o;8131:129::-;8180:7;8206:15;;:47;;-1:-1:-1;;;8206:47:114;;8247:4;8206:47;;;6800:51:147;-1:-1:-1;;;;;8206:15:114;;;;:32;;6773:18:147;;8206:47:114;6654:203:147;9197:414:114;9255:7;9471:15;;:47;;-1:-1:-1;;;9471:47:114;;9512:4;9471:47;;;6800:51:147;9296:15:114;;9255:7;;-1:-1:-1;;;;;9471:15:114;;;;:32;;6773:18:147;;9471:47:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9457:61;;:11;:61;:::i;:::-;9426:92;;9582:21;;9559:20;:44;;;;:::i;:::-;9535:69;;:20;:69;:::i;:::-;9528:76;;;;9197:414;:::o;14319:430::-;14451:22;;;;;:63;;;14477:37;-1:-1:-1;;;;;;;;;;;14503:10:114;14477:7;:37::i;:::-;14430:144;;;;-1:-1:-1;;;14430:144:114;;;;;;;:::i;:::-;14589:9;14584:159;14608:21;:28;14604:1;:32;14584:159;;;14657:75;14695:10;14707:21;14729:1;14707:24;;;;;;;;:::i;:::-;;;;;;;14657:37;:75::i;:::-;14638:3;;14584:159;;8745:131;8795:7;8821:15;;:48;;-1:-1:-1;;;8821:48:114;;8863:4;8821:48;;;6800:51:147;-1:-1:-1;;;;;8821:15:114;;;;:33;;6773:18:147;;8821:48:114;6654:203:147;30780:311:114;30901:7;30939:15;;:145;;-1:-1:-1;;;30939:145:114;;30989:4;30939:145;;;18381:51:147;18448:18;;;18441:34;;;-1:-1:-1;;;;;18511:32:147;;;18491:18;;;18484:60;18580:32;;;18560:18;;;18553:60;30939:15:114;;;;:24;;18353:19:147;;30939:145:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30920:164;30780:311;-1:-1:-1;;;;30780:311:114:o;528:89:117:-;4158:30:21;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:21;-1:-1:-1;;;4302:15:21;;;4301:16;;-1:-1:-1;;;;;4348:14:21;4279:19;4724:16;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4788:11;-1:-1:-1;;;;;4788:16:21;4803:1;4788:16;:50;;;;-1:-1:-1;4816:4:21;4808:25;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;-1:-1:-1;;;4906:23:21;;;;;;;;;;;4849:91;4949:18;;-1:-1:-1;;4949:18:21;4966:1;4949:18;;;4977:67;;;;5011:22;;-1:-1:-1;;;;5011:22:21;-1:-1:-1;;;5011:22:21;;;4977:67;587:23:117::1;:21;:23::i;:::-;5068:14:21::0;5064:101;;;5098:23;;-1:-1:-1;;;;5098:23:21;;;5140:14;;-1:-1:-1;14863:50:147;;5140:14:21;;14851:2:147;14836:18;5140:14:21;;;;;;;5064:101;4092:1079;;;;;528:89:117:o;2198:136:114:-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;2290:37:114::1;-1:-1:-1::0;;;;;;;;;;;2318:8:114::1;2290:9;:37::i;8331:207::-:0;8381:7;8483:15;;:47;;-1:-1:-1;;;8483:47:114;;8524:4;8483:47;;;6800:51:147;8422:15:114;;-1:-1:-1;;;;;8483:15:114;;:32;;6773:18:147;;8483:47:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8469:61;;:11;:61;:::i;:::-;8454:77;;:11;:77;:::i;:::-;8447:84;;;8331:207;:::o;3732::20:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:20;;;;;;;;-1:-1:-1;;;;;3901:31:20;;;;;;;;;;;;;;;3732:207::o;4465:195:114:-;4523:39;2362:4:20;4551:10:114;4523:7;:39::i;:::-;4515:89;;;;-1:-1:-1;;;4515:89:114;;18826:2:147;4515:89:114;;;18808:21:147;18865:2;18845:18;;;18838:30;18904:34;18884:18;;;18877:62;-1:-1:-1;;;18955:18:147;;;18948:35;19000:19;;4515:89:114;18624:401:147;4515:89:114;4614:15;;;:39;;;-1:-1:-1;;;4614:39:114;;;;-1:-1:-1;;;;;4614:15:114;;;;:37;;:39;;;;;;;;;;:15;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;15017:159;15081:7;15143:26;;15107:33;;:62;;;;:::i;1623:237::-;1708:39;2362:4:20;1736:10:114;1708:7;:39::i;:::-;1687:120;;;;-1:-1:-1;;;1687:120:114;;;;;;;:::i;:::-;1817:36;-1:-1:-1;;;;;;;;;;;1845:7:114;1817:9;:36::i;34580:177::-;34683:15;;:66;;-1:-1:-1;;;34683:66:114;;34743:4;34683:66;;;6800:51:147;34648:16:114;;-1:-1:-1;;;;;34683:15:114;;:51;;6773:18:147;;34683:66:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34683:66:114;;;;;;;;;;;;:::i;31523:484::-;31625:7;31674:15;;:76;;-1:-1:-1;;;31674:76:114;;31735:4;31674:76;;;6800:51:147;31625:7:114;;-1:-1:-1;;;;;31674:15:114;;:39;;6773:18:147;;31674:76:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31674:76:114;;;;;;;;;;;;:::i;:::-;31644:106;;31760:18;31797:9;31792:182;31816:10;:17;31812:1;:21;31792:182;;;31923:40;31932:5;31939:10;31950:1;31939:13;;;;;;;;:::i;:::-;;;;;;;31954:8;31923;:40::i;:::-;31909:54;;;;:::i;:::-;;-1:-1:-1;31835:3:114;;31792:182;;;-1:-1:-1;31990:10:114;31523:484;-1:-1:-1;;;;31523:484:114:o;31191:198::-;31306:7;31332:50;31341:19;:17;:19::i;:::-;31362:9;31373:8;31332;:50::i;2340:226::-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;2452:9:114::1;2447:113;2471:9;:16;2467:1;:20;2447:113;;;2508:41;-1:-1:-1::0;;;;;;;;;;;2536:9:114::1;2546:1;2536:12;;;;;;;;:::i;2508:41::-;2489:3;;2447:113;;11026:250:::0;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;11211:15:114::1;::::0;:58:::1;::::0;-1:-1:-1;;;11211:58:114;;11253:4:::1;11211:58;::::0;::::1;19204:51:147::0;19271:18;;;19264:34;;;-1:-1:-1;;;;;11211:15:114;;::::1;::::0;:33:::1;::::0;19177:18:147;;11211:58:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11026:250:::0;;:::o;7737:132::-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;-1:-1:-1;7830:22:114::1;:32:::0;;-1:-1:-1;;7830:32:114::1;::::0;::::1;;::::0;;;::::1;::::0;;7737:132::o;33319:180::-;33417:7;33443:49;33461:19;:17;:19::i;:::-;33482:9;33443:17;:49::i;5662:138:20:-;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;5787:464:114:-:0;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;7689:35:114;;6008:15:::1;::::0;:47:::1;::::0;-1:-1:-1;;;6008:47:114;;6049:4:::1;6008:47;::::0;::::1;6800:51:147::0;-1:-1:-1;;;;;6008:15:114;;::::1;::::0;:32:::1;::::0;6773:18:147;;6008:47:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:90;;;;:::i;:::-;5973:31;:125;5969:202;;6121:39;;-1:-1:-1::0;;;6121:39:114::1;;;;;;;;;;;5969:202;-1:-1:-1::0;6180:30:114::1;:64:::0;5787:464::o;4148:103:20:-;4214:30;4225:4;966:10:25;4214::20;:30::i;11817:2174:114:-;12062:27;;12050:40;;;;:11;:40;;;;;;;;-1:-1:-1;;;;;12050:50:114;;;;;;;;;:57;:62;12046:113;;12133:26;;-1:-1:-1;;;12133:26:114;;;;;;;;;;;12046:113;12630:27;;12601:26;;12565:33;;:62;;12601:26;12565:62;:::i;:::-;:92;12561:156;;;12680:26;;-1:-1:-1;;;12680:26:114;;;;;;;;;;;12561:156;13081:27;;13051:58;;;;:29;:58;;;;;;:63;;13047:172;;13191:17;:15;:17::i;:::-;13160:27;;13130:58;;;;:29;:58;;;;;:78;13047:172;13287:27;;13275:40;;;;:11;:40;;;;;;;;-1:-1:-1;;;;;13275:50:114;;;;;;;;;;:73;;;;;;;;;;;;;;;;;;;;;;;;13425:106;;13515:15;13425:27;:106::i;:::-;13593:38;13634:43;13668:8;13634:33;:43::i;:::-;13703:27;;13687:44;;;;:15;:44;;;;;;;;13732:31;;;;13687:77;;;;;;;:111;;13593:84;;-1:-1:-1;13593:84:114;;13687:77;;:44;:111;;13593:84;;13687:111;:::i;:::-;;;;-1:-1:-1;;13857:28:114;;;;;13899:31;;;;;13814:170;;19483:25:147;;;19524:18;;;19517:34;;;13857:28:114;;13814:170;;19456:18:147;13814:170:114;;;;;;;11963:2028;11817:2174;;:::o;9071:205:21:-;9129:30;;3147:66;9186:27;8819:122;738:128:117;6929:20:21;:18;:20::i;:::-;817:42:117::1;2362:4:20;848:10:117;817;:42::i;17754:485:114:-:0;18153:67;18182:33;;18218:1;18182:37;;;;:::i;:::-;18153:28;:67::i;:::-;18146:87;;17754:485;:::o;7270:387:20:-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:20;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:20;;;;;;;;;:38;;-1:-1:-1;;7475:38:20;7509:4;7475:38;;;7559:12;966:10:25;;887:96;7559:12:20;-1:-1:-1;;;;;7532:40:20;7550:7;-1:-1:-1;;;;;7532:40:20;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7894:388;7972:4;-1:-1:-1;;;;;;;;;;;8061:22:20;8069:4;8075:7;8061;:22::i;:::-;8057:219;;;8133:5;8099:14;;;;;;;;;;;-1:-1:-1;;;;;8099:31:20;;;;;;;;;;:39;;-1:-1:-1;;8099:39:20;;;8157:40;966:10:25;;8099:14:20;;8157:40;;8133:5;8157:40;8218:4;8211:11;;;;;4578:312:22;4658:4;-1:-1:-1;;;;;4667:6:22;4650:23;;;:120;;;4764:6;-1:-1:-1;;;;;4728:42:22;:32;-1:-1:-1;;;;;;;;;;;1519:53:41;-1:-1:-1;;;;;1519:53:41;;1441:138;4728:32:22;-1:-1:-1;;;;;4728:42:22;;;4650:120;4633:251;;;4844:29;;-1:-1:-1;;;4844:29:22;;;;;;;;;;;991:117:117;2362:4:20;3191:16;2362:4;3191:10;:16::i;6032:538:22:-;6149:17;-1:-1:-1;;;;;6131:50:22;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6131:52:22;;;;;;;;-1:-1:-1;;6131:52:22;;;;;;;;;;;;:::i;:::-;;;6127:437;;6493:60;;-1:-1:-1;;;6493:60:22;;-1:-1:-1;;;;;6818:32:147;;6493:60:22;;;6800:51:147;6773:18;;6493:60:22;6654:203:147;6127:437:22;-1:-1:-1;;;;;;;;;;;6225:40:22;;6221:120;;6292:34;;-1:-1:-1;;;6292:34:22;;;;;1507:25:147;;;1480:18;;6292:34:22;1361:177:147;6221:120:22;6354:54;6384:17;6403:4;6354:29;:54::i;5007:213::-;5081:4;-1:-1:-1;;;;;5090:6:22;5073:23;;5069:145;;5174:29;;-1:-1:-1;;;5174:29:22;;;;;;;;;;;623:109:117;6929:20:21;:18;:20::i;:::-;692:33:117::1;:31;:33::i;4381:197:20:-:0;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:20;;-1:-1:-1;;;;;19222:32:147;;4514:47:20;;;19204:51:147;19271:18;;;19264:34;;;19177:18;;4514:47:20;19030:274:147;16150:443:114;16265:29;;;;:21;:29;;;;;;;;:41;;;;;;;;;:46;16261:263;;16150:443;;;:::o;16261:263::-;16395:9;16408:1;16395:14;16391:133;;16150:443;;;:::o;16391:133::-;16533:29;;;;:21;:29;;;;;;;;:41;;;;;;;;:53;16150:443::o;7082:141:21:-;7149:17;:15;:17::i;:::-;7144:73;;7189:17;;-1:-1:-1;;;7189:17:21;;;;;;;;;;;25967:4503:114;26049:4;26091:47;;;:29;:47;;;;;;16979:33;;26148:1014;;;26406:31;26440:29;26406:31;26470:18;26487:1;26470:16;:18;:::i;:::-;26440:49;;;;;;;;;;;;26406:83;;26525:23;26507:15;:41;26503:649;;;26571:32;26606:37;:35;:37::i;:::-;26571:72;;26771:9;26766:313;26790:15;:22;26786:1;:26;26766:313;;;26845:11;:29;26857:16;26845:29;;;;;;;;;;;:49;26875:15;26891:1;26875:18;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;26845:49:114;-1:-1:-1;;;;;26845:49:114;;;;;;;;;;;;:56;;;26905:1;26845:61;26841:220;;26934:47;;;;:29;:47;;;;;:73;;;27033:5;;26841:220;26814:3;;26766:313;;;;27114:23;27096:41;;26553:599;26503:649;26287:875;26148:1014;27480:15;27458:19;:17;:19::i;:::-;:37;27451:249;;;27674:15;:13;:15::i;:::-;27451:249;;;27885:21;27948:1;27914:30;27928:15;27914:13;:30::i;:::-;27910:34;;:1;:34;:::i;:::-;27909:40;;;;:::i;:::-;:44;;27952:1;27909:44;:::i;:::-;27885:68;;27963:26;27992:37;:35;:37::i;:::-;27963:66;;28291:31;28345:9;28340:1688;28364:9;:16;28360:1;:20;28340:1688;;;28401:16;28420:9;28430:1;28420:12;;;;;;;;:::i;:::-;;;;;;;;;;;;28446:48;28497:29;;;:11;:29;;;;;;-1:-1:-1;;;;;28497:39:114;;;;;;;;;;28446:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28420:12;;-1:-1:-1;28446:90:114;28739:47;;28735:61;;28788:8;;;;28735:61;28915:27;;28866:30;28899:44;;;:15;:44;;;;;;;;28944:31;;;;28899:77;;;;;;;;28995:39;;;28991:1027;;16008:27;;29242:17;15986:50;;;:21;:50;;;;;;;;16037:31;;;;15986:83;;;;;;;;29423:35;;29411:47;;15986:83;29411:47;:::i;:::-;29393:15;:65;29389:76;;;29460:5;;;;;;29389:76;29484:66;29517:20;29539:10;29484:32;:66::i;:::-;-1:-1:-1;29597:4:114;;25967:4503;-1:-1:-1;;;;;;;;;;25967:4503:114:o;28991:1027::-;28387:1641;;;28340:1688;28382:3;;28340:1688;;;;30241:26;30240:27;:70;;;;;30291:19;:17;:19::i;:::-;30271:17;:15;:17::i;:::-;:39;30240:70;30236:206;;;30326:15;:13;:15::i;:::-;-1:-1:-1;30362:4:114;;25967:4503;-1:-1:-1;;;;;25967:4503:114:o;30236:206::-;-1:-1:-1;30458:5:114;;25967:4503;-1:-1:-1;;;;;25967:4503:114:o;2264:344:41:-;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:41;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;2454:148::-;2573:18;:16;:18::i;8485:120:21:-;8535:4;8558:26;:24;:26::i;:::-;:40;-1:-1:-1;;;8558:40:21;;;;;;-1:-1:-1;8485:120:21:o;22765:1897:114:-;22877:22;22902:19;:17;:19::i;:::-;22877:44;;22931:26;22960:37;:35;:37::i;:::-;22931:66;;23039:9;23034:1580;23058:9;:16;23054:1;:20;23034:1580;;;23152:1;23099:36;;;:20;:36;;;;;23136:12;;23152:1;;23136:9;;23146:1;;23136:12;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23099:50:114;-1:-1:-1;;;;;23099:50:114;;;;;;;;;;;;;:54;23095:697;;;23253:14;23351:47;23385:9;23395:1;23385:12;;;;;;;;:::i;:::-;;;;;;;23351:33;:47::i;:::-;23323:25;;23270:20;:36;23291:14;23270:36;;;;;;;;;;;:50;23307:9;23317:1;23307:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23270:50:114;-1:-1:-1;;;;;23270:50:114;;;;;;;;;;;;;:78;;;;:::i;:::-;:128;;;;:::i;:::-;23543:15;;23576:12;;23253:145;;-1:-1:-1;;;;;;23543:15:114;;:32;;23576:9;;23586:1;;23576:12;;;;;;:::i;:::-;;;;;;;;;;;23598:16;;23543:72;;-1:-1:-1;;;;;;23543:72:114;;;;;;;-1:-1:-1;;;;;15144:32:147;;;23543:72:114;;;15126:51:147;15193:18;;;15186:34;;;23598:16:114;;15236:18:147;;;15229:60;15099:18;;23543:72:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23155:637;23095:697;23912:1;23854:41;;;:25;:41;;;;;23896:12;;23912:1;;23896:9;;23906:1;;23896:12;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23854:55:114;-1:-1:-1;;;;;23854:55:114;;;;;;;;;;;;;:59;23850:754;;;23933:14;24041:47;24075:9;24085:1;24075:12;;;;;;;;:::i;24041:47::-;24008:30;;23950:25;:41;23976:14;23950:41;;;;;;;;;;;:55;23992:9;24002:1;23992:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23950:55:114;-1:-1:-1;;;;;23950:55:114;;;;;;;;;;;;;:88;;;;:::i;:::-;:138;;;;:::i;:::-;24106:15;;24139:12;;23933:155;;-1:-1:-1;;;;;;24106:15:114;;:32;;24139:9;;24149:1;;24139:12;;;;;;:::i;:::-;;;;;;;;;;;24161:16;;24106:72;;-1:-1:-1;;;;;;24106:72:114;;;;;;;-1:-1:-1;;;;;15144:32:147;;;24106:72:114;;;15126:51:147;15193:18;;;15186:34;;;24161:16:114;;15236:18:147;;;15229:60;15099:18;;24106:72:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23915:689;23850:754;23076:3;;23034:1580;;;-1:-1:-1;24624:15:114;;;:31;;;-1:-1:-1;;;24624:31:114;;;;-1:-1:-1;;;;;24624:15:114;;;;:29;;:31;;;;;;;;;;:15;;:31;;;;;;;;;;19627:2891;19756:29;19788:19;:17;:19::i;:::-;20082:27;;20052:58;;;;:29;:58;;;;;;19756:51;;-1:-1:-1;20052:83:114;;20048:155;;20158:34;;-1:-1:-1;;;20158:34:114;;;;;;;;;;;20048:155;20352:27;;:31;;20382:1;;20352:31;:::i;:::-;20315:33;;:68;20311:140;;20406:34;;-1:-1:-1;;;20406:34:114;;;;;;;;;;;20311:140;20551:26;20580:37;:35;:37::i;:::-;20551:66;;20632:9;20627:269;20651:9;:16;20647:1;:20;20627:269;;;20761:20;:31;;;20692:11;:40;20704:20;:27;;;20692:40;;;;;;;;;;;:54;20733:9;20743:1;20733:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;20692:54:114;-1:-1:-1;;;;;20692:54:114;;;;;;;;;;;;:65;;;:100;20688:198;;20812:20;:43;20833:21;20812:43;;;;;;;;;;;:57;20856:9;20866:1;20856:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;20812:57:114;-1:-1:-1;;;;;20812:57:114;;;;;;;;;;;;;:59;;;;;;;;;:::i;:::-;;;;;;20688:198;20669:3;;20627:269;;;;20952:60;20991:20;20952:38;:60::i;:::-;20947:900;;21137:48;;;;:25;:48;;;;;;;;-1:-1:-1;;;;;21137:58:114;;;;;;;;;:63;;21199:1;;21137:48;:63;;21199:1;;21137:63;:::i;:::-;;;;-1:-1:-1;20947:900:114;;-1:-1:-1;20947:900:114;;21731:8;-1:-1:-1;;;;;21709:30:114;:18;:16;:18::i;:::-;-1:-1:-1;;;;;21709:30:114;;21705:132;;21759:48;;;;:25;:48;;;;;;;;-1:-1:-1;;;;;21759:58:114;;;;;;;;;:63;;21821:1;;21759:48;:63;;21821:1;;21759:63;:::i;:::-;;;;-1:-1:-1;;21705:132:114;21891:31;;21857:66;;;;:33;:66;;;;;;;;21924:27;;21857:95;;;;;;;:118;;;;;;;;;;;;;;;;;;;;;;;;;;;21985:33;:63;;;22058:44;;;:15;:44;;;;;:55;;-1:-1:-1;;;;;;22058:55:114;-1:-1:-1;;;;;22058:55:114;;;;;22152:27;;22123:57;;:28;:57;;;;;22183:12;22123:72;;22237:27;;22205:60;;:31;:60;;;;;;22268:15;22205:78;;22387:28;22429:31;;22474:27;;22350:161;;19483:25:147;;;19524:18;;;19517:34;;;;22350:161:114;;19456:18:147;22350:161:114;;;;;;;19746:2772;;19627:2891;;:::o;1671:281:41:-;1748:17;-1:-1:-1;;;;;1748:29:41;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:41;;-1:-1:-1;;;;;6818:32:147;;1805:47:41;;;6800:51:147;6773:18;;1805:47:41;6654:203:147;1744:119:41;-1:-1:-1;;;;;;;;;;;1872:73:41;;-1:-1:-1;;;;;;1872:73:41;-1:-1:-1;;;;;1872:73:41;;;;;;;;;;1671:281::o;3916:253:54:-;3999:12;4024;4038:23;4065:6;-1:-1:-1;;;;;4065:19:54;4085:4;4065:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4023:67;;;;4107:55;4134:6;4142:7;4151:10;4107:26;:55::i;:::-;4100:62;3916:253;-1:-1:-1;;;;;3916:253:54:o;6113:122:41:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:41;;;;;;;;;;;4437:582:54;4581:12;4610:7;4605:408;;4633:19;4641:10;4633:7;:19::i;:::-;4605:408;;;4857:17;;:22;:49;;;;-1:-1:-1;;;;;;4883:18:54;;;:23;4857:49;4853:119;;;4933:24;;-1:-1:-1;;;4933:24:54;;-1:-1:-1;;;;;6818:32:147;;4933:24:54;;;6800:51:147;6773:18;;4933:24:54;6654:203:147;4853:119:54;-1:-1:-1;4992:10:54;4985:17;;5559:487;5690:17;;:21;5686:354;;5887:10;5881:17;5943:15;5930:10;5926:2;5922:19;5915:44;5686:354;6010:19;;-1:-1:-1;;;6010:19:54;;;;;;;;;;;14:286:147;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:147;;209:43;;199:71;;266:1;263;256:12;497:466;574:6;582;590;643:2;631:9;622:7;618:23;614:32;611:52;;;659:1;656;649:12;611:52;-1:-1:-1;;704:23:147;;;824:2;809:18;;796:32;;-1:-1:-1;927:2:147;912:18;;;899:32;;497:466;-1:-1:-1;497:466:147:o;1543:226::-;1602:6;1655:2;1643:9;1634:7;1630:23;1626:32;1623:52;;;1671:1;1668;1661:12;1623:52;-1:-1:-1;1716:23:147;;1543:226;-1:-1:-1;1543:226:147:o;1774:127::-;1835:10;1830:3;1826:20;1823:1;1816:31;1866:4;1863:1;1856:15;1890:4;1887:1;1880:15;1906:275;1977:2;1971:9;2042:2;2023:13;;-1:-1:-1;;2019:27:147;2007:40;;-1:-1:-1;;;;;2062:34:147;;2098:22;;;2059:62;2056:88;;;2124:18;;:::i;:::-;2160:2;2153:22;1906:275;;-1:-1:-1;1906:275:147:o;2186:727::-;2253:5;2301:4;2289:9;2284:3;2280:19;2276:30;2273:50;;;2319:1;2316;2309:12;2273:50;2372:2;2366:9;2414:4;2402:17;;-1:-1:-1;;;;;2434:34:147;;2470:22;;;2431:62;2428:88;;;2496:18;;:::i;:::-;2532:2;2525:22;;;2616:23;;2648;;2744:2;2729:18;;;2716:32;2764:15;;;2757:32;2847:18;;;2834:32;2882:15;;;2875:32;;;;-1:-1:-1;2565:6:147;2186:727;-1:-1:-1;2186:727:147:o;2918:254::-;3016:6;3069:2;3057:9;3048:7;3044:23;3040:32;3037:52;;;3085:1;3082;3075:12;3037:52;3108:58;3158:7;3147:9;3108:58;:::i;3177:149::-;-1:-1:-1;;;;;3270:31:147;;3260:42;;3250:70;;3316:1;3313;3306:12;3331:183;3391:4;-1:-1:-1;;;;;3416:6:147;3413:30;3410:56;;;3446:18;;:::i;:::-;-1:-1:-1;3491:1:147;3487:14;3503:4;3483:25;;3331:183::o;3519:762::-;3573:5;3626:3;3619:4;3611:6;3607:17;3603:27;3593:55;;3644:1;3641;3634:12;3593:55;3684:6;3671:20;3711:64;3727:47;3767:6;3727:47;:::i;:::-;3711:64;:::i;:::-;3799:3;3823:6;3818:3;3811:19;3855:4;3850:3;3846:14;3839:21;;3916:4;3906:6;3903:1;3899:14;3891:6;3887:27;3883:38;3869:52;;3944:3;3936:6;3933:15;3930:35;;;3961:1;3958;3951:12;3930:35;3997:4;3989:6;3985:17;4011:239;4027:6;4022:3;4019:15;4011:239;;;4109:3;4096:17;4126:49;4169:5;4126:49;:::i;:::-;4188:18;;4235:4;4226:14;;;;4044;4011:239;;;-1:-1:-1;4268:7:147;3519:762;-1:-1:-1;;;;;3519:762:147:o;4286:1170::-;4450:6;4458;4466;4474;4482;4490;4498;4551:3;4539:9;4530:7;4526:23;4522:33;4519:53;;;4568:1;4565;4558:12;4519:53;4607:9;4594:23;4626:49;4669:5;4626:49;:::i;:::-;4694:5;-1:-1:-1;4772:2:147;4757:18;;4744:32;;-1:-1:-1;4875:2:147;4860:18;;4847:32;;-1:-1:-1;4978:2:147;4963:18;;4950:32;;-1:-1:-1;5059:3:147;5044:19;;5031:33;-1:-1:-1;;;;;5076:30:147;;5073:50;;;5119:1;5116;5109:12;5073:50;5142:61;5195:7;5186:6;5175:9;5171:22;5142:61;:::i;:::-;5132:71;-1:-1:-1;;5276:3:147;5261:19;;5248:33;;-1:-1:-1;5359:3:147;5344:19;;5331:33;5373:51;5331:33;5373:51;:::i;:::-;5443:7;5433:17;;;4286:1170;;;;;;;;;;:::o;5461:385::-;5529:6;5537;5590:2;5578:9;5569:7;5565:23;5561:32;5558:52;;;5606:1;5603;5596:12;5558:52;5651:23;;;-1:-1:-1;5750:2:147;5735:18;;5722:32;5763:51;5722:32;5763:51;:::i;:::-;5833:7;5823:17;;;5461:385;;;;;:::o;6862:346::-;6930:6;6938;6991:2;6979:9;6970:7;6966:23;6962:32;6959:52;;;7007:1;7004;6997:12;6959:52;-1:-1:-1;;7052:23:147;;;7172:2;7157:18;;;7144:32;;-1:-1:-1;6862:346:147:o;7537:265::-;7596:6;7649:2;7637:9;7628:7;7624:23;7620:32;7617:52;;;7665:1;7662;7655:12;7617:52;7704:9;7691:23;7723:49;7766:5;7723:49;:::i;7807:348::-;7891:6;7944:2;7932:9;7923:7;7919:23;7915:32;7912:52;;;7960:1;7957;7950:12;7912:52;8000:9;7987:23;-1:-1:-1;;;;;8025:6:147;8022:30;8019:50;;;8065:1;8062;8055:12;8019:50;8088:61;8141:7;8132:6;8121:9;8117:22;8088:61;:::i;8160:918::-;8237:6;8245;8298:2;8286:9;8277:7;8273:23;8269:32;8266:52;;;8314:1;8311;8304:12;8266:52;8353:9;8340:23;8372:49;8415:5;8372:49;:::i;:::-;8440:5;-1:-1:-1;8496:2:147;8481:18;;8468:32;-1:-1:-1;;;;;8512:30:147;;8509:50;;;8555:1;8552;8545:12;8509:50;8578:22;;8631:4;8623:13;;8619:27;-1:-1:-1;8609:55:147;;8660:1;8657;8650:12;8609:55;8700:2;8687:16;-1:-1:-1;;;;;8718:6:147;8715:30;8712:56;;;8748:18;;:::i;:::-;8790:57;8837:2;8814:17;;-1:-1:-1;;8810:31:147;8843:2;8806:40;8790:57;:::i;:::-;8870:6;8863:5;8856:21;8918:7;8913:2;8904:6;8900:2;8896:15;8892:24;8889:37;8886:57;;;8939:1;8936;8929:12;8886:57;8994:6;8989:2;8985;8981:11;8976:2;8969:5;8965:14;8952:49;9046:1;9041:2;9032:6;9025:5;9021:18;9017:27;9010:38;9067:5;9057:15;;;;;8160:918;;;;;:::o;9083:965::-;9206:6;9259:2;9247:9;9238:7;9234:23;9230:32;9227:52;;;9275:1;9272;9265:12;9227:52;9315:9;9302:23;-1:-1:-1;;;;;9340:6:147;9337:30;9334:50;;;9380:1;9377;9370:12;9334:50;9403:22;;9456:4;9448:13;;9444:27;-1:-1:-1;9434:55:147;;9485:1;9482;9475:12;9434:55;9525:2;9512:16;9548:64;9564:47;9604:6;9564:47;:::i;9548:64::-;9634:3;9658:6;9653:3;9646:19;9690:2;9685:3;9681:12;9674:19;;9748:2;9740:4;9732:6;9728:17;9724:2;9720:26;9716:35;9702:49;;9774:7;9766:6;9763:19;9760:39;;;9795:1;9792;9785:12;9760:39;9827:2;9823;9819:11;9808:22;;9839:179;9855:6;9850:3;9847:15;9839:179;;;9923:52;9967:7;9962:3;9923:52;:::i;:::-;9918:3;9911:65;10005:2;10000:3;9996:12;9989:19;;9881:4;9876:3;9872:14;9865:21;;9839:179;;;10037:5;9083:965;-1:-1:-1;;;;;;9083:965:147:o;10053:544::-;10130:6;10138;10146;10199:2;10187:9;10178:7;10174:23;10170:32;10167:52;;;10215:1;10212;10205:12;10167:52;10260:23;;;-1:-1:-1;10359:2:147;10344:18;;10331:32;10372:51;10331:32;10372:51;:::i;:::-;10442:7;-1:-1:-1;10501:2:147;10486:18;;10473:32;10514:51;10473:32;10514:51;:::i;:::-;10584:7;10574:17;;;10053:544;;;;;:::o;10602:446::-;10655:3;10693:5;10687:12;10720:6;10715:3;10708:19;10752:4;10747:3;10743:14;10736:21;;10791:4;10784:5;10780:16;10814:1;10824:199;10838:6;10835:1;10832:13;10824:199;;;10903:13;;-1:-1:-1;;;;;10899:39:147;10887:52;;10968:4;10959:14;;;;10996:17;;;;10935:1;10853:9;10824:199;;;-1:-1:-1;11039:3:147;;10602:446;-1:-1:-1;;;;10602:446:147:o;11053:261::-;11232:2;11221:9;11214:21;11195:4;11252:56;11304:2;11293:9;11289:18;11281:6;11252:56;:::i;11319:418::-;11468:2;11457:9;11450:21;11431:4;11500:6;11494:13;11543:6;11538:2;11527:9;11523:18;11516:34;11602:6;11597:2;11589:6;11585:15;11580:2;11569:9;11565:18;11559:50;11658:1;11653:2;11644:6;11633:9;11629:22;11625:31;11618:42;11728:2;11721;11717:7;11712:2;11704:6;11700:15;11696:29;11685:9;11681:45;11677:54;11669:62;;;11319:418;;;;:::o;11742:424::-;11810:6;11818;11871:2;11859:9;11850:7;11846:23;11842:32;11839:52;;;11887:1;11884;11877:12;11839:52;11926:9;11913:23;11945:49;11988:5;11945:49;:::i;:::-;12013:5;-1:-1:-1;12070:2:147;12055:18;;12042:32;12083:51;12042:32;12083:51;:::i;12522:273::-;12578:6;12631:2;12619:9;12610:7;12606:23;12602:32;12599:52;;;12647:1;12644;12637:12;12599:52;12686:9;12673:23;12739:5;12732:13;12725:21;12718:5;12715:32;12705:60;;12761:1;12758;12751:12;13451:127;13512:10;13507:3;13503:20;13500:1;13493:31;13543:4;13540:1;13533:15;13567:4;13564:1;13557:15;13583:125;13648:9;;;13669:10;;;13666:36;;;13682:18;;:::i;13713:398::-;13915:2;13897:21;;;13954:2;13934:18;;;13927:30;13993:34;13988:2;13973:18;;13966:62;-1:-1:-1;;;14059:2:147;14044:18;;14037:32;14101:3;14086:19;;13713:398::o;14116:332::-;14323:6;14312:9;14305:25;14366:2;14361;14350:9;14346:18;14339:30;14286:4;14386:56;14438:2;14427:9;14423:18;14415:6;14386:56;:::i;14453:127::-;14514:10;14509:3;14505:20;14502:1;14495:31;14545:4;14542:1;14535:15;14569:4;14566:1;14559:15;14585:120;14625:1;14651;14641:35;;14656:18;;:::i;:::-;-1:-1:-1;14690:9:147;;14585:120::o;15300:184::-;15370:6;15423:2;15411:9;15402:7;15398:23;15394:32;15391:52;;;15439:1;15436;15429:12;15391:52;-1:-1:-1;15462:16:147;;15300:184;-1:-1:-1;15300:184:147:o;15489:128::-;15556:9;;;15577:11;;;15574:37;;;15591:18;;:::i;16099:969::-;16194:6;16247:2;16235:9;16226:7;16222:23;16218:32;16215:52;;;16263:1;16260;16253:12;16215:52;16296:9;16290:16;-1:-1:-1;;;;;16321:6:147;16318:30;16315:50;;;16361:1;16358;16351:12;16315:50;16384:22;;16437:4;16429:13;;16425:27;-1:-1:-1;16415:55:147;;16466:1;16463;16456:12;16415:55;16499:2;16493:9;16522:64;16538:47;16578:6;16538:47;:::i;16522:64::-;16608:3;16632:6;16627:3;16620:19;16664:2;16659:3;16655:12;16648:19;;16719:2;16709:6;16706:1;16702:14;16698:2;16694:23;16690:32;16676:46;;16745:7;16737:6;16734:19;16731:39;;;16766:1;16763;16756:12;16731:39;16798:2;16794;16790:11;16779:22;;16810:228;16826:6;16821:3;16818:15;16810:228;;;16899:3;16893:10;16916:49;16959:5;16916:49;:::i;:::-;16978:18;;17025:2;16843:12;;;;17016;;;;16810:228;;17325:112;17357:1;17383;17373:35;;17388:18;;:::i;:::-;-1:-1:-1;17422:9:147;;17325:112::o;17442:127::-;17503:10;17498:3;17494:20;17491:1;17484:31;17534:4;17531:1;17524:15;17558:4;17555:1;17548:15;17574:168;17647:9;;;17678;;17695:15;;;17689:22;;17675:37;17665:71;;17716:18;;:::i;17747:398::-;17949:2;17931:21;;;17988:2;17968:18;;;17961:30;18027:34;18022:2;18007:18;;18000:62;-1:-1:-1;;;18093:2:147;18078:18;;18071:32;18135:3;18120:19;;17747:398::o;20030:135::-;20069:3;20090:17;;;20087:43;;20110:18;;:::i;:::-;-1:-1:-1;20157:1:147;20146:13;;20030:135::o;20170:301::-;20299:3;20337:6;20331:13;20383:6;20376:4;20368:6;20364:17;20359:3;20353:37;20445:1;20409:16;;20434:13;;;-1:-1:-1;20409:16:147;20170:301;-1:-1:-1;20170:301:147:o","linkReferences":{},"immutableReferences":{"39766":[{"start":9697,"length":32},{"start":9738,"length":32},{"start":10059,"length":32}]}},"methodIdentifiers":{"COMMITMENT_ADMIN()":"80e460f0","DEFAULT_ADMIN_ROLE()":"a217fddf","TRUSTED_ATTESTER()":"5db916ab","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","acceptGenesisCeremony()":"92a2ebf3","attesterRewardPoints(uint256,address)":"6f865294","batchGrantCommitmentAdmin(address[])":"4b47d955","batchGrantTrustedAttester(address[])":"cf6772ad","commitmentFirstSeenAt(uint256,bytes32)":"d7830688","commitmentStake(uint256,bytes32)":"c19b406c","commitments(uint256,address)":"e90d4c06","createSuperBlockCommitment(uint256,bytes32,bytes32)":"026583d7","forceLatestCommitment((uint256,bytes32,bytes32))":"08c7050f","getAcceptingEpoch()":"6c713af8","getAttesterRewardPoints(uint256,address)":"6978ab12","getAttesterStake(uint256,address)":"ba26513e","getAttesterStakeForAcceptingEpoch(address)":"491d0467","getCommitmentByAttester(uint256,address)":"f1949add","getCommitmentFirstSeenAt((uint256,bytes32,bytes32))":"e07472ef","getCustodianStake(uint256,address)":"1de38fe1","getCustodianStakeForAcceptingEpoch(address)":"d440116d","getEpochDuration()":"5d3ea8f1","getEpochStartTime()":"90879f64","getLastPostconfirmedSuperBlockHeight()":"59b99597","getMaxTolerableSuperBlockHeight()":"943b79e2","getMinCommitmentAgeForPostconfirmation()":"ab208ebd","getNextAcceptingEpochWithException()":"3752d675","getPostconfirmedCommitment(uint256)":"2bfd11d6","getPostconfirmer()":"35ea1c63","getPostconfirmerDuration()":"1241ebe3","getPostconfirmerPrivilegeDuration()":"028e490a","getPostconfirmerRewardPoints(uint256,address)":"ed8a1d59","getPostconfirmerStartTime()":"5f4d642e","getPresentEpoch()":"37d7f58f","getRoleAdmin(bytes32)":"248a9ca3","getStake(uint256,address,address)":"7aa81c2a","getStakeForAcceptingEpoch(address,address)":"bb04bd2f","getStakedAttestersForAcceptingEpoch()":"aa0d6fcd","getSuperBlockHeightAssignedEpoch(uint256)":"d283392e","getTotalStake(uint256)":"45367f23","getTotalStakeForAcceptingEpoch()":"14e38026","getValidatorCommitmentAtSuperBlockHeight(uint256,address)":"556d97c8","grantCommitmentAdmin(address)":"949d7c2a","grantRole(bytes32,address)":"2f2ff15d","grantTrustedAttester(address)":"81df1746","hasRole(bytes32,address)":"91d14854","initialize()":"8129fc1c","initialize(address,uint256,uint256,uint256,address[],uint256,address)":"107e21ca","isCommitted(uint256)":"e4a3fb74","isPostconfirmed(uint256)":"ec23ec2e","isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))":"0cf6b6bd","lastPostconfirmedSuperBlockHeight()":"fdafe9ca","leadingSuperBlockTolerance()":"03d3f7fd","minCommitmentAgeForPostconfirmation()":"bff92c8c","moveTokenAddress()":"58376877","openAttestationEnabled()":"ef9ae15c","postconfirmSuperBlocksAndRollover()":"26624e37","postconfirmedAtL1BlockHeight(uint256)":"7ac561c8","postconfirmedAtL1BlockHeightByPostconfirmer(uint256)":"7cfd8205","postconfirmedAtL1BlockTimestamp(uint256)":"a207fe2f","postconfirmedBy(uint256)":"91807e4f","postconfirmedByPostconfirmer(uint256)":"08750a32","postconfirmedSuperBlocks(uint256)":"eda67fc4","postconfirmedSuperBlocksVersion()":"ec18c186","postconfirmerDuration()":"4ceb2e66","postconfirmerPrivilegeDuration()":"55b8119d","postconfirmerRewardPoints(uint256,address)":"1db859c7","proxiableUUID()":"52d1902d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","rewardPerAttestationPoint()":"5f83c7d5","rewardPerPostconfirmationPoint()":"d3eef4cc","setAcceptingEpoch(uint256)":"d03509ec","setMinCommitmentAgeForPostconfirmation(uint256)":"1f83e2a3","setOpenAttestationEnabled(bool)":"d2526fef","setPostconfirmedCommitmentAtBlockHeight((uint256,bytes32,bytes32))":"3119edd4","setPostconfirmerDuration(uint256)":"3d645927","setPostconfirmerPrivilegeDuration(uint256)":"da7d28b6","setRewardPerAttestationPoint(uint256)":"0d39f7f0","setRewardPerPostconfirmationPoint(uint256)":"57342282","stakingContract()":"ee99205c","submitBatchSuperBlockCommitment((uint256,bytes32,bytes32)[])":"622e3616","submitSuperBlockCommitment((uint256,bytes32,bytes32))":"0e74b609","superBlockHeightAssignedEpoch(uint256)":"85e6b8c2","supportsInterface(bytes4)":"01ffc9a7","upgradeToAndCall(address,bytes)":"4f1ef286","versionedPostconfirmedSuperBlocks(uint256,uint256)":"3ba18005"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AttesterAlreadyCommitted\",\"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\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PostconfirmerDurationTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PostconfirmerDurationTooLongForEpoch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnacceptableSuperBlockCommitment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"minCommitmentAgeForPostconfirmationTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"postconfirmerPrivilegeDurationTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateCommitment\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"attesterStake\",\"type\":\"uint256\"}],\"name\":\"SuperBlockCommitmentSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateCommitment\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"SuperBlockPostconfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COMMITMENT_ADMIN\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRUSTED_ATTESTER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"attesterRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"points\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"}],\"name\":\"batchGrantCommitmentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"}],\"name\":\"batchGrantTrustedAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"commitmentFirstSeenAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitement\",\"type\":\"bytes32\"}],\"name\":\"commitmentStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"commitments\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"name\":\"createSuperBlockCommitment\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"forceLatestCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getCommitmentByAttester\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"getCommitmentFirstSeenAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochStartTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastPostconfirmedSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxTolerableSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinCommitmentAgeForPostconfirmation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextAcceptingEpochWithException\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"getPostconfirmedCommitment\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmerDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmerPrivilegeDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"postconfirmer\",\"type\":\"address\"}],\"name\":\"getPostconfirmerRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmerStartTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPresentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakedAttestersForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"getSuperBlockHeightAssignedEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"getTotalStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getValidatorCommitmentAtSuperBlockHeight\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantCommitmentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"grantTrustedAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IMovementStaking\",\"name\":\"_stakingContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_lastPostconfirmedSuperBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_leadingSuperBlockTolerance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_epochDuration\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_custodians\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_postconfirmerDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_moveTokenAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"isCommitted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"isPostconfirmed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"isWithinPostconfirmerPrivilegeDuration\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPostconfirmedSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"leadingSuperBlockTolerance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minCommitmentAgeForPostconfirmation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"moveTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"openAttestationEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmSuperBlocksAndRollover\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockHeight\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockHeightByPostconfirmer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockHeight\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedBy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedByPostconfirmer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedSuperBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmedSuperBlocksVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmerDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmerPrivilegeDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"postconfirmer\",\"type\":\"address\"}],\"name\":\"postconfirmerRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"points\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPerAttestationPoint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPerPostconfirmationPoint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newEpoch\",\"type\":\"uint256\"}],\"name\":\"setAcceptingEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minCommitmentAgeForPostconfirmation\",\"type\":\"uint256\"}],\"name\":\"setMinCommitmentAgeForPostconfirmation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOpenAttestationEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"setPostconfirmedCommitmentAtBlockHeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_postconfirmerDuration\",\"type\":\"uint256\"}],\"name\":\"setPostconfirmerDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_postconfirmerPrivilegeDuration\",\"type\":\"uint256\"}],\"name\":\"setPostconfirmerPrivilegeDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rewardPerPoint\",\"type\":\"uint256\"}],\"name\":\"setRewardPerAttestationPoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rewardPerPoint\",\"type\":\"uint256\"}],\"name\":\"setRewardPerPostconfirmationPoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakingContract\",\"outputs\":[{\"internalType\":\"contract IMovementStaking\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment[]\",\"name\":\"superBlockCommitments\",\"type\":\"tuple[]\"}],\"name\":\"submitBatchSuperBlockCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"commitment\",\"type\":\"tuple\"}],\"name\":\"submitSuperBlockCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"superBlockHeightAssignedEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"versionedPostconfirmedSuperBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"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.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"getPostconfirmerPrivilegeDuration()\":{\"returns\":{\"_0\":\"The maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize()\":{\"details\":\"Initialize the contract\"},\"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))\":{\"details\":\"The postconfirmer's privilege window is the time period when only the postconfirmer will get rewarded for postconfirmation\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setAcceptingEpoch(uint256)\":{\"params\":{\"newEpoch\":\"The new accepting epoch value\"}},\"setMinCommitmentAgeForPostconfirmation(uint256)\":{\"params\":{\"_minCommitmentAgeForPostconfirmation\":\"New minimum commitment age \"}},\"setPostconfirmerDuration(uint256)\":{\"params\":{\"_postconfirmerDuration\":\"New postconfirmer term duration in time units\"}},\"setPostconfirmerPrivilegeDuration(uint256)\":{\"params\":{\"_postconfirmerPrivilegeDuration\":\"maximum time the postconfirmer is permitted to be non-reactive to an honest superBlock commitment\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"PostconfirmerDurationTooLong()\":[{\"notice\":\"Error thrown when postconfirmer term is greater than 256 blocks\"}],\"PostconfirmerDurationTooLongForEpoch()\":[{\"notice\":\"Error thrown when postconfirmer term is too large for epoch duration\"}],\"minCommitmentAgeForPostconfirmationTooLong()\":[{\"notice\":\"Error thrown when minimum commitment age is greater than epoch duration\"}],\"postconfirmerPrivilegeDurationTooLong()\":[{\"notice\":\"Error thrown when maximum postconfirmer non-reactivity time is greater than epoch duration\"}]},\"kind\":\"user\",\"methods\":{\"COMMITMENT_ADMIN()\":{\"notice\":\"The role that allows the commitment admin to set the accepting epoch\"},\"TRUSTED_ATTESTER()\":{\"notice\":\"The role that allows attesters to submit commitments\"},\"acceptGenesisCeremony()\":{\"notice\":\"Accepts the genesis ceremony.\"},\"getAcceptingEpoch()\":{\"notice\":\"get the accepting epoch\"},\"getAttesterRewardPoints(uint256,address)\":{\"notice\":\"Gets the reward points for an attester in a given epoch\"},\"getAttesterStake(uint256,address)\":{\"notice\":\"Gets the stake for a given attester at a given epoch\"},\"getAttesterStakeForAcceptingEpoch(address)\":{\"notice\":\"Gets the stake for a given attester at the accepting epoch\"},\"getCommitmentByAttester(uint256,address)\":{\"notice\":\"Gets the commitment submitted by an attester for a given height\"},\"getCommitmentFirstSeenAt((uint256,bytes32,bytes32))\":{\"notice\":\"get the timestamp when a commitment was first seen\"},\"getCustodianStake(uint256,address)\":{\"notice\":\"Gets the stake for a given custodian for a given epoch\"},\"getEpochDuration()\":{\"notice\":\"Gets the epoch duration\"},\"getEpochStartTime()\":{\"notice\":\"Gets the time at which the current epoch started\"},\"getLastPostconfirmedSuperBlockHeight()\":{\"notice\":\"Gets the height of the last postconfirmed superblock\"},\"getPostconfirmedCommitment(uint256)\":{\"notice\":\"get the postconfirmed commitment for a given height\"},\"getPostconfirmer()\":{\"notice\":\"Determines the postconfirmer in the accepting epoch using L1 block hash as a source of randomness\"},\"getPostconfirmerDuration()\":{\"notice\":\"Gets the postconfirmer duration\"},\"getPostconfirmerPrivilegeDuration()\":{\"notice\":\"Gets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\"},\"getPostconfirmerRewardPoints(uint256,address)\":{\"notice\":\"Gets the reward points for a postconfirmer in a given epoch\"},\"getPostconfirmerStartTime()\":{\"notice\":\"Gets the time at which the current postconfirmer's term started\"},\"getPresentEpoch()\":{\"notice\":\"get the present epoch\"},\"getStake(uint256,address,address)\":{\"notice\":\"Gets the stake for a given tuple (custodian, attester) at a given epoch\"},\"getStakeForAcceptingEpoch(address,address)\":{\"notice\":\"Gets the stake for a given tuple (custodian, attester) at the accepting epoch\"},\"getStakedAttestersForAcceptingEpoch()\":{\"notice\":\"Gets the attesters who have stake in the current accepting epoch\"},\"getSuperBlockHeightAssignedEpoch(uint256)\":{\"notice\":\"Gets the epoch assigned to a superblock height\"},\"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))\":{\"notice\":\"Checks, for a given superBlock commitment, if the current L1 block time is within the postconfirmer's privilege window\"},\"minCommitmentAgeForPostconfirmation()\":{\"notice\":\"Minimum time that must pass before a commitment can be postconfirmed\"},\"postconfirmSuperBlocksAndRollover()\":{\"notice\":\"postconfirm superblocks and rollover\"},\"postconfirmerDuration()\":{\"notice\":\"Postconfirmer term time in seconds. The postconfirmer remains the same for postconfirmerDuration period.\"},\"postconfirmerPrivilegeDuration()\":{\"notice\":\"Max time the postconfirmer can be non-reactive to an honest superBlock commitment\"},\"setAcceptingEpoch(uint256)\":{\"notice\":\"Sets the accepting epoch to a new value (must be higher than current)\"},\"setMinCommitmentAgeForPostconfirmation(uint256)\":{\"notice\":\"Sets the minimum time that must pass before a commitment can be postconfirmed\"},\"setPostconfirmerDuration(uint256)\":{\"notice\":\"Sets the postconfirmer term duration, must be less than epoch duration\"},\"setPostconfirmerPrivilegeDuration(uint256)\":{\"notice\":\"Sets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\"},\"submitSuperBlockCommitment((uint256,bytes32,bytes32))\":{\"notice\":\"submit a superblock commitment\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/settlement/PCP.sol\":\"PCP\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x949f1b87232ce60ae1d7651dfc4272f258a388448e08b4d624b1acbe05d8b39b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://469b7e1cab4c319957fddef8ad610ce347e2494d15389f3d3f689c4be66c1f7d\",\"dweb:/ipfs/QmdC9UdUZAYzjyZ2ULJgJ5QxhDHRtVJ8MJhHKjiotNfCeY\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x13c2d19041c51b246233f96874a66c0094b8a5ff78af3b85ea27867f302dcbbb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f1bc47de2e6e12b3680e47a4dd5b6e3c1e85b65851378aa1d617309edbc1200d\",\"dweb:/ipfs/QmSPcJ9HmkmsSDvMS4KZijnxoGMAEn8HbQuY4fe8DroZEE\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0xe1448f559716952220b5c696a5cc34d1f11f958bfbfcd05988543f6fd8bfff96\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ebd19cec65d3998dad25dc9beecd33055b1900f26c3f61377c78926ca0637c9a\",\"dweb:/ipfs/QmUda1jFjWf2ptQrahTgU6953SZY7ZWksRaTo2dKGX4BMK\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x37b2d71a3d12d55076e87942fb75e80ec8b6bacecd19b6562474952f6973d87b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4261c708ec31ae8764d242089617dc60c5e54a20ec781a42704886eda988a37a\",\"dweb:/ipfs/QmQqFiotrcCfB36B2pSfwGz4Bi4zhRgwwGAJ8VFBaEtzQ1\"]},\"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/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89\",\"dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xccb9b54747f3733f9ca435191745881587b2b48a12d6903358b59bc8ae39ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://021b637b39bddc68e1beed71677cb52919d27880804b1c7160d53064342786bc\",\"dweb:/ipfs/QmV3wgNQmoi9d6U3P7xwHAEKDoaQzGqGGjcSXsyWMf9rsK\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70\",\"dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"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/utils/SafeERC20.sol\":{\"keccak256\":\"0x6dd0cb67846da3fa1241c520faaa215d6bec8226e37beac6056c51e8af44d24e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://650e533e62b30dcc6edea2b6c91358d5659da3bde42e56adf7316c493b916a15\",\"dweb:/ipfs/QmYkmK2vPE6FjdAoQVpZSJxamTLGno9wzGS495TcMNFViV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e\",\"dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR\"]},\"lib/openzeppelin-contracts/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xb4d040e2cc1d4a66d08b174b97332aa3dbf330bc74f91c725d7ff653efca7eb1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da205f459aac15cadd00538691b525eef81f098a95bc3eedea12968bcb70706\",\"dweb:/ipfs/QmcqTJET3rNsXMGT3UvqLgFS3RrKaHe5x97m4dcfUCWMoW\"]},\"lib/openzeppelin-contracts/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"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/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x91832f9744a308318ef3344caf2122345d6a949e25017461322d13a4ede53f10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77f5fa6ce1145a3637406a77940cd1ab50523187c8ac7281805b3fc2bd6ffd5e\",\"dweb:/ipfs/QmewJyTg2SoBee1bKwks3vktT2wTQhB7TtzZg9xKvzvfUf\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xc240f71206795cead02e49f999b3523414c230cec53423298d8457a7ce9d3ea4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d5813c665d5ea1b73e27844800eb45831b9ba608b2a9216ead318e246fd5e8f\",\"dweb:/ipfs/QmNStA3tbwHZm1tXgdmY4wB3NbYKJtzYWADjKmDMhYHjyA\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x804753930b59f27c3a6747a4cf58b4d291f2c942a2a76edd43d4571a5f6b02bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f05286cf2babfc5bf1c347c447477ca24147bea09bb4f5ba01fe9afd98ab409\",\"dweb:/ipfs/QmUcTFzF4y2U9VoBbv7kx3PDTACdNMoYQuTe89ot2pAqqA\"]},\"src/settlement/PCP.sol\":{\"keccak256\":\"0x55938993344c74fd0bc722fe4fc713ca41ef116f7590eb7fac43e29375914902\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://4d3f02dec5922f7e6cebfa6514795b6727024a0ce066e1aa8d87beb3048ab0c6\",\"dweb:/ipfs/QmbgQ4WAnh8dJ99xRkhhhLuEr164JXWkGipPVrCLuucdn4\"]},\"src/settlement/PCPStorage.sol\":{\"keccak256\":\"0xf8531c966b1c84b009146a45614c016a1e4fe1d27d03d77ed97f5a6e728eb2a1\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://e6e97f51c06ee9d80c212c6f8c1b814ceec46df5836341249e4b6d31137f3cff\",\"dweb:/ipfs/QmVzSLbaveGiCFBLWWiPpR7Ta5xuF9rWhffDeTntwAfiss\"]},\"src/settlement/interfaces/IPCP.sol\":{\"keccak256\":\"0xf9247e3839660b3386697a2cd3882a4557ddc551929f01d8e877de6d2e4d0e89\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://54625a2912af7fa78ae3fb873f3a6db80fc6044d3f8994701d4845032032578f\",\"dweb:/ipfs/QmR5m72PohfHMeFFw2ASDQQgJhkeknbo9R2aGmEQU7a8zg\"]},\"src/settlement/settlement/BaseSettlement.sol\":{\"keccak256\":\"0xf3f6ea0ae8db122d1c6dade60057ea8fa03b8efc8108f03e48049bb9548d2c9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e340fdd89c1872461ec0f98195ef56aaf583ebf2897890ee74c1eefad8e8c86e\",\"dweb:/ipfs/QmWCcRibYEJZEvY1ugrw7jkumrHNxr8z3dMeP457PkbJED\"]},\"src/staking/MovementStaking.sol\":{\"keccak256\":\"0xb61e04fbc6fce5f3d2e64269f2adccea1f27060f714259634ec20eab1cff468f\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0bf80557c4c9156a247c44cc476c5747028fddd392f9d3e3c7cea1a7fac1f670\",\"dweb:/ipfs/QmQ6A6bPUsm2b7yy5eSsJ7MXgQGAF8zWEkJf7uL7sZNXi9\"]},\"src/staking/MovementStakingStorage.sol\":{\"keccak256\":\"0xcb909fbdd31da45891f983aca5387eff88693b31c60d304b6ab7c1128c814225\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fcfd3aadf8c9e714c6e0f5b8b7f6000b54a1a0eeb219d25cb23848411ae17edb\",\"dweb:/ipfs/QmTKyTFmGKHKWk1wKncaAvXBZH9MwJfkdhFbmTUAwTX7UP\"]},\"src/staking/base/BaseStaking.sol\":{\"keccak256\":\"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46\",\"dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx\"]},\"src/staking/interfaces/IMovementStaking.sol\":{\"keccak256\":\"0x250f5a72809b363ebefe5fbcdce50b62a9ff49672a863c8273e0fbe4d59f8933\",\"urls\":[\"bzz-raw://5a4385f838da317ce90fb84cdd83a724d132f7e6c287191673f4e2ce1a486bbe\",\"dweb:/ipfs/Qmbwq1kBumZDyREvc4ryHMNMQ4sgT39fNAK4bUNRoXqchj\"]},\"src/token/base/BaseToken.sol\":{\"keccak256\":\"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e\",\"dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd\"]},\"src/token/base/MintableToken.sol\":{\"keccak256\":\"0xba4c9b5e900564cb3abb081d11b95f23e5f39a5ee799cda54c9f1a49a7aa8a13\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://94ca441f7acc6b312fc3d1d6ce4dab9971fd1cdf176ae5251fe2f28c4c52a35a\",\"dweb:/ipfs/QmXAuDzaJqydZho7CFyKKKtyYATHedyAUHTKAS839oji3o\"]},\"src/token/base/WrappedToken.sol\":{\"keccak256\":\"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885\",\"dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4\"]},\"src/token/base/WrappedTokenStorage.sol\":{\"keccak256\":\"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08\",\"dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj\"]},\"src/token/custodian/CustodianToken.sol\":{\"keccak256\":\"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04\",\"dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"AttesterAlreadyCommitted"},{"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":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"PostconfirmerDurationTooLong"},{"inputs":[],"type":"error","name":"PostconfirmerDurationTooLongForEpoch"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[],"type":"error","name":"UnacceptableSuperBlockCommitment"},{"inputs":[],"type":"error","name":"minCommitmentAgeForPostconfirmationTooLong"},{"inputs":[],"type":"error","name":"postconfirmerPrivilegeDurationTooLong"},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"stateCommitment","type":"bytes32","indexed":false},{"internalType":"uint256","name":"attesterStake","type":"uint256","indexed":false}],"type":"event","name":"SuperBlockCommitmentSubmitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"stateCommitment","type":"bytes32","indexed":false},{"internalType":"uint256","name":"height","type":"uint256","indexed":false}],"type":"event","name":"SuperBlockPostconfirmed","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"COMMITMENT_ADMIN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TRUSTED_ATTESTER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptGenesisCeremony"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"attesterRewardPoints","outputs":[{"internalType":"uint256","name":"points","type":"uint256"}]},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"batchGrantCommitmentAdmin"},{"inputs":[{"internalType":"address[]","name":"attesters","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"batchGrantTrustedAttester"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"stateMutability":"view","type":"function","name":"commitmentFirstSeenAt","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"bytes32","name":"commitement","type":"bytes32"}],"stateMutability":"view","type":"function","name":"commitmentStake","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"commitments","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"createSuperBlockCommitment","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"forceLatestCommitment"},{"inputs":[],"stateMutability":"view","type":"function","name":"getAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterRewardPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getCommitmentByAttester","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"view","type":"function","name":"getCommitmentFirstSeenAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getEpochDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getEpochStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getLastPostconfirmedSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getMaxTolerableSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getMinCommitmentAgeForPostconfirmation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getNextAcceptingEpochWithException","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"getPostconfirmedCommitment","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmer","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmerDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmerPrivilegeDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"postconfirmer","type":"address"}],"stateMutability":"view","type":"function","name":"getPostconfirmerRewardPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmerStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPresentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getStakedAttestersForAcceptingEpoch","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"getSuperBlockHeightAssignedEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}],"stateMutability":"view","type":"function","name":"getTotalStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getTotalStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getValidatorCommitmentAtSuperBlockHeight","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantCommitmentAdmin"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantTrustedAttester"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"contract IMovementStaking","name":"_stakingContract","type":"address"},{"internalType":"uint256","name":"_lastPostconfirmedSuperBlockHeight","type":"uint256"},{"internalType":"uint256","name":"_leadingSuperBlockTolerance","type":"uint256"},{"internalType":"uint256","name":"_epochDuration","type":"uint256"},{"internalType":"address[]","name":"_custodians","type":"address[]"},{"internalType":"uint256","name":"_postconfirmerDuration","type":"uint256"},{"internalType":"address","name":"_moveTokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"isCommitted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"isPostconfirmed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"view","type":"function","name":"isWithinPostconfirmerPrivilegeDuration","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"lastPostconfirmedSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"leadingSuperBlockTolerance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"minCommitmentAgeForPostconfirmation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"moveTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"openAttestationEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"postconfirmSuperBlocksAndRollover"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockHeight","outputs":[{"internalType":"uint256","name":"L1BlockHeight","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockHeightByPostconfirmer","outputs":[{"internalType":"uint256","name":"L1BlockHeight","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockTimestamp","outputs":[{"internalType":"uint256","name":"L1BlockTimestamp","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedBy","outputs":[{"internalType":"address","name":"attester","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedByPostconfirmer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedSuperBlocks","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"postconfirmedSuperBlocksVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"postconfirmerDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"postconfirmerPrivilegeDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"postconfirmer","type":"address"}],"stateMutability":"view","type":"function","name":"postconfirmerRewardPoints","outputs":[{"internalType":"uint256","name":"points","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[],"stateMutability":"view","type":"function","name":"rewardPerAttestationPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"rewardPerPostconfirmationPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"newEpoch","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setAcceptingEpoch"},{"inputs":[{"internalType":"uint256","name":"_minCommitmentAgeForPostconfirmation","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setMinCommitmentAgeForPostconfirmation"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setOpenAttestationEnabled"},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"setPostconfirmedCommitmentAtBlockHeight"},{"inputs":[{"internalType":"uint256","name":"_postconfirmerDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setPostconfirmerDuration"},{"inputs":[{"internalType":"uint256","name":"_postconfirmerPrivilegeDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setPostconfirmerPrivilegeDuration"},{"inputs":[{"internalType":"uint256","name":"rewardPerPoint","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setRewardPerAttestationPoint"},{"inputs":[{"internalType":"uint256","name":"rewardPerPoint","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setRewardPerPostconfirmationPoint"},{"inputs":[],"stateMutability":"view","type":"function","name":"stakingContract","outputs":[{"internalType":"contract IMovementStaking","name":"","type":"address"}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment[]","name":"superBlockCommitments","type":"tuple[]","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"submitBatchSuperBlockCommitment"},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"commitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"submitSuperBlockCommitment"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"superBlockHeightAssignedEpoch","outputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}]},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"versionedPostconfirmedSuperBlocks","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"getPostconfirmerPrivilegeDuration()":{"returns":{"_0":"The maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"}},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize()":{"details":"Initialize the contract"},"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))":{"details":"The postconfirmer's privilege window is the time period when only the postconfirmer will get rewarded for postconfirmation"},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"setAcceptingEpoch(uint256)":{"params":{"newEpoch":"The new accepting epoch value"}},"setMinCommitmentAgeForPostconfirmation(uint256)":{"params":{"_minCommitmentAgeForPostconfirmation":"New minimum commitment age "}},"setPostconfirmerDuration(uint256)":{"params":{"_postconfirmerDuration":"New postconfirmer term duration in time units"}},"setPostconfirmerPrivilegeDuration(uint256)":{"params":{"_postconfirmerPrivilegeDuration":"maximum time the postconfirmer is permitted to be non-reactive to an honest superBlock commitment"}},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"COMMITMENT_ADMIN()":{"notice":"The role that allows the commitment admin to set the accepting epoch"},"TRUSTED_ATTESTER()":{"notice":"The role that allows attesters to submit commitments"},"acceptGenesisCeremony()":{"notice":"Accepts the genesis ceremony."},"getAcceptingEpoch()":{"notice":"get the accepting epoch"},"getAttesterRewardPoints(uint256,address)":{"notice":"Gets the reward points for an attester in a given epoch"},"getAttesterStake(uint256,address)":{"notice":"Gets the stake for a given attester at a given epoch"},"getAttesterStakeForAcceptingEpoch(address)":{"notice":"Gets the stake for a given attester at the accepting epoch"},"getCommitmentByAttester(uint256,address)":{"notice":"Gets the commitment submitted by an attester for a given height"},"getCommitmentFirstSeenAt((uint256,bytes32,bytes32))":{"notice":"get the timestamp when a commitment was first seen"},"getCustodianStake(uint256,address)":{"notice":"Gets the stake for a given custodian for a given epoch"},"getEpochDuration()":{"notice":"Gets the epoch duration"},"getEpochStartTime()":{"notice":"Gets the time at which the current epoch started"},"getLastPostconfirmedSuperBlockHeight()":{"notice":"Gets the height of the last postconfirmed superblock"},"getPostconfirmedCommitment(uint256)":{"notice":"get the postconfirmed commitment for a given height"},"getPostconfirmer()":{"notice":"Determines the postconfirmer in the accepting epoch using L1 block hash as a source of randomness"},"getPostconfirmerDuration()":{"notice":"Gets the postconfirmer duration"},"getPostconfirmerPrivilegeDuration()":{"notice":"Gets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"},"getPostconfirmerRewardPoints(uint256,address)":{"notice":"Gets the reward points for a postconfirmer in a given epoch"},"getPostconfirmerStartTime()":{"notice":"Gets the time at which the current postconfirmer's term started"},"getPresentEpoch()":{"notice":"get the present epoch"},"getStake(uint256,address,address)":{"notice":"Gets the stake for a given tuple (custodian, attester) at a given epoch"},"getStakeForAcceptingEpoch(address,address)":{"notice":"Gets the stake for a given tuple (custodian, attester) at the accepting epoch"},"getStakedAttestersForAcceptingEpoch()":{"notice":"Gets the attesters who have stake in the current accepting epoch"},"getSuperBlockHeightAssignedEpoch(uint256)":{"notice":"Gets the epoch assigned to a superblock height"},"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))":{"notice":"Checks, for a given superBlock commitment, if the current L1 block time is within the postconfirmer's privilege window"},"minCommitmentAgeForPostconfirmation()":{"notice":"Minimum time that must pass before a commitment can be postconfirmed"},"postconfirmSuperBlocksAndRollover()":{"notice":"postconfirm superblocks and rollover"},"postconfirmerDuration()":{"notice":"Postconfirmer term time in seconds. The postconfirmer remains the same for postconfirmerDuration period."},"postconfirmerPrivilegeDuration()":{"notice":"Max time the postconfirmer can be non-reactive to an honest superBlock commitment"},"setAcceptingEpoch(uint256)":{"notice":"Sets the accepting epoch to a new value (must be higher than current)"},"setMinCommitmentAgeForPostconfirmation(uint256)":{"notice":"Sets the minimum time that must pass before a commitment can be postconfirmed"},"setPostconfirmerDuration(uint256)":{"notice":"Sets the postconfirmer term duration, must be less than epoch duration"},"setPostconfirmerPrivilegeDuration(uint256)":{"notice":"Sets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"},"submitSuperBlockCommitment((uint256,bytes32,bytes32))":{"notice":"submit a superblock commitment"}},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/settlement/PCP.sol":"PCP"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x949f1b87232ce60ae1d7651dfc4272f258a388448e08b4d624b1acbe05d8b39b","urls":["bzz-raw://469b7e1cab4c319957fddef8ad610ce347e2494d15389f3d3f689c4be66c1f7d","dweb:/ipfs/QmdC9UdUZAYzjyZ2ULJgJ5QxhDHRtVJ8MJhHKjiotNfCeY"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x13c2d19041c51b246233f96874a66c0094b8a5ff78af3b85ea27867f302dcbbb","urls":["bzz-raw://f1bc47de2e6e12b3680e47a4dd5b6e3c1e85b65851378aa1d617309edbc1200d","dweb:/ipfs/QmSPcJ9HmkmsSDvMS4KZijnxoGMAEn8HbQuY4fe8DroZEE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0xe1448f559716952220b5c696a5cc34d1f11f958bfbfcd05988543f6fd8bfff96","urls":["bzz-raw://ebd19cec65d3998dad25dc9beecd33055b1900f26c3f61377c78926ca0637c9a","dweb:/ipfs/QmUda1jFjWf2ptQrahTgU6953SZY7ZWksRaTo2dKGX4BMK"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x37b2d71a3d12d55076e87942fb75e80ec8b6bacecd19b6562474952f6973d87b","urls":["bzz-raw://4261c708ec31ae8764d242089617dc60c5e54a20ec781a42704886eda988a37a","dweb:/ipfs/QmQqFiotrcCfB36B2pSfwGz4Bi4zhRgwwGAJ8VFBaEtzQ1"],"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/introspection/ERC165Upgradeable.sol":{"keccak256":"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab","urls":["bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89","dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xccb9b54747f3733f9ca435191745881587b2b48a12d6903358b59bc8ae39ea6b","urls":["bzz-raw://021b637b39bddc68e1beed71677cb52919d27880804b1c7160d53064342786bc","dweb:/ipfs/QmV3wgNQmoi9d6U3P7xwHAEKDoaQzGqGGjcSXsyWMf9rsK"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol":{"keccak256":"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7","urls":["bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b","dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"keccak256":"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724","urls":["bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a","dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486","urls":["bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d","dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c","urls":["bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba","dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d","urls":["bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196","dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA"],"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/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898","urls":["bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70","dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2"],"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/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/utils/SafeERC20.sol":{"keccak256":"0x6dd0cb67846da3fa1241c520faaa215d6bec8226e37beac6056c51e8af44d24e","urls":["bzz-raw://650e533e62b30dcc6edea2b6c91358d5659da3bde42e56adf7316c493b916a15","dweb:/ipfs/QmYkmK2vPE6FjdAoQVpZSJxamTLGno9wzGS495TcMNFViV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c","urls":["bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e","dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Arrays.sol":{"keccak256":"0xb4d040e2cc1d4a66d08b174b97332aa3dbf330bc74f91c725d7ff653efca7eb1","urls":["bzz-raw://9da205f459aac15cadd00538691b525eef81f098a95bc3eedea12968bcb70706","dweb:/ipfs/QmcqTJET3rNsXMGT3UvqLgFS3RrKaHe5x97m4dcfUCWMoW"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Comparators.sol":{"keccak256":"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58","urls":["bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd","dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC"],"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/ReentrancyGuard.sol":{"keccak256":"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3","urls":["bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a","dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x91832f9744a308318ef3344caf2122345d6a949e25017461322d13a4ede53f10","urls":["bzz-raw://77f5fa6ce1145a3637406a77940cd1ab50523187c8ac7281805b3fc2bd6ffd5e","dweb:/ipfs/QmewJyTg2SoBee1bKwks3vktT2wTQhB7TtzZg9xKvzvfUf"],"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/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xc240f71206795cead02e49f999b3523414c230cec53423298d8457a7ce9d3ea4","urls":["bzz-raw://7d5813c665d5ea1b73e27844800eb45831b9ba608b2a9216ead318e246fd5e8f","dweb:/ipfs/QmNStA3tbwHZm1tXgdmY4wB3NbYKJtzYWADjKmDMhYHjyA"],"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/structs/EnumerableSet.sol":{"keccak256":"0x804753930b59f27c3a6747a4cf58b4d291f2c942a2a76edd43d4571a5f6b02bc","urls":["bzz-raw://6f05286cf2babfc5bf1c347c447477ca24147bea09bb4f5ba01fe9afd98ab409","dweb:/ipfs/QmUcTFzF4y2U9VoBbv7kx3PDTACdNMoYQuTe89ot2pAqqA"],"license":"MIT"},"src/settlement/PCP.sol":{"keccak256":"0x55938993344c74fd0bc722fe4fc713ca41ef116f7590eb7fac43e29375914902","urls":["bzz-raw://4d3f02dec5922f7e6cebfa6514795b6727024a0ce066e1aa8d87beb3048ab0c6","dweb:/ipfs/QmbgQ4WAnh8dJ99xRkhhhLuEr164JXWkGipPVrCLuucdn4"],"license":"UNLICENSED"},"src/settlement/PCPStorage.sol":{"keccak256":"0xf8531c966b1c84b009146a45614c016a1e4fe1d27d03d77ed97f5a6e728eb2a1","urls":["bzz-raw://e6e97f51c06ee9d80c212c6f8c1b814ceec46df5836341249e4b6d31137f3cff","dweb:/ipfs/QmVzSLbaveGiCFBLWWiPpR7Ta5xuF9rWhffDeTntwAfiss"],"license":"UNLICENSED"},"src/settlement/interfaces/IPCP.sol":{"keccak256":"0xf9247e3839660b3386697a2cd3882a4557ddc551929f01d8e877de6d2e4d0e89","urls":["bzz-raw://54625a2912af7fa78ae3fb873f3a6db80fc6044d3f8994701d4845032032578f","dweb:/ipfs/QmR5m72PohfHMeFFw2ASDQQgJhkeknbo9R2aGmEQU7a8zg"],"license":"UNLICENSED"},"src/settlement/settlement/BaseSettlement.sol":{"keccak256":"0xf3f6ea0ae8db122d1c6dade60057ea8fa03b8efc8108f03e48049bb9548d2c9a","urls":["bzz-raw://e340fdd89c1872461ec0f98195ef56aaf583ebf2897890ee74c1eefad8e8c86e","dweb:/ipfs/QmWCcRibYEJZEvY1ugrw7jkumrHNxr8z3dMeP457PkbJED"],"license":"MIT"},"src/staking/MovementStaking.sol":{"keccak256":"0xb61e04fbc6fce5f3d2e64269f2adccea1f27060f714259634ec20eab1cff468f","urls":["bzz-raw://0bf80557c4c9156a247c44cc476c5747028fddd392f9d3e3c7cea1a7fac1f670","dweb:/ipfs/QmQ6A6bPUsm2b7yy5eSsJ7MXgQGAF8zWEkJf7uL7sZNXi9"],"license":"UNLICENSED"},"src/staking/MovementStakingStorage.sol":{"keccak256":"0xcb909fbdd31da45891f983aca5387eff88693b31c60d304b6ab7c1128c814225","urls":["bzz-raw://fcfd3aadf8c9e714c6e0f5b8b7f6000b54a1a0eeb219d25cb23848411ae17edb","dweb:/ipfs/QmTKyTFmGKHKWk1wKncaAvXBZH9MwJfkdhFbmTUAwTX7UP"],"license":"UNLICENSED"},"src/staking/base/BaseStaking.sol":{"keccak256":"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393","urls":["bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46","dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx"],"license":"MIT"},"src/staking/interfaces/IMovementStaking.sol":{"keccak256":"0x250f5a72809b363ebefe5fbcdce50b62a9ff49672a863c8273e0fbe4d59f8933","urls":["bzz-raw://5a4385f838da317ce90fb84cdd83a724d132f7e6c287191673f4e2ce1a486bbe","dweb:/ipfs/Qmbwq1kBumZDyREvc4ryHMNMQ4sgT39fNAK4bUNRoXqchj"],"license":null},"src/token/base/BaseToken.sol":{"keccak256":"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2","urls":["bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e","dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd"],"license":"MIT"},"src/token/base/MintableToken.sol":{"keccak256":"0xba4c9b5e900564cb3abb081d11b95f23e5f39a5ee799cda54c9f1a49a7aa8a13","urls":["bzz-raw://94ca441f7acc6b312fc3d1d6ce4dab9971fd1cdf176ae5251fe2f28c4c52a35a","dweb:/ipfs/QmXAuDzaJqydZho7CFyKKKtyYATHedyAUHTKAS839oji3o"],"license":"MIT"},"src/token/base/WrappedToken.sol":{"keccak256":"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45","urls":["bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885","dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4"],"license":"MIT"},"src/token/base/WrappedTokenStorage.sol":{"keccak256":"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e","urls":["bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08","dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj"],"license":"MIT"},"src/token/custodian/CustodianToken.sol":{"keccak256":"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350","urls":["bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04","dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":61820,"contract":"src/settlement/PCP.sol:PCP","label":"stakingContract","offset":0,"slot":"0","type":"t_contract(IMovementStaking)64348"},{"astId":61822,"contract":"src/settlement/PCP.sol:PCP","label":"moveTokenAddress","offset":0,"slot":"1","type":"t_address"},{"astId":61824,"contract":"src/settlement/PCP.sol:PCP","label":"leadingSuperBlockTolerance","offset":0,"slot":"2","type":"t_uint256"},{"astId":61826,"contract":"src/settlement/PCP.sol:PCP","label":"lastPostconfirmedSuperBlockHeight","offset":0,"slot":"3","type":"t_uint256"},{"astId":61829,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmerDuration","offset":0,"slot":"4","type":"t_uint256"},{"astId":61832,"contract":"src/settlement/PCP.sol:PCP","label":"minCommitmentAgeForPostconfirmation","offset":0,"slot":"5","type":"t_uint256"},{"astId":61835,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmerPrivilegeDuration","offset":0,"slot":"6","type":"t_uint256"},{"astId":61847,"contract":"src/settlement/PCP.sol:PCP","label":"superBlockHeightAssignedEpoch","offset":0,"slot":"7","type":"t_mapping(t_uint256,t_uint256)"},{"astId":61854,"contract":"src/settlement/PCP.sol:PCP","label":"commitments","offset":0,"slot":"8","type":"t_mapping(t_uint256,t_mapping(t_address,t_struct(SuperBlockCommitment)61843_storage))"},{"astId":61860,"contract":"src/settlement/PCP.sol:PCP","label":"commitmentStake","offset":0,"slot":"9","type":"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))"},{"astId":61866,"contract":"src/settlement/PCP.sol:PCP","label":"commitmentFirstSeenAt","offset":0,"slot":"10","type":"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))"},{"astId":61870,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedBy","offset":0,"slot":"11","type":"t_mapping(t_uint256,t_address)"},{"astId":61874,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedByPostconfirmer","offset":0,"slot":"12","type":"t_mapping(t_uint256,t_bool)"},{"astId":61878,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedAtL1BlockHeight","offset":0,"slot":"13","type":"t_mapping(t_uint256,t_uint256)"},{"astId":61882,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedAtL1BlockTimestamp","offset":0,"slot":"14","type":"t_mapping(t_uint256,t_uint256)"},{"astId":61886,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedAtL1BlockHeightByPostconfirmer","offset":0,"slot":"15","type":"t_mapping(t_uint256,t_uint256)"},{"astId":61891,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedSuperBlocks","offset":0,"slot":"16","type":"t_mapping(t_uint256,t_struct(SuperBlockCommitment)61843_storage)"},{"astId":61893,"contract":"src/settlement/PCP.sol:PCP","label":"openAttestationEnabled","offset":0,"slot":"17","type":"t_bool"},{"astId":61900,"contract":"src/settlement/PCP.sol:PCP","label":"versionedPostconfirmedSuperBlocks","offset":0,"slot":"18","type":"t_mapping(t_uint256,t_mapping(t_uint256,t_struct(SuperBlockCommitment)61843_storage))"},{"astId":61902,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedSuperBlocksVersion","offset":0,"slot":"19","type":"t_uint256"},{"astId":61908,"contract":"src/settlement/PCP.sol:PCP","label":"attesterRewardPoints","offset":0,"slot":"20","type":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},{"astId":61914,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmerRewardPoints","offset":0,"slot":"21","type":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},{"astId":61916,"contract":"src/settlement/PCP.sol:PCP","label":"rewardPerAttestationPoint","offset":0,"slot":"22","type":"t_uint256"},{"astId":61918,"contract":"src/settlement/PCP.sol:PCP","label":"rewardPerPostconfirmationPoint","offset":0,"slot":"23","type":"t_uint256"},{"astId":61922,"contract":"src/settlement/PCP.sol:PCP","label":"__gap","offset":0,"slot":"24","type":"t_array(t_uint256)45_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)45_storage":{"encoding":"inplace","label":"uint256[45]","numberOfBytes":"1440","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IMovementStaking)64348":{"encoding":"inplace","label":"contract IMovementStaking","numberOfBytes":"20"},"t_mapping(t_address,t_struct(SuperBlockCommitment)61843_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct PCPStorage.SuperBlockCommitment)","numberOfBytes":"32","value":"t_struct(SuperBlockCommitment)61843_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint256,t_bool)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_uint256,t_mapping(t_address,t_struct(SuperBlockCommitment)61843_storage))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment))","numberOfBytes":"32","value":"t_mapping(t_address,t_struct(SuperBlockCommitment)61843_storage)"},"t_mapping(t_uint256,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_uint256,t_mapping(t_uint256,t_struct(SuperBlockCommitment)61843_storage))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_struct(SuperBlockCommitment)61843_storage)"},"t_mapping(t_uint256,t_struct(SuperBlockCommitment)61843_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment)","numberOfBytes":"32","value":"t_struct(SuperBlockCommitment)61843_storage"},"t_mapping(t_uint256,t_uint256)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_struct(SuperBlockCommitment)61843_storage":{"encoding":"inplace","label":"struct PCPStorage.SuperBlockCommitment","numberOfBytes":"96","members":[{"astId":61838,"contract":"src/settlement/PCP.sol:PCP","label":"height","offset":0,"slot":"0","type":"t_uint256"},{"astId":61840,"contract":"src/settlement/PCP.sol:PCP","label":"commitment","offset":0,"slot":"1","type":"t_bytes32"},{"astId":61842,"contract":"src/settlement/PCP.sol:PCP","label":"blockId","offset":0,"slot":"2","type":"t_bytes32"}]},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/settlement/PCP.sol","id":61811,"exportedSymbols":{"BaseSettlement":[62077],"EnumerableSet":[52215],"IMovementStaking":[64348],"IPCP":[62022],"Initializable":[39746],"MovementStaking":[63931],"PCP":[61810],"PCPStorage":[61923],"ReentrancyGuard":[45862]},"nodeType":"SourceUnit","src":"39:35047:114","nodes":[{"id":60030,"nodeType":"PragmaDirective","src":"39:24:114","nodes":[],"literals":["solidity","^","0.8",".13"]},{"id":60032,"nodeType":"ImportDirective","src":"65:86:114","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol","file":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":52216,"symbolAliases":[{"foreign":{"id":60031,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52215,"src":"73:13:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60034,"nodeType":"ImportDirective","src":"152:96:114","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":39747,"symbolAliases":[{"foreign":{"id":60033,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39746,"src":"160:13:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60037,"nodeType":"ImportDirective","src":"249:81:114","nodes":[],"absolutePath":"src/staking/MovementStaking.sol","file":"../staking/MovementStaking.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":63932,"symbolAliases":[{"foreign":{"id":60035,"name":"MovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63931,"src":"257:15:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":60036,"name":"IMovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64348,"src":"274:16:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60039,"nodeType":"ImportDirective","src":"331:44:114","nodes":[],"absolutePath":"src/settlement/PCPStorage.sol","file":"./PCPStorage.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":61924,"symbolAliases":[{"foreign":{"id":60038,"name":"PCPStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61923,"src":"339:10:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60041,"nodeType":"ImportDirective","src":"376:63:114","nodes":[],"absolutePath":"src/settlement/settlement/BaseSettlement.sol","file":"./settlement/BaseSettlement.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":62078,"symbolAliases":[{"foreign":{"id":60040,"name":"BaseSettlement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62077,"src":"384:14:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60043,"nodeType":"ImportDirective","src":"440:43:114","nodes":[],"absolutePath":"src/settlement/interfaces/IPCP.sol","file":"./interfaces/IPCP.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":62023,"symbolAliases":[{"foreign":{"id":60042,"name":"IPCP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62022,"src":"448:4:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60044,"nodeType":"ImportDirective","src":"484:59:114","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":45863,"symbolAliases":[],"unitAlias":""},{"id":61810,"nodeType":"ContractDefinition","src":"545:34540:114","nodes":[{"id":60057,"nodeType":"VariableDeclaration","src":"654:72:114","nodes":[],"baseFunctions":[62021],"constant":true,"functionSelector":"80e460f0","mutability":"constant","name":"COMMITMENT_ADMIN","nameLocation":"678:16:114","scope":61810,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60053,"name":"bytes32","nodeType":"ElementaryTypeName","src":"654:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"434f4d4d49544d454e545f41444d494e","id":60055,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"707:18:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_db2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c","typeString":"literal_string \"COMMITMENT_ADMIN\""},"value":"COMMITMENT_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_db2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c","typeString":"literal_string \"COMMITMENT_ADMIN\""}],"id":60054,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"697:9:114","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":60056,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"697:29:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":60062,"nodeType":"VariableDeclaration","src":"764:72:114","nodes":[],"baseFunctions":[62015],"constant":true,"functionSelector":"5db916ab","mutability":"constant","name":"TRUSTED_ATTESTER","nameLocation":"788:16:114","scope":61810,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60058,"name":"bytes32","nodeType":"ElementaryTypeName","src":"764:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"545255535445445f4154544553544552","id":60060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"817:18:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18","typeString":"literal_string \"TRUSTED_ATTESTER\""},"value":"TRUSTED_ATTESTER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18","typeString":"literal_string \"TRUSTED_ATTESTER\""}],"id":60059,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"807:9:114","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":60061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"807:29:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":60065,"nodeType":"ErrorDefinition","src":"923:37:114","nodes":[],"documentation":{"id":60063,"nodeType":"StructuredDocumentation","src":"843:75:114","text":"@notice Error thrown when postconfirmer term is greater than 256 blocks"},"errorSelector":"38d443c8","name":"PostconfirmerDurationTooLong","nameLocation":"929:28:114","parameters":{"id":60064,"nodeType":"ParameterList","parameters":[],"src":"957:2:114"}},{"id":60068,"nodeType":"ErrorDefinition","src":"1051:45:114","nodes":[],"documentation":{"id":60066,"nodeType":"StructuredDocumentation","src":"966:80:114","text":"@notice Error thrown when postconfirmer term is too large for epoch duration"},"errorSelector":"60bc402f","name":"PostconfirmerDurationTooLongForEpoch","nameLocation":"1057:36:114","parameters":{"id":60067,"nodeType":"ParameterList","parameters":[],"src":"1093:2:114"}},{"id":60071,"nodeType":"ErrorDefinition","src":"1190:51:114","nodes":[],"documentation":{"id":60069,"nodeType":"StructuredDocumentation","src":"1102:83:114","text":"@notice Error thrown when minimum commitment age is greater than epoch duration"},"errorSelector":"a7075e5f","name":"minCommitmentAgeForPostconfirmationTooLong","nameLocation":"1196:42:114","parameters":{"id":60070,"nodeType":"ParameterList","parameters":[],"src":"1238:2:114"}},{"id":60074,"nodeType":"ErrorDefinition","src":"1354:46:114","nodes":[],"documentation":{"id":60072,"nodeType":"StructuredDocumentation","src":"1247:102:114","text":"@notice Error thrown when maximum postconfirmer non-reactivity time is greater than epoch duration"},"errorSelector":"3c9f1a53","name":"postconfirmerPrivilegeDurationTooLong","nameLocation":"1360:37:114","parameters":{"id":60073,"nodeType":"ParameterList","parameters":[],"src":"1397:2:114"}},{"id":60094,"nodeType":"FunctionDefinition","src":"1623:237:114","nodes":[],"body":{"id":60093,"nodeType":"Block","src":"1677:183:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60081,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39144,"src":"1716:18:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60082,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1736:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1740:6:114","memberName":"sender","nodeType":"MemberAccess","src":"1736:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60080,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"1708:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1708:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e4c59","id":60085,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1761:36:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""},"value":"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""}],"id":60079,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1687:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1687:120:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60087,"nodeType":"ExpressionStatement","src":"1687:120:114"},{"expression":{"arguments":[{"id":60089,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"1827:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":60090,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60076,"src":"1845:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60088,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39306,"src":"1817:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":60091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1817:36:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60092,"nodeType":"ExpressionStatement","src":"1817:36:114"}]},"functionSelector":"949d7c2a","implemented":true,"kind":"function","modifiers":[],"name":"grantCommitmentAdmin","nameLocation":"1632:20:114","parameters":{"id":60077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60076,"mutability":"mutable","name":"account","nameLocation":"1661:7:114","nodeType":"VariableDeclaration","scope":60094,"src":"1653:15:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60075,"name":"address","nodeType":"ElementaryTypeName","src":"1653:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1652:17:114"},"returnParameters":{"id":60078,"nodeType":"ParameterList","parameters":[],"src":"1677:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60130,"nodeType":"FunctionDefinition","src":"1866:326:114","nodes":[],"body":{"id":60129,"nodeType":"Block","src":"1935:257:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60102,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39144,"src":"1974:18:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60103,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1994:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1998:6:114","memberName":"sender","nodeType":"MemberAccess","src":"1994:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60101,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"1966:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1966:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e4c59","id":60106,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2019:36:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""},"value":"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""}],"id":60100,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1945:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1945:120:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60108,"nodeType":"ExpressionStatement","src":"1945:120:114"},{"body":{"id":60127,"nodeType":"Block","src":"2121:65:114","statements":[{"expression":{"arguments":[{"id":60121,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"2145:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":60122,"name":"accounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60097,"src":"2163:8:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60124,"indexExpression":{"id":60123,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60110,"src":"2172:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2163:11:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60120,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39306,"src":"2135:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":60125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2135:40:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60126,"nodeType":"ExpressionStatement","src":"2135:40:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60113,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60110,"src":"2095:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":60114,"name":"accounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60097,"src":"2099:8:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2108:6:114","memberName":"length","nodeType":"MemberAccess","src":"2099:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2095:19:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60128,"initializationExpression":{"assignments":[60110],"declarations":[{"constant":false,"id":60110,"mutability":"mutable","name":"i","nameLocation":"2088:1:114","nodeType":"VariableDeclaration","scope":60128,"src":"2080:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60109,"name":"uint256","nodeType":"ElementaryTypeName","src":"2080:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60112,"initialValue":{"hexValue":"30","id":60111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2092:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2080:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2116:3:114","subExpression":{"id":60117,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60110,"src":"2116:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60119,"nodeType":"ExpressionStatement","src":"2116:3:114"},"nodeType":"ForStatement","src":"2075:111:114"}]},"functionSelector":"4b47d955","implemented":true,"kind":"function","modifiers":[],"name":"batchGrantCommitmentAdmin","nameLocation":"1875:25:114","parameters":{"id":60098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60097,"mutability":"mutable","name":"accounts","nameLocation":"1918:8:114","nodeType":"VariableDeclaration","scope":60130,"src":"1901:25:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60095,"name":"address","nodeType":"ElementaryTypeName","src":"1901:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60096,"nodeType":"ArrayTypeName","src":"1901:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1900:27:114"},"returnParameters":{"id":60099,"nodeType":"ParameterList","parameters":[],"src":"1935:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60144,"nodeType":"FunctionDefinition","src":"2198:136:114","nodes":[],"body":{"id":60143,"nodeType":"Block","src":"2280:54:114","nodes":[],"statements":[{"expression":{"arguments":[{"id":60139,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60062,"src":"2300:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":60140,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60132,"src":"2318:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60138,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39306,"src":"2290:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":60141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2290:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60142,"nodeType":"ExpressionStatement","src":"2290:37:114"}]},"functionSelector":"81df1746","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60135,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"2262:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60136,"kind":"modifierInvocation","modifierName":{"id":60134,"name":"onlyRole","nameLocations":["2253:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"2253:8:114"},"nodeType":"ModifierInvocation","src":"2253:26:114"}],"name":"grantTrustedAttester","nameLocation":"2207:20:114","parameters":{"id":60133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60132,"mutability":"mutable","name":"attester","nameLocation":"2236:8:114","nodeType":"VariableDeclaration","scope":60144,"src":"2228:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60131,"name":"address","nodeType":"ElementaryTypeName","src":"2228:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2227:18:114"},"returnParameters":{"id":60137,"nodeType":"ParameterList","parameters":[],"src":"2280:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60174,"nodeType":"FunctionDefinition","src":"2340:226:114","nodes":[],"body":{"id":60173,"nodeType":"Block","src":"2437:129:114","nodes":[],"statements":[{"body":{"id":60171,"nodeType":"Block","src":"2494:66:114","statements":[{"expression":{"arguments":[{"id":60165,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60062,"src":"2518:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":60166,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60147,"src":"2536:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60168,"indexExpression":{"id":60167,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60154,"src":"2546:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2536:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60164,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39306,"src":"2508:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":60169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2508:41:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60170,"nodeType":"ExpressionStatement","src":"2508:41:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60157,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60154,"src":"2467:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":60158,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60147,"src":"2471:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2481:6:114","memberName":"length","nodeType":"MemberAccess","src":"2471:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2467:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60172,"initializationExpression":{"assignments":[60154],"declarations":[{"constant":false,"id":60154,"mutability":"mutable","name":"i","nameLocation":"2460:1:114","nodeType":"VariableDeclaration","scope":60172,"src":"2452:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60153,"name":"uint256","nodeType":"ElementaryTypeName","src":"2452:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60156,"initialValue":{"hexValue":"30","id":60155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2464:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2452:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2489:3:114","subExpression":{"id":60161,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60154,"src":"2489:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60163,"nodeType":"ExpressionStatement","src":"2489:3:114"},"nodeType":"ForStatement","src":"2447:113:114"}]},"functionSelector":"cf6772ad","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60150,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"2419:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60151,"kind":"modifierInvocation","modifierName":{"id":60149,"name":"onlyRole","nameLocations":["2410:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"2410:8:114"},"nodeType":"ModifierInvocation","src":"2410:26:114"}],"name":"batchGrantTrustedAttester","nameLocation":"2349:25:114","parameters":{"id":60148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60147,"mutability":"mutable","name":"attesters","nameLocation":"2392:9:114","nodeType":"VariableDeclaration","scope":60174,"src":"2375:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60145,"name":"address","nodeType":"ElementaryTypeName","src":"2375:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60146,"nodeType":"ArrayTypeName","src":"2375:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2374:28:114"},"returnParameters":{"id":60152,"nodeType":"ParameterList","parameters":[],"src":"2437:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60256,"nodeType":"FunctionDefinition","src":"2789:1624:114","nodes":[],"body":{"id":60255,"nodeType":"Block","src":"3215:1198:114","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":60195,"name":"__BaseSettlement_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62065,"src":"3225:31:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":60196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3225:33:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60197,"nodeType":"ExpressionStatement","src":"3225:33:114"},{"expression":{"id":60200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60198,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"3268:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60199,"name":"_stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60177,"src":"3286:16:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"src":"3268:34:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60201,"nodeType":"ExpressionStatement","src":"3268:34:114"},{"expression":{"id":60204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60202,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61824,"src":"3312:26:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60203,"name":"_leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60181,"src":"3341:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3312:56:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60205,"nodeType":"ExpressionStatement","src":"3312:56:114"},{"expression":{"id":60208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60206,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"3378:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60207,"name":"_lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60179,"src":"3414:34:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3378:70:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60209,"nodeType":"ExpressionStatement","src":"3378:70:114"},{"expression":{"arguments":[{"id":60213,"name":"_epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60183,"src":"3489:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":60214,"name":"_custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60186,"src":"3505:11:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"expression":{"id":60210,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"3458:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3474:14:114","memberName":"registerDomain","nodeType":"MemberAccess","referencedDeclaration":64078,"src":"3458:30:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (uint256,address[] memory) external"}},"id":60215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3458:59:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60216,"nodeType":"ExpressionStatement","src":"3458:59:114"},{"expression":{"arguments":[{"expression":{"id":60218,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3548:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3552:6:114","memberName":"sender","nodeType":"MemberAccess","src":"3548:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60217,"name":"grantCommitmentAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60094,"src":"3527:20:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":60220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3527:32:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60221,"nodeType":"ExpressionStatement","src":"3527:32:114"},{"expression":{"arguments":[{"expression":{"id":60223,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3590:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3594:6:114","memberName":"sender","nodeType":"MemberAccess","src":"3590:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60222,"name":"grantTrustedAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60144,"src":"3569:20:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":60225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3569:32:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60226,"nodeType":"ExpressionStatement","src":"3569:32:114"},{"expression":{"id":60229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60227,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61829,"src":"3611:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60228,"name":"_postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60188,"src":"3635:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3611:46:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60230,"nodeType":"ExpressionStatement","src":"3611:46:114"},{"expression":{"id":60233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60231,"name":"moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61822,"src":"3667:16:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60232,"name":"_moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60190,"src":"3686:17:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3667:36:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60234,"nodeType":"ExpressionStatement","src":"3667:36:114"},{"expression":{"id":60239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60235,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61832,"src":"4204:35:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60236,"name":"_epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60183,"src":"4242:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":60237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4259:2:114","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"4242:19:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4204:57:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60240,"nodeType":"ExpressionStatement","src":"4204:57:114"},{"expression":{"id":60245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60241,"name":"postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61835,"src":"4271:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60242,"name":"_epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60183,"src":"4304:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":60243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4321:2:114","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"4304:19:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4271:52:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60246,"nodeType":"ExpressionStatement","src":"4271:52:114"},{"expression":{"id":60249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60247,"name":"rewardPerAttestationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61916,"src":"4333:25:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":60248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4361:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4333:29:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60250,"nodeType":"ExpressionStatement","src":"4333:29:114"},{"expression":{"id":60253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60251,"name":"rewardPerPostconfirmationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61918,"src":"4372:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":60252,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4405:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4372:34:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60254,"nodeType":"ExpressionStatement","src":"4372:34:114"}]},"functionSelector":"107e21ca","implemented":true,"kind":"function","modifiers":[{"id":60193,"kind":"modifierInvocation","modifierName":{"id":60192,"name":"initializer","nameLocations":["3203:11:114"],"nodeType":"IdentifierPath","referencedDeclaration":39586,"src":"3203:11:114"},"nodeType":"ModifierInvocation","src":"3203:11:114"}],"name":"initialize","nameLocation":"2798:10:114","parameters":{"id":60191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60177,"mutability":"mutable","name":"_stakingContract","nameLocation":"2835:16:114","nodeType":"VariableDeclaration","scope":60256,"src":"2818:33:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"},"typeName":{"id":60176,"nodeType":"UserDefinedTypeName","pathNode":{"id":60175,"name":"IMovementStaking","nameLocations":["2818:16:114"],"nodeType":"IdentifierPath","referencedDeclaration":64348,"src":"2818:16:114"},"referencedDeclaration":64348,"src":"2818:16:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"visibility":"internal"},{"constant":false,"id":60179,"mutability":"mutable","name":"_lastPostconfirmedSuperBlockHeight","nameLocation":"2869:34:114","nodeType":"VariableDeclaration","scope":60256,"src":"2861:42:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60178,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60181,"mutability":"mutable","name":"_leadingSuperBlockTolerance","nameLocation":"2921:27:114","nodeType":"VariableDeclaration","scope":60256,"src":"2913:35:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60180,"name":"uint256","nodeType":"ElementaryTypeName","src":"2913:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60183,"mutability":"mutable","name":"_epochDuration","nameLocation":"2966:14:114","nodeType":"VariableDeclaration","scope":60256,"src":"2958:22:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60182,"name":"uint256","nodeType":"ElementaryTypeName","src":"2958:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60186,"mutability":"mutable","name":"_custodians","nameLocation":"3024:11:114","nodeType":"VariableDeclaration","scope":60256,"src":"3007:28:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60184,"name":"address","nodeType":"ElementaryTypeName","src":"3007:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60185,"nodeType":"ArrayTypeName","src":"3007:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":60188,"mutability":"mutable","name":"_postconfirmerDuration","nameLocation":"3053:22:114","nodeType":"VariableDeclaration","scope":60256,"src":"3045:30:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60187,"name":"uint256","nodeType":"ElementaryTypeName","src":"3045:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60190,"mutability":"mutable","name":"_moveTokenAddress","nameLocation":"3110:17:114","nodeType":"VariableDeclaration","scope":60256,"src":"3102:25:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60189,"name":"address","nodeType":"ElementaryTypeName","src":"3102:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2808:387:114"},"returnParameters":{"id":60194,"nodeType":"ParameterList","parameters":[],"src":"3215:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60275,"nodeType":"FunctionDefinition","src":"4465:195:114","nodes":[],"body":{"id":60274,"nodeType":"Block","src":"4505:155:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60262,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39144,"src":"4531:18:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60263,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4551:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4555:6:114","memberName":"sender","nodeType":"MemberAccess","src":"4551:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60261,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"4523:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4523:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e5f4f4e4c59","id":60266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4564:39:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_b077b31285a16307062fcb4fde0e57e8246ea6dc3cdd1c5dd5880d32a26fbf54","typeString":"literal_string \"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY\""},"value":"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b077b31285a16307062fcb4fde0e57e8246ea6dc3cdd1c5dd5880d32a26fbf54","typeString":"literal_string \"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY\""}],"id":60260,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4515:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4515:89:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60268,"nodeType":"ExpressionStatement","src":"4515:89:114"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":60269,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"4614:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4630:21:114","memberName":"acceptGenesisCeremony","nodeType":"MemberAccess","referencedDeclaration":64081,"src":"4614:37:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":60272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4614:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60273,"nodeType":"ExpressionStatement","src":"4614:39:114"}]},"documentation":{"id":60257,"nodeType":"StructuredDocumentation","src":"4419:41:114","text":"@notice Accepts the genesis ceremony."},"functionSelector":"92a2ebf3","implemented":true,"kind":"function","modifiers":[],"name":"acceptGenesisCeremony","nameLocation":"4474:21:114","parameters":{"id":60258,"nodeType":"ParameterList","parameters":[],"src":"4495:2:114"},"returnParameters":{"id":60259,"nodeType":"ParameterList","parameters":[],"src":"4505:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60309,"nodeType":"FunctionDefinition","src":"4837:570:114","nodes":[],"body":{"id":60308,"nodeType":"Block","src":"4937:470:114","nodes":[],"statements":[{"assignments":[60285],"declarations":[{"constant":false,"id":60285,"mutability":"mutable","name":"epochDuration","nameLocation":"5041:13:114","nodeType":"VariableDeclaration","scope":60308,"src":"5033:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60284,"name":"uint256","nodeType":"ElementaryTypeName","src":"5033:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60293,"initialValue":{"arguments":[{"arguments":[{"id":60290,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5098:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60289,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5090:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60288,"name":"address","nodeType":"ElementaryTypeName","src":"5090:7:114","typeDescriptions":{}}},"id":60291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5090:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60286,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"5057:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5073:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"5057:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5057:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5033:71:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":60294,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5229:1:114","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":60295,"name":"_postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60278,"src":"5233:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5229:26:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":60297,"name":"epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60285,"src":"5259:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5229:43:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60303,"nodeType":"IfStatement","src":"5225:120:114","trueBody":{"id":60302,"nodeType":"Block","src":"5275:70:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60299,"name":"PostconfirmerDurationTooLongForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60068,"src":"5296:36:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5296:38:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60301,"nodeType":"RevertStatement","src":"5289:45:114"}]}},{"expression":{"id":60306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60304,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61829,"src":"5354:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60305,"name":"_postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60278,"src":"5378:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5354:46:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60307,"nodeType":"ExpressionStatement","src":"5354:46:114"}]},"documentation":{"id":60276,"nodeType":"StructuredDocumentation","src":"4666:166:114","text":"@notice Sets the postconfirmer term duration, must be less than epoch duration\n @param _postconfirmerDuration New postconfirmer term duration in time units"},"functionSelector":"3d645927","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60281,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"4919:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60282,"kind":"modifierInvocation","modifierName":{"id":60280,"name":"onlyRole","nameLocations":["4910:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"4910:8:114"},"nodeType":"ModifierInvocation","src":"4910:26:114"}],"name":"setPostconfirmerDuration","nameLocation":"4846:24:114","parameters":{"id":60279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60278,"mutability":"mutable","name":"_postconfirmerDuration","nameLocation":"4879:22:114","nodeType":"VariableDeclaration","scope":60309,"src":"4871:30:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60277,"name":"uint256","nodeType":"ElementaryTypeName","src":"4871:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4870:32:114"},"returnParameters":{"id":60283,"nodeType":"ParameterList","parameters":[],"src":"4937:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60317,"nodeType":"FunctionDefinition","src":"5413:111:114","nodes":[],"body":{"id":60316,"nodeType":"Block","src":"5479:45:114","nodes":[],"statements":[{"expression":{"id":60314,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61829,"src":"5496:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60313,"id":60315,"nodeType":"Return","src":"5489:28:114"}]},"baseFunctions":[61959],"functionSelector":"1241ebe3","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerDuration","nameLocation":"5422:24:114","parameters":{"id":60310,"nodeType":"ParameterList","parameters":[],"src":"5446:2:114"},"returnParameters":{"id":60313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60312,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60317,"src":"5470:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60311,"name":"uint256","nodeType":"ElementaryTypeName","src":"5470:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5469:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60348,"nodeType":"FunctionDefinition","src":"5787:464:114","nodes":[],"body":{"id":60347,"nodeType":"Block","src":"5905:346:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60326,"name":"_postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60320,"src":"5973:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":60331,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6049:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60330,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6041:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60329,"name":"address","nodeType":"ElementaryTypeName","src":"6041:7:114","typeDescriptions":{}}},"id":60332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6041:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60327,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"6008:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6024:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"6008:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6008:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":60334,"name":"getMinCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60396,"src":"6058:38:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6058:40:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6008:90:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5973:125:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60342,"nodeType":"IfStatement","src":"5969:202:114","trueBody":{"id":60341,"nodeType":"Block","src":"6100:71:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60338,"name":"postconfirmerPrivilegeDurationTooLong","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60074,"src":"6121:37:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6121:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60340,"nodeType":"RevertStatement","src":"6114:46:114"}]}},{"expression":{"id":60345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60343,"name":"postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61835,"src":"6180:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60344,"name":"_postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60320,"src":"6213:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6180:64:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60346,"nodeType":"ExpressionStatement","src":"6180:64:114"}]},"documentation":{"id":60318,"nodeType":"StructuredDocumentation","src":"5530:252:114","text":"@notice Sets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\n @param _postconfirmerPrivilegeDuration maximum time the postconfirmer is permitted to be non-reactive to an honest superBlock commitment"},"functionSelector":"da7d28b6","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60323,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"5887:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60324,"kind":"modifierInvocation","modifierName":{"id":60322,"name":"onlyRole","nameLocations":["5878:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"5878:8:114"},"nodeType":"ModifierInvocation","src":"5878:26:114"}],"name":"setPostconfirmerPrivilegeDuration","nameLocation":"5796:33:114","parameters":{"id":60321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60320,"mutability":"mutable","name":"_postconfirmerPrivilegeDuration","nameLocation":"5838:31:114","nodeType":"VariableDeclaration","scope":60348,"src":"5830:39:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60319,"name":"uint256","nodeType":"ElementaryTypeName","src":"5830:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5829:41:114"},"returnParameters":{"id":60325,"nodeType":"ParameterList","parameters":[],"src":"5905:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60357,"nodeType":"FunctionDefinition","src":"6474:129:114","nodes":[],"body":{"id":60356,"nodeType":"Block","src":"6549:54:114","nodes":[],"statements":[{"expression":{"id":60354,"name":"postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61835,"src":"6566:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60353,"id":60355,"nodeType":"Return","src":"6559:37:114"}]},"documentation":{"id":60349,"nodeType":"StructuredDocumentation","src":"6257:212:114","text":"@notice Gets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\n @return The maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"},"functionSelector":"028e490a","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerPrivilegeDuration","nameLocation":"6483:33:114","parameters":{"id":60350,"nodeType":"ParameterList","parameters":[],"src":"6516:2:114"},"returnParameters":{"id":60353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60352,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60357,"src":"6540:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60351,"name":"uint256","nodeType":"ElementaryTypeName","src":"6540:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6539:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60388,"nodeType":"FunctionDefinition","src":"7053:533:114","nodes":[],"body":{"id":60387,"nodeType":"Block","src":"7181:405:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60366,"name":"_minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60360,"src":"7293:36:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":60371,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7374:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60370,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7366:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60369,"name":"address","nodeType":"ElementaryTypeName","src":"7366:7:114","typeDescriptions":{}}},"id":60372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7366:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60367,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"7333:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7349:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"7333:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7333:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":60374,"name":"getPostconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60357,"src":"7383:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7383:35:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7333:85:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7293:125:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60382,"nodeType":"IfStatement","src":"7289:207:114","trueBody":{"id":60381,"nodeType":"Block","src":"7420:76:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60378,"name":"minCommitmentAgeForPostconfirmationTooLong","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60071,"src":"7441:42:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7441:44:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60380,"nodeType":"RevertStatement","src":"7434:51:114"}]}},{"expression":{"id":60385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60383,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61832,"src":"7505:35:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60384,"name":"_minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60360,"src":"7543:36:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7505:74:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60386,"nodeType":"ExpressionStatement","src":"7505:74:114"}]},"documentation":{"id":60358,"nodeType":"StructuredDocumentation","src":"6609:169:114","text":"@notice Sets the minimum time that must pass before a commitment can be postconfirmed\n @param _minCommitmentAgeForPostconfirmation New minimum commitment age "},"functionSelector":"1f83e2a3","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60363,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"7163:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60364,"kind":"modifierInvocation","modifierName":{"id":60362,"name":"onlyRole","nameLocations":["7154:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"7154:8:114"},"nodeType":"ModifierInvocation","src":"7154:26:114"}],"name":"setMinCommitmentAgeForPostconfirmation","nameLocation":"7062:38:114","parameters":{"id":60361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60360,"mutability":"mutable","name":"_minCommitmentAgeForPostconfirmation","nameLocation":"7109:36:114","nodeType":"VariableDeclaration","scope":60388,"src":"7101:44:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60359,"name":"uint256","nodeType":"ElementaryTypeName","src":"7101:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7100:46:114"},"returnParameters":{"id":60365,"nodeType":"ParameterList","parameters":[],"src":"7181:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60396,"nodeType":"FunctionDefinition","src":"7592:139:114","nodes":[],"body":{"id":60395,"nodeType":"Block","src":"7672:59:114","nodes":[],"statements":[{"expression":{"id":60393,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61832,"src":"7689:35:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60392,"id":60394,"nodeType":"Return","src":"7682:42:114"}]},"functionSelector":"ab208ebd","implemented":true,"kind":"function","modifiers":[],"name":"getMinCommitmentAgeForPostconfirmation","nameLocation":"7601:38:114","parameters":{"id":60389,"nodeType":"ParameterList","parameters":[],"src":"7639:2:114"},"returnParameters":{"id":60392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60391,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60396,"src":"7663:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60390,"name":"uint256","nodeType":"ElementaryTypeName","src":"7663:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7662:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60409,"nodeType":"FunctionDefinition","src":"7737:132:114","nodes":[],"body":{"id":60408,"nodeType":"Block","src":"7820:49:114","nodes":[],"statements":[{"expression":{"id":60406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60404,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61893,"src":"7830:22:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60405,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60398,"src":"7855:7:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7830:32:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60407,"nodeType":"ExpressionStatement","src":"7830:32:114"}]},"functionSelector":"d2526fef","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60401,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"7802:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60402,"kind":"modifierInvocation","modifierName":{"id":60400,"name":"onlyRole","nameLocations":["7793:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"7793:8:114"},"nodeType":"ModifierInvocation","src":"7793:26:114"}],"name":"setOpenAttestationEnabled","nameLocation":"7746:25:114","parameters":{"id":60399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60398,"mutability":"mutable","name":"enabled","nameLocation":"7777:7:114","nodeType":"VariableDeclaration","scope":60409,"src":"7772:12:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":60397,"name":"bool","nodeType":"ElementaryTypeName","src":"7772:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7771:14:114"},"returnParameters":{"id":60403,"nodeType":"ParameterList","parameters":[],"src":"7820:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60424,"nodeType":"FunctionDefinition","src":"8131:129:114","nodes":[],"body":{"id":60423,"nodeType":"Block","src":"8189:71:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60419,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8247:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60418,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8239:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60417,"name":"address","nodeType":"ElementaryTypeName","src":"8239:7:114","typeDescriptions":{}}},"id":60420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8239:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60415,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"8206:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8222:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"8206:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8206:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60414,"id":60422,"nodeType":"Return","src":"8199:54:114"}]},"baseFunctions":[61953],"documentation":{"id":60410,"nodeType":"StructuredDocumentation","src":"8091:35:114","text":"@notice Gets the epoch duration"},"functionSelector":"5d3ea8f1","implemented":true,"kind":"function","modifiers":[],"name":"getEpochDuration","nameLocation":"8140:16:114","parameters":{"id":60411,"nodeType":"ParameterList","parameters":[],"src":"8156:2:114"},"returnParameters":{"id":60414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60413,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60424,"src":"8180:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60412,"name":"uint256","nodeType":"ElementaryTypeName","src":"8180:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8179:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60449,"nodeType":"FunctionDefinition","src":"8331:207:114","nodes":[],"body":{"id":60448,"nodeType":"Block","src":"8390:148:114","nodes":[],"statements":[{"assignments":[60431],"declarations":[{"constant":false,"id":60431,"mutability":"mutable","name":"currentTime","nameLocation":"8408:11:114","nodeType":"VariableDeclaration","scope":60448,"src":"8400:19:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60430,"name":"uint256","nodeType":"ElementaryTypeName","src":"8400:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60434,"initialValue":{"expression":{"id":60432,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"8422:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":60433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8428:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"8422:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8400:37:114"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60435,"name":"currentTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60431,"src":"8454:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60436,"name":"currentTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60431,"src":"8469:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"arguments":[{"arguments":[{"id":60441,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8524:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60440,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8516:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60439,"name":"address","nodeType":"ElementaryTypeName","src":"8516:7:114","typeDescriptions":{}}},"id":60442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8516:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60437,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"8483:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8499:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"8483:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8483:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8469:61:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":60445,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8468:63:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8454:77:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60429,"id":60447,"nodeType":"Return","src":"8447:84:114"}]},"documentation":{"id":60425,"nodeType":"StructuredDocumentation","src":"8266:60:114","text":"@notice Gets the time at which the current epoch started"},"functionSelector":"90879f64","implemented":true,"kind":"function","modifiers":[],"name":"getEpochStartTime","nameLocation":"8340:17:114","parameters":{"id":60426,"nodeType":"ParameterList","parameters":[],"src":"8357:2:114"},"returnParameters":{"id":60429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60428,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60449,"src":"8381:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60427,"name":"uint256","nodeType":"ElementaryTypeName","src":"8381:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8380:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60463,"nodeType":"FunctionDefinition","src":"8574:133:114","nodes":[],"body":{"id":60462,"nodeType":"Block","src":"8631:76:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60458,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8694:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60457,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8686:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60456,"name":"address","nodeType":"ElementaryTypeName","src":"8686:7:114","typeDescriptions":{}}},"id":60459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8686:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60454,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"8648:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8664:21:114","memberName":"getEpochByL1BlockTime","nodeType":"MemberAccess","referencedDeclaration":64088,"src":"8648:37:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8648:52:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60453,"id":60461,"nodeType":"Return","src":"8641:59:114"}]},"baseFunctions":[61990],"functionSelector":"37d7f58f","implemented":true,"kind":"function","modifiers":[],"name":"getPresentEpoch","nameLocation":"8583:15:114","parameters":{"id":60450,"nodeType":"ParameterList","parameters":[],"src":"8598:2:114"},"returnParameters":{"id":60453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60452,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60463,"src":"8622:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60451,"name":"uint256","nodeType":"ElementaryTypeName","src":"8622:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8621:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60477,"nodeType":"FunctionDefinition","src":"8745:131:114","nodes":[],"body":{"id":60476,"nodeType":"Block","src":"8804:72:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60472,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8863:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8855:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60470,"name":"address","nodeType":"ElementaryTypeName","src":"8855:7:114","typeDescriptions":{}}},"id":60473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8855:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60468,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"8821:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8837:17:114","memberName":"getAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":64095,"src":"8821:33:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8821:48:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60467,"id":60475,"nodeType":"Return","src":"8814:55:114"}]},"baseFunctions":[61984],"functionSelector":"6c713af8","implemented":true,"kind":"function","modifiers":[],"name":"getAcceptingEpoch","nameLocation":"8754:17:114","parameters":{"id":60464,"nodeType":"ParameterList","parameters":[],"src":"8771:2:114"},"returnParameters":{"id":60467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60477,"src":"8795:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60465,"name":"uint256","nodeType":"ElementaryTypeName","src":"8795:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8794:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60491,"nodeType":"FunctionDefinition","src":"8946:165:114","nodes":[],"body":{"id":60490,"nodeType":"Block","src":"9022:89:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60486,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9098:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60485,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9090:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60484,"name":"address","nodeType":"ElementaryTypeName","src":"9090:7:114","typeDescriptions":{}}},"id":60487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9090:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60482,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"9039:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9055:34:114","memberName":"getNextAcceptingEpochWithException","nodeType":"MemberAccess","referencedDeclaration":64102,"src":"9039:50:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9039:65:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60481,"id":60489,"nodeType":"Return","src":"9032:72:114"}]},"functionSelector":"3752d675","implemented":true,"kind":"function","modifiers":[],"name":"getNextAcceptingEpochWithException","nameLocation":"8955:34:114","parameters":{"id":60478,"nodeType":"ParameterList","parameters":[],"src":"8989:2:114"},"returnParameters":{"id":60481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60480,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60491,"src":"9013:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60479,"name":"uint256","nodeType":"ElementaryTypeName","src":"9013:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9012:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60522,"nodeType":"FunctionDefinition","src":"9197:414:114","nodes":[],"body":{"id":60521,"nodeType":"Block","src":"9264:347:114","nodes":[],"statements":[{"assignments":[60498],"declarations":[{"constant":false,"id":60498,"mutability":"mutable","name":"currentTime","nameLocation":"9282:11:114","nodeType":"VariableDeclaration","scope":60521,"src":"9274:19:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60497,"name":"uint256","nodeType":"ElementaryTypeName","src":"9274:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60501,"initialValue":{"expression":{"id":60499,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"9296:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":60500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9302:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"9296:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9274:37:114"},{"assignments":[60503],"declarations":[{"constant":false,"id":60503,"mutability":"mutable","name":"currentTimeCorrected","nameLocation":"9434:20:114","nodeType":"VariableDeclaration","scope":60521,"src":"9426:28:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60502,"name":"uint256","nodeType":"ElementaryTypeName","src":"9426:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60513,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60504,"name":"currentTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60498,"src":"9457:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"arguments":[{"arguments":[{"id":60509,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9512:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9504:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60507,"name":"address","nodeType":"ElementaryTypeName","src":"9504:7:114","typeDescriptions":{}}},"id":60510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9504:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60505,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"9471:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9487:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"9471:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9471:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9457:61:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9426:92:114"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60514,"name":"currentTimeCorrected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60503,"src":"9535:20:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60515,"name":"currentTimeCorrected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60503,"src":"9559:20:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":60516,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61829,"src":"9582:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9559:44:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":60518,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9558:46:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9535:69:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60496,"id":60520,"nodeType":"Return","src":"9528:76:114"}]},"documentation":{"id":60492,"nodeType":"StructuredDocumentation","src":"9117:75:114","text":"@notice Gets the time at which the current postconfirmer's term started"},"functionSelector":"5f4d642e","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerStartTime","nameLocation":"9206:25:114","parameters":{"id":60493,"nodeType":"ParameterList","parameters":[],"src":"9231:2:114"},"returnParameters":{"id":60496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60495,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60522,"src":"9255:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60494,"name":"uint256","nodeType":"ElementaryTypeName","src":"9255:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9254:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60583,"nodeType":"FunctionDefinition","src":"9951:929:114","nodes":[],"body":{"id":60582,"nodeType":"Block","src":"10009:871:114","nodes":[],"statements":[{"assignments":[60529],"declarations":[{"constant":false,"id":60529,"mutability":"mutable","name":"randSeed1","nameLocation":"10400:9:114","nodeType":"VariableDeclaration","scope":60582,"src":"10392:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60528,"name":"uint256","nodeType":"ElementaryTypeName","src":"10392:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60532,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":60530,"name":"getPostconfirmerStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60522,"src":"10412:25:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10412:27:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10392:47:114"},{"assignments":[60534],"declarations":[{"constant":false,"id":60534,"mutability":"mutable","name":"randSeed2","nameLocation":"10457:9:114","nodeType":"VariableDeclaration","scope":60582,"src":"10449:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60533,"name":"uint256","nodeType":"ElementaryTypeName","src":"10449:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60537,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":60535,"name":"getEpochStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60449,"src":"10469:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10469:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10449:39:114"},{"assignments":[60542],"declarations":[{"constant":false,"id":60542,"mutability":"mutable","name":"attesters","nameLocation":"10515:9:114","nodeType":"VariableDeclaration","scope":60582,"src":"10498:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60540,"name":"address","nodeType":"ElementaryTypeName","src":"10498:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60541,"nodeType":"ArrayTypeName","src":"10498:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":60550,"initialValue":{"arguments":[{"arguments":[{"id":60547,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10587:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10579:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60545,"name":"address","nodeType":"ElementaryTypeName","src":"10579:7:114","typeDescriptions":{}}},"id":60548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10579:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60543,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"10527:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10543:35:114","memberName":"getStakedAttestersForAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":64296,"src":"10527:51:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":60549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10527:66:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10498:95:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":60551,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60542,"src":"10607:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10617:6:114","memberName":"length","nodeType":"MemberAccess","src":"10607:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":60553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10627:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10607:21:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60561,"nodeType":"IfStatement","src":"10603:69:114","trueBody":{"id":60560,"nodeType":"Block","src":"10630:42:114","statements":[{"expression":{"arguments":[{"hexValue":"30","id":60557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10659:1:114","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":60556,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10651:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60555,"name":"address","nodeType":"ElementaryTypeName","src":"10651:7:114","typeDescriptions":{}}},"id":60558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10651:10:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":60527,"id":60559,"nodeType":"Return","src":"10644:17:114"}]}},{"assignments":[60563],"declarations":[{"constant":false,"id":60563,"mutability":"mutable","name":"postconfirmerIndex","nameLocation":"10689:18:114","nodeType":"VariableDeclaration","scope":60582,"src":"10681:26:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60562,"name":"uint256","nodeType":"ElementaryTypeName","src":"10681:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60577,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":60569,"name":"randSeed1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60529,"src":"10745:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":60570,"name":"randSeed2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60534,"src":"10756:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":60567,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10728:3:114","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":60568,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10732:12:114","memberName":"encodePacked","nodeType":"MemberAccess","src":"10728:16:114","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":60571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10728:38:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":60566,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10718:9:114","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":60572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10718:49:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":60565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10710:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":60564,"name":"uint256","nodeType":"ElementaryTypeName","src":"10710:7:114","typeDescriptions":{}}},"id":60573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10710:58:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"expression":{"id":60574,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60542,"src":"10771:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10781:6:114","memberName":"length","nodeType":"MemberAccess","src":"10771:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10710:77:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10681:106:114"},{"expression":{"baseExpression":{"id":60578,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60542,"src":"10844:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60580,"indexExpression":{"id":60579,"name":"postconfirmerIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60563,"src":"10854:18:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10844:29:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":60527,"id":60581,"nodeType":"Return","src":"10837:36:114"}]},"baseFunctions":[61965],"documentation":{"id":60523,"nodeType":"StructuredDocumentation","src":"9617:109:114","text":"@notice Determines the postconfirmer in the accepting epoch using L1 block hash as a source of randomness"},"functionSelector":"35ea1c63","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmer","nameLocation":"9960:16:114","parameters":{"id":60524,"nodeType":"ParameterList","parameters":[],"src":"9976:2:114"},"returnParameters":{"id":60527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60526,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60583,"src":"10000:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60525,"name":"address","nodeType":"ElementaryTypeName","src":"10000:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9999:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60603,"nodeType":"FunctionDefinition","src":"11026:250:114","nodes":[],"body":{"id":60602,"nodeType":"Block","src":"11107:169:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60597,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11253:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60596,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11245:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60595,"name":"address","nodeType":"ElementaryTypeName","src":"11245:7:114","typeDescriptions":{}}},"id":60598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11245:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":60599,"name":"newEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60586,"src":"11260:8:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":60592,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"11211:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11227:17:114","memberName":"setAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":64347,"src":"11211:33:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":60600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11211:58:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60601,"nodeType":"ExpressionStatement","src":"11211:58:114"}]},"baseFunctions":[62009],"documentation":{"id":60584,"nodeType":"StructuredDocumentation","src":"10886:135:114","text":"@notice Sets the accepting epoch to a new value (must be higher than current)\n @param newEpoch The new accepting epoch value"},"functionSelector":"d03509ec","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60589,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"11089:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60590,"kind":"modifierInvocation","modifierName":{"id":60588,"name":"onlyRole","nameLocations":["11080:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"11080:8:114"},"nodeType":"ModifierInvocation","src":"11080:26:114"}],"name":"setAcceptingEpoch","nameLocation":"11035:17:114","parameters":{"id":60587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60586,"mutability":"mutable","name":"newEpoch","nameLocation":"11061:8:114","nodeType":"VariableDeclaration","scope":60603,"src":"11053:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60585,"name":"uint256","nodeType":"ElementaryTypeName","src":"11053:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11052:18:114"},"returnParameters":{"id":60591,"nodeType":"ParameterList","parameters":[],"src":"11107:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":60622,"nodeType":"FunctionDefinition","src":"11507:242:114","nodes":[],"body":{"id":60621,"nodeType":"Block","src":"11676:73:114","nodes":[],"statements":[{"expression":{"arguments":[{"id":60616,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60605,"src":"11714:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":60617,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60607,"src":"11722:10:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":60618,"name":"blockId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60609,"src":"11734:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":60615,"name":"SuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61843,"src":"11693:20:114","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SuperBlockCommitment_$61843_storage_ptr_$","typeString":"type(struct PCPStorage.SuperBlockCommitment storage pointer)"}},"id":60619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11693:49:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"functionReturnParameters":60614,"id":60620,"nodeType":"Return","src":"11686:56:114"}]},"functionSelector":"026583d7","implemented":true,"kind":"function","modifiers":[],"name":"createSuperBlockCommitment","nameLocation":"11516:26:114","parameters":{"id":60610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60605,"mutability":"mutable","name":"height","nameLocation":"11560:6:114","nodeType":"VariableDeclaration","scope":60622,"src":"11552:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60604,"name":"uint256","nodeType":"ElementaryTypeName","src":"11552:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60607,"mutability":"mutable","name":"commitment","nameLocation":"11584:10:114","nodeType":"VariableDeclaration","scope":60622,"src":"11576:18:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60606,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11576:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":60609,"mutability":"mutable","name":"blockId","nameLocation":"11612:7:114","nodeType":"VariableDeclaration","scope":60622,"src":"11604:15:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60608,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11604:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11542:83:114"},"returnParameters":{"id":60614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60613,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60622,"src":"11647:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60612,"nodeType":"UserDefinedTypeName","pathNode":{"id":60611,"name":"SuperBlockCommitment","nameLocations":["11647:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"11647:20:114"},"referencedDeclaration":61843,"src":"11647:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"11646:29:114"},"scope":61810,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":60714,"nodeType":"FunctionDefinition","src":"11817:2174:114","nodes":[],"body":{"id":60713,"nodeType":"Block","src":"11963:2028:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":60631,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"12050:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60634,"indexExpression":{"expression":{"id":60632,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"12062:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60633,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12083:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"12062:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12050:40:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60636,"indexExpression":{"id":60635,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60625,"src":"12091:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12050:50:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":60637,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12101:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"12050:57:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":60638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12111:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12050:62:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60643,"nodeType":"IfStatement","src":"12046:113:114","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60640,"name":"AttesterAlreadyCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61947,"src":"12133:24:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12133:26:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60642,"nodeType":"RevertStatement","src":"12126:33:114"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60644,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"12565:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":60645,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61824,"src":"12601:26:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12565:62:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":60647,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"12630:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60648,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12651:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"12630:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12565:92:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60654,"nodeType":"IfStatement","src":"12561:156:114","trueBody":{"id":60653,"nodeType":"Block","src":"12659:58:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60650,"name":"AttesterAlreadyCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61947,"src":"12680:24:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12680:26:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60652,"nodeType":"RevertStatement","src":"12673:33:114"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":60655,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"13051:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":60658,"indexExpression":{"expression":{"id":60656,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13081:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13102:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"13081:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13051:58:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":60659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13113:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13051:63:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60670,"nodeType":"IfStatement","src":"13047:172:114","trueBody":{"id":60669,"nodeType":"Block","src":"13116:103:114","statements":[{"expression":{"id":60667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":60661,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"13130:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":60664,"indexExpression":{"expression":{"id":60662,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13160:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60663,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13181:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"13160:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13130:58:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":60665,"name":"getPresentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60463,"src":"13191:15:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13191:17:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13130:78:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60668,"nodeType":"ExpressionStatement","src":"13130:78:114"}]}},{"expression":{"id":60678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":60671,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"13275:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60675,"indexExpression":{"expression":{"id":60672,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13287:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60673,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13308:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"13287:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13275:40:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60676,"indexExpression":{"id":60674,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60625,"src":"13316:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13275:50:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60677,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13328:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"src":"13275:73:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":60679,"nodeType":"ExpressionStatement","src":"13275:73:114"},{"expression":{"arguments":[{"expression":{"id":60681,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13453:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60682,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13474:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"13453:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":60683,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13482:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60684,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13503:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"13482:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60685,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"13515:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":60686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13521:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"13515:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":60680,"name":"TrySetCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60889,"src":"13425:27:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (uint256,bytes32,uint256)"}},"id":60687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13425:106:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60688,"nodeType":"ExpressionStatement","src":"13425:106:114"},{"assignments":[60690],"declarations":[{"constant":false,"id":60690,"mutability":"mutable","name":"attesterStakeForAcceptingEpoch","nameLocation":"13601:30:114","nodeType":"VariableDeclaration","scope":60713,"src":"13593:38:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60689,"name":"uint256","nodeType":"ElementaryTypeName","src":"13593:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60694,"initialValue":{"arguments":[{"id":60692,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60625,"src":"13668:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60691,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61603,"src":"13634:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":60693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13634:43:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13593:84:114"},{"expression":{"id":60703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":60695,"name":"commitmentStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61860,"src":"13687:15:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":60700,"indexExpression":{"expression":{"id":60696,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13703:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60697,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13724:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"13703:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13687:44:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":60701,"indexExpression":{"expression":{"id":60698,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13732:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60699,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13753:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"13732:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13687:77:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":60702,"name":"attesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60690,"src":"13768:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13687:111:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60704,"nodeType":"ExpressionStatement","src":"13687:111:114"},{"eventCall":{"arguments":[{"expression":{"id":60706,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13857:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60707,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13878:7:114","memberName":"blockId","nodeType":"MemberAccess","referencedDeclaration":61842,"src":"13857:28:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60708,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13899:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60709,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13920:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"13899:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":60710,"name":"attesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60690,"src":"13944:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":60705,"name":"SuperBlockCommitmentSubmitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61943,"src":"13814:29:114","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,uint256)"}},"id":60711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13814:170:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60712,"nodeType":"EmitStatement","src":"13809:175:114"}]},"documentation":{"id":60623,"nodeType":"StructuredDocumentation","src":"11755:57:114","text":"@dev submits a superBlock commitment for an attester."},"implemented":true,"kind":"function","modifiers":[],"name":"submitSuperBlockCommitmentForAttester","nameLocation":"11826:37:114","parameters":{"id":60629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60625,"mutability":"mutable","name":"attester","nameLocation":"11881:8:114","nodeType":"VariableDeclaration","scope":60714,"src":"11873:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60624,"name":"address","nodeType":"ElementaryTypeName","src":"11873:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":60628,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"11927:20:114","nodeType":"VariableDeclaration","scope":60714,"src":"11899:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60627,"nodeType":"UserDefinedTypeName","pathNode":{"id":60626,"name":"SuperBlockCommitment","nameLocations":["11899:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"11899:20:114"},"referencedDeclaration":61843,"src":"11899:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"11863:90:114"},"returnParameters":{"id":60630,"nodeType":"ParameterList","parameters":[],"src":"11963:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":60738,"nodeType":"FunctionDefinition","src":"13996:317:114","nodes":[],"body":{"id":60737,"nodeType":"Block","src":"14081:232:114","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":60727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60721,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61893,"src":"14112:22:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":60723,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60062,"src":"14146:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60724,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14164:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14168:6:114","memberName":"sender","nodeType":"MemberAccess","src":"14164:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60722,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"14138:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14138:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14112:63:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d454e54","id":60728,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14189:36:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""},"value":"UNAUTHORIZED_SUPERBLOCK_COMMITMENT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""}],"id":60720,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14091:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14091:144:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60730,"nodeType":"ExpressionStatement","src":"14091:144:114"},{"expression":{"arguments":[{"expression":{"id":60732,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14283:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14287:6:114","memberName":"sender","nodeType":"MemberAccess","src":"14283:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":60734,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60717,"src":"14295:10:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":60731,"name":"submitSuperBlockCommitmentForAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60714,"src":"14245:37:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$__$","typeString":"function (address,struct PCPStorage.SuperBlockCommitment memory)"}},"id":60735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14245:61:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60736,"nodeType":"ExpressionStatement","src":"14245:61:114"}]},"baseFunctions":[61972],"functionSelector":"0e74b609","implemented":true,"kind":"function","modifiers":[],"name":"submitSuperBlockCommitment","nameLocation":"14005:26:114","parameters":{"id":60718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60717,"mutability":"mutable","name":"commitment","nameLocation":"14060:10:114","nodeType":"VariableDeclaration","scope":60738,"src":"14032:38:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60716,"nodeType":"UserDefinedTypeName","pathNode":{"id":60715,"name":"SuperBlockCommitment","nameLocations":["14032:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"14032:20:114"},"referencedDeclaration":61843,"src":"14032:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"14031:40:114"},"returnParameters":{"id":60719,"nodeType":"ParameterList","parameters":[],"src":"14081:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":60778,"nodeType":"FunctionDefinition","src":"14319:430:114","nodes":[],"body":{"id":60777,"nodeType":"Block","src":"14420:329:114","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":60752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60746,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61893,"src":"14451:22:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":60748,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60062,"src":"14485:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60749,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14503:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14507:6:114","memberName":"sender","nodeType":"MemberAccess","src":"14503:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60747,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"14477:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14477:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14451:63:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d454e54","id":60753,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14528:36:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""},"value":"UNAUTHORIZED_SUPERBLOCK_COMMITMENT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""}],"id":60745,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14430:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60754,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14430:144:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60755,"nodeType":"ExpressionStatement","src":"14430:144:114"},{"body":{"id":60775,"nodeType":"Block","src":"14643:100:114","statements":[{"expression":{"arguments":[{"expression":{"id":60768,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14695:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14699:6:114","memberName":"sender","nodeType":"MemberAccess","src":"14695:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":60770,"name":"superBlockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60742,"src":"14707:21:114","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$dyn_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory[] memory"}},"id":60772,"indexExpression":{"id":60771,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60757,"src":"14729:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14707:24:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":60767,"name":"submitSuperBlockCommitmentForAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60714,"src":"14657:37:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$__$","typeString":"function (address,struct PCPStorage.SuperBlockCommitment memory)"}},"id":60773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14657:75:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60774,"nodeType":"ExpressionStatement","src":"14657:75:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60760,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60757,"src":"14604:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":60761,"name":"superBlockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60742,"src":"14608:21:114","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$dyn_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory[] memory"}},"id":60762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14630:6:114","memberName":"length","nodeType":"MemberAccess","src":"14608:28:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14604:32:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60776,"initializationExpression":{"assignments":[60757],"declarations":[{"constant":false,"id":60757,"mutability":"mutable","name":"i","nameLocation":"14597:1:114","nodeType":"VariableDeclaration","scope":60776,"src":"14589:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60756,"name":"uint256","nodeType":"ElementaryTypeName","src":"14589:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60759,"initialValue":{"hexValue":"30","id":60758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14601:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"14589:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"14638:3:114","subExpression":{"id":60764,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60757,"src":"14638:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60766,"nodeType":"ExpressionStatement","src":"14638:3:114"},"nodeType":"ForStatement","src":"14584:159:114"}]},"functionSelector":"622e3616","implemented":true,"kind":"function","modifiers":[],"name":"submitBatchSuperBlockCommitment","nameLocation":"14328:31:114","parameters":{"id":60743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60742,"mutability":"mutable","name":"superBlockCommitments","nameLocation":"14390:21:114","nodeType":"VariableDeclaration","scope":60778,"src":"14360:51:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$dyn_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment[]"},"typeName":{"baseType":{"id":60740,"nodeType":"UserDefinedTypeName","pathNode":{"id":60739,"name":"SuperBlockCommitment","nameLocations":["14360:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"14360:20:114"},"referencedDeclaration":61843,"src":"14360:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"id":60741,"nodeType":"ArrayTypeName","src":"14360:22:114","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$61843_storage_$dyn_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment[]"}},"visibility":"internal"}],"src":"14359:53:114"},"returnParameters":{"id":60744,"nodeType":"ParameterList","parameters":[],"src":"14420:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60795,"nodeType":"FunctionDefinition","src":"14754:209:114","nodes":[],"body":{"id":60794,"nodeType":"Block","src":"14910:53:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":60788,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"14927:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60790,"indexExpression":{"id":60789,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60780,"src":"14939:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14927:19:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60792,"indexExpression":{"id":60791,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60782,"src":"14947:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14927:29:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":60787,"id":60793,"nodeType":"Return","src":"14920:36:114"}]},"functionSelector":"556d97c8","implemented":true,"kind":"function","modifiers":[],"name":"getValidatorCommitmentAtSuperBlockHeight","nameLocation":"14763:40:114","parameters":{"id":60783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60780,"mutability":"mutable","name":"height","nameLocation":"14821:6:114","nodeType":"VariableDeclaration","scope":60795,"src":"14813:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60779,"name":"uint256","nodeType":"ElementaryTypeName","src":"14813:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60782,"mutability":"mutable","name":"attester","nameLocation":"14845:8:114","nodeType":"VariableDeclaration","scope":60795,"src":"14837:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60781,"name":"address","nodeType":"ElementaryTypeName","src":"14837:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14803:56:114"},"returnParameters":{"id":60787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60786,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60795,"src":"14881:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60785,"nodeType":"UserDefinedTypeName","pathNode":{"id":60784,"name":"SuperBlockCommitment","nameLocations":["14881:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"14881:20:114"},"referencedDeclaration":61843,"src":"14881:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"14880:29:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60805,"nodeType":"FunctionDefinition","src":"15017:159:114","nodes":[],"body":{"id":60804,"nodeType":"Block","src":"15090:86:114","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60800,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"15107:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":60801,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61824,"src":"15143:26:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15107:62:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60799,"id":60803,"nodeType":"Return","src":"15100:69:114"}]},"functionSelector":"943b79e2","implemented":true,"kind":"function","modifiers":[],"name":"getMaxTolerableSuperBlockHeight","nameLocation":"15026:31:114","parameters":{"id":60796,"nodeType":"ParameterList","parameters":[],"src":"15057:2:114"},"returnParameters":{"id":60799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60798,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60805,"src":"15081:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60797,"name":"uint256","nodeType":"ElementaryTypeName","src":"15081:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15080:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60823,"nodeType":"FunctionDefinition","src":"15261:170:114","nodes":[],"body":{"id":60822,"nodeType":"Block","src":"15378:53:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":60816,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"15395:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60818,"indexExpression":{"id":60817,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60808,"src":"15407:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15395:19:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60820,"indexExpression":{"id":60819,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60810,"src":"15415:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15395:29:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":60815,"id":60821,"nodeType":"Return","src":"15388:36:114"}]},"documentation":{"id":60806,"nodeType":"StructuredDocumentation","src":"15181:75:114","text":"@notice Gets the commitment submitted by an attester for a given height"},"functionSelector":"f1949add","implemented":true,"kind":"function","modifiers":[],"name":"getCommitmentByAttester","nameLocation":"15270:23:114","parameters":{"id":60811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60808,"mutability":"mutable","name":"height","nameLocation":"15302:6:114","nodeType":"VariableDeclaration","scope":60823,"src":"15294:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60807,"name":"uint256","nodeType":"ElementaryTypeName","src":"15294:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60810,"mutability":"mutable","name":"attester","nameLocation":"15318:8:114","nodeType":"VariableDeclaration","scope":60823,"src":"15310:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60809,"name":"address","nodeType":"ElementaryTypeName","src":"15310:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15293:34:114"},"returnParameters":{"id":60815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60814,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60823,"src":"15349:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60813,"nodeType":"UserDefinedTypeName","pathNode":{"id":60812,"name":"SuperBlockCommitment","nameLocations":["15349:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"15349:20:114"},"referencedDeclaration":61843,"src":"15349:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"15348:29:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60836,"nodeType":"FunctionDefinition","src":"15500:149:114","nodes":[],"body":{"id":60835,"nodeType":"Block","src":"15588:61:114","nodes":[],"statements":[{"expression":{"baseExpression":{"id":60831,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"15605:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":60833,"indexExpression":{"id":60832,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60826,"src":"15635:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15605:37:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60830,"id":60834,"nodeType":"Return","src":"15598:44:114"}]},"documentation":{"id":60824,"nodeType":"StructuredDocumentation","src":"15437:58:114","text":"@notice Gets the epoch assigned to a superblock height"},"functionSelector":"d283392e","implemented":true,"kind":"function","modifiers":[],"name":"getSuperBlockHeightAssignedEpoch","nameLocation":"15509:32:114","parameters":{"id":60827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60826,"mutability":"mutable","name":"height","nameLocation":"15550:6:114","nodeType":"VariableDeclaration","scope":60836,"src":"15542:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60825,"name":"uint256","nodeType":"ElementaryTypeName","src":"15542:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15541:16:114"},"returnParameters":{"id":60830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60836,"src":"15579:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60828,"name":"uint256","nodeType":"ElementaryTypeName","src":"15579:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15578:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60854,"nodeType":"FunctionDefinition","src":"15855:221:114","nodes":[],"body":{"id":60853,"nodeType":"Block","src":"15969:107:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":60845,"name":"commitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61866,"src":"15986:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":60848,"indexExpression":{"expression":{"id":60846,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60840,"src":"16008:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60847,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16029:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"16008:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15986:50:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":60851,"indexExpression":{"expression":{"id":60849,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60840,"src":"16037:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16058:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"16037:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15986:83:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60844,"id":60852,"nodeType":"Return","src":"15979:90:114"}]},"documentation":{"id":60837,"nodeType":"StructuredDocumentation","src":"15788:62:114","text":"@notice get the timestamp when a commitment was first seen"},"functionSelector":"e07472ef","implemented":true,"kind":"function","modifiers":[],"name":"getCommitmentFirstSeenAt","nameLocation":"15864:24:114","parameters":{"id":60841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60840,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"15917:20:114","nodeType":"VariableDeclaration","scope":60854,"src":"15889:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60839,"nodeType":"UserDefinedTypeName","pathNode":{"id":60838,"name":"SuperBlockCommitment","nameLocations":["15889:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"15889:20:114"},"referencedDeclaration":61843,"src":"15889:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"15888:50:114"},"returnParameters":{"id":60844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60843,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60854,"src":"15960:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60842,"name":"uint256","nodeType":"ElementaryTypeName","src":"15960:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15959:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60889,"nodeType":"FunctionDefinition","src":"16150:443:114","nodes":[],"body":{"id":60888,"nodeType":"Block","src":"16251:342:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":60864,"name":"commitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61866,"src":"16265:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":60866,"indexExpression":{"id":60865,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60857,"src":"16287:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16265:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":60868,"indexExpression":{"id":60867,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60859,"src":"16295:10:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16265:41:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":60869,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16310:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16265:46:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60873,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60861,"src":"16395:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":60874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16408:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16395:14:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60878,"nodeType":"IfStatement","src":"16391:133:114","trueBody":{"id":60877,"nodeType":"Block","src":"16411:113:114","statements":[{"functionReturnParameters":60863,"id":60876,"nodeType":"Return","src":"16507:7:114"}]}},"id":60879,"nodeType":"IfStatement","src":"16261:263:114","trueBody":{"id":60872,"nodeType":"Block","src":"16313:72:114","statements":[{"functionReturnParameters":60863,"id":60871,"nodeType":"Return","src":"16368:7:114"}]}},{"expression":{"id":60886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":60880,"name":"commitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61866,"src":"16533:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":60883,"indexExpression":{"id":60881,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60857,"src":"16555:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16533:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":60884,"indexExpression":{"id":60882,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60859,"src":"16563:10:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16533:41:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60885,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60861,"src":"16577:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16533:53:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60887,"nodeType":"ExpressionStatement","src":"16533:53:114"}]},"documentation":{"id":60855,"nodeType":"StructuredDocumentation","src":"16082:63:114","text":"@notice Sets the timestamp when a commitment was first seen"},"implemented":true,"kind":"function","modifiers":[],"name":"TrySetCommitmentFirstSeenAt","nameLocation":"16159:27:114","parameters":{"id":60862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60857,"mutability":"mutable","name":"height","nameLocation":"16195:6:114","nodeType":"VariableDeclaration","scope":60889,"src":"16187:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60856,"name":"uint256","nodeType":"ElementaryTypeName","src":"16187:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60859,"mutability":"mutable","name":"commitment","nameLocation":"16211:10:114","nodeType":"VariableDeclaration","scope":60889,"src":"16203:18:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60858,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16203:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":60861,"mutability":"mutable","name":"timestamp","nameLocation":"16231:9:114","nodeType":"VariableDeclaration","scope":60889,"src":"16223:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60860,"name":"uint256","nodeType":"ElementaryTypeName","src":"16223:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16186:55:114"},"returnParameters":{"id":60863,"nodeType":"ParameterList","parameters":[],"src":"16251:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":60898,"nodeType":"FunctionDefinition","src":"16884:135:114","nodes":[],"body":{"id":60897,"nodeType":"Block","src":"16962:57:114","nodes":[],"statements":[{"expression":{"id":60895,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"16979:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60894,"id":60896,"nodeType":"Return","src":"16972:40:114"}]},"baseFunctions":[61978],"documentation":{"id":60890,"nodeType":"StructuredDocumentation","src":"16815:64:114","text":"@notice Gets the height of the last postconfirmed superblock"},"functionSelector":"59b99597","implemented":true,"kind":"function","modifiers":[],"name":"getLastPostconfirmedSuperBlockHeight","nameLocation":"16893:36:114","parameters":{"id":60891,"nodeType":"ParameterList","parameters":[],"src":"16929:2:114"},"returnParameters":{"id":60894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60893,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60898,"src":"16953:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60892,"name":"uint256","nodeType":"ElementaryTypeName","src":"16953:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16952:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60907,"nodeType":"FunctionDefinition","src":"17025:115:114","nodes":[],"body":{"id":60906,"nodeType":"Block","src":"17077:63:114","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":60902,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17122:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17126:6:114","memberName":"sender","nodeType":"MemberAccess","src":"17122:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60901,"name":"postconfirmAndRolloverWithAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60921,"src":"17087:34:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":60904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17087:46:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60905,"nodeType":"ExpressionStatement","src":"17087:46:114"}]},"baseFunctions":[62003],"functionSelector":"26624e37","implemented":true,"kind":"function","modifiers":[],"name":"postconfirmSuperBlocksAndRollover","nameLocation":"17034:33:114","parameters":{"id":60899,"nodeType":"ParameterList","parameters":[],"src":"17067:2:114"},"returnParameters":{"id":60900,"nodeType":"ParameterList","parameters":[],"src":"17077:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60921,"nodeType":"FunctionDefinition","src":"17754:485:114","nodes":[],"body":{"id":60920,"nodeType":"Block","src":"17831:408:114","nodes":[],"statements":[{"body":{"id":60918,"nodeType":"Block","src":"18222:11:114","statements":[]},"condition":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60914,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"18182:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":60915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18218:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"18182:37:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":60913,"name":"attemptPostconfirmOrRollover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61493,"src":"18153:28:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) returns (bool)"}},"id":60917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18153:67:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60919,"nodeType":"WhileStatement","src":"18146:87:114"}]},"documentation":{"id":60908,"nodeType":"StructuredDocumentation","src":"17543:106:114","text":"@notice If the current postconfirmer is not live, we should accept postconfirmations from any attester"},"implemented":true,"kind":"function","modifiers":[],"name":"postconfirmAndRolloverWithAttester","nameLocation":"17763:34:114","parameters":{"id":60911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60910,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60921,"src":"17798:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60909,"name":"address","nodeType":"ElementaryTypeName","src":"17798:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17797:24:114"},"returnParameters":{"id":60912,"nodeType":"ParameterList","parameters":[],"src":"17831:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":60946,"nodeType":"FunctionDefinition","src":"18315:405:114","nodes":[],"body":{"id":60945,"nodeType":"Block","src":"18421:299:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60929,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"18460:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60930,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18478:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18482:6:114","memberName":"sender","nodeType":"MemberAccess","src":"18478:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60928,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"18452:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18452:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":60933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18503:70:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_0977ec2248431def5ae1a15f4d76a33486566739fca9c42d9176f889e347a11f","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0977ec2248431def5ae1a15f4d76a33486566739fca9c42d9176f889e347a11f","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":60927,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18431:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18431:152:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60935,"nodeType":"ExpressionStatement","src":"18431:152:114"},{"expression":{"id":60943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":60936,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61900,"src":"18593:33:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60940,"indexExpression":{"id":60937,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61902,"src":"18627:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18593:66:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60941,"indexExpression":{"expression":{"id":60938,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60924,"src":"18660:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60939,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18681:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"18660:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18593:95:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60942,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60924,"src":"18691:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"src":"18593:118:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":60944,"nodeType":"ExpressionStatement","src":"18593:118:114"}]},"functionSelector":"3119edd4","implemented":true,"kind":"function","modifiers":[],"name":"setPostconfirmedCommitmentAtBlockHeight","nameLocation":"18324:39:114","parameters":{"id":60925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60924,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"18392:20:114","nodeType":"VariableDeclaration","scope":60946,"src":"18364:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60923,"nodeType":"UserDefinedTypeName","pathNode":{"id":60922,"name":"SuperBlockCommitment","nameLocations":["18364:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"18364:20:114"},"referencedDeclaration":61843,"src":"18364:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"18363:50:114"},"returnParameters":{"id":60926,"nodeType":"ParameterList","parameters":[],"src":"18421:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60966,"nodeType":"FunctionDefinition","src":"18915:308:114","nodes":[],"body":{"id":60965,"nodeType":"Block","src":"19003:220:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60954,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"19042:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60955,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19060:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19064:6:114","memberName":"sender","nodeType":"MemberAccess","src":"19060:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60953,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"19034:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19034:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":60958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19085:50:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_769db6d293c786b13b107ddcfdc491f9fdfa9dc0a09944362f64328186fea1df","typeString":"literal_string \"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_769db6d293c786b13b107ddcfdc491f9fdfa9dc0a09944362f64328186fea1df","typeString":"literal_string \"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":60952,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19013:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19013:132:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60960,"nodeType":"ExpressionStatement","src":"19013:132:114"},{"expression":{"arguments":[{"id":60962,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60949,"src":"19195:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":60961,"name":"setPostconfirmedCommitmentAtBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60946,"src":"19155:39:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$__$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory)"}},"id":60963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19155:61:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60964,"nodeType":"ExpressionStatement","src":"19155:61:114"}]},"functionSelector":"08c7050f","implemented":true,"kind":"function","modifiers":[],"name":"forceLatestCommitment","nameLocation":"18924:21:114","parameters":{"id":60950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60949,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"18974:20:114","nodeType":"VariableDeclaration","scope":60966,"src":"18946:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60948,"nodeType":"UserDefinedTypeName","pathNode":{"id":60947,"name":"SuperBlockCommitment","nameLocations":["18946:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"18946:20:114"},"referencedDeclaration":61843,"src":"18946:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"18945:50:114"},"returnParameters":{"id":60951,"nodeType":"ParameterList","parameters":[],"src":"19003:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60981,"nodeType":"FunctionDefinition","src":"19229:200:114","nodes":[],"body":{"id":60980,"nodeType":"Block","src":"19331:98:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":60974,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61900,"src":"19348:33:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60976,"indexExpression":{"id":60975,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61902,"src":"19382:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19348:66:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60978,"indexExpression":{"id":60977,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60968,"src":"19415:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19348:74:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":60973,"id":60979,"nodeType":"Return","src":"19341:81:114"}]},"baseFunctions":[61999],"functionSelector":"2bfd11d6","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmedCommitment","nameLocation":"19238:26:114","parameters":{"id":60969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60968,"mutability":"mutable","name":"height","nameLocation":"19273:6:114","nodeType":"VariableDeclaration","scope":60981,"src":"19265:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60967,"name":"uint256","nodeType":"ElementaryTypeName","src":"19265:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19264:16:114"},"returnParameters":{"id":60973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60972,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60981,"src":"19302:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60971,"nodeType":"UserDefinedTypeName","pathNode":{"id":60970,"name":"SuperBlockCommitment","nameLocations":["19302:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"19302:20:114"},"referencedDeclaration":61843,"src":"19302:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"19301:29:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61137,"nodeType":"FunctionDefinition","src":"19627:2891:114","nodes":[],"body":{"id":61136,"nodeType":"Block","src":"19746:2772:114","nodes":[],"statements":[{"assignments":[60991],"declarations":[{"constant":false,"id":60991,"mutability":"mutable","name":"currentAcceptingEpoch","nameLocation":"19764:21:114","nodeType":"VariableDeclaration","scope":61136,"src":"19756:29:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60990,"name":"uint256","nodeType":"ElementaryTypeName","src":"19756:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60994,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":60992,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"19788:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19788:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19756:51:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":60995,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"20052:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":60998,"indexExpression":{"expression":{"id":60996,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"20082:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60997,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20103:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"20082:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20052:58:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":60999,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60991,"src":"20114:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20052:83:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61005,"nodeType":"IfStatement","src":"20048:155:114","trueBody":{"id":61004,"nodeType":"Block","src":"20137:66:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":61001,"name":"UnacceptableSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61945,"src":"20158:32:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":61002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20158:34:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":61003,"nodeType":"RevertStatement","src":"20151:41:114"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61006,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"20315:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":61007,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"20352:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61008,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20373:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"20352:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":61009,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20382:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20352:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20315:68:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61016,"nodeType":"IfStatement","src":"20311:140:114","trueBody":{"id":61015,"nodeType":"Block","src":"20385:66:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":61012,"name":"UnacceptableSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61945,"src":"20406:32:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":61013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20406:34:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":61014,"nodeType":"RevertStatement","src":"20399:41:114"}]}},{"assignments":[61021],"declarations":[{"constant":false,"id":61021,"mutability":"mutable","name":"attesters","nameLocation":"20568:9:114","nodeType":"VariableDeclaration","scope":61136,"src":"20551:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61019,"name":"address","nodeType":"ElementaryTypeName","src":"20551:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61020,"nodeType":"ArrayTypeName","src":"20551:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61024,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":61022,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61774,"src":"20580:35:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":61023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20580:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"20551:66:114"},{"body":{"id":61059,"nodeType":"Block","src":"20674:222:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":61047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":61036,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"20692:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61039,"indexExpression":{"expression":{"id":61037,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"20704:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61038,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20725:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"20704:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20692:40:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61043,"indexExpression":{"baseExpression":{"id":61040,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61021,"src":"20733:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61042,"indexExpression":{"id":61041,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61026,"src":"20743:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20733:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20692:54:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":61044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20747:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"20692:65:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":61045,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"20761:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61046,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20782:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"20761:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"20692:100:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61058,"nodeType":"IfStatement","src":"20688:198:114","trueBody":{"id":61057,"nodeType":"Block","src":"20794:92:114","statements":[{"expression":{"id":61055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"20812:59:114","subExpression":{"baseExpression":{"baseExpression":{"id":61048,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61908,"src":"20812:20:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61053,"indexExpression":{"id":61049,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60991,"src":"20833:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20812:43:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61054,"indexExpression":{"baseExpression":{"id":61050,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61021,"src":"20856:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61052,"indexExpression":{"id":61051,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61026,"src":"20866:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20856:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20812:57:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61056,"nodeType":"ExpressionStatement","src":"20812:59:114"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61029,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61026,"src":"20647:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61030,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61021,"src":"20651:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20661:6:114","memberName":"length","nodeType":"MemberAccess","src":"20651:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20647:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61060,"initializationExpression":{"assignments":[61026],"declarations":[{"constant":false,"id":61026,"mutability":"mutable","name":"i","nameLocation":"20640:1:114","nodeType":"VariableDeclaration","scope":61060,"src":"20632:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61025,"name":"uint256","nodeType":"ElementaryTypeName","src":"20632:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61028,"initialValue":{"hexValue":"30","id":61027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20644:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"20632:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"20669:3:114","subExpression":{"id":61033,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61026,"src":"20669:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61035,"nodeType":"ExpressionStatement","src":"20669:3:114"},"nodeType":"ForStatement","src":"20627:269:114"},{"condition":{"id":61064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"20951:61:114","subExpression":{"arguments":[{"id":61062,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"20991:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":61061,"name":"isWithinPostconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61288,"src":"20952:38:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$_t_bool_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (bool)"}},"id":61063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20952:60:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":61088,"nodeType":"Block","src":"21217:630:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":61077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61074,"name":"getPostconfirmer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60583,"src":"21709:16:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":61075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21709:18:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":61076,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60987,"src":"21731:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21709:30:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61087,"nodeType":"IfStatement","src":"21705:132:114","trueBody":{"id":61086,"nodeType":"Block","src":"21741:96:114","statements":[{"expression":{"id":61084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":61078,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61914,"src":"21759:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61081,"indexExpression":{"id":61079,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60991,"src":"21785:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21759:48:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61082,"indexExpression":{"id":61080,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60987,"src":"21808:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21759:58:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":61083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21821:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"21759:63:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61085,"nodeType":"ExpressionStatement","src":"21759:63:114"}]}}]},"id":61089,"nodeType":"IfStatement","src":"20947:900:114","trueBody":{"id":61073,"nodeType":"Block","src":"21014:197:114","statements":[{"expression":{"id":61071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":61065,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61914,"src":"21137:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61068,"indexExpression":{"id":61066,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60991,"src":"21163:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21137:48:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61069,"indexExpression":{"id":61067,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60987,"src":"21186:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21137:58:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":61070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21199:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"21137:63:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61072,"nodeType":"ExpressionStatement","src":"21137:63:114"}]}},{"expression":{"id":61097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":61090,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61900,"src":"21857:33:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61094,"indexExpression":{"id":61091,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61902,"src":"21891:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21857:66:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61095,"indexExpression":{"expression":{"id":61092,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"21924:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61093,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21945:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"21924:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21857:95:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61096,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"21955:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"src":"21857:118:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":61098,"nodeType":"ExpressionStatement","src":"21857:118:114"},{"expression":{"id":61102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61099,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"21985:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":61100,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22021:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61101,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22042:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"22021:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21985:63:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61103,"nodeType":"ExpressionStatement","src":"21985:63:114"},{"expression":{"id":61109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":61104,"name":"postconfirmedBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61870,"src":"22058:15:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":61107,"indexExpression":{"expression":{"id":61105,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22074:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61106,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22095:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"22074:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22058:44:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61108,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60987,"src":"22105:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"22058:55:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61110,"nodeType":"ExpressionStatement","src":"22058:55:114"},{"expression":{"id":61117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":61111,"name":"postconfirmedAtL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61878,"src":"22123:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":61114,"indexExpression":{"expression":{"id":61112,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22152:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61113,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22173:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"22152:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22123:57:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":61115,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"22183:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":61116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22189:6:114","memberName":"number","nodeType":"MemberAccess","src":"22183:12:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22123:72:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61118,"nodeType":"ExpressionStatement","src":"22123:72:114"},{"expression":{"id":61125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":61119,"name":"postconfirmedAtL1BlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61882,"src":"22205:31:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":61122,"indexExpression":{"expression":{"id":61120,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22237:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22258:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"22237:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22205:60:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":61123,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"22268:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":61124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22274:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"22268:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22205:78:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61126,"nodeType":"ExpressionStatement","src":"22205:78:114"},{"eventCall":{"arguments":[{"expression":{"id":61128,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22387:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61129,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22408:7:114","memberName":"blockId","nodeType":"MemberAccess","referencedDeclaration":61842,"src":"22387:28:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":61130,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22429:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61131,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22450:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"22429:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":61132,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22474:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61133,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22495:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"22474:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61127,"name":"SuperBlockPostconfirmed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61935,"src":"22350:23:114","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,uint256)"}},"id":61134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22350:161:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61135,"nodeType":"EmitStatement","src":"22345:166:114"}]},"documentation":{"id":60982,"nodeType":"StructuredDocumentation","src":"19434:188:114","text":"@dev Postconfirms a superBlock commitment.\n @dev This function and attemptPostconfirmOrRollover() could call each other recursively, so we must ensure it's safe from re-entrancy"},"implemented":true,"kind":"function","modifiers":[],"name":"_postconfirmSuperBlockCommitment","nameLocation":"19636:32:114","parameters":{"id":60988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60985,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"19697:20:114","nodeType":"VariableDeclaration","scope":61137,"src":"19669:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60984,"nodeType":"UserDefinedTypeName","pathNode":{"id":60983,"name":"SuperBlockCommitment","nameLocations":["19669:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"19669:20:114"},"referencedDeclaration":61843,"src":"19669:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"},{"constant":false,"id":60987,"mutability":"mutable","name":"attester","nameLocation":"19727:8:114","nodeType":"VariableDeclaration","scope":61137,"src":"19719:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60986,"name":"address","nodeType":"ElementaryTypeName","src":"19719:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19668:68:114"},"returnParameters":{"id":60989,"nodeType":"ParameterList","parameters":[],"src":"19746:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61251,"nodeType":"FunctionDefinition","src":"22765:1897:114","nodes":[],"body":{"id":61250,"nodeType":"Block","src":"22799:1863:114","nodes":[],"statements":[{"assignments":[61142],"declarations":[{"constant":false,"id":61142,"mutability":"mutable","name":"acceptingEpoch","nameLocation":"22885:14:114","nodeType":"VariableDeclaration","scope":61250,"src":"22877:22:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61141,"name":"uint256","nodeType":"ElementaryTypeName","src":"22877:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61145,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":61143,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"22902:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22902:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22877:44:114"},{"assignments":[61150],"declarations":[{"constant":false,"id":61150,"mutability":"mutable","name":"attesters","nameLocation":"22948:9:114","nodeType":"VariableDeclaration","scope":61250,"src":"22931:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61148,"name":"address","nodeType":"ElementaryTypeName","src":"22931:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61149,"nodeType":"ArrayTypeName","src":"22931:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61153,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":61151,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61774,"src":"22960:35:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":61152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22960:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"22931:66:114"},{"body":{"id":61243,"nodeType":"Block","src":"23081:1533:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":61165,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61908,"src":"23099:20:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61167,"indexExpression":{"id":61166,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61142,"src":"23120:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23099:36:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61171,"indexExpression":{"baseExpression":{"id":61168,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23136:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61170,"indexExpression":{"id":61169,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23146:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23136:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23099:50:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":61172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23152:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23099:54:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61203,"nodeType":"IfStatement","src":"23095:697:114","trueBody":{"id":61202,"nodeType":"Block","src":"23155:637:114","statements":[{"assignments":[61175],"declarations":[{"constant":false,"id":61175,"mutability":"mutable","name":"reward","nameLocation":"23261:6:114","nodeType":"VariableDeclaration","scope":61202,"src":"23253:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61174,"name":"uint256","nodeType":"ElementaryTypeName","src":"23253:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61191,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":61176,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61908,"src":"23270:20:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61178,"indexExpression":{"id":61177,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61142,"src":"23291:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23270:36:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61182,"indexExpression":{"baseExpression":{"id":61179,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23307:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61181,"indexExpression":{"id":61180,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23317:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23307:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23270:50:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":61183,"name":"rewardPerAttestationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61916,"src":"23323:25:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23270:78:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"baseExpression":{"id":61186,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23385:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61188,"indexExpression":{"id":61187,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23395:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23385:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61185,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61603,"src":"23351:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23351:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23270:128:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23253:145:114"},{"expression":{"arguments":[{"baseExpression":{"id":61195,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23576:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61197,"indexExpression":{"id":61196,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23586:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23576:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61198,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61175,"src":"23590:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61199,"name":"moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61822,"src":"23598:16:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61192,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"23543:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23559:16:114","memberName":"rewardFromDomain","nodeType":"MemberAccess","referencedDeclaration":64321,"src":"23543:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,uint256,address) external"}},"id":61200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23543:72:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61201,"nodeType":"ExpressionStatement","src":"23543:72:114"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":61204,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61914,"src":"23854:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61206,"indexExpression":{"id":61205,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61142,"src":"23880:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23854:41:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61210,"indexExpression":{"baseExpression":{"id":61207,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23896:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61209,"indexExpression":{"id":61208,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23906:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23896:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23854:55:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":61211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23912:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23854:59:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61242,"nodeType":"IfStatement","src":"23850:754:114","trueBody":{"id":61241,"nodeType":"Block","src":"23915:689:114","statements":[{"assignments":[61214],"declarations":[{"constant":false,"id":61214,"mutability":"mutable","name":"reward","nameLocation":"23941:6:114","nodeType":"VariableDeclaration","scope":61241,"src":"23933:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61213,"name":"uint256","nodeType":"ElementaryTypeName","src":"23933:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61230,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":61215,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61914,"src":"23950:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61217,"indexExpression":{"id":61216,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61142,"src":"23976:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23950:41:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61221,"indexExpression":{"baseExpression":{"id":61218,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23992:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61220,"indexExpression":{"id":61219,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"24002:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23992:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23950:55:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":61222,"name":"rewardPerPostconfirmationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61918,"src":"24008:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23950:88:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"baseExpression":{"id":61225,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"24075:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61227,"indexExpression":{"id":61226,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"24085:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24075:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61224,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61603,"src":"24041:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24041:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23950:138:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23933:155:114"},{"expression":{"arguments":[{"baseExpression":{"id":61234,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"24139:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61236,"indexExpression":{"id":61235,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"24149:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24139:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61237,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61214,"src":"24153:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61238,"name":"moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61822,"src":"24161:16:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61231,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"24106:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24122:16:114","memberName":"rewardFromDomain","nodeType":"MemberAccess","referencedDeclaration":64321,"src":"24106:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,uint256,address) external"}},"id":61239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24106:72:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61240,"nodeType":"ExpressionStatement","src":"24106:72:114"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61158,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23054:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61159,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23058:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23068:6:114","memberName":"length","nodeType":"MemberAccess","src":"23058:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23054:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61244,"initializationExpression":{"assignments":[61155],"declarations":[{"constant":false,"id":61155,"mutability":"mutable","name":"i","nameLocation":"23047:1:114","nodeType":"VariableDeclaration","scope":61244,"src":"23039:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61154,"name":"uint256","nodeType":"ElementaryTypeName","src":"23039:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61157,"initialValue":{"hexValue":"30","id":61156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23051:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"23039:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"23076:3:114","subExpression":{"id":61162,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23076:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61164,"nodeType":"ExpressionStatement","src":"23076:3:114"},"nodeType":"ForStatement","src":"23034:1580:114"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":61245,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"24624:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24640:13:114","memberName":"rollOverEpoch","nodeType":"MemberAccess","referencedDeclaration":64215,"src":"24624:29:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":61248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24624:31:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61249,"nodeType":"ExpressionStatement","src":"24624:31:114"}]},"documentation":{"id":61138,"nodeType":"StructuredDocumentation","src":"22524:236:114","text":"@dev nonReentrant because there is no need to reenter this function. It should be called iteratively. \n @dev Marked on the internal method to simplify risks from complex calling patterns. This also calls an external contract."},"implemented":true,"kind":"function","modifiers":[],"name":"rollOverEpoch","nameLocation":"22774:13:114","parameters":{"id":61139,"nodeType":"ParameterList","parameters":[],"src":"22787:2:114"},"returnParameters":{"id":61140,"nodeType":"ParameterList","parameters":[],"src":"22799:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61288,"nodeType":"FunctionDefinition","src":"24939:683:114","nodes":[],"body":{"id":61287,"nodeType":"Block","src":"25064:558:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":61261,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61255,"src":"25103:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":61260,"name":"getCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60854,"src":"25078:24:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (uint256)"}},"id":61262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25078:46:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":61263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25128:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"25078:51:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61268,"nodeType":"IfStatement","src":"25074:94:114","trueBody":{"id":61267,"nodeType":"Block","src":"25131:37:114","statements":[{"expression":{"hexValue":"66616c7365","id":61265,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25152:5:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":61259,"id":61266,"nodeType":"Return","src":"25145:12:114"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":61270,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61255,"src":"25397:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":61269,"name":"getCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60854,"src":"25372:24:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (uint256)"}},"id":61271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25372:46:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61272,"name":"getMinCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60396,"src":"25434:38:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25434:40:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25372:102:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61275,"name":"getPostconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60357,"src":"25490:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25490:35:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25372:153:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61278,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"25541:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":61279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25547:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"25541:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25372:184:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61284,"nodeType":"IfStatement","src":"25368:227:114","trueBody":{"id":61283,"nodeType":"Block","src":"25558:37:114","statements":[{"expression":{"hexValue":"66616c7365","id":61281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25579:5:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":61259,"id":61282,"nodeType":"Return","src":"25572:12:114"}]}},{"expression":{"hexValue":"74727565","id":61285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25611:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":61259,"id":61286,"nodeType":"Return","src":"25604:11:114"}]},"documentation":{"id":61252,"nodeType":"StructuredDocumentation","src":"24668:266:114","text":"@notice Checks, for a given superBlock commitment, if the current L1 block time is within the postconfirmer's privilege window\n @dev The postconfirmer's privilege window is the time period when only the postconfirmer will get rewarded for postconfirmation"},"functionSelector":"0cf6b6bd","implemented":true,"kind":"function","modifiers":[],"name":"isWithinPostconfirmerPrivilegeDuration","nameLocation":"24948:38:114","parameters":{"id":61256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61255,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"25015:20:114","nodeType":"VariableDeclaration","scope":61288,"src":"24987:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":61254,"nodeType":"UserDefinedTypeName","pathNode":{"id":61253,"name":"SuperBlockCommitment","nameLocations":["24987:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"24987:20:114"},"referencedDeclaration":61843,"src":"24987:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"24986:50:114"},"returnParameters":{"id":61259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61288,"src":"25058:4:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61257,"name":"bool","nodeType":"ElementaryTypeName","src":"25058:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"25057:6:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61493,"nodeType":"FunctionDefinition","src":"25967:4503:114","nodes":[],"body":{"id":61492,"nodeType":"Block","src":"26055:4415:114","nodes":[],"statements":[{"assignments":[61297],"declarations":[{"constant":false,"id":61297,"mutability":"mutable","name":"superBlockEpoch","nameLocation":"26073:15:114","nodeType":"VariableDeclaration","scope":61492,"src":"26065:23:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61296,"name":"uint256","nodeType":"ElementaryTypeName","src":"26065:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61301,"initialValue":{"baseExpression":{"id":61298,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"26091:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":61300,"indexExpression":{"id":61299,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"26121:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26091:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26065:73:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61302,"name":"getLastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60898,"src":"26152:36:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26152:38:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":61304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26194:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"26152:43:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":61364,"nodeType":"Block","src":"26287:875:114","statements":[{"assignments":[61308],"declarations":[{"constant":false,"id":61308,"mutability":"mutable","name":"previousSuperBlockEpoch","nameLocation":"26414:23:114","nodeType":"VariableDeclaration","scope":61364,"src":"26406:31:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61307,"name":"uint256","nodeType":"ElementaryTypeName","src":"26406:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61314,"initialValue":{"baseExpression":{"id":61309,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"26440:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":61313,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61310,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"26470:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":61311,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26487:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"26470:18:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26440:49:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26406:83:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61315,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61297,"src":"26507:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":61316,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61308,"src":"26525:23:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26507:41:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61363,"nodeType":"IfStatement","src":"26503:649:114","trueBody":{"id":61362,"nodeType":"Block","src":"26553:599:114","statements":[{"assignments":[61322],"declarations":[{"constant":false,"id":61322,"mutability":"mutable","name":"stakedAttesters","nameLocation":"26588:15:114","nodeType":"VariableDeclaration","scope":61362,"src":"26571:32:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61320,"name":"address","nodeType":"ElementaryTypeName","src":"26571:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61321,"nodeType":"ArrayTypeName","src":"26571:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61325,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":61323,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61774,"src":"26606:35:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":61324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26606:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"26571:72:114"},{"body":{"id":61356,"nodeType":"Block","src":"26819:260:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":61337,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"26845:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61339,"indexExpression":{"id":61338,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"26857:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26845:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61343,"indexExpression":{"baseExpression":{"id":61340,"name":"stakedAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61322,"src":"26875:15:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61342,"indexExpression":{"id":61341,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61327,"src":"26891:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26875:18:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26845:49:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":61344,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26895:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"26845:56:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":61345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26905:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"26845:61:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61355,"nodeType":"IfStatement","src":"26841:220:114","trueBody":{"id":61354,"nodeType":"Block","src":"26908:153:114","statements":[{"expression":{"id":61351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":61347,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"26934:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":61349,"indexExpression":{"id":61348,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"26964:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26934:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61350,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61308,"src":"26984:23:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26934:73:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61352,"nodeType":"ExpressionStatement","src":"26934:73:114"},{"id":61353,"nodeType":"Break","src":"27033:5:114"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61330,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61327,"src":"26786:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61331,"name":"stakedAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61322,"src":"26790:15:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26806:6:114","memberName":"length","nodeType":"MemberAccess","src":"26790:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26786:26:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61357,"initializationExpression":{"assignments":[61327],"declarations":[{"constant":false,"id":61327,"mutability":"mutable","name":"i","nameLocation":"26779:1:114","nodeType":"VariableDeclaration","scope":61357,"src":"26771:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61326,"name":"uint256","nodeType":"ElementaryTypeName","src":"26771:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61329,"initialValue":{"hexValue":"30","id":61328,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26783:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"26771:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"26814:3:114","subExpression":{"id":61334,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61327,"src":"26814:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61336,"nodeType":"ExpressionStatement","src":"26814:3:114"},"nodeType":"ForStatement","src":"26766:313:114"},{"expression":{"id":61360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61358,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61297,"src":"27096:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61359,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61308,"src":"27114:23:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27096:41:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61361,"nodeType":"ExpressionStatement","src":"27096:41:114"}]}}]},"id":61365,"nodeType":"IfStatement","src":"26148:1014:114","trueBody":{"id":61306,"nodeType":"Block","src":"26197:84:114","statements":[]}},{"body":{"id":61373,"nodeType":"Block","src":"27497:203:114","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":61370,"name":"rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61251,"src":"27674:13:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":61371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27674:15:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61372,"nodeType":"ExpressionStatement","src":"27674:15:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61366,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"27458:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27458:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":61368,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61297,"src":"27480:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27458:37:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61374,"nodeType":"WhileStatement","src":"27451:249:114"},{"assignments":[61376],"declarations":[{"constant":false,"id":61376,"mutability":"mutable","name":"supermajority","nameLocation":"27893:13:114","nodeType":"VariableDeclaration","scope":61492,"src":"27885:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61375,"name":"uint256","nodeType":"ElementaryTypeName","src":"27885:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61387,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":61377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27910:1:114","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":61379,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61297,"src":"27928:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61378,"name":"getTotalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61673,"src":"27914:13:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":61380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27914:30:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27910:34:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":61382,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27909:36:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":61383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27948:1:114","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"27909:40:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":61385,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27952:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27909:44:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"27885:68:114"},{"assignments":[61392],"declarations":[{"constant":false,"id":61392,"mutability":"mutable","name":"attesters","nameLocation":"27980:9:114","nodeType":"VariableDeclaration","scope":61492,"src":"27963:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61390,"name":"address","nodeType":"ElementaryTypeName","src":"27963:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61391,"nodeType":"ArrayTypeName","src":"27963:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61395,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":61393,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61774,"src":"27992:35:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":61394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27992:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"27963:66:114"},{"assignments":[61397],"declarations":[{"constant":false,"id":61397,"mutability":"mutable","name":"successfulPostconfirmation","nameLocation":"28296:26:114","nodeType":"VariableDeclaration","scope":61492,"src":"28291:31:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61396,"name":"bool","nodeType":"ElementaryTypeName","src":"28291:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":61399,"initialValue":{"hexValue":"66616c7365","id":61398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"28325:5:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"28291:39:114"},{"body":{"id":61473,"nodeType":"Block","src":"28387:1641:114","statements":[{"assignments":[61412],"declarations":[{"constant":false,"id":61412,"mutability":"mutable","name":"attester","nameLocation":"28409:8:114","nodeType":"VariableDeclaration","scope":61473,"src":"28401:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61411,"name":"address","nodeType":"ElementaryTypeName","src":"28401:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":61416,"initialValue":{"baseExpression":{"id":61413,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61392,"src":"28420:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61415,"indexExpression":{"id":61414,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61401,"src":"28430:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28420:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"28401:31:114"},{"assignments":[61419],"declarations":[{"constant":false,"id":61419,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"28474:20:114","nodeType":"VariableDeclaration","scope":61473,"src":"28446:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":61418,"nodeType":"UserDefinedTypeName","pathNode":{"id":61417,"name":"SuperBlockCommitment","nameLocations":["28446:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"28446:20:114"},"referencedDeclaration":61843,"src":"28446:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"id":61425,"initialValue":{"baseExpression":{"baseExpression":{"id":61420,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"28497:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61422,"indexExpression":{"id":61421,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"28509:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28497:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61424,"indexExpression":{"id":61423,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61412,"src":"28527:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28497:39:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"VariableDeclarationStatement","src":"28446:90:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":61426,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61419,"src":"28739:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61427,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28760:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"28739:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":61428,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"28770:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28739:47:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61431,"nodeType":"IfStatement","src":"28735:61:114","trueBody":{"id":61430,"nodeType":"Continue","src":"28788:8:114"}},{"assignments":[61433],"declarations":[{"constant":false,"id":61433,"mutability":"mutable","name":"totalStakeOnCommitment","nameLocation":"28874:22:114","nodeType":"VariableDeclaration","scope":61473,"src":"28866:30:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61432,"name":"uint256","nodeType":"ElementaryTypeName","src":"28866:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61441,"initialValue":{"baseExpression":{"baseExpression":{"id":61434,"name":"commitmentStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61860,"src":"28899:15:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":61437,"indexExpression":{"expression":{"id":61435,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61419,"src":"28915:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61436,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28936:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"28915:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28899:44:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":61440,"indexExpression":{"expression":{"id":61438,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61419,"src":"28944:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61439,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28965:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"28944:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28899:77:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28866:110:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61442,"name":"totalStakeOnCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61433,"src":"28995:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":61443,"name":"supermajority","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61376,"src":"29021:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28995:39:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61472,"nodeType":"IfStatement","src":"28991:1027:114","trueBody":{"id":61471,"nodeType":"Block","src":"29036:982:114","statements":[{"assignments":[61446],"declarations":[{"constant":false,"id":61446,"mutability":"mutable","name":"firstSeen","nameLocation":"29250:9:114","nodeType":"VariableDeclaration","scope":61471,"src":"29242:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61445,"name":"uint256","nodeType":"ElementaryTypeName","src":"29242:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61450,"initialValue":{"arguments":[{"id":61448,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61419,"src":"29287:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":61447,"name":"getCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60854,"src":"29262:24:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (uint256)"}},"id":61449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29262:46:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29242:66:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":61451,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"29393:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":61452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29399:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"29393:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61453,"name":"firstSeen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61446,"src":"29411:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":61454,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61832,"src":"29423:35:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29411:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29393:65:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61458,"nodeType":"IfStatement","src":"29389:76:114","trueBody":{"id":61457,"nodeType":"Break","src":"29460:5:114"}},{"expression":{"arguments":[{"id":61460,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61419,"src":"29517:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},{"expression":{"id":61461,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"29539:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29543:6:114","memberName":"sender","nodeType":"MemberAccess","src":"29539:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61459,"name":"_postconfirmSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61137,"src":"29484:32:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$_t_address_$returns$__$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory,address)"}},"id":61463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29484:66:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61464,"nodeType":"ExpressionStatement","src":"29484:66:114"},{"expression":{"id":61467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61465,"name":"successfulPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61397,"src":"29568:26:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":61466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"29597:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"29568:33:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61468,"nodeType":"ExpressionStatement","src":"29568:33:114"},{"expression":{"hexValue":"74727565","id":61469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"29999:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":61295,"id":61470,"nodeType":"Return","src":"29992:11:114"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61404,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61401,"src":"28360:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61405,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61392,"src":"28364:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28374:6:114","memberName":"length","nodeType":"MemberAccess","src":"28364:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28360:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61474,"initializationExpression":{"assignments":[61401],"declarations":[{"constant":false,"id":61401,"mutability":"mutable","name":"i","nameLocation":"28353:1:114","nodeType":"VariableDeclaration","scope":61474,"src":"28345:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61400,"name":"uint256","nodeType":"ElementaryTypeName","src":"28345:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61403,"initialValue":{"hexValue":"30","id":61402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28357:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"28345:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"28382:3:114","subExpression":{"id":61408,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61401,"src":"28382:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61410,"nodeType":"ExpressionStatement","src":"28382:3:114"},"nodeType":"ForStatement","src":"28340:1688:114"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":61482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"30240:27:114","subExpression":{"id":61475,"name":"successfulPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61397,"src":"30241:26:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61477,"name":"getPresentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60463,"src":"30271:15:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30271:17:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61479,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"30291:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30291:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30271:39:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"30240:70:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61489,"nodeType":"IfStatement","src":"30236:206:114","trueBody":{"id":61488,"nodeType":"Block","src":"30312:130:114","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":61483,"name":"rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61251,"src":"30326:13:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":61484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30326:15:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61485,"nodeType":"ExpressionStatement","src":"30326:15:114"},{"expression":{"hexValue":"74727565","id":61486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"30362:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":61295,"id":61487,"nodeType":"Return","src":"30355:11:114"}]}},{"expression":{"hexValue":"66616c7365","id":61490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"30458:5:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":61295,"id":61491,"nodeType":"Return","src":"30451:12:114"}]},"documentation":{"id":61289,"nodeType":"StructuredDocumentation","src":"25628:334:114","text":"@dev it is possible if the accepting epoch is behind the presentEpoch that heights dont obtain enough votes in the assigned epoch. \n @dev Moreover, due to the leadingBlockTolerance, the assigned epoch for a height could be ahead of the actual epoch. \n @dev solution is to move to the next epoch and count votes there"},"implemented":true,"kind":"function","modifiers":[],"name":"attemptPostconfirmOrRollover","nameLocation":"25976:28:114","parameters":{"id":61292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61291,"mutability":"mutable","name":"superBlockHeight","nameLocation":"26013:16:114","nodeType":"VariableDeclaration","scope":61493,"src":"26005:24:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61290,"name":"uint256","nodeType":"ElementaryTypeName","src":"26005:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26004:26:114"},"returnParameters":{"id":61295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61294,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61493,"src":"26049:4:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61293,"name":"bool","nodeType":"ElementaryTypeName","src":"26049:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"26048:6:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61517,"nodeType":"FunctionDefinition","src":"30780:311:114","nodes":[],"body":{"id":61516,"nodeType":"Block","src":"30910:181:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":61509,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"30989:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":61508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30981:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61507,"name":"address","nodeType":"ElementaryTypeName","src":"30981:7:114","typeDescriptions":{}}},"id":61510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30981:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61511,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61496,"src":"31012:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61512,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61498,"src":"31035:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61513,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61500,"src":"31062:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61505,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"30939:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30955:8:114","memberName":"getStake","nodeType":"MemberAccess","referencedDeclaration":64122,"src":"30939:24:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view external returns (uint256)"}},"id":61514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30939:145:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61504,"id":61515,"nodeType":"Return","src":"30920:164:114"}]},"documentation":{"id":61494,"nodeType":"StructuredDocumentation","src":"30692:83:114","text":"@notice Gets the stake for a given tuple (custodian, attester) at a given epoch"},"functionSelector":"7aa81c2a","implemented":true,"kind":"function","modifiers":[],"name":"getStake","nameLocation":"30789:8:114","parameters":{"id":61501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61496,"mutability":"mutable","name":"epoch","nameLocation":"30815:5:114","nodeType":"VariableDeclaration","scope":61517,"src":"30807:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61495,"name":"uint256","nodeType":"ElementaryTypeName","src":"30807:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61498,"mutability":"mutable","name":"custodian","nameLocation":"30838:9:114","nodeType":"VariableDeclaration","scope":61517,"src":"30830:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61497,"name":"address","nodeType":"ElementaryTypeName","src":"30830:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61500,"mutability":"mutable","name":"attester","nameLocation":"30865:8:114","nodeType":"VariableDeclaration","scope":61517,"src":"30857:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61499,"name":"address","nodeType":"ElementaryTypeName","src":"30857:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30797:82:114"},"returnParameters":{"id":61504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61503,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61517,"src":"30901:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61502,"name":"uint256","nodeType":"ElementaryTypeName","src":"30901:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30900:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61535,"nodeType":"FunctionDefinition","src":"31191:198:114","nodes":[],"body":{"id":61534,"nodeType":"Block","src":"31315:74:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":61528,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"31341:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31341:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61530,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61520,"src":"31362:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61531,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61522,"src":"31373:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61527,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61517,"src":"31332:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) view returns (uint256)"}},"id":61532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31332:50:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61526,"id":61533,"nodeType":"Return","src":"31325:57:114"}]},"documentation":{"id":61518,"nodeType":"StructuredDocumentation","src":"31097:89:114","text":"@notice Gets the stake for a given tuple (custodian, attester) at the accepting epoch"},"functionSelector":"bb04bd2f","implemented":true,"kind":"function","modifiers":[],"name":"getStakeForAcceptingEpoch","nameLocation":"31200:25:114","parameters":{"id":61523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61520,"mutability":"mutable","name":"custodian","nameLocation":"31243:9:114","nodeType":"VariableDeclaration","scope":61535,"src":"31235:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61519,"name":"address","nodeType":"ElementaryTypeName","src":"31235:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61522,"mutability":"mutable","name":"attester","nameLocation":"31270:8:114","nodeType":"VariableDeclaration","scope":61535,"src":"31262:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61521,"name":"address","nodeType":"ElementaryTypeName","src":"31262:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"31225:59:114"},"returnParameters":{"id":61526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61525,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61535,"src":"31306:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61524,"name":"uint256","nodeType":"ElementaryTypeName","src":"31306:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31305:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61588,"nodeType":"FunctionDefinition","src":"31523:484:114","nodes":[],"body":{"id":61587,"nodeType":"Block","src":"31634:373:114","nodes":[],"statements":[{"assignments":[61549],"declarations":[{"constant":false,"id":61549,"mutability":"mutable","name":"custodians","nameLocation":"31661:10:114","nodeType":"VariableDeclaration","scope":61587,"src":"31644:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61547,"name":"address","nodeType":"ElementaryTypeName","src":"31644:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61548,"nodeType":"ArrayTypeName","src":"31644:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61557,"initialValue":{"arguments":[{"arguments":[{"id":61554,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"31735:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":61553,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31727:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61552,"name":"address","nodeType":"ElementaryTypeName","src":"31727:7:114","typeDescriptions":{}}},"id":61555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31727:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61550,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"31674:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31690:23:114","memberName":"getRegisteredCustodians","nodeType":"MemberAccess","referencedDeclaration":64204,"src":"31674:39:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":61556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31674:76:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"31644:106:114"},{"assignments":[61559],"declarations":[{"constant":false,"id":61559,"mutability":"mutable","name":"totalStake","nameLocation":"31768:10:114","nodeType":"VariableDeclaration","scope":61587,"src":"31760:18:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61558,"name":"uint256","nodeType":"ElementaryTypeName","src":"31760:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61561,"initialValue":{"hexValue":"30","id":61560,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31781:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"31760:22:114"},{"body":{"id":61583,"nodeType":"Block","src":"31840:134:114","statements":[{"expression":{"id":61581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61573,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61559,"src":"31909:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":61575,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61538,"src":"31932:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":61576,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61549,"src":"31939:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61578,"indexExpression":{"id":61577,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61563,"src":"31950:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31939:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61579,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61540,"src":"31954:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61574,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61517,"src":"31923:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) view returns (uint256)"}},"id":61580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31923:40:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31909:54:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61582,"nodeType":"ExpressionStatement","src":"31909:54:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61566,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61563,"src":"31812:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61567,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61549,"src":"31816:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31827:6:114","memberName":"length","nodeType":"MemberAccess","src":"31816:17:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31812:21:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61584,"initializationExpression":{"assignments":[61563],"declarations":[{"constant":false,"id":61563,"mutability":"mutable","name":"i","nameLocation":"31805:1:114","nodeType":"VariableDeclaration","scope":61584,"src":"31797:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61562,"name":"uint256","nodeType":"ElementaryTypeName","src":"31797:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61565,"initialValue":{"hexValue":"30","id":61564,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31809:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"31797:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"31835:3:114","subExpression":{"id":61570,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61563,"src":"31835:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61572,"nodeType":"ExpressionStatement","src":"31835:3:114"},"nodeType":"ForStatement","src":"31792:182:114"},{"expression":{"id":61585,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61559,"src":"31990:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61544,"id":61586,"nodeType":"Return","src":"31983:17:114"}]},"documentation":{"id":61536,"nodeType":"StructuredDocumentation","src":"31395:64:114","text":"@notice Gets the stake for a given attester at a given epoch"},"functionSelector":"ba26513e","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStake","nameLocation":"31532:16:114","parameters":{"id":61541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61538,"mutability":"mutable","name":"epoch","nameLocation":"31566:5:114","nodeType":"VariableDeclaration","scope":61588,"src":"31558:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61537,"name":"uint256","nodeType":"ElementaryTypeName","src":"31558:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61540,"mutability":"mutable","name":"attester","nameLocation":"31589:8:114","nodeType":"VariableDeclaration","scope":61588,"src":"31581:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61539,"name":"address","nodeType":"ElementaryTypeName","src":"31581:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"31548:55:114"},"returnParameters":{"id":61544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61543,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61588,"src":"31625:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61542,"name":"uint256","nodeType":"ElementaryTypeName","src":"31625:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31624:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61603,"nodeType":"FunctionDefinition","src":"32088:176:114","nodes":[],"body":{"id":61602,"nodeType":"Block","src":"32193:71:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":61597,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"32227:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32227:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61599,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61591,"src":"32248:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61596,"name":"getAttesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61588,"src":"32210:16:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":61600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32210:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61595,"id":61601,"nodeType":"Return","src":"32203:54:114"}]},"documentation":{"id":61589,"nodeType":"StructuredDocumentation","src":"32013:70:114","text":"@notice Gets the stake for a given attester at the accepting epoch"},"functionSelector":"491d0467","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStakeForAcceptingEpoch","nameLocation":"32097:33:114","parameters":{"id":61592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61591,"mutability":"mutable","name":"attester","nameLocation":"32148:8:114","nodeType":"VariableDeclaration","scope":61603,"src":"32140:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61590,"name":"address","nodeType":"ElementaryTypeName","src":"32140:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32130:32:114"},"returnParameters":{"id":61595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61594,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61603,"src":"32184:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61593,"name":"uint256","nodeType":"ElementaryTypeName","src":"32184:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32183:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61624,"nodeType":"FunctionDefinition","src":"32341:287:114","nodes":[],"body":{"id":61623,"nodeType":"Block","src":"32454:174:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":61617,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"32542:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":61616,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32534:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61615,"name":"address","nodeType":"ElementaryTypeName","src":"32534:7:114","typeDescriptions":{}}},"id":61618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32534:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61619,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61606,"src":"32575:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61620,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61608,"src":"32598:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61613,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"32483:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32499:17:114","memberName":"getCustodianStake","nodeType":"MemberAccess","referencedDeclaration":64168,"src":"32483:33:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view external returns (uint256)"}},"id":61621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32483:138:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61612,"id":61622,"nodeType":"Return","src":"32464:157:114"}]},"documentation":{"id":61604,"nodeType":"StructuredDocumentation","src":"32270:66:114","text":"@notice Gets the stake for a given custodian for a given epoch"},"functionSelector":"1de38fe1","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStake","nameLocation":"32350:17:114","parameters":{"id":61609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61606,"mutability":"mutable","name":"epoch","nameLocation":"32385:5:114","nodeType":"VariableDeclaration","scope":61624,"src":"32377:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61605,"name":"uint256","nodeType":"ElementaryTypeName","src":"32377:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61608,"mutability":"mutable","name":"custodian","nameLocation":"32408:9:114","nodeType":"VariableDeclaration","scope":61624,"src":"32400:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61607,"name":"address","nodeType":"ElementaryTypeName","src":"32400:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32367:56:114"},"returnParameters":{"id":61612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61611,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61624,"src":"32445:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61610,"name":"uint256","nodeType":"ElementaryTypeName","src":"32445:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32444:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61673,"nodeType":"FunctionDefinition","src":"32634:607:114","nodes":[],"body":{"id":61672,"nodeType":"Block","src":"32716:525:114","nodes":[],"statements":[{"assignments":[61635],"declarations":[{"constant":false,"id":61635,"mutability":"mutable","name":"custodians","nameLocation":"32896:10:114","nodeType":"VariableDeclaration","scope":61672,"src":"32879:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61633,"name":"address","nodeType":"ElementaryTypeName","src":"32879:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61634,"nodeType":"ArrayTypeName","src":"32879:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61643,"initialValue":{"arguments":[{"arguments":[{"id":61640,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"32970:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":61639,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32962:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61638,"name":"address","nodeType":"ElementaryTypeName","src":"32962:7:114","typeDescriptions":{}}},"id":61641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32962:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61636,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"32909:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32925:23:114","memberName":"getRegisteredCustodians","nodeType":"MemberAccess","referencedDeclaration":64204,"src":"32909:39:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":61642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32909:76:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"32879:106:114"},{"assignments":[61645],"declarations":[{"constant":false,"id":61645,"mutability":"mutable","name":"totalStake","nameLocation":"33003:10:114","nodeType":"VariableDeclaration","scope":61672,"src":"32995:18:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61644,"name":"uint256","nodeType":"ElementaryTypeName","src":"32995:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61647,"initialValue":{"hexValue":"30","id":61646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33016:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"32995:22:114"},{"body":{"id":61668,"nodeType":"Block","src":"33075:133:114","statements":[{"expression":{"id":61666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61659,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61645,"src":"33144:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":61661,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61626,"src":"33176:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":61662,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61635,"src":"33183:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61664,"indexExpression":{"id":61663,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61649,"src":"33194:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"33183:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61660,"name":"getCustodianStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61624,"src":"33158:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":61665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33158:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33144:53:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61667,"nodeType":"ExpressionStatement","src":"33144:53:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61652,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61649,"src":"33047:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61653,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61635,"src":"33051:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33062:6:114","memberName":"length","nodeType":"MemberAccess","src":"33051:17:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33047:21:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61669,"initializationExpression":{"assignments":[61649],"declarations":[{"constant":false,"id":61649,"mutability":"mutable","name":"i","nameLocation":"33040:1:114","nodeType":"VariableDeclaration","scope":61669,"src":"33032:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61648,"name":"uint256","nodeType":"ElementaryTypeName","src":"33032:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61651,"initialValue":{"hexValue":"30","id":61650,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33044:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"33032:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"33070:3:114","subExpression":{"id":61656,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61649,"src":"33070:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61658,"nodeType":"ExpressionStatement","src":"33070:3:114"},"nodeType":"ForStatement","src":"33027:181:114"},{"expression":{"id":61670,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61645,"src":"33224:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61630,"id":61671,"nodeType":"Return","src":"33217:17:114"}]},"functionSelector":"45367f23","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStake","nameLocation":"32643:13:114","parameters":{"id":61627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61626,"mutability":"mutable","name":"epoch","nameLocation":"32674:5:114","nodeType":"VariableDeclaration","scope":61673,"src":"32666:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61625,"name":"uint256","nodeType":"ElementaryTypeName","src":"32666:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32656:29:114"},"returnParameters":{"id":61630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61673,"src":"32707:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61628,"name":"uint256","nodeType":"ElementaryTypeName","src":"32707:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32706:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61687,"nodeType":"FunctionDefinition","src":"33319:180:114","nodes":[],"body":{"id":61686,"nodeType":"Block","src":"33426:73:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":61681,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"33461:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33461:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61683,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61675,"src":"33482:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61680,"name":"getCustodianStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61624,"src":"33443:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":61684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33443:49:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61679,"id":61685,"nodeType":"Return","src":"33436:56:114"}]},"functionSelector":"d440116d","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStakeForAcceptingEpoch","nameLocation":"33328:34:114","parameters":{"id":61676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61675,"mutability":"mutable","name":"custodian","nameLocation":"33380:9:114","nodeType":"VariableDeclaration","scope":61687,"src":"33372:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61674,"name":"address","nodeType":"ElementaryTypeName","src":"33372:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"33362:33:114"},"returnParameters":{"id":61679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61678,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61687,"src":"33417:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61677,"name":"uint256","nodeType":"ElementaryTypeName","src":"33417:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33416:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61698,"nodeType":"FunctionDefinition","src":"33505:158:114","nodes":[],"body":{"id":61697,"nodeType":"Block","src":"33605:58:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":61693,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"33636:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33636:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61692,"name":"getTotalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61673,"src":"33622:13:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":61695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33622:34:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61691,"id":61696,"nodeType":"Return","src":"33615:41:114"}]},"functionSelector":"14e38026","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStakeForAcceptingEpoch","nameLocation":"33514:30:114","parameters":{"id":61688,"nodeType":"ParameterList","parameters":[],"src":"33544:2:114"},"returnParameters":{"id":61691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61690,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61698,"src":"33592:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61689,"name":"uint256","nodeType":"ElementaryTypeName","src":"33592:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33591:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61711,"nodeType":"FunctionDefinition","src":"33669:155:114","nodes":[],"body":{"id":61710,"nodeType":"Block","src":"33765:59:114","nodes":[],"statements":[{"expression":{"id":61708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61706,"name":"rewardPerAttestationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61916,"src":"33775:25:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61707,"name":"rewardPerPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61700,"src":"33803:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33775:42:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61709,"nodeType":"ExpressionStatement","src":"33775:42:114"}]},"functionSelector":"0d39f7f0","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":61703,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"33747:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":61704,"kind":"modifierInvocation","modifierName":{"id":61702,"name":"onlyRole","nameLocations":["33738:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"33738:8:114"},"nodeType":"ModifierInvocation","src":"33738:26:114"}],"name":"setRewardPerAttestationPoint","nameLocation":"33678:28:114","parameters":{"id":61701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61700,"mutability":"mutable","name":"rewardPerPoint","nameLocation":"33715:14:114","nodeType":"VariableDeclaration","scope":61711,"src":"33707:22:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61699,"name":"uint256","nodeType":"ElementaryTypeName","src":"33707:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33706:24:114"},"returnParameters":{"id":61705,"nodeType":"ParameterList","parameters":[],"src":"33765:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":61724,"nodeType":"FunctionDefinition","src":"33830:165:114","nodes":[],"body":{"id":61723,"nodeType":"Block","src":"33931:64:114","nodes":[],"statements":[{"expression":{"id":61721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61719,"name":"rewardPerPostconfirmationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61918,"src":"33941:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61720,"name":"rewardPerPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61713,"src":"33974:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33941:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61722,"nodeType":"ExpressionStatement","src":"33941:47:114"}]},"functionSelector":"57342282","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":61716,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"33913:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":61717,"kind":"modifierInvocation","modifierName":{"id":61715,"name":"onlyRole","nameLocations":["33904:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"33904:8:114"},"nodeType":"ModifierInvocation","src":"33904:26:114"}],"name":"setRewardPerPostconfirmationPoint","nameLocation":"33839:33:114","parameters":{"id":61714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61713,"mutability":"mutable","name":"rewardPerPoint","nameLocation":"33881:14:114","nodeType":"VariableDeclaration","scope":61724,"src":"33873:22:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61712,"name":"uint256","nodeType":"ElementaryTypeName","src":"33873:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33872:24:114"},"returnParameters":{"id":61718,"nodeType":"ParameterList","parameters":[],"src":"33931:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":61741,"nodeType":"FunctionDefinition","src":"34073:157:114","nodes":[],"body":{"id":61740,"nodeType":"Block","src":"34169:61:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":61734,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61908,"src":"34186:20:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61736,"indexExpression":{"id":61735,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61727,"src":"34207:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34186:27:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61738,"indexExpression":{"id":61737,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61729,"src":"34214:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34186:37:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61733,"id":61739,"nodeType":"Return","src":"34179:44:114"}]},"documentation":{"id":61725,"nodeType":"StructuredDocumentation","src":"34001:67:114","text":"@notice Gets the reward points for an attester in a given epoch"},"functionSelector":"6978ab12","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterRewardPoints","nameLocation":"34082:23:114","parameters":{"id":61730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61727,"mutability":"mutable","name":"epoch","nameLocation":"34114:5:114","nodeType":"VariableDeclaration","scope":61741,"src":"34106:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61726,"name":"uint256","nodeType":"ElementaryTypeName","src":"34106:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61729,"mutability":"mutable","name":"attester","nameLocation":"34129:8:114","nodeType":"VariableDeclaration","scope":61741,"src":"34121:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61728,"name":"address","nodeType":"ElementaryTypeName","src":"34121:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"34105:33:114"},"returnParameters":{"id":61733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61732,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61741,"src":"34160:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61731,"name":"uint256","nodeType":"ElementaryTypeName","src":"34160:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34159:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61758,"nodeType":"FunctionDefinition","src":"34316:177:114","nodes":[],"body":{"id":61757,"nodeType":"Block","src":"34422:71:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":61751,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61914,"src":"34439:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61753,"indexExpression":{"id":61752,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61744,"src":"34465:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34439:32:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61755,"indexExpression":{"id":61754,"name":"postconfirmer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61746,"src":"34472:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34439:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61750,"id":61756,"nodeType":"Return","src":"34432:54:114"}]},"documentation":{"id":61742,"nodeType":"StructuredDocumentation","src":"34240:71:114","text":"@notice Gets the reward points for a postconfirmer in a given epoch"},"functionSelector":"ed8a1d59","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerRewardPoints","nameLocation":"34325:28:114","parameters":{"id":61747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61744,"mutability":"mutable","name":"epoch","nameLocation":"34362:5:114","nodeType":"VariableDeclaration","scope":61758,"src":"34354:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61743,"name":"uint256","nodeType":"ElementaryTypeName","src":"34354:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61746,"mutability":"mutable","name":"postconfirmer","nameLocation":"34377:13:114","nodeType":"VariableDeclaration","scope":61758,"src":"34369:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61745,"name":"address","nodeType":"ElementaryTypeName","src":"34369:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"34353:38:114"},"returnParameters":{"id":61750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61749,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61758,"src":"34413:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61748,"name":"uint256","nodeType":"ElementaryTypeName","src":"34413:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34412:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61774,"nodeType":"FunctionDefinition","src":"34580:177:114","nodes":[],"body":{"id":61773,"nodeType":"Block","src":"34666:91:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":61769,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"34743:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":61768,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34735:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61767,"name":"address","nodeType":"ElementaryTypeName","src":"34735:7:114","typeDescriptions":{}}},"id":61770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34735:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61765,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"34683:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34699:35:114","memberName":"getStakedAttestersForAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":64296,"src":"34683:51:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":61771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34683:66:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":61764,"id":61772,"nodeType":"Return","src":"34676:73:114"}]},"documentation":{"id":61759,"nodeType":"StructuredDocumentation","src":"34499:76:114","text":"@notice Gets the attesters who have stake in the current accepting epoch"},"functionSelector":"aa0d6fcd","implemented":true,"kind":"function","modifiers":[],"name":"getStakedAttestersForAcceptingEpoch","nameLocation":"34589:35:114","parameters":{"id":61760,"nodeType":"ParameterList","parameters":[],"src":"34624:2:114"},"returnParameters":{"id":61764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61763,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61774,"src":"34648:16:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61761,"name":"address","nodeType":"ElementaryTypeName","src":"34648:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61762,"nodeType":"ArrayTypeName","src":"34648:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"34647:18:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61792,"nodeType":"FunctionDefinition","src":"34763:133:114","nodes":[],"body":{"id":61791,"nodeType":"Block","src":"34829:67:114","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":61781,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"34846:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61783,"indexExpression":{"id":61782,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61776,"src":"34858:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34846:19:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61786,"indexExpression":{"expression":{"id":61784,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"34866:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34870:6:114","memberName":"sender","nodeType":"MemberAccess","src":"34866:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34846:31:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":61787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34878:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"34846:38:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":61788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34888:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34846:43:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":61780,"id":61790,"nodeType":"Return","src":"34839:50:114"}]},"functionSelector":"e4a3fb74","implemented":true,"kind":"function","modifiers":[],"name":"isCommitted","nameLocation":"34772:11:114","parameters":{"id":61777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61776,"mutability":"mutable","name":"height","nameLocation":"34792:6:114","nodeType":"VariableDeclaration","scope":61792,"src":"34784:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61775,"name":"uint256","nodeType":"ElementaryTypeName","src":"34784:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34783:16:114"},"returnParameters":{"id":61780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61779,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61792,"src":"34823:4:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61778,"name":"bool","nodeType":"ElementaryTypeName","src":"34823:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34822:6:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":61809,"nodeType":"FunctionDefinition","src":"34902:180:114","nodes":[],"body":{"id":61808,"nodeType":"Block","src":"34972:110:114","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":61799,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61900,"src":"34989:33:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61801,"indexExpression":{"id":61800,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61902,"src":"35023:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34989:66:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61803,"indexExpression":{"id":61802,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61794,"src":"35056:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34989:74:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":61804,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35064:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"34989:81:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":61805,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35074:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34989:86:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":61798,"id":61807,"nodeType":"Return","src":"34982:93:114"}]},"functionSelector":"ec23ec2e","implemented":true,"kind":"function","modifiers":[],"name":"isPostconfirmed","nameLocation":"34911:15:114","parameters":{"id":61795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61794,"mutability":"mutable","name":"height","nameLocation":"34935:6:114","nodeType":"VariableDeclaration","scope":61809,"src":"34927:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61793,"name":"uint256","nodeType":"ElementaryTypeName","src":"34927:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34926:16:114"},"returnParameters":{"id":61798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61797,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61809,"src":"34966:4:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61796,"name":"bool","nodeType":"ElementaryTypeName","src":"34966:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34965:6:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":60045,"name":"Initializable","nameLocations":["561:13:114"],"nodeType":"IdentifierPath","referencedDeclaration":39746,"src":"561:13:114"},"id":60046,"nodeType":"InheritanceSpecifier","src":"561:13:114"},{"baseName":{"id":60047,"name":"BaseSettlement","nameLocations":["576:14:114"],"nodeType":"IdentifierPath","referencedDeclaration":62077,"src":"576:14:114"},"id":60048,"nodeType":"InheritanceSpecifier","src":"576:14:114"},{"baseName":{"id":60049,"name":"PCPStorage","nameLocations":["592:10:114"],"nodeType":"IdentifierPath","referencedDeclaration":61923,"src":"592:10:114"},"id":60050,"nodeType":"InheritanceSpecifier","src":"592:10:114"},{"baseName":{"id":60051,"name":"IPCP","nameLocations":["604:4:114"],"nodeType":"IdentifierPath","referencedDeclaration":62022,"src":"604:4:114"},"id":60052,"nodeType":"InheritanceSpecifier","src":"604:4:114"}],"canonicalName":"PCP","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[61810,62022,61923,62077,39928,42948,39478,41255,47988,41634,40760,39746],"name":"PCP","nameLocation":"554:3:114","scope":61811,"usedErrors":[39495,39498,39773,39778,41561,41564,43143,43156,44429,45732,60065,60068,60071,60074,61945,61947],"usedEvents":[39503,41573,41582,41591,42896,61935,61943]}],"license":"UNLICENSED"},"id":114} \ No newline at end of file diff --git a/protocol/pcp/cli/client/src/bin/e2e/test_client_settlement.rs b/protocol/pcp/cli/client/src/bin/e2e/test_client_settlement.rs index 478fbb35..1f89818d 100644 --- a/protocol/pcp/cli/client/src/bin/e2e/test_client_settlement.rs +++ b/protocol/pcp/cli/client/src/bin/e2e/test_client_settlement.rs @@ -8,8 +8,8 @@ use ffs_environment::{backend::config_file::ConfigFile, ffs_environment}; use postconfirmations_settlement_client::eth_client::Client; use postconfirmations_settlement_client::eth_client::{MOVEToken, MovementStaking, PCP}; use postconfirmations_settlement_client::PcpSettlementClientOperations; -use postconfirmations_config::Config; -use postconfirmations_types::block_commitment::{BlockCommitment, Commitment, Id}; +use pcp_config::Config; +use pcp_types::block_commitment::{BlockCommitment, Commitment, Id}; use std::str::FromStr; use tokio_stream::StreamExt; use tracing::info; @@ -239,7 +239,7 @@ pub async fn main() -> Result<(), anyhow::Error> { // Build client 1 and send the first commitment. //let settlement_config = let config1 = Config { - settle: postconfirmations_config::common::settlement::Config { + settle: pcp_config::common::settlement::Config { signer_private_key: testing_config .well_known_account_private_keys .get(1) @@ -265,7 +265,7 @@ pub async fn main() -> Result<(), anyhow::Error> { // Build client 2 and send the second commitment. let config2 = Config { - settle: postconfirmations_config::common::settlement::Config { + settle: pcp_config::common::settlement::Config { signer_private_key: testing_config .well_known_account_private_keys .get(2) diff --git a/protocol/pcp/cli/client/src/eth_client.rs b/protocol/pcp/cli/client/src/eth_client.rs index 33001f89..a50265d9 100644 --- a/protocol/pcp/cli/client/src/eth_client.rs +++ b/protocol/pcp/cli/client/src/eth_client.rs @@ -20,11 +20,12 @@ use alloy_sol_types::sol; use alloy_transport::BoxTransport; use alloy_transport_ws::WsConnect; use anyhow::Context; -use postconfirmations_config::Config; -use postconfirmations_types::block_commitment::{Commitment, Id, SuperBlockCommitment}; +use pcp_config::Config; +use pcp_types::block_commitment::{Commitment, Id, SuperBlockCommitment}; use secure_signer::cryptography::secp256k1::Secp256k1; use secure_signer_loader::Load; -use secure_signing_eth::HsmSigner; +// use secure_signing_eth::HsmSigner; +use secure_signer_eth::HsmSigner; use serde_json::Value as JsonValue; use std::array::TryFromSliceError; use std::fs; @@ -113,7 +114,7 @@ impl info!("Signer address: {}", signer_address); let contract_address = config .settle - .postconfirmations_contract_address + .pcp_contract_address .parse() .context("Failed to parse the contract address for the PCP settlement client")?; let rpc_url = config.eth_rpc_connection_url(); diff --git a/protocol/pcp/cli/client/src/lib.rs b/protocol/pcp/cli/client/src/lib.rs index ea6e29dc..e4ee469a 100644 --- a/protocol/pcp/cli/client/src/lib.rs +++ b/protocol/pcp/cli/client/src/lib.rs @@ -1,4 +1,4 @@ -use postconfirmations_types::block_commitment::SuperBlockCommitment; +use pcp_types::block_commitment::SuperBlockCommitment; use tokio_stream::Stream; pub mod mock; diff --git a/protocol/pcp/cli/client/src/mock.rs b/protocol/pcp/cli/client/src/mock.rs index 31b3c9d1..c39a11c7 100644 --- a/protocol/pcp/cli/client/src/mock.rs +++ b/protocol/pcp/cli/client/src/mock.rs @@ -1,6 +1,6 @@ use crate::{CommitmentStream, PcpSettlementClientOperations}; -use postconfirmations_config::Config; -use postconfirmations_types::block_commitment::SuperBlockCommitment; +use pcp_config::Config; +use pcp_types::block_commitment::SuperBlockCommitment; use std::collections::BTreeMap; use std::sync::{Arc, Mutex}; use tokio::sync::{mpsc, RwLock}; @@ -153,7 +153,7 @@ impl PcpSettlementClientOperations for PcpSettlementClient { pub mod test { use super::*; - use postconfirmations_types::block_commitment::Commitment; + use pcp_types::block_commitment::Commitment; use futures::future; use tokio::select; diff --git a/protocol/pcp/clients/eth/Cargo.toml b/protocol/pcp/clients/eth/Cargo.toml new file mode 100644 index 00000000..dc89f7a0 --- /dev/null +++ b/protocol/pcp/clients/eth/Cargo.toml @@ -0,0 +1,52 @@ +[package] +name = "pcp-protocol-client-core-eth" +version = { workspace = true } +edition = { workspace = true } +license = { workspace = true } +authors = { workspace = true } +homepage = { workspace = true } +publish = { workspace = true } +rust-version = { workspace = true } + +[dependencies] +alloy = { workspace = true, features = [ + "node-bindings", + "rpc-types-trace", + "json-rpc", + "rpc-client", + "signers", + "signer-yubihsm", + "pubsub", + "providers", +] } +alloy-contract = { workspace = true } +alloy-network = { workspace = true } +alloy-primitives = { workspace = true } +alloy-provider = { workspace = true, features = [] } +alloy-signer = { workspace = true } +alloy-sol-types = { workspace = true } +alloy-transport = { workspace = true } +alloy-transport-ws = { workspace = true } + +anyhow = { workspace = true } +async-stream = { workspace = true } +async-trait = { workspace = true } +clap = { workspace = true } +serde_json = { workspace = true } +thiserror = { workspace = true } +tokio = { workspace = true } +tokio-stream = { workspace = true } +tracing = { workspace = true } +serde = { workspace = true } + +alloy-rpc-types = { workspace = true } +futures = { workspace = true } +tracing-subscriber = { workspace = true } +pcp-types = { workspace = true } +pcp-protocol-client-core-util = { workspace = true } +secure-signer = { workspace = true } +secure-signer-loader = { workspace = true } +secure-signer-eth = { workspace = true } + +[lints] +workspace = true diff --git a/protocol/pcp/clients/eth/abis/MOVEToken.json b/protocol/pcp/clients/eth/abis/MOVEToken.json new file mode 100644 index 00000000..f20116a0 --- /dev/null +++ b/protocol/pcp/clients/eth/abis/MOVEToken.json @@ -0,0 +1,2983 @@ +{ + "abi": [ + { + "type": "constructor", + "inputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "DEFAULT_ADMIN_ROLE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "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": "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": "getRoleAdmin", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "grantRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "hasRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_owner", + "type": "address", + "internalType": "address" + }, + { + "name": "_custody", + "type": "address", + "internalType": "address" + } + ], + "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": "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": "renounceRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "callerConfirmation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "revokeRole", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "supportsInterface", + "inputs": [ + { + "name": "interfaceId", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "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": "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": "RoleAdminChanged", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "previousAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "newAdminRole", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleGranted", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "sender", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RoleRevoked", + "inputs": [ + { + "name": "role", + "type": "bytes32", + "indexed": true, + "internalType": "bytes32" + }, + { + "name": "account", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "sender", + "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": "AccessControlBadConfirmation", + "inputs": [] + }, + { + "type": "error", + "name": "AccessControlUnauthorizedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "neededRole", + "type": "bytes32", + "internalType": "bytes32" + } + ] + }, + { + "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": [] + } + ], + "bytecode": { + "object": "0x6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61181a806100d65f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063485cc955116100b457806395d89b411161007957806395d89b4114610283578063a217fddf1461028b578063a9059cbb14610292578063d505accf146102a5578063d547741f146102b8578063dd62ed3e146102cb575f80fd5b8063485cc9551461021c57806370a082311461022f5780637ecebe001461024257806384b0196e1461025557806391d1485414610270575f80fd5b8063248a9ca3116100fa578063248a9ca3146101ca5780632f2ff15d146101dd578063313ce567146101f25780633644e5151461020157806336568abe14610209575f80fd5b806301ffc9a71461013657806306fdde031461015e578063095ea7b31461017357806318160ddd1461018657806323b872dd146101b7575b5f80fd5b610149610144366004611286565b6102de565b60405190151581526020015b60405180910390f35b610166610314565b60405161015591906112e2565b61014961018136600461130f565b6103b9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610155565b6101496101c5366004611337565b6103d0565b6101a96101d8366004611371565b6103f3565b6101f06101eb366004611388565b610413565b005b60405160088152602001610155565b6101a9610435565b6101f0610217366004611388565b610443565b6101f061022a3660046113b2565b61047b565b6101a961023d3660046113da565b610661565b6101a96102503660046113da565b610691565b61025d61069b565b60405161015597969594939291906113f3565b61014961027e366004611388565b610749565b61016661077f565b6101a95f81565b6101496102a036600461130f565b6107bd565b6101f06102b3366004611489565b6107ca565b6101f06102c6366004611388565b61091f565b6101a96102d93660046113b2565b61093b565b5f6001600160e01b03198216637965db0b60e01b148061030e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5f805160206117858339815191525b9050806003018054610337906114f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610363906114f6565b80156103ae5780601f10610385576101008083540402835291602001916103ae565b820191905f5260205f20905b81548152906001019060200180831161039157829003601f168201915b505050505091505090565b5f336103c6818585610984565b5060019392505050565b5f336103dd858285610991565b6103e88585856109ee565b506001949350505050565b5f9081525f805160206117c5833981519152602052604090206001015490565b61041c826103f3565b61042581610a4b565b61042f8383610a58565b50505050565b5f61043e610af9565b905090565b6001600160a01b038116331461046c5760405163334bd91960e11b815260040160405180910390fd5b6104768282610b02565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156104c05750825b90505f8267ffffffffffffffff1660011480156104dc5750303b155b9050811580156104ea575080155b156105085760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053257845460ff60401b1916600160401b1785555b6001600160a01b0387161580159061055257506001600160a01b03861615155b61055a575f80fd5b6105a060405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060048152602001634d4f564560e01b815250610b7b565b6105e360405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060018152602001603160f81b815250610b91565b6105ed5f88610a58565b50610612866105fe6008600a611625565b61060d906402540be400611633565b610bf0565b831561065857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f805f805160206117858339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b5f61030e82610c24565b5f60608082808083815f805160206117a583398151915280549091501580156106c657506001810154155b61070f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610717610c4c565b61071f610c8a565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f9182525f805160206117c5833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061178583398151915291610337906114f6565b5f336103c68185856109ee565b834211156107ee5760405163313c898160e11b815260048101859052602401610706565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108588c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6108b282610ca0565b90505f6108c182878787610ccc565b9050896001600160a01b0316816001600160a01b031614610908576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610706565b6109138a8a8a610984565b50505050505050505050565b610928826103f3565b61093181610a4b565b61042f8383610b02565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104768383836001610cf8565b5f61099c848461093b565b90505f19811461042f57818110156109e057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610706565b61042f84848484035f610cf8565b6001600160a01b038316610a1757604051634b637e8f60e11b81525f6004820152602401610706565b6001600160a01b038216610a405760405163ec442f0560e01b81525f6004820152602401610706565b610476838383610ddc565b610a558133610f15565b50565b5f5f805160206117c5833981519152610a718484610749565b610af0575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610aa63390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061030e565b5f91505061030e565b5f61043e610f4e565b5f5f805160206117c5833981519152610b1b8484610749565b15610af0575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061030e565b610b83610fc1565b610b8d828261100c565b5050565b610b99610fc1565b5f805160206117a58339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610bd284826116a2565b5060038101610be183826116a2565b505f8082556001909101555050565b6001600160a01b038216610c195760405163ec442f0560e01b81525f6004820152602401610706565b610b8d5f8383610ddc565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610672565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206117a583398151915291610337906114f6565b60605f5f805160206117a5833981519152610326565b5f61030e610cac610af9565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80610cdc8888888861105c565b925092509250610cec8282611124565b50909695505050505050565b5f805160206117858339815191526001600160a01b038516610d2f5760405163e602df0560e01b81525f6004820152602401610706565b6001600160a01b038416610d5857604051634a1406b160e11b81525f6004820152602401610706565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610dd557836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610dcc91815260200190565b60405180910390a35b5050505050565b5f805160206117858339815191526001600160a01b038416610e165781816002015f828254610e0b919061175d565b90915550610e869050565b6001600160a01b0384165f9081526020829052604090205482811015610e685760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610706565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610ea4576002810180548390039055610ec2565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f0791815260200190565b60405180910390a350505050565b610f1f8282610749565b610b8d5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610706565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f786111dc565b610f80611244565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661100a57604051631afcd79f60e31b815260040160405180910390fd5b565b611014610fc1565b5f805160206117858339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361104d84826116a2565b506004810161042f83826116a2565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561109557505f9150600390508261111a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156110e6573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661111157505f92506001915082905061111a565b92505f91508190505b9450945094915050565b5f82600381111561113757611137611770565b03611140575050565b600182600381111561115457611154611770565b036111725760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561118657611186611770565b036111a75760405163fce698f760e01b815260048101829052602401610706565b60038260038111156111bb576111bb611770565b03610b8d576040516335e2f38360e21b815260048101829052602401610706565b5f5f805160206117a5833981519152816111f4610c4c565b80519091501561120c57805160209091012092915050565b8154801561121b579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f805160206117a58339815191528161125c610c8a565b80519091501561127457805160209091012092915050565b6001820154801561121b579392505050565b5f60208284031215611296575f80fd5b81356001600160e01b0319811681146112ad575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112ad60208301846112b4565b80356001600160a01b038116811461130a575f80fd5b919050565b5f8060408385031215611320575f80fd5b611329836112f4565b946020939093013593505050565b5f805f60608486031215611349575f80fd5b611352846112f4565b9250611360602085016112f4565b929592945050506040919091013590565b5f60208284031215611381575f80fd5b5035919050565b5f8060408385031215611399575f80fd5b823591506113a9602084016112f4565b90509250929050565b5f80604083850312156113c3575f80fd5b6113cc836112f4565b91506113a9602084016112f4565b5f602082840312156113ea575f80fd5b6112ad826112f4565b60ff60f81b8816815260e060208201525f61141160e08301896112b4565b828103604084015261142381896112b4565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561147857835183526020938401939092019160010161145a565b50909b9a5050505050505050505050565b5f805f805f805f60e0888a03121561149f575f80fd5b6114a8886112f4565b96506114b6602089016112f4565b95506040880135945060608801359350608088013560ff811681146114d9575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c9082168061150a57607f821691505b60208210810361152857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561157d578085048111156115615761156161152e565b600184161561156f57908102905b60019390931c928002611546565b935093915050565b5f826115935750600161030e565b8161159f57505f61030e565b81600181146115b557600281146115bf576115db565b600191505061030e565b60ff8411156115d0576115d061152e565b50506001821b61030e565b5060208310610133831016604e8410600b84101617156115fe575081810a61030e565b61160a5f198484611542565b805f190482111561161d5761161d61152e565b029392505050565b5f6112ad60ff841683611585565b808202811582820484141761030e5761030e61152e565b634e487b7160e01b5f52604160045260245ffd5b601f82111561047657805f5260205f20601f840160051c810160208510156116835750805b601f840160051c820191505b81811015610dd5575f815560010161168f565b815167ffffffffffffffff8111156116bc576116bc61164a565b6116d0816116ca84546114f6565b8461165e565b6020601f821160018114611702575f83156116eb5750848201515b5f19600385901b1c1916600184901b178455610dd5565b5f84815260208120601f198516915b828110156117315787850151825560209485019460019092019101611711565b508482101561174e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561030e5761030e61152e565b634e487b7160e01b5f52602160045260245ffdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212200c213e57e697f2dee37f51b79647b3593da8c247917d58e21e2647bf25597abc64736f6c634300081a0033", + "sourceMap": "299:1259:112:-:0;;;447:39;;;;;;;;;-1:-1:-1;462:22:112;:20;:22::i;:::-;299:1259;;7711:422:25;8870:21;7900:15;;;;;;;7896:76;;;7938:23;;-1:-1:-1;;;7938:23:25;;;;;;;;;;;7896:76;7985:14;;-1:-1:-1;;;;;7985:14:25;;;:34;7981:146;;8035:33;;-1:-1:-1;;;;;;8035:33:25;-1:-1:-1;;;;;8035:33:25;;;;;8087:29;;158:50:137;;;8087:29:25;;146:2:137;131:18;8087:29:25;;;;;;;7981:146;7760:373;7711:422::o;14:200:137:-;299:1259:112;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063485cc955116100b457806395d89b411161007957806395d89b4114610283578063a217fddf1461028b578063a9059cbb14610292578063d505accf146102a5578063d547741f146102b8578063dd62ed3e146102cb575f80fd5b8063485cc9551461021c57806370a082311461022f5780637ecebe001461024257806384b0196e1461025557806391d1485414610270575f80fd5b8063248a9ca3116100fa578063248a9ca3146101ca5780632f2ff15d146101dd578063313ce567146101f25780633644e5151461020157806336568abe14610209575f80fd5b806301ffc9a71461013657806306fdde031461015e578063095ea7b31461017357806318160ddd1461018657806323b872dd146101b7575b5f80fd5b610149610144366004611286565b6102de565b60405190151581526020015b60405180910390f35b610166610314565b60405161015591906112e2565b61014961018136600461130f565b6103b9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610155565b6101496101c5366004611337565b6103d0565b6101a96101d8366004611371565b6103f3565b6101f06101eb366004611388565b610413565b005b60405160088152602001610155565b6101a9610435565b6101f0610217366004611388565b610443565b6101f061022a3660046113b2565b61047b565b6101a961023d3660046113da565b610661565b6101a96102503660046113da565b610691565b61025d61069b565b60405161015597969594939291906113f3565b61014961027e366004611388565b610749565b61016661077f565b6101a95f81565b6101496102a036600461130f565b6107bd565b6101f06102b3366004611489565b6107ca565b6101f06102c6366004611388565b61091f565b6101a96102d93660046113b2565b61093b565b5f6001600160e01b03198216637965db0b60e01b148061030e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5f805160206117858339815191525b9050806003018054610337906114f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610363906114f6565b80156103ae5780601f10610385576101008083540402835291602001916103ae565b820191905f5260205f20905b81548152906001019060200180831161039157829003601f168201915b505050505091505090565b5f336103c6818585610984565b5060019392505050565b5f336103dd858285610991565b6103e88585856109ee565b506001949350505050565b5f9081525f805160206117c5833981519152602052604090206001015490565b61041c826103f3565b61042581610a4b565b61042f8383610a58565b50505050565b5f61043e610af9565b905090565b6001600160a01b038116331461046c5760405163334bd91960e11b815260040160405180910390fd5b6104768282610b02565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156104c05750825b90505f8267ffffffffffffffff1660011480156104dc5750303b155b9050811580156104ea575080155b156105085760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053257845460ff60401b1916600160401b1785555b6001600160a01b0387161580159061055257506001600160a01b03861615155b61055a575f80fd5b6105a060405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060048152602001634d4f564560e01b815250610b7b565b6105e360405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060018152602001603160f81b815250610b91565b6105ed5f88610a58565b50610612866105fe6008600a611625565b61060d906402540be400611633565b610bf0565b831561065857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f805f805160206117858339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b5f61030e82610c24565b5f60608082808083815f805160206117a583398151915280549091501580156106c657506001810154155b61070f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610717610c4c565b61071f610c8a565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f9182525f805160206117c5833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061178583398151915291610337906114f6565b5f336103c68185856109ee565b834211156107ee5760405163313c898160e11b815260048101859052602401610706565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108588c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6108b282610ca0565b90505f6108c182878787610ccc565b9050896001600160a01b0316816001600160a01b031614610908576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610706565b6109138a8a8a610984565b50505050505050505050565b610928826103f3565b61093181610a4b565b61042f8383610b02565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104768383836001610cf8565b5f61099c848461093b565b90505f19811461042f57818110156109e057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610706565b61042f84848484035f610cf8565b6001600160a01b038316610a1757604051634b637e8f60e11b81525f6004820152602401610706565b6001600160a01b038216610a405760405163ec442f0560e01b81525f6004820152602401610706565b610476838383610ddc565b610a558133610f15565b50565b5f5f805160206117c5833981519152610a718484610749565b610af0575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610aa63390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061030e565b5f91505061030e565b5f61043e610f4e565b5f5f805160206117c5833981519152610b1b8484610749565b15610af0575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061030e565b610b83610fc1565b610b8d828261100c565b5050565b610b99610fc1565b5f805160206117a58339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610bd284826116a2565b5060038101610be183826116a2565b505f8082556001909101555050565b6001600160a01b038216610c195760405163ec442f0560e01b81525f6004820152602401610706565b610b8d5f8383610ddc565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610672565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206117a583398151915291610337906114f6565b60605f5f805160206117a5833981519152610326565b5f61030e610cac610af9565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80610cdc8888888861105c565b925092509250610cec8282611124565b50909695505050505050565b5f805160206117858339815191526001600160a01b038516610d2f5760405163e602df0560e01b81525f6004820152602401610706565b6001600160a01b038416610d5857604051634a1406b160e11b81525f6004820152602401610706565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610dd557836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610dcc91815260200190565b60405180910390a35b5050505050565b5f805160206117858339815191526001600160a01b038416610e165781816002015f828254610e0b919061175d565b90915550610e869050565b6001600160a01b0384165f9081526020829052604090205482811015610e685760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610706565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610ea4576002810180548390039055610ec2565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f0791815260200190565b60405180910390a350505050565b610f1f8282610749565b610b8d5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610706565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f786111dc565b610f80611244565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661100a57604051631afcd79f60e31b815260040160405180910390fd5b565b611014610fc1565b5f805160206117858339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361104d84826116a2565b506004810161042f83826116a2565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561109557505f9150600390508261111a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156110e6573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661111157505f92506001915082905061111a565b92505f91508190505b9450945094915050565b5f82600381111561113757611137611770565b03611140575050565b600182600381111561115457611154611770565b036111725760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561118657611186611770565b036111a75760405163fce698f760e01b815260048101829052602401610706565b60038260038111156111bb576111bb611770565b03610b8d576040516335e2f38360e21b815260048101829052602401610706565b5f5f805160206117a5833981519152816111f4610c4c565b80519091501561120c57805160209091012092915050565b8154801561121b579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f805160206117a58339815191528161125c610c8a565b80519091501561127457805160209091012092915050565b6001820154801561121b579392505050565b5f60208284031215611296575f80fd5b81356001600160e01b0319811681146112ad575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112ad60208301846112b4565b80356001600160a01b038116811461130a575f80fd5b919050565b5f8060408385031215611320575f80fd5b611329836112f4565b946020939093013593505050565b5f805f60608486031215611349575f80fd5b611352846112f4565b9250611360602085016112f4565b929592945050506040919091013590565b5f60208284031215611381575f80fd5b5035919050565b5f8060408385031215611399575f80fd5b823591506113a9602084016112f4565b90509250929050565b5f80604083850312156113c3575f80fd5b6113cc836112f4565b91506113a9602084016112f4565b5f602082840312156113ea575f80fd5b6112ad826112f4565b60ff60f81b8816815260e060208201525f61141160e08301896112b4565b828103604084015261142381896112b4565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561147857835183526020938401939092019160010161145a565b50909b9a5050505050505050505050565b5f805f805f805f60e0888a03121561149f575f80fd5b6114a8886112f4565b96506114b6602089016112f4565b95506040880135945060608801359350608088013560ff811681146114d9575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c9082168061150a57607f821691505b60208210810361152857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561157d578085048111156115615761156161152e565b600184161561156f57908102905b60019390931c928002611546565b935093915050565b5f826115935750600161030e565b8161159f57505f61030e565b81600181146115b557600281146115bf576115db565b600191505061030e565b60ff8411156115d0576115d061152e565b50506001821b61030e565b5060208310610133831016604e8410600b84101617156115fe575081810a61030e565b61160a5f198484611542565b805f190482111561161d5761161d61152e565b029392505050565b5f6112ad60ff841683611585565b808202811582820484141761030e5761030e61152e565b634e487b7160e01b5f52604160045260245ffd5b601f82111561047657805f5260205f20601f840160051c810160208510156116835750805b601f840160051c820191505b81811015610dd5575f815560010161168f565b815167ffffffffffffffff8111156116bc576116bc61164a565b6116d0816116ca84546114f6565b8461165e565b6020601f821160018114611702575f83156116eb5750848201515b5f19600385901b1c1916600184901b178455610dd5565b5f84815260208120601f198516915b828110156117315787850151825560209485019460019092019101611711565b508482101561174e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561030e5761030e61152e565b634e487b7160e01b5f52602160045260245ffdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212200c213e57e697f2dee37f51b79647b3593da8c247917d58e21e2647bf25597abc64736f6c634300081a0033", + "sourceMap": "299:1259:112:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:24;;;;;;:::i;:::-;;:::i;:::-;;;470:14:137;;463:22;445:41;;433:2;418:18;3443:202:24;;;;;;;;3011:144:27;;;:::i;:::-;;;;;;;:::i;5505:186::-;;;;;;:::i;:::-;;:::i;4191:152::-;4322:14;;4191:152;;;1645:25:137;;;1633:2;1618:18;4191:152:27;1499:177:137;6251:244:27;;;;;;:::i;:::-;;:::i;4759:191:24:-;;;;;;:::i;:::-;;:::i;5246:136::-;;;;;;:::i;:::-;;:::i;:::-;;1474:82:112;;;1548:1;2920:36:137;;2908:2;2893:18;1474:82:112;2778:184:137;3082:112:28;;;:::i;6348:245:24:-;;;;;;:::i;:::-;;:::i;981:342:112:-;;;;;;:::i;:::-;;:::i;4401:171:27:-;;;;;;:::i;:::-;;:::i;2821:154:28:-;;;;;;:::i;:::-;;:::i;5173:903:31:-;;;:::i;:::-;;;;;;;;;;;;;:::i;3732:207:24:-;;;;;;:::i;:::-;;:::i;3268:148:27:-;;;:::i;2317:49:24:-;;2362:4;2317:49;;4767:178:27;;;;;;:::i;:::-;;:::i;2095:672:28:-;;;;;;:::i;:::-;;:::i;5662:138:24:-;;;;;;:::i;:::-;;:::i;5003:195:27:-;;;;;;:::i;:::-;;:::i;3443:202:24:-;3528:4;-1:-1:-1;;;;;;3551:47:24;;-1:-1:-1;;;3551:47:24;;:87;;-1:-1:-1;;;;;;;;;;1133:40:32;;;3602:36:24;3544:94;3443:202;-1:-1:-1;;3443:202:24:o;3011:144:27:-;3056:13;3081:22;-1:-1:-1;;;;;;;;;;;3106:18:27;3081:43;;3141:1;:7;;3134:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3011:144;:::o;5505:186::-;5578:4;966:10:29;5632:31:27;966:10:29;5648:7:27;5657:5;5632:8;:31::i;:::-;-1:-1:-1;5680:4:27;;5505:186;-1:-1:-1;;;5505:186:27:o;6251:244::-;6338:4;966:10:29;6394:37:27;6410:4;966:10:29;6425:5:27;6394:15;:37::i;:::-;6441:26;6451:4;6457:2;6461:5;6441:9;:26::i;:::-;-1:-1:-1;6484:4:27;;6251:244;-1:-1:-1;;;;6251:244:27:o;4759:191:24:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:24;;;;;:24;;;;4759:191::o;5246:136::-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;3082:112:28:-;3141:7;3167:20;:18;:20::i;:::-;3160:27;;3082:112;:::o;6348:245:24:-;-1:-1:-1;;;;;6441:34:24;;966:10:29;6441:34:24;6437:102;;6498:30;;-1:-1:-1;;;6498:30:24;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;981:342:112:-;8870:21:25;4302:15;;-1:-1:-1;;;4302:15:25;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:25;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:25;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:25;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:25;-1:-1:-1;;;5013:22:25;;;4979:67;-1:-1:-1;;;;;1072:20:112;::::1;::::0;;::::1;::::0;:46:::1;;-1:-1:-1::0;;;;;;1096:22:112;::::1;::::0;::::1;1072:46;1064:55;;;::::0;::::1;;1129:32;;;;;;;;;;;;;;-1:-1:-1::0;;;1129:32:112::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1129:32:112::1;;::::0;:12:::1;:32::i;:::-;1171:40;;;;;;;;;;;;;;-1:-1:-1::0;;;1171:40:112::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1171:40:112::1;;::::0;:23:::1;:40::i;:::-;1221:38;2362:4:24;1252:6:112::0;1221:10:::1;:38::i;:::-;-1:-1:-1::0;1269:47:112::1;1275:8:::0;1299:16:::1;1548:1:::0;1299:2:::1;:16;:::i;:::-;1285:30;::::0;:11:::1;:30;:::i;:::-;1269:5;:47::i;:::-;5070:14:25::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:25;;;5142:14;;-1:-1:-1;7849:50:137;;5142:14:25;;7837:2:137;7822:18;5142:14:25;;;;;;;5066:101;4092:1081;;;;;981:342:112;;:::o;4401:171:27:-;4466:7;;-1:-1:-1;;;;;;;;;;;4510:18:27;-1:-1:-1;;;;;4545:20:27;;;:11;:20;;;;;;;;-1:-1:-1;;4545:20:27;;;;;4401:171::o;2821:154:28:-;2923:7;2949:19;2962:5;2949:12;:19::i;5173:903:31:-;5271:13;5298:18;;5271:13;;;5298:18;5271:13;-1:-1:-1;;;;;;;;;;;5777:13:31;;5511:45;;-1:-1:-1;5777:18:31;:43;;;;-1:-1:-1;5799:16:31;;;;:21;5777:43;5769:77;;;;-1:-1:-1;;;5769:77:31;;8112:2:137;5769:77:31;;;8094:21:137;8151:2;8131:18;;;8124:30;-1:-1:-1;;;8170:18:137;;;8163:51;8231:18;;5769:77:31;;;;;;;;;5908:13;:11;:13::i;:::-;5935:16;:14;:16::i;:::-;6043;;;6027:1;6043:16;;;;;;;;;-1:-1:-1;;;5857:212:31;;;-1:-1:-1;5857:212:31;;-1:-1:-1;5965:13:31;;-1:-1:-1;6000:4:31;;-1:-1:-1;6027:1:31;-1:-1:-1;6043:16:31;-1:-1:-1;5857:212:31;-1:-1:-1;;5173:903:31:o;3732:207:24:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:24;;;;;;;;-1:-1:-1;;;;;3901:31:24;;;;;;;;;;;;;;;3732:207::o;3268:148:27:-;3400:9;3393:16;;3315:13;;-1:-1:-1;;;;;;;;;;;2359:20:27;3393:16;;;:::i;4767:178::-;4836:4;966:10:29;4890:27:27;966:10:29;4907:2:27;4911:5;4890:9;:27::i;2095:672:28:-;2316:8;2298:15;:26;2294:97;;;2347:33;;-1:-1:-1;;;2347:33:28;;;;;1645:25:137;;;1618:18;;2347:33:28;1499:177:137;2294:97:28;2401:18;1277:95;2460:5;2467:7;2476:5;2483:16;2493:5;-1:-1:-1;;;;;1954:16:30;1597:7;1954:16;;;1005:21;1954:16;;;;;:18;;;;;;;;;1537:452;2483:16:28;2432:78;;;;;;8679:25:137;;;;-1:-1:-1;;;;;8740:32:137;;;8720:18;;;8713:60;8809:32;;;;8789:18;;;8782:60;8858:18;;;8851:34;8901:19;;;8894:35;8945:19;;;8938:35;;;8651:19;;2432:78:28;;;;;;;;;;;;2422:89;;;;;;2401:110;;2522:12;2537:28;2554:10;2537:16;:28::i;:::-;2522:43;;2576:14;2593:28;2607:4;2613:1;2616;2619;2593:13;:28::i;:::-;2576:45;;2645:5;-1:-1:-1;;;;;2635:15:28;:6;-1:-1:-1;;;;;2635:15:28;;2631:88;;2673:35;;-1:-1:-1;;;2673:35:28;;-1:-1:-1;;;;;9176:32:137;;;2673:35:28;;;9158:51:137;9245:32;;9225:18;;;9218:60;9131:18;;2673:35:28;8984:300:137;2631:88:28;2729:31;2738:5;2745:7;2754:5;2729:8;:31::i;:::-;2284:483;;;2095:672;;;;;;;:::o;5662:138:24:-;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;5003:195:27:-:0;-1:-1:-1;;;;;5162:20:27;;;5083:7;5162:20;;;:13;:20;;;;;;;;:29;;;;;;;;;;;;;5003:195::o;10264:128::-;10348:37;10357:5;10364:7;10373:5;10380:4;10348:8;:37::i;11993:477::-;12092:24;12119:25;12129:5;12136:7;12119:9;:25::i;:::-;12092:52;;-1:-1:-1;;12158:16:27;:37;12154:310;;12234:5;12215:16;:24;12211:130;;;12266:60;;-1:-1:-1;;;12266:60:27;;-1:-1:-1;;;;;9509:32:137;;12266:60:27;;;9491:51:137;9558:18;;;9551:34;;;9601:18;;;9594:34;;;9464:18;;12266:60:27;9289:345:137;12211:130:27;12382:57;12391:5;12398:7;12426:5;12407:16;:24;12433:5;12382:8;:57::i;6868:300::-;-1:-1:-1;;;;;6951:18:27;;6947:86;;6992:30;;-1:-1:-1;;;6992:30:27;;7019:1;6992:30;;;9785:51:137;9758:18;;6992:30:27;9639:203:137;6947:86:27;-1:-1:-1;;;;;7046:16:27;;7042:86;;7085:32;;-1:-1:-1;;;7085:32:27;;7114:1;7085:32;;;9785:51:137;9758:18;;7085:32:27;9639:203:137;7042:86:27;7137:24;7145:4;7151:2;7155:5;7137:7;:24::i;4148:103:24:-;4214:30;4225:4;966:10:29;4214::24;:30::i;:::-;4148:103;:::o;7270:387::-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:24;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:24;;;;;;;;;:38;;-1:-1:-1;;7475:38:24;7509:4;7475:38;;;7559:12;966:10:29;;887:96;7559:12:24;-1:-1:-1;;;;;7532:40:24;7550:7;-1:-1:-1;;;;;7532:40:24;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;4015:109:31;4068:7;4094:23;:21;:23::i;7892:388:24:-;7970:4;-1:-1:-1;;;;;;;;;;;8059:22:24;8067:4;8073:7;8059;:22::i;:::-;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:24;;;;;;;;;;:39;;-1:-1:-1;;8097:39:24;;;8155:40;966:10:29;;8097:14:24;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;2577:147:27;6931:20:25;:18;:20::i;:::-;2679:38:27::1;2702:5;2709:7;2679:22;:38::i;:::-;2577:147:::0;;:::o;3599:330:31:-;6931:20:25;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;3766:7:31;:14:::1;3776:4:::0;3766:7;:14:::1;:::i;:::-;-1:-1:-1::0;3790:10:31::1;::::0;::::1;:20;3803:7:::0;3790:10;:20:::1;:::i;:::-;-1:-1:-1::0;3891:1:31::1;3875:17:::0;;;3902:16:::1;::::0;;::::1;:20:::0;-1:-1:-1;;3599:330:31:o;8996:208:27:-;-1:-1:-1;;;;;9066:21:27;;9062:91;;9110:32;;-1:-1:-1;;;9110:32:27;;9139:1;9110:32;;;9785:51:137;9758:18;;9110:32:27;9639:203:137;9062:91:27;9162:35;9178:1;9182:7;9191:5;9162:7;:35::i;1259:164:30:-;1319:7;;1005:21;1364:19;886:156;6300:155:31;6441:7;6434:14;;6354:13;;-1:-1:-1;;;;;;;;;;;2839:21:31;6434:14;;;:::i;6682:161::-;6739:13;6764:23;-1:-1:-1;;;;;;;;;;;6790:19:31;2720:156;4946:176;5023:7;5049:66;5082:20;:18;:20::i;:::-;5104:10;3555:4:61;3549:11;-1:-1:-1;;;3573:23:61;;3625:4;3616:14;;3609:39;;;;3677:4;3668:14;;3661:34;3733:4;3718:20;;;3353:401;6803:260:60;6888:7;6908:17;6927:18;6947:16;6967:25;6978:4;6984:1;6987;6990;6967:10;:25::i;:::-;6907:85;;;;;;7002:28;7014:5;7021:8;7002:11;:28::i;:::-;-1:-1:-1;7047:9:60;;6803:260;-1:-1:-1;;;;;;6803:260:60:o;11224:487:27:-;-1:-1:-1;;;;;;;;;;;;;;;;11389:19:27;;11385:89;;11431:32;;-1:-1:-1;;;11431:32:27;;11460:1;11431:32;;;9785:51:137;9758:18;;11431:32:27;9639:203:137;11385:89:27;-1:-1:-1;;;;;11487:21:27;;11483:90;;11531:31;;-1:-1:-1;;;11531:31:27;;11559:1;11531:31;;;9785:51:137;9758:18;;11531:31:27;9639:203:137;11483:90:27;-1:-1:-1;;;;;11582:20:27;;;;;;;:13;;;:20;;;;;;;;:29;;;;;;;;;:37;;;11629:76;;;;11679:7;-1:-1:-1;;;;;11663:31:27;11672:5;-1:-1:-1;;;;;11663:31:27;;11688:5;11663:31;;;;1645:25:137;;1633:2;1618:18;;1499:177;11663:31:27;;;;;;;;11629:76;11322:389;11224:487;;;;:::o;7483:1170::-;-1:-1:-1;;;;;;;;;;;;;;;;7625:18:27;;7621:546;;7779:5;7761:1;:14;;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;7621:546:27;;-1:-1:-1;7621:546:27;;-1:-1:-1;;;;;7837:17:27;;7815:19;7837:17;;;;;;;;;;;7872:19;;;7868:115;;;7918:50;;-1:-1:-1;;;7918:50:27;;-1:-1:-1;;;;;9509:32:137;;7918:50:27;;;9491:51:137;9558:18;;;9551:34;;;9601:18;;;9594:34;;;9464:18;;7918:50:27;9289:345:137;7868:115:27;-1:-1:-1;;;;;8103:17:27;;:11;:17;;;;;;;;;;8123:19;;;;8103:39;;7621:546;-1:-1:-1;;;;;8181:16:27;;8177:429;;8344:14;;;:23;;;;;;;8177:429;;;-1:-1:-1;;;;;8557:15:27;;:11;:15;;;;;;;;;;:24;;;;;;8177:429;8636:2;-1:-1:-1;;;;;8621:25:27;8630:4;-1:-1:-1;;;;;8621:25:27;;8640:5;8621:25;;;;1645::137;;1633:2;1618:18;;1499:177;8621:25:27;;;;;;;;7558:1095;7483:1170;;;:::o;4381:197:24:-;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:24;;-1:-1:-1;;;;;12293:32:137;;4514:47:24;;;12275:51:137;12342:18;;;12335:34;;;12248:18;;4514:47:24;12101:274:137;4130:191:31;4185:7;2073:95;4243:17;:15;:17::i;:::-;4262:20;:18;:20::i;:::-;4221:92;;;;;;12639:25:137;;;;12680:18;;12673:34;;;;12723:18;;;12716:34;4284:13:31;12766:18:137;;;12759:34;4307:4:31;12809:19:137;;;12802:61;12611:19;;4221:92:31;;;;;;;;;;;;4211:103;;;;;;4204:110;;4130:191;:::o;7084:141:25:-;8870:21;8560:40;-1:-1:-1;;;8560:40:25;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:25;;;;;;;;;;;7146:73;7084:141::o;2730:216:27:-;6931:20:25;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;2895:7:27;:15:::1;2905:5:::0;2895:7;:15:::1;:::i;:::-;-1:-1:-1::0;2920:9:27::1;::::0;::::1;:19;2932:7:::0;2920:9;:19:::1;:::i;5140:1530:60:-:0;5266:7;;;6199:66;6186:79;;6182:164;;;-1:-1:-1;6297:1:60;;-1:-1:-1;6301:30:60;;-1:-1:-1;6333:1:60;6281:54;;6182:164;6457:24;;;6440:14;6457:24;;;;;;;;;13101:25:137;;;13174:4;13162:17;;13142:18;;;13135:45;;;;13196:18;;;13189:34;;;13239:18;;;13232:34;;;6457:24:60;;13073:19:137;;6457:24:60;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6457:24:60;;-1:-1:-1;;6457:24:60;;;-1:-1:-1;;;;;;;6495:20:60;;6491:113;;-1:-1:-1;6547:1:60;;-1:-1:-1;6551:29:60;;-1:-1:-1;6547:1:60;;-1:-1:-1;6531:62:60;;6491:113;6622:6;-1:-1:-1;6630:20:60;;-1:-1:-1;6630:20:60;;-1:-1:-1;5140:1530:60;;;;;;;;;:::o;7196:532::-;7291:20;7282:5;:29;;;;;;;;:::i;:::-;;7278:444;;7196:532;;:::o;7278:444::-;7387:29;7378:5;:38;;;;;;;;:::i;:::-;;7374:348;;7439:23;;-1:-1:-1;;;7439:23:60;;;;;;;;;;;7374:348;7492:35;7483:5;:44;;;;;;;;:::i;:::-;;7479:243;;7550:46;;-1:-1:-1;;;7550:46:60;;;;;1645:25:137;;;1618:18;;7550:46:60;1499:177:137;7479:243:60;7626:30;7617:5;:39;;;;;;;;:::i;:::-;;7613:109;;7679:32;;-1:-1:-1;;;7679:32:60;;;;;1645:25:137;;;1618:18;;7679:32:60;1499:177:137;7058:687:31;7108:7;-1:-1:-1;;;;;;;;;;;7108:7:31;7203:13;:11;:13::i;:::-;7230:18;;7182:34;;-1:-1:-1;7230:22:31;7226:513;;7275:22;;;;;;;;7058:687;-1:-1:-1;;7058:687:31:o;7226:513::-;7572:13;;7603:15;;7599:130;;7645:10;7058:687;-1:-1:-1;;;7058:687:31:o;7599:130::-;7701:13;7694:20;;;;;7058:687;:::o;7966:723::-;8019:7;-1:-1:-1;;;;;;;;;;;8019:7:31;8117:16;:14;:16::i;:::-;8147:21;;8093:40;;-1:-1:-1;8147:25:31;8143:540;;8195:25;;;;;;;;7966:723;-1:-1:-1;;7966:723:31:o;8143:540::-;8507:16;;;;8541:18;;8537:136;;8586:13;7966:723;-1:-1:-1;;;7966:723:31:o;14:286:137:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:137;;209:43;;199:71;;266:1;263;256:12;199:71;289:5;14:286;-1:-1:-1;;;14:286:137:o;497:289::-;539:3;577:5;571:12;604:6;599:3;592:19;660:6;653:4;646:5;642:16;635:4;630:3;626:14;620:47;712:1;705:4;696:6;691:3;687:16;683:27;676:38;775:4;768:2;764:7;759:2;751:6;747:15;743:29;738:3;734:39;730:50;723:57;;;497:289;;;;:::o;791:220::-;940:2;929:9;922:21;903:4;960:45;1001:2;990:9;986:18;978:6;960:45;:::i;1016:173::-;1084:20;;-1:-1:-1;;;;;1133:31:137;;1123:42;;1113:70;;1179:1;1176;1169:12;1113:70;1016:173;;;:::o;1194:300::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1362:29;1381:9;1362:29;:::i;:::-;1352:39;1460:2;1445:18;;;;1432:32;;-1:-1:-1;;;1194:300:137:o;1681:374::-;1758:6;1766;1774;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;1866:29;1885:9;1866:29;:::i;:::-;1856:39;;1914:38;1948:2;1937:9;1933:18;1914:38;:::i;:::-;1681:374;;1904:48;;-1:-1:-1;;;2021:2:137;2006:18;;;;1993:32;;1681:374::o;2060:226::-;2119:6;2172:2;2160:9;2151:7;2147:23;2143:32;2140:52;;;2188:1;2185;2178:12;2140:52;-1:-1:-1;2233:23:137;;2060:226;-1:-1:-1;2060:226:137:o;2473:300::-;2541:6;2549;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2663:23;;;-1:-1:-1;2729:38:137;2763:2;2748:18;;2729:38;:::i;:::-;2719:48;;2473:300;;;;;:::o;2967:260::-;3035:6;3043;3096:2;3084:9;3075:7;3071:23;3067:32;3064:52;;;3112:1;3109;3102:12;3064:52;3135:29;3154:9;3135:29;:::i;:::-;3125:39;;3183:38;3217:2;3206:9;3202:18;3183:38;:::i;3232:186::-;3291:6;3344:2;3332:9;3323:7;3319:23;3315:32;3312:52;;;3360:1;3357;3350:12;3312:52;3383:29;3402:9;3383:29;:::i;3423:1238::-;3829:3;3824;3820:13;3812:6;3808:26;3797:9;3790:45;3871:3;3866:2;3855:9;3851:18;3844:31;3771:4;3898:46;3939:3;3928:9;3924:19;3916:6;3898:46;:::i;:::-;3992:9;3984:6;3980:22;3975:2;3964:9;3960:18;3953:50;4026:33;4052:6;4044;4026:33;:::i;:::-;4090:2;4075:18;;4068:34;;;-1:-1:-1;;;;;4139:32:137;;4133:3;4118:19;;4111:61;4159:3;4188:19;;4181:35;;;4253:22;;;4247:3;4232:19;;4225:51;4325:13;;4347:22;;;4397:2;4423:15;;;;-1:-1:-1;4385:15:137;;;;-1:-1:-1;4466:169:137;4480:6;4477:1;4474:13;4466:169;;;4541:13;;4529:26;;4584:2;4610:15;;;;4575:12;;;;4502:1;4495:9;4466:169;;;-1:-1:-1;4652:3:137;;3423:1238;-1:-1:-1;;;;;;;;;;;3423:1238:137:o;4666:903::-;4777:6;4785;4793;4801;4809;4817;4825;4878:3;4866:9;4857:7;4853:23;4849:33;4846:53;;;4895:1;4892;4885:12;4846:53;4918:29;4937:9;4918:29;:::i;:::-;4908:39;;4966:38;5000:2;4989:9;4985:18;4966:38;:::i;:::-;4956:48;-1:-1:-1;5073:2:137;5058:18;;5045:32;;-1:-1:-1;5174:2:137;5159:18;;5146:32;;-1:-1:-1;5256:3:137;5241:19;;5228:33;5305:4;5292:18;;5280:31;;5270:59;;5325:1;5322;5315:12;5270:59;4666:903;;;;-1:-1:-1;4666:903:137;;;;5348:7;5428:3;5413:19;;5400:33;;-1:-1:-1;5532:3:137;5517:19;;;5504:33;;4666:903;-1:-1:-1;;4666:903:137:o;5574:380::-;5653:1;5649:12;;;;5696;;;5717:61;;5771:4;5763:6;5759:17;5749:27;;5717:61;5824:2;5816:6;5813:14;5793:18;5790:38;5787:161;;5870:10;5865:3;5861:20;5858:1;5851:31;5905:4;5902:1;5895:15;5933:4;5930:1;5923:15;5787:161;;5574:380;;;:::o;5959:127::-;6020:10;6015:3;6011:20;6008:1;6001:31;6051:4;6048:1;6041:15;6075:4;6072:1;6065:15;6091:375;6179:1;6197:5;6211:249;6232:1;6222:8;6219:15;6211:249;;;6282:4;6277:3;6273:14;6267:4;6264:24;6261:50;;;6291:18;;:::i;:::-;6341:1;6331:8;6327:16;6324:49;;;6355:16;;;;6324:49;6438:1;6434:16;;;;;6394:15;;6211:249;;;6091:375;;;;;;:::o;6471:902::-;6520:5;6550:8;6540:80;;-1:-1:-1;6591:1:137;6605:5;;6540:80;6639:4;6629:76;;-1:-1:-1;6676:1:137;6690:5;;6629:76;6721:4;6739:1;6734:59;;;;6807:1;6802:174;;;;6714:262;;6734:59;6764:1;6755:10;;6778:5;;;6802:174;6839:3;6829:8;6826:17;6823:43;;;6846:18;;:::i;:::-;-1:-1:-1;;6902:1:137;6888:16;;6961:5;;6714:262;;7060:2;7050:8;7047:16;7041:3;7035:4;7032:13;7028:36;7022:2;7012:8;7009:16;7004:2;6998:4;6995:12;6991:35;6988:77;6985:203;;;-1:-1:-1;7097:19:137;;;7173:5;;6985:203;7220:42;-1:-1:-1;;7245:8:137;7239:4;7220:42;:::i;:::-;7298:6;7294:1;7290:6;7286:19;7277:7;7274:32;7271:58;;;7309:18;;:::i;:::-;7347:20;;6471:902;-1:-1:-1;;;6471:902:137:o;7378:140::-;7436:5;7465:47;7506:4;7496:8;7492:19;7486:4;7465:47;:::i;7523:168::-;7596:9;;;7627;;7644:15;;;7638:22;;7624:37;7614:71;;7665:18;;:::i;8260:127::-;8321:10;8316:3;8312:20;8309:1;8302:31;8352:4;8349:1;8342:15;8376:4;8373:1;8366:15;9973:518;10075:2;10070:3;10067:11;10064:421;;;10111:5;10108:1;10101:16;10155:4;10152:1;10142:18;10225:2;10213:10;10209:19;10206:1;10202:27;10196:4;10192:38;10261:4;10249:10;10246:20;10243:47;;;-1:-1:-1;10284:4:137;10243:47;10339:2;10334:3;10330:12;10327:1;10323:20;10317:4;10313:31;10303:41;;10394:81;10412:2;10405:5;10402:13;10394:81;;;10471:1;10457:16;;10438:1;10427:13;10394:81;;10667:1299;10793:3;10787:10;10820:18;10812:6;10809:30;10806:56;;;10842:18;;:::i;:::-;10871:97;10961:6;10921:38;10953:4;10947:11;10921:38;:::i;:::-;10915:4;10871:97;:::i;:::-;11017:4;11048:2;11037:14;;11065:1;11060:649;;;;11753:1;11770:6;11767:89;;;-1:-1:-1;11822:19:137;;;11816:26;11767:89;-1:-1:-1;;10624:1:137;10620:11;;;10616:24;10612:29;10602:40;10648:1;10644:11;;;10599:57;11869:81;;11030:930;;11060:649;9920:1;9913:14;;;9957:4;9944:18;;-1:-1:-1;;11096:20:137;;;11214:222;11228:7;11225:1;11222:14;11214:222;;;11310:19;;;11304:26;11289:42;;11417:4;11402:20;;;;11370:1;11358:14;;;;11244:12;11214:222;;;11218:3;11464:6;11455:7;11452:19;11449:201;;;11525:19;;;11519:26;-1:-1:-1;;11608:1:137;11604:14;;;11620:3;11600:24;11596:37;11592:42;11577:58;11562:74;;11449:201;-1:-1:-1;;;;11696:1:137;11680:14;;;11676:22;11663:36;;-1:-1:-1;10667:1299:137:o;11971:125::-;12036:9;;;12057:10;;;12054:36;;;12070:18;;:::i;13277:127::-;13338:10;13333:3;13329:20;13326:1;13319:31;13369:4;13366:1;13359:15;13393:4;13390:1;13383:15", + "linkReferences": {} + }, + "methodIdentifiers": { + "DEFAULT_ADMIN_ROLE()": "a217fddf", + "DOMAIN_SEPARATOR()": "3644e515", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "decimals()": "313ce567", + "eip712Domain()": "84b0196e", + "getRoleAdmin(bytes32)": "248a9ca3", + "grantRole(bytes32,address)": "2f2ff15d", + "hasRole(bytes32,address)": "91d14854", + "initialize(address,address)": "485cc955", + "name()": "06fdde03", + "nonces(address)": "7ecebe00", + "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", + "renounceRole(bytes32,address)": "36568abe", + "revokeRole(bytes32,address)": "d547741f", + "supportsInterface(bytes4)": "01ffc9a7", + "symbol()": "95d89b41", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd" + }, + "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"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\"},{\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"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\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"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\":[],\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_custody\",\"type\":\"address\"}],\"name\":\"initialize\",\"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\":[{\"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\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an .\"}],\"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.\"}]},\"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.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"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}.\"},\"constructor\":{\"details\":\"Disables potential implementation exploit\"},\"decimals()\":{\"details\":\"Returns the number of decimals\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize(address,address)\":{\"details\":\"Initializes the contract with initial parameters.\",\"params\":{\"_custody\":\"The address of the custody account.\",\"_owner\":\"The address of the owner who receives default admin role.\"}},\"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.\"},\"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.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"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}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. 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`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"decimals()\":{\"notice\":\"decimals is set to 8, following the Movement network standard decimals\"},\"initialize(address,address)\":{\"notice\":\"The ERC20 token is named \\\"Movement\\\" with symbol \\\"MOVE\\\".EIP712 domain version is set to \\\"1\\\" for signatures.The owner is granted the `DEFAULT_ADMIN_ROLE`.10 billion MOVE tokens are minted to the owner's address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/MOVEToken.sol\":\"MOVEToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"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\":\"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040\",\"dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x8a97653aeba40e9f0c2e8df1a1379b29b927b6dc3534040c668e71ad9ae89d88\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e529c294c9d634eb68a1e4aeb66eb8381de5a08ccd2c0bfeebd48a6b28fcff7\",\"dweb:/ipfs/QmWCezuxfZb68nM3Hs6XzQNNiW7VJsymU4sajy2DW1CKbp\"]},\"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\":\"0x85462422a22578744581e012e9aa0a391958cb360288b0b63f29bf0431d70327\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2bc529e2b9b28da5d26da451058250d85afcaa3c5083ee273ac68fa6bf956b78\",\"dweb:/ipfs/Qmd3Aq59ztmoVmHigsaR4YjkXWKERVpjfQ4a2PHk7Ke6Rx\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"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\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"src/token/MOVEToken.sol\":{\"keccak256\":\"0x907babd7e2db7867a9401ab8edcecd579ad7db099ae4693a27e052887d91eb22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a87e3b44d5e5409f0695ca2057be132b02b12a6cfa3d95a1a69382458e16b20a\",\"dweb:/ipfs/QmPNA8kiRGr3jR4ngz8UeKLUM7QitN4J5xNbxxWYNncV9H\"]}},\"version\":1}", + "metadata": { + "compiler": { + "version": "0.8.26+commit.8a97fa7a" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "type": "error", + "name": "AccessControlBadConfirmation" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "neededRole", + "type": "bytes32" + } + ], + "type": "error", + "name": "AccessControlUnauthorizedAccount" + }, + { + "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", + "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": "bytes32", + "name": "role", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "bytes32", + "name": "previousAdminRole", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "bytes32", + "name": "newAdminRole", + "type": "bytes32", + "indexed": true + } + ], + "type": "event", + "name": "RoleAdminChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "address", + "name": "account", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "sender", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "RoleGranted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32", + "indexed": true + }, + { + "internalType": "address", + "name": "account", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "sender", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "RoleRevoked", + "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": "DEFAULT_ADMIN_ROLE", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "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": [], + "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": "bytes32", + "name": "role", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRoleAdmin", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "grantRole" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "hasRole", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_owner", + "type": "address" + }, + { + "internalType": "address", + "name": "_custody", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "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": [ + { + "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": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "callerConfirmation", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceRole" + }, + { + "inputs": [ + { + "internalType": "bytes32", + "name": "role", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "revokeRole" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "interfaceId", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supportsInterface", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "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" + } + ] + } + ], + "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}." + }, + "constructor": { + "details": "Disables potential implementation exploit" + }, + "decimals()": { + "details": "Returns the number of decimals" + }, + "eip712Domain()": { + "details": "See {IERC-5267}." + }, + "getRoleAdmin(bytes32)": { + "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." + }, + "grantRole(bytes32,address)": { + "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." + }, + "hasRole(bytes32,address)": { + "details": "Returns `true` if `account` has been granted `role`." + }, + "initialize(address,address)": { + "details": "Initializes the contract with initial parameters.", + "params": { + "_custody": "The address of the custody account.", + "_owner": "The address of the owner who receives default admin role." + } + }, + "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." + }, + "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." + }, + "renounceRole(bytes32,address)": { + "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event." + }, + "revokeRole(bytes32,address)": { + "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." + }, + "supportsInterface(bytes4)": { + "details": "See {IERC165-supportsInterface}." + }, + "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}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. 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`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "decimals()": { + "notice": "decimals is set to 8, following the Movement network standard decimals" + }, + "initialize(address,address)": { + "notice": "The ERC20 token is named \"Movement\" with symbol \"MOVE\".EIP712 domain version is set to \"1\" for signatures.The owner is granted the `DEFAULT_ADMIN_ROLE`.10 billion MOVE tokens are minted to the owner's address." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@createx/=lib/createx/src/", + "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", + "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", + "@safe-smart-account/=lib/safe-smart-account/", + "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/", + "murky/=lib/murky/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", + "openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/", + "safe-smart-account/=lib/safe-smart-account/", + "solady/=lib/createx/lib/solady/", + "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/", + "solmate/=lib/solmate/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "ipfs" + }, + "compilationTarget": { + "src/token/MOVEToken.sol": "MOVEToken" + }, + "evmVersion": "cancun", + "libraries": {} + }, + "sources": { + "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol": { + "keccak256": "0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225", + "urls": [ + "bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45", + "dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN" + ], + "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": "0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f", + "urls": [ + "bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040", + "dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol": { + "keccak256": "0x8a97653aeba40e9f0c2e8df1a1379b29b927b6dc3534040c668e71ad9ae89d88", + "urls": [ + "bzz-raw://6e529c294c9d634eb68a1e4aeb66eb8381de5a08ccd2c0bfeebd48a6b28fcff7", + "dweb:/ipfs/QmWCezuxfZb68nM3Hs6XzQNNiW7VJsymU4sajy2DW1CKbp" + ], + "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": "0x85462422a22578744581e012e9aa0a391958cb360288b0b63f29bf0431d70327", + "urls": [ + "bzz-raw://2bc529e2b9b28da5d26da451058250d85afcaa3c5083ee273ac68fa6bf956b78", + "dweb:/ipfs/Qmd3Aq59ztmoVmHigsaR4YjkXWKERVpjfQ4a2PHk7Ke6Rx" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol": { + "keccak256": "0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8", + "urls": [ + "bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45", + "dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/IAccessControl.sol": { + "keccak256": "0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41", + "urls": [ + "bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26", + "dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH" + ], + "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": "0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7", + "urls": [ + "bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f", + "dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": { + "keccak256": "0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70", + "urls": [ + "bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c", + "dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": { + "keccak256": "0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2", + "urls": [ + "bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850", + "dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol": { + "keccak256": "0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff", + "urls": [ + "bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d", + "dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Strings.sol": { + "keccak256": "0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792", + "urls": [ + "bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453", + "dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { + "keccak256": "0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf", + "urls": [ + "bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c", + "dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol": { + "keccak256": "0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435", + "urls": [ + "bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c", + "dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": { + "keccak256": "0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b", + "urls": [ + "bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df", + "dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { + "keccak256": "0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d", + "urls": [ + "bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875", + "dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol": { + "keccak256": "0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72", + "urls": [ + "bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc", + "dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT" + ], + "license": "MIT" + }, + "src/token/MOVEToken.sol": { + "keccak256": "0x907babd7e2db7867a9401ab8edcecd579ad7db099ae4693a27e052887d91eb22", + "urls": [ + "bzz-raw://a87e3b44d5e5409f0695ca2057be132b02b12a6cfa3d95a1a69382458e16b20a", + "dweb:/ipfs/QmPNA8kiRGr3jR4ngz8UeKLUM7QitN4J5xNbxxWYNncV9H" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": {} + }, + "ast": { + "absolutePath": "src/token/MOVEToken.sol", + "id": 56720, + "exportedSymbols": { + "AccessControlUpgradeable": [ + 39385 + ], + "ERC20PermitUpgradeable": [ + 40607 + ], + "MOVEToken": [ + 56719 + ] + }, + "nodeType": "SourceUnit", + "src": "32:1526:112", + "nodes": [ + { + "id": 56640, + "nodeType": "PragmaDirective", + "src": "32:24:112", + "nodes": [], + "literals": [ + "solidity", + "^", + "0.8", + ".19" + ] + }, + { + "id": 56642, + "nodeType": "ImportDirective", + "src": "58:125:112", + "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": 56720, + "sourceUnit": 40608, + "symbolAliases": [ + { + "foreign": { + "id": 56641, + "name": "ERC20PermitUpgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40607, + "src": "66:22:112", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 56644, + "nodeType": "ImportDirective", + "src": "184:113:112", + "nodes": [], + "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", + "file": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol", + "nameLocation": "-1:-1:-1", + "scope": 56720, + "sourceUnit": 39386, + "symbolAliases": [ + { + "foreign": { + "id": 56643, + "name": "AccessControlUpgradeable", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 39385, + "src": "192:24:112", + "typeDescriptions": {} + }, + "nameLocation": "-1:-1:-1" + } + ], + "unitAlias": "" + }, + { + "id": 56719, + "nodeType": "ContractDefinition", + "src": "299:1259:112", + "nodes": [ + { + "id": 56656, + "nodeType": "FunctionDefinition", + "src": "447:39:112", + "nodes": [], + "body": { + "id": 56655, + "nodeType": "Block", + "src": "461:25:112", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 56652, + "name": "_disableInitializers", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 39607, + "src": "462:20:112", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", + "typeString": "function ()" + } + }, + "id": 56653, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "462:22:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 56654, + "nodeType": "ExpressionStatement", + "src": "462:22:112" + } + ] + }, + "documentation": { + "id": 56649, + "nodeType": "StructuredDocumentation", + "src": "377:65:112", + "text": " @dev Disables potential implementation exploit" + }, + "implemented": true, + "kind": "constructor", + "modifiers": [], + "name": "", + "nameLocation": "-1:-1:-1", + "parameters": { + "id": 56650, + "nodeType": "ParameterList", + "parameters": [], + "src": "458:2:112" + }, + "returnParameters": { + "id": 56651, + "nodeType": "ParameterList", + "parameters": [], + "src": "461:0:112" + }, + "scope": 56719, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 56708, + "nodeType": "FunctionDefinition", + "src": "981:342:112", + "nodes": [], + "body": { + "id": 56707, + "nodeType": "Block", + "src": "1054:269:112", + "nodes": [], + "statements": [ + { + "expression": { + "arguments": [ + { + "commonType": { + "typeIdentifier": "t_bool", + "typeString": "bool" + }, + "id": 56679, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 56672, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 56667, + "name": "_owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 56659, + "src": "1072:6:112", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 56670, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1090:1:112", + "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": 56669, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1082:7:112", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 56668, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1082:7:112", + "typeDescriptions": {} + } + }, + "id": 56671, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1082:10:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1072:20:112", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "nodeType": "BinaryOperation", + "operator": "&&", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "id": 56678, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "id": 56673, + "name": "_custody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 56661, + "src": "1096:8:112", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "nodeType": "BinaryOperation", + "operator": "!=", + "rightExpression": { + "arguments": [ + { + "hexValue": "30", + "id": 56676, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1116:1:112", + "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": 56675, + "isConstant": false, + "isLValue": false, + "isPure": true, + "lValueRequested": false, + "nodeType": "ElementaryTypeNameExpression", + "src": "1108:7:112", + "typeDescriptions": { + "typeIdentifier": "t_type$_t_address_$", + "typeString": "type(address)" + }, + "typeName": { + "id": 56674, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1108:7:112", + "typeDescriptions": {} + } + }, + "id": 56677, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "typeConversion", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1108:10:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "src": "1096:22:112", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "src": "1072:46:112", + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + ], + "id": 56666, + "name": "require", + "nodeType": "Identifier", + "overloadedDeclarations": [ + -18, + -18, + -18 + ], + "referencedDeclaration": -18, + "src": "1064:7:112", + "typeDescriptions": { + "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", + "typeString": "function (bool) pure" + } + }, + "id": 56680, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1064:55:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 56681, + "nodeType": "ExpressionStatement", + "src": "1064:55:112" + }, + { + "expression": { + "arguments": [ + { + "hexValue": "4d6f76656d656e74", + "id": 56683, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1142:10:112", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252", + "typeString": "literal_string \"Movement\"" + }, + "value": "Movement" + }, + { + "hexValue": "4d4f5645", + "id": 56684, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1154:6:112", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_94304e8d07ec49123c30284d16c4a1082e90258cc0faf510314d9c3808edcda0", + "typeString": "literal_string \"MOVE\"" + }, + "value": "MOVE" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252", + "typeString": "literal_string \"Movement\"" + }, + { + "typeIdentifier": "t_stringliteral_94304e8d07ec49123c30284d16c4a1082e90258cc0faf510314d9c3808edcda0", + "typeString": "literal_string \"MOVE\"" + } + ], + "id": 56682, + "name": "__ERC20_init", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 39889, + "src": "1129:12:112", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory,string memory)" + } + }, + "id": 56685, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1129:32:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 56686, + "nodeType": "ExpressionStatement", + "src": "1129:32:112" + }, + { + "expression": { + "arguments": [ + { + "hexValue": "4d6f76656d656e74", + "id": 56688, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1195:10:112", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252", + "typeString": "literal_string \"Movement\"" + }, + "value": "Movement" + }, + { + "hexValue": "31", + "id": 56689, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "string", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1207:3:112", + "typeDescriptions": { + "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", + "typeString": "literal_string \"1\"" + }, + "value": "1" + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252", + "typeString": "literal_string \"Movement\"" + }, + { + "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", + "typeString": "literal_string \"1\"" + } + ], + "id": 56687, + "name": "__EIP712_init_unchained", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40861, + "src": "1171:23:112", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", + "typeString": "function (string memory,string memory)" + } + }, + "id": 56690, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1171:40:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 56691, + "nodeType": "ExpressionStatement", + "src": "1171:40:112" + }, + { + "expression": { + "arguments": [ + { + "id": 56693, + "name": "DEFAULT_ADMIN_ROLE", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 39051, + "src": "1232:18:112", + "typeDescriptions": { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + } + }, + { + "id": 56694, + "name": "_owner", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 56659, + "src": "1252:6:112", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_bytes32", + "typeString": "bytes32" + }, + { + "typeIdentifier": "t_address", + "typeString": "address" + } + ], + "id": 56692, + "name": "_grantRole", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 39338, + "src": "1221:10:112", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$", + "typeString": "function (bytes32,address) returns (bool)" + } + }, + "id": 56695, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1221:38:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_bool", + "typeString": "bool" + } + }, + "id": 56696, + "nodeType": "ExpressionStatement", + "src": "1221:38:112" + }, + { + "expression": { + "arguments": [ + { + "id": 56698, + "name": "_custody", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 56661, + "src": "1275:8:112", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 56704, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130303030303030303030", + "id": 56699, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1285:11:112", + "typeDescriptions": { + "typeIdentifier": "t_rational_10000000000_by_1", + "typeString": "int_const 10000000000" + }, + "value": "10000000000" + }, + "nodeType": "BinaryOperation", + "operator": "*", + "rightExpression": { + "commonType": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + }, + "id": 56703, + "isConstant": false, + "isLValue": false, + "isPure": false, + "lValueRequested": false, + "leftExpression": { + "hexValue": "3130", + "id": 56700, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1299:2:112", + "typeDescriptions": { + "typeIdentifier": "t_rational_10_by_1", + "typeString": "int_const 10" + }, + "value": "10" + }, + "nodeType": "BinaryOperation", + "operator": "**", + "rightExpression": { + "arguments": [], + "expression": { + "argumentTypes": [], + "id": 56701, + "name": "decimals", + "nodeType": "Identifier", + "overloadedDeclarations": [ + 56718 + ], + "referencedDeclaration": 56718, + "src": "1305:8:112", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint8_$", + "typeString": "function () pure returns (uint8)" + } + }, + "id": 56702, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1305:10:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "src": "1299:16:112", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + }, + "src": "1285:30:112", + "typeDescriptions": { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + } + ], + "expression": { + "argumentTypes": [ + { + "typeIdentifier": "t_address", + "typeString": "address" + }, + { + "typeIdentifier": "t_uint256", + "typeString": "uint256" + } + ], + "id": 56697, + "name": "_mint", + "nodeType": "Identifier", + "overloadedDeclarations": [], + "referencedDeclaration": 40270, + "src": "1269:5:112", + "typeDescriptions": { + "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", + "typeString": "function (address,uint256)" + } + }, + "id": 56705, + "isConstant": false, + "isLValue": false, + "isPure": false, + "kind": "functionCall", + "lValueRequested": false, + "nameLocations": [], + "names": [], + "nodeType": "FunctionCall", + "src": "1269:47:112", + "tryCall": false, + "typeDescriptions": { + "typeIdentifier": "t_tuple$__$", + "typeString": "tuple()" + } + }, + "id": 56706, + "nodeType": "ExpressionStatement", + "src": "1269:47:112" + } + ] + }, + "documentation": { + "id": 56657, + "nodeType": "StructuredDocumentation", + "src": "492:484:112", + "text": " @dev Initializes the contract with initial parameters.\n @param _owner The address of the owner who receives default admin role.\n @param _custody The address of the custody account.\n @notice The ERC20 token is named \"Movement\" with symbol \"MOVE\".\n @notice EIP712 domain version is set to \"1\" for signatures.\n @notice The owner is granted the `DEFAULT_ADMIN_ROLE`.\n @notice 10 billion MOVE tokens are minted to the owner's address." + }, + "functionSelector": "485cc955", + "implemented": true, + "kind": "function", + "modifiers": [ + { + "id": 56664, + "kind": "modifierInvocation", + "modifierName": { + "id": 56663, + "name": "initializer", + "nameLocations": [ + "1042:11:112" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 39493, + "src": "1042:11:112" + }, + "nodeType": "ModifierInvocation", + "src": "1042:11:112" + } + ], + "name": "initialize", + "nameLocation": "990:10:112", + "parameters": { + "id": 56662, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 56659, + "mutability": "mutable", + "name": "_owner", + "nameLocation": "1009:6:112", + "nodeType": "VariableDeclaration", + "scope": 56708, + "src": "1001:14:112", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 56658, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1001:7:112", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + }, + { + "constant": false, + "id": 56661, + "mutability": "mutable", + "name": "_custody", + "nameLocation": "1025:8:112", + "nodeType": "VariableDeclaration", + "scope": 56708, + "src": "1017:16:112", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + }, + "typeName": { + "id": 56660, + "name": "address", + "nodeType": "ElementaryTypeName", + "src": "1017:7:112", + "stateMutability": "nonpayable", + "typeDescriptions": { + "typeIdentifier": "t_address", + "typeString": "address" + } + }, + "visibility": "internal" + } + ], + "src": "1000:34:112" + }, + "returnParameters": { + "id": 56665, + "nodeType": "ParameterList", + "parameters": [], + "src": "1054:0:112" + }, + "scope": 56719, + "stateMutability": "nonpayable", + "virtual": false, + "visibility": "public" + }, + { + "id": 56718, + "nodeType": "FunctionDefinition", + "src": "1474:82:112", + "nodes": [], + "body": { + "id": 56717, + "nodeType": "Block", + "src": "1531:25:112", + "nodes": [], + "statements": [ + { + "expression": { + "hexValue": "38", + "id": 56715, + "isConstant": false, + "isLValue": false, + "isPure": true, + "kind": "number", + "lValueRequested": false, + "nodeType": "Literal", + "src": "1548:1:112", + "typeDescriptions": { + "typeIdentifier": "t_rational_8_by_1", + "typeString": "int_const 8" + }, + "value": "8" + }, + "functionReturnParameters": 56714, + "id": 56716, + "nodeType": "Return", + "src": "1541:8:112" + } + ] + }, + "baseFunctions": [ + 39958 + ], + "documentation": { + "id": 56709, + "nodeType": "StructuredDocumentation", + "src": "1329:140:112", + "text": " @dev Returns the number of decimals\n @notice decimals is set to 8, following the Movement network standard decimals" + }, + "functionSelector": "313ce567", + "implemented": true, + "kind": "function", + "modifiers": [], + "name": "decimals", + "nameLocation": "1483:8:112", + "overrides": { + "id": 56711, + "nodeType": "OverrideSpecifier", + "overrides": [], + "src": "1506:8:112" + }, + "parameters": { + "id": 56710, + "nodeType": "ParameterList", + "parameters": [], + "src": "1491:2:112" + }, + "returnParameters": { + "id": 56714, + "nodeType": "ParameterList", + "parameters": [ + { + "constant": false, + "id": 56713, + "mutability": "mutable", + "name": "", + "nameLocation": "-1:-1:-1", + "nodeType": "VariableDeclaration", + "scope": 56718, + "src": "1524:5:112", + "stateVariable": false, + "storageLocation": "default", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + }, + "typeName": { + "id": 56712, + "name": "uint8", + "nodeType": "ElementaryTypeName", + "src": "1524:5:112", + "typeDescriptions": { + "typeIdentifier": "t_uint8", + "typeString": "uint8" + } + }, + "visibility": "internal" + } + ], + "src": "1523:7:112" + }, + "scope": 56719, + "stateMutability": "pure", + "virtual": false, + "visibility": "public" + } + ], + "abstract": false, + "baseContracts": [ + { + "baseName": { + "id": 56645, + "name": "ERC20PermitUpgradeable", + "nameLocations": [ + "321:22:112" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 40607, + "src": "321:22:112" + }, + "id": 56646, + "nodeType": "InheritanceSpecifier", + "src": "321:22:112" + }, + { + "baseName": { + "id": 56647, + "name": "AccessControlUpgradeable", + "nameLocations": [ + "345:24:112" + ], + "nodeType": "IdentifierPath", + "referencedDeclaration": 39385, + "src": "345:24:112" + }, + "id": 56648, + "nodeType": "InheritanceSpecifier", + "src": "345:24:112" + } + ], + "canonicalName": "MOVEToken", + "contractDependencies": [], + "contractKind": "contract", + "fullyImplemented": true, + "linearizedBaseContracts": [ + 56719, + 39385, + 41148, + 45166, + 41527, + 40607, + 40764, + 41108, + 42745, + 43725, + 40438, + 42797, + 43689, + 43663, + 40653, + 39639 + ], + "name": "MOVEToken", + "nameLocation": "308:9:112", + "scope": 56720, + "usedErrors": [ + 39402, + 39405, + 40473, + 40480, + 40667, + 41454, + 41457, + 42767, + 42772, + 42777, + 42786, + 42791, + 42796, + 44719, + 44724, + 44729 + ], + "usedEvents": [ + 39410, + 41466, + 41475, + 41484, + 42725, + 43597, + 43606 + ] + } + ], + "license": "MIT" + }, + "id": 112 +} \ No newline at end of file diff --git a/protocol/pcp/clients/eth/abis/MovementStaking.json b/protocol/pcp/clients/eth/abis/MovementStaking.json new file mode 100644 index 00000000..f79819f9 --- /dev/null +++ b/protocol/pcp/clients/eth/abis/MovementStaking.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"WHITELIST_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"acceptGenesisCeremony","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"currentEpochByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"currentEpoch","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"domainGenesisAccepted","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"epochDurationByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"epochDuration","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"epochStakesByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"epochTotalStakeByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"epochUnstakesByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttestersByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpochStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpochUnstake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodiansByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getEpochByBlockTime","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextEpochByBlockTime","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStakeAtEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStakeForCurrentEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStakeForEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUnstakeAtEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"_token","type":"address","internalType":"contract IERC20"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"registerDomain","inputs":[{"name":"epochDuration","type":"uint256","internalType":"uint256"},{"name":"custodians","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeAddressFromWhitelist","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reward","inputs":[{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"amounts","type":"uint256[]","internalType":"uint256[]"},{"name":"custodians","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rollOverEpoch","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setGenesisCeremony","inputs":[{"name":"custodians","type":"address[]","internalType":"address[]"},{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"stakes","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"slash","inputs":[{"name":"custodians","type":"address[]","internalType":"address[]"},{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"amounts","type":"uint256[]","internalType":"uint256[]"},{"name":"refundAmounts","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"contract IERC20"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"unstake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"whitelistAddress","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AttesterEpochRolledOver","inputs":[{"name":"attester","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"unstake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AttesterStaked","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":false,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AttesterUnstaked","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":false,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EpochRolledOver","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"CustodianTransferAmountMismatch","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"GenesisAlreadyAccepted","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"StakeExceedsGenesisStake","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a0604052306080523480156012575f80fd5b50608051612b386100395f395f81816119f701528181611a200152611b660152612b385ff3fe608060405260043610610249575f3560e01c80638129fc1c11610134578063bf6eac2f116100b3578063d37304f811610078578063d37304f814610773578063d547741f14610792578063d5ca03de146107b1578063da33ee7f146107d0578063fc0c546a146107ef578063ff62787c14610825575f80fd5b8063bf6eac2f146106a3578063c0b95ab8146106c2578063c3471ff814610707578063c4d66de814610726578063d1ba90ff14610745575f80fd5b806392a2ebf3116100f957806392a2ebf31461060c578063a217fddf14610620578063a885c97514610633578063a887b71c14610652578063ad3cb1cc14610666575f80fd5b80638129fc1c1461057c5780638489e58014610590578063879b938b146105af5780638d908258146105ce57806391d14854146105ed575f80fd5b806344198e4d116101cb5780635cdf3155116101905780635cdf31551461046e57806360829f8a146104ba57806365f1ea20146104d9578063702243601461051e5780637667b76d1461053d5780637a997ab71461055c575f80fd5b806344198e4d146103cd5780634d3223a5146103ec5780634f1ef2861461040b57806352d1902d1461041e57806354300d7a14610432575f80fd5b80632c7785a8116102115780632c7785a8146103265780632f2ff15d1461034557806336568abe146103645780633bccf6351461038357806341566585146103ae575f80fd5b806301ffc9a71461024d5780630a0b1b6414610281578063248a9ca3146102ba578063286dd3f5146102d95780632924b73b146102fa575b5f80fd5b348015610258575f80fd5b5061026c6102673660046124cd565b610844565b60405190151581526020015b60405180910390f35b34801561028c575f80fd5b506102ac61029b366004612508565b60026020525f908152604090205481565b604051908152602001610278565b3480156102c5575f80fd5b506102ac6102d4366004612523565b61087a565b3480156102e4575f80fd5b506102f86102f3366004612508565b61089a565b005b348015610305575f80fd5b50610319610314366004612508565b6108bf565b604051610278919061253a565b348015610331575f80fd5b506102ac610340366004612508565b6109a9565b348015610350575f80fd5b506102f861035f366004612585565b6109d8565b34801561036f575f80fd5b506102f861037e366004612585565b6109fa565b34801561038e575f80fd5b506102ac61039d366004612508565b60016020525f908152604090205481565b3480156103b9575f80fd5b506102f86103c8366004612508565b610a32565b3480156103d8575f80fd5b506102ac6103e73660046125b3565b610a53565b3480156103f7575f80fd5b506102ac610406366004612508565b610a9b565b6102f86104193660046125f3565b610ab5565b348015610429575f80fd5b506102ac610ad0565b34801561043d575f80fd5b506102ac61044c3660046126b6565b600760209081525f938452604080852082529284528284209052825290205481565b348015610479575f80fd5b506102ac6104883660046126b6565b6001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b3480156104c5575f80fd5b506102f86104d43660046126f5565b610aeb565b3480156104e4575f80fd5b506102ac6104f3366004612733565b600660209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610529575f80fd5b506102ac610538366004612783565b610b74565b348015610548575f80fd5b506102ac610557366004612783565b610b91565b348015610567575f80fd5b506102ac5f80516020612aa383398151915281565b348015610587575f80fd5b506102f8610ba6565b34801561059b575f80fd5b506102ac6105aa366004612508565b610cb0565b3480156105ba575f80fd5b506102ac6105c9366004612733565b610cc8565b3480156105d9575f80fd5b506102ac6105e8366004612733565b610d05565b3480156105f8575f80fd5b5061026c610607366004612585565b610d42565b348015610617575f80fd5b506102f8610d78565b34801561062b575f80fd5b506102ac5f81565b34801561063e575f80fd5b506102f861064d366004612807565b610ebc565b34801561065d575f80fd5b506102f86110cc565b348015610671575f80fd5b50610696604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161027891906128d1565b3480156106ae575f80fd5b506102f86106bd3660046126f5565b6110e0565b3480156106cd575f80fd5b506102ac6106dc366004612733565b600560209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610712575f80fd5b506102ac610721366004612508565b6112ff565b348015610731575f80fd5b506102f8610740366004612508565b611321565b348015610750575f80fd5b5061026c61075f366004612508565b60086020525f908152604090205460ff1681565b34801561077e575f80fd5b506102f861078d366004612906565b611446565b34801561079d575f80fd5b506102f86107ac366004612585565b6114b0565b3480156107bc575f80fd5b506103196107cb366004612508565b6114cc565b3480156107db575f80fd5b506102f86107ea36600461294d565b6115af565b3480156107fa575f80fd5b505f5461080d906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b348015610830575f80fd5b506102f861083f36600461294d565b61163a565b5f6001600160e01b03198216637965db0b60e01b148061087457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f9081525f80516020612ae3833981519152602052604090206001015490565b5f6108a4816118b1565b6108bb5f80516020612aa3833981519152836114b0565b5050565b6001600160a01b0381165f908152600360205260408120606091906108e3906118be565b6001600160401b038111156108fa576108fa6125df565b604051908082528060200260200182016040528015610923578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600360205260409020610948906118be565b8110156109a2576001600160a01b0384165f90815260036020526040902061097090826118c7565b828281518110610982576109826129e9565b6001600160a01b0390921660209283029190910190910152600101610928565b5092915050565b5f6109b382610a9b565b156109d1576109c1826112ff565b6109cc906001612a11565b610874565b5f92915050565b6109e18261087a565b6109ea816118b1565b6109f483836118d2565b50505050565b6001600160a01b0381163314610a235760405163334bd91960e11b815260040160405180910390fd5b610a2d8282611973565b505050565b5f610a3c816118b1565b6108bb5f80516020612aa3833981519152836109d8565b5f610a9483610a6185610a9b565b846001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b9392505050565b6001600160a01b03165f9081526002602052604090205490565b610abd6119ec565b610ac682611a90565b6108bb8282611a9a565b5f610ad9611b5b565b505f80516020612ac383398151915290565b5f80516020612aa3833981519152610b02816118b1565b610b1784610b0f866109a9565b853386611ba4565b826001600160a01b0316610b2a85610cb0565b60408051338152602081018690526001600160a01b038816917fd41c64546a5c34c283150998874c7ee0412c8954f57aef484c681f6e137827df910160405180910390a450505050565b5f610b8984610b8286610a9b565b8585610d05565b949350505050565b5f610b8984610b9f86610a9b565b8585610cc8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610bea5750825b90505f826001600160401b03166001148015610c055750303b155b905081158015610c13575080155b15610c315760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c5b57845460ff60401b1916600160401b1785555b610c63611bf8565b8315610ca957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f610cba82610a9b565b156109d1576109c182610a9b565b6001600160a01b039384165f9081526006602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b6001600160a01b039384165f9081526005602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f9182525f80516020612ae3833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b335f8181526008602052604090205460ff1615610da75760405162fe178760e01b815260040160405180910390fd5b6001600160a01b0381165f908152600860205260409020805460ff19166001179055610dd2816112ff565b6001600160a01b0382165f908152600260205260408120919091555b6001600160a01b0382165f908152600360205260409020610e0e906118be565b8110156108bb576001600160a01b0382165f908152600360205260408120610e3690836118c7565b90505f5b6001600160a01b0384165f908152600460205260409020610e5a906118be565b811015610eb2576001600160a01b0384165f908152600460205260408120610e8290836118c7565b90505f610e91865f8487610d05565b9050610ea886610ea088610a9b565b848785611c08565b5050600101610e3a565b5050600101610dee565b5f5b858110156110c1575f610f85610f4633610ef88b8b87818110610ee357610ee36129e9565b90506020020160208101906104069190612508565b8d8d87818110610f0a57610f0a6129e9565b9050602002016020810190610f1f9190612508565b8c8c88818110610f3157610f316129e9565b90506020020160208101906105e89190612508565b610f80888886818110610f5b57610f5b6129e9565b90506020020135878787818110610f7457610f746129e9565b90506020020135611c93565b611c93565b9050610fdf30898985818110610f9d57610f9d6129e9565b9050602002016020810190610fb29190612508565b8c8c86818110610fc457610fc46129e9565b9050602002016020810190610fd99190612508565b84611ca8565b61105833610fec33610a9b565b8c8c86818110610ffe57610ffe6129e9565b90506020020160208101906110139190612508565b8b8b87818110611025576110256129e9565b905060200201602081019061103a9190612508565b8a8a8881811061104c5761104c6129e9565b90506020020135611ed1565b6110b83361106533610a9b565b8c8c86818110611077576110776129e9565b905060200201602081019061108c9190612508565b8b8b8781811061109e5761109e6129e9565b90506020020160208101906110b39190612508565b611f08565b50600101610ebe565b505050505050505050565b6110de336110d933610a9b565b611f7a565b565b5f80516020612aa38339815191526110f7816118b1565b6001600160a01b0384165f9081526003602052604090206111189033612097565b505f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561115f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111839190612a24565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303815f875af11580156111d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111fa9190612a3b565b506112058382612a11565b5f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561124a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126e9190612a24565b1461128c57604051631910d68360e21b815260040160405180910390fd5b6112a185611299876109a9565b863387611c08565b836001600160a01b03166112b486610cb0565b60408051338152602081018790526001600160a01b038916917f7be65c2ae4d3c544de23b1db5bea4d541c02b93a5f4302852f4dc9880e0cb554910160405180910390a45050505050565b6001600160a01b0381165f908152600160205260408120546108749042612a5a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156113655750825b90505f826001600160401b031660011480156113805750303b155b90508115801561138e575080155b156113ac5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156113d657845460ff60401b1916600160401b1785555b6113de6120ab565b5f80546001600160a01b0319166001600160a01b038816179055831561143e57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b335f8181526001602052604081208590555b82811015610ca9576114a7848483818110611475576114756129e9565b905060200201602081019061148a9190612508565b6001600160a01b0384165f90815260046020526040902090612097565b50600101611458565b6114b98261087a565b6114c2816118b1565b6109f48383611973565b6001600160a01b0381165f908152600460205260408120606091906114f0906118be565b6001600160401b03811115611507576115076125df565b604051908082528060200260200182016040528015611530578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600460205260409020611555906118be565b8110156109a2576001600160a01b0384165f90815260046020526040902061157d90826118c7565b82828151811061158f5761158f6129e9565b6001600160a01b0390921660209283029190910190910152600101611535565b5f5b8581101561163157611629338888848181106115cf576115cf6129e9565b90506020020160208101906115e49190612508565b8585858181106115f6576115f66129e9565b905060200201602081019061160b9190612508565b88888681811061161d5761161d6129e9565b90506020020135611ca8565b6001016115b1565b50505050505050565b33611644816112ff565b6001600160a01b0382165f908152600260205260408120919091555b848110156118a7575f88888381811061167b5761167b6129e9565b90506020020160208101906116909190612508565b90505f6116ab845f848b8b88818110610f3157610f316129e9565b90508585848181106116bf576116bf6129e9565b905060200201358111156116e657604051630eba55e760e21b815260040160405180910390fd5b61172d8888858181106116fb576116fb6129e9565b90506020020160208101906117109190612508565b6001600160a01b0386165f90815260036020526040902090612097565b50858584818110611740576117406129e9565b9050602002013560055f866001600160a01b03166001600160a01b031681526020019081526020015f205f61177487610a9b565b81526020019081526020015f205f846001600160a01b03166001600160a01b031681526020019081526020015f205f8a8a878181106117b5576117b56129e9565b90506020020160208101906117ca9190612508565b6001600160a01b0316815260208101919091526040015f20558585848181106117f5576117f56129e9565b6001600160a01b038088165f9081526007602090815260408083208380528252808320938916835292815291812080549290930294909401359391925061183d908490612a11565b909155505f905081878786818110611857576118576129e9565b905060200201356118689190612a79565b905061189c308a8a87818110611880576118806129e9565b90506020020160208101906118959190612508565b8584611ca8565b505050600101611660565b5050505050505050565b6118bb81336120bd565b50565b5f610874825490565b5f610a9483836120f6565b5f5f80516020612ae38339815191526118eb8484610d42565b61196a575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556119203390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610874565b5f915050610874565b5f5f80516020612ae383398151915261198c8484610d42565b1561196a575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610874565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a7257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a665f80516020612ac3833981519152546001600160a01b031690565b6001600160a01b031614155b156110de5760405163703e46dd60e11b815260040160405180910390fd5b5f6108bb816118b1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611af4575060408051601f3d908101601f19168201909252611af191810190612a24565b60015b611b2157604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f80516020612ac38339815191528114611b5157604051632a87526960e21b815260048101829052602401611b18565b610a2d838361211c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110de5760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b038086165f90815260066020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611bec908490612a11565b90915550505050505050565b611c00612171565b6110de6120ab565b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611c50908490612a11565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290611bec908490612a11565b5f818310611ca15781610a94565b5090919050565b306001600160a01b03851603611e1c575f546001600160a01b03808416911603611d46575f5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044015b6020604051808303815f875af1158015611d1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d409190612a3b565b506109f4565b5f5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015611d95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db99190612a3b565b506040516318950c7160e01b81526001600160a01b038481166004830152602482018390528316906318950c71906044015f604051808303815f87803b158015611e01575f80fd5b505af1158015611e13573d5f803e3d5ffd5b505050506109f4565b5f546001600160a01b03808416911603611e70575f546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201849052909116906323b872dd90606401611d00565b60405163c4652d8360e01b81526001600160a01b03858116600483015284811660248301526044820183905283169063c4652d83906064015f604051808303815f87803b158015611ebf575f80fd5b505af11580156118a7573d5f803e3d5ffd5b835f611edf87838787610d05565b905082811015611efb57611ef687838787856121ba565b611631565b61163187838787876121ba565b5f611f1585858585610d05565b90505f611f23856001612a11565b90505f611f3287838787610cc8565b905082811115611631576001600160a01b038088165f9081526006602090815260408083208684528252808320848a1684528252808320938816835292905220839055611631565b5f5b6001600160a01b0383165f908152600360205260409020611f9c906118be565b811015612031576001600160a01b0383165f908152600360205260408120611fc490836118c7565b90505f5b6001600160a01b0385165f908152600460205260409020611fe8906118be565b811015612027576001600160a01b0385165f90815260046020526040812061201090836118c7565b905061201e86868386612245565b50600101611fc8565b5050600101611f7c565b5061203d816001612a11565b6001600160a01b0383165f81815260026020526040908190209290925590517fb693195b5ff3e376f8b562486abc516e10fe2467b75f0e4165e79cf4ab70dc419061208b9084815260200190565b60405180910390a25050565b5f610a94836001600160a01b038416612308565b6120b3612171565b6118bb5f336118d2565b6120c78282610d42565b6108bb5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401611b18565b5f825f01828154811061210b5761210b6129e9565b905f5260205f200154905092915050565b61212582612354565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561216957610a2d82826123b7565b6108bb612429565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166110de57604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290612202908490612a79565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290611bec908490612a79565b5f61225285858585610d05565b90505f61226b86612264876001612a11565b8686610cc8565b9050818111156122785750805b5f6122838284612a79565b905061229c87612294886001612a11565b878785611c08565b6122a830858785611ca8565b846001600160a01b031686856001600160a01b03167f3ddb7f725ac69363a1df8296c965af4d268f31b082480dcd8419d284fb7fd34286866040516122f7929190918252602082015260400190565b60405180910390a450505050505050565b5f81815260018301602052604081205461234d57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610874565b505f610874565b806001600160a01b03163b5f0361238957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611b18565b5f80516020612ac383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516123d39190612a8c565b5f60405180830381855af49150503d805f811461240b576040519150601f19603f3d011682016040523d82523d5f602084013e612410565b606091505b5091509150612420858383612448565b95945050505050565b34156110de5760405163b398979f60e01b815260040160405180910390fd5b60608261245d57612458826124a4565b610a94565b815115801561247457506001600160a01b0384163b155b1561249d57604051639996b31560e01b81526001600160a01b0385166004820152602401611b18565b5080610a94565b8051156124b45780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f602082840312156124dd575f80fd5b81356001600160e01b031981168114610a94575f80fd5b6001600160a01b03811681146118bb575f80fd5b5f60208284031215612518575f80fd5b8135610a94816124f4565b5f60208284031215612533575f80fd5b5035919050565b602080825282518282018190525f918401906040840190835b8181101561257a5783516001600160a01b0316835260209384019390920191600101612553565b509095945050505050565b5f8060408385031215612596575f80fd5b8235915060208301356125a8816124f4565b809150509250929050565b5f80604083850312156125c4575f80fd5b82356125cf816124f4565b915060208301356125a8816124f4565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612604575f80fd5b823561260f816124f4565b915060208301356001600160401b03811115612629575f80fd5b8301601f81018513612639575f80fd5b80356001600160401b03811115612652576126526125df565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612680576126806125df565b604052818152828201602001871015612697575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f805f606084860312156126c8575f80fd5b83356126d3816124f4565b92506020840135915060408401356126ea816124f4565b809150509250925092565b5f805f60608486031215612707575f80fd5b8335612712816124f4565b92506020840135612722816124f4565b929592945050506040919091013590565b5f805f8060808587031215612746575f80fd5b8435612751816124f4565b9350602085013592506040850135612768816124f4565b91506060850135612778816124f4565b939692955090935050565b5f805f60608486031215612795575f80fd5b83356127a0816124f4565b925060208401356127b0816124f4565b915060408401356126ea816124f4565b5f8083601f8401126127d0575f80fd5b5081356001600160401b038111156127e6575f80fd5b6020830191508360208260051b8501011115612800575f80fd5b9250929050565b5f805f805f805f806080898b03121561281e575f80fd5b88356001600160401b03811115612833575f80fd5b61283f8b828c016127c0565b90995097505060208901356001600160401b0381111561285d575f80fd5b6128698b828c016127c0565b90975095505060408901356001600160401b03811115612887575f80fd5b6128938b828c016127c0565b90955093505060608901356001600160401b038111156128b1575f80fd5b6128bd8b828c016127c0565b999c989b5096995094979396929594505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f60408486031215612918575f80fd5b8335925060208401356001600160401b03811115612934575f80fd5b612940868287016127c0565b9497909650939450505050565b5f805f805f8060608789031215612962575f80fd5b86356001600160401b03811115612977575f80fd5b61298389828a016127c0565b90975095505060208701356001600160401b038111156129a1575f80fd5b6129ad89828a016127c0565b90955093505060408701356001600160401b038111156129cb575f80fd5b6129d789828a016127c0565b979a9699509497509295939492505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610874576108746129fd565b5f60208284031215612a34575f80fd5b5051919050565b5f60208284031215612a4b575f80fd5b81518015158114610a94575f80fd5b5f82612a7457634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610874576108746129fd565b5f82518060208501845e5f92019182525091905056fedc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220607b8c1972ce4fe4e14ac69101762168966bf4e7c61c37e51539df8ce23e5dde64736f6c634300081a0033","sourceMap":"591:19196:108:-:0;;;1171:4:26;1128:48;;591:19196:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610610249575f3560e01c80638129fc1c11610134578063bf6eac2f116100b3578063d37304f811610078578063d37304f814610773578063d547741f14610792578063d5ca03de146107b1578063da33ee7f146107d0578063fc0c546a146107ef578063ff62787c14610825575f80fd5b8063bf6eac2f146106a3578063c0b95ab8146106c2578063c3471ff814610707578063c4d66de814610726578063d1ba90ff14610745575f80fd5b806392a2ebf3116100f957806392a2ebf31461060c578063a217fddf14610620578063a885c97514610633578063a887b71c14610652578063ad3cb1cc14610666575f80fd5b80638129fc1c1461057c5780638489e58014610590578063879b938b146105af5780638d908258146105ce57806391d14854146105ed575f80fd5b806344198e4d116101cb5780635cdf3155116101905780635cdf31551461046e57806360829f8a146104ba57806365f1ea20146104d9578063702243601461051e5780637667b76d1461053d5780637a997ab71461055c575f80fd5b806344198e4d146103cd5780634d3223a5146103ec5780634f1ef2861461040b57806352d1902d1461041e57806354300d7a14610432575f80fd5b80632c7785a8116102115780632c7785a8146103265780632f2ff15d1461034557806336568abe146103645780633bccf6351461038357806341566585146103ae575f80fd5b806301ffc9a71461024d5780630a0b1b6414610281578063248a9ca3146102ba578063286dd3f5146102d95780632924b73b146102fa575b5f80fd5b348015610258575f80fd5b5061026c6102673660046124cd565b610844565b60405190151581526020015b60405180910390f35b34801561028c575f80fd5b506102ac61029b366004612508565b60026020525f908152604090205481565b604051908152602001610278565b3480156102c5575f80fd5b506102ac6102d4366004612523565b61087a565b3480156102e4575f80fd5b506102f86102f3366004612508565b61089a565b005b348015610305575f80fd5b50610319610314366004612508565b6108bf565b604051610278919061253a565b348015610331575f80fd5b506102ac610340366004612508565b6109a9565b348015610350575f80fd5b506102f861035f366004612585565b6109d8565b34801561036f575f80fd5b506102f861037e366004612585565b6109fa565b34801561038e575f80fd5b506102ac61039d366004612508565b60016020525f908152604090205481565b3480156103b9575f80fd5b506102f86103c8366004612508565b610a32565b3480156103d8575f80fd5b506102ac6103e73660046125b3565b610a53565b3480156103f7575f80fd5b506102ac610406366004612508565b610a9b565b6102f86104193660046125f3565b610ab5565b348015610429575f80fd5b506102ac610ad0565b34801561043d575f80fd5b506102ac61044c3660046126b6565b600760209081525f938452604080852082529284528284209052825290205481565b348015610479575f80fd5b506102ac6104883660046126b6565b6001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b3480156104c5575f80fd5b506102f86104d43660046126f5565b610aeb565b3480156104e4575f80fd5b506102ac6104f3366004612733565b600660209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610529575f80fd5b506102ac610538366004612783565b610b74565b348015610548575f80fd5b506102ac610557366004612783565b610b91565b348015610567575f80fd5b506102ac5f80516020612aa383398151915281565b348015610587575f80fd5b506102f8610ba6565b34801561059b575f80fd5b506102ac6105aa366004612508565b610cb0565b3480156105ba575f80fd5b506102ac6105c9366004612733565b610cc8565b3480156105d9575f80fd5b506102ac6105e8366004612733565b610d05565b3480156105f8575f80fd5b5061026c610607366004612585565b610d42565b348015610617575f80fd5b506102f8610d78565b34801561062b575f80fd5b506102ac5f81565b34801561063e575f80fd5b506102f861064d366004612807565b610ebc565b34801561065d575f80fd5b506102f86110cc565b348015610671575f80fd5b50610696604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161027891906128d1565b3480156106ae575f80fd5b506102f86106bd3660046126f5565b6110e0565b3480156106cd575f80fd5b506102ac6106dc366004612733565b600560209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610712575f80fd5b506102ac610721366004612508565b6112ff565b348015610731575f80fd5b506102f8610740366004612508565b611321565b348015610750575f80fd5b5061026c61075f366004612508565b60086020525f908152604090205460ff1681565b34801561077e575f80fd5b506102f861078d366004612906565b611446565b34801561079d575f80fd5b506102f86107ac366004612585565b6114b0565b3480156107bc575f80fd5b506103196107cb366004612508565b6114cc565b3480156107db575f80fd5b506102f86107ea36600461294d565b6115af565b3480156107fa575f80fd5b505f5461080d906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b348015610830575f80fd5b506102f861083f36600461294d565b61163a565b5f6001600160e01b03198216637965db0b60e01b148061087457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f9081525f80516020612ae3833981519152602052604090206001015490565b5f6108a4816118b1565b6108bb5f80516020612aa3833981519152836114b0565b5050565b6001600160a01b0381165f908152600360205260408120606091906108e3906118be565b6001600160401b038111156108fa576108fa6125df565b604051908082528060200260200182016040528015610923578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600360205260409020610948906118be565b8110156109a2576001600160a01b0384165f90815260036020526040902061097090826118c7565b828281518110610982576109826129e9565b6001600160a01b0390921660209283029190910190910152600101610928565b5092915050565b5f6109b382610a9b565b156109d1576109c1826112ff565b6109cc906001612a11565b610874565b5f92915050565b6109e18261087a565b6109ea816118b1565b6109f483836118d2565b50505050565b6001600160a01b0381163314610a235760405163334bd91960e11b815260040160405180910390fd5b610a2d8282611973565b505050565b5f610a3c816118b1565b6108bb5f80516020612aa3833981519152836109d8565b5f610a9483610a6185610a9b565b846001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b9392505050565b6001600160a01b03165f9081526002602052604090205490565b610abd6119ec565b610ac682611a90565b6108bb8282611a9a565b5f610ad9611b5b565b505f80516020612ac383398151915290565b5f80516020612aa3833981519152610b02816118b1565b610b1784610b0f866109a9565b853386611ba4565b826001600160a01b0316610b2a85610cb0565b60408051338152602081018690526001600160a01b038816917fd41c64546a5c34c283150998874c7ee0412c8954f57aef484c681f6e137827df910160405180910390a450505050565b5f610b8984610b8286610a9b565b8585610d05565b949350505050565b5f610b8984610b9f86610a9b565b8585610cc8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610bea5750825b90505f826001600160401b03166001148015610c055750303b155b905081158015610c13575080155b15610c315760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c5b57845460ff60401b1916600160401b1785555b610c63611bf8565b8315610ca957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f610cba82610a9b565b156109d1576109c182610a9b565b6001600160a01b039384165f9081526006602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b6001600160a01b039384165f9081526005602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f9182525f80516020612ae3833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b335f8181526008602052604090205460ff1615610da75760405162fe178760e01b815260040160405180910390fd5b6001600160a01b0381165f908152600860205260409020805460ff19166001179055610dd2816112ff565b6001600160a01b0382165f908152600260205260408120919091555b6001600160a01b0382165f908152600360205260409020610e0e906118be565b8110156108bb576001600160a01b0382165f908152600360205260408120610e3690836118c7565b90505f5b6001600160a01b0384165f908152600460205260409020610e5a906118be565b811015610eb2576001600160a01b0384165f908152600460205260408120610e8290836118c7565b90505f610e91865f8487610d05565b9050610ea886610ea088610a9b565b848785611c08565b5050600101610e3a565b5050600101610dee565b5f5b858110156110c1575f610f85610f4633610ef88b8b87818110610ee357610ee36129e9565b90506020020160208101906104069190612508565b8d8d87818110610f0a57610f0a6129e9565b9050602002016020810190610f1f9190612508565b8c8c88818110610f3157610f316129e9565b90506020020160208101906105e89190612508565b610f80888886818110610f5b57610f5b6129e9565b90506020020135878787818110610f7457610f746129e9565b90506020020135611c93565b611c93565b9050610fdf30898985818110610f9d57610f9d6129e9565b9050602002016020810190610fb29190612508565b8c8c86818110610fc457610fc46129e9565b9050602002016020810190610fd99190612508565b84611ca8565b61105833610fec33610a9b565b8c8c86818110610ffe57610ffe6129e9565b90506020020160208101906110139190612508565b8b8b87818110611025576110256129e9565b905060200201602081019061103a9190612508565b8a8a8881811061104c5761104c6129e9565b90506020020135611ed1565b6110b83361106533610a9b565b8c8c86818110611077576110776129e9565b905060200201602081019061108c9190612508565b8b8b8781811061109e5761109e6129e9565b90506020020160208101906110b39190612508565b611f08565b50600101610ebe565b505050505050505050565b6110de336110d933610a9b565b611f7a565b565b5f80516020612aa38339815191526110f7816118b1565b6001600160a01b0384165f9081526003602052604090206111189033612097565b505f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561115f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111839190612a24565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303815f875af11580156111d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111fa9190612a3b565b506112058382612a11565b5f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561124a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126e9190612a24565b1461128c57604051631910d68360e21b815260040160405180910390fd5b6112a185611299876109a9565b863387611c08565b836001600160a01b03166112b486610cb0565b60408051338152602081018790526001600160a01b038916917f7be65c2ae4d3c544de23b1db5bea4d541c02b93a5f4302852f4dc9880e0cb554910160405180910390a45050505050565b6001600160a01b0381165f908152600160205260408120546108749042612a5a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156113655750825b90505f826001600160401b031660011480156113805750303b155b90508115801561138e575080155b156113ac5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156113d657845460ff60401b1916600160401b1785555b6113de6120ab565b5f80546001600160a01b0319166001600160a01b038816179055831561143e57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b335f8181526001602052604081208590555b82811015610ca9576114a7848483818110611475576114756129e9565b905060200201602081019061148a9190612508565b6001600160a01b0384165f90815260046020526040902090612097565b50600101611458565b6114b98261087a565b6114c2816118b1565b6109f48383611973565b6001600160a01b0381165f908152600460205260408120606091906114f0906118be565b6001600160401b03811115611507576115076125df565b604051908082528060200260200182016040528015611530578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600460205260409020611555906118be565b8110156109a2576001600160a01b0384165f90815260046020526040902061157d90826118c7565b82828151811061158f5761158f6129e9565b6001600160a01b0390921660209283029190910190910152600101611535565b5f5b8581101561163157611629338888848181106115cf576115cf6129e9565b90506020020160208101906115e49190612508565b8585858181106115f6576115f66129e9565b905060200201602081019061160b9190612508565b88888681811061161d5761161d6129e9565b90506020020135611ca8565b6001016115b1565b50505050505050565b33611644816112ff565b6001600160a01b0382165f908152600260205260408120919091555b848110156118a7575f88888381811061167b5761167b6129e9565b90506020020160208101906116909190612508565b90505f6116ab845f848b8b88818110610f3157610f316129e9565b90508585848181106116bf576116bf6129e9565b905060200201358111156116e657604051630eba55e760e21b815260040160405180910390fd5b61172d8888858181106116fb576116fb6129e9565b90506020020160208101906117109190612508565b6001600160a01b0386165f90815260036020526040902090612097565b50858584818110611740576117406129e9565b9050602002013560055f866001600160a01b03166001600160a01b031681526020019081526020015f205f61177487610a9b565b81526020019081526020015f205f846001600160a01b03166001600160a01b031681526020019081526020015f205f8a8a878181106117b5576117b56129e9565b90506020020160208101906117ca9190612508565b6001600160a01b0316815260208101919091526040015f20558585848181106117f5576117f56129e9565b6001600160a01b038088165f9081526007602090815260408083208380528252808320938916835292815291812080549290930294909401359391925061183d908490612a11565b909155505f905081878786818110611857576118576129e9565b905060200201356118689190612a79565b905061189c308a8a87818110611880576118806129e9565b90506020020160208101906118959190612508565b8584611ca8565b505050600101611660565b5050505050505050565b6118bb81336120bd565b50565b5f610874825490565b5f610a9483836120f6565b5f5f80516020612ae38339815191526118eb8484610d42565b61196a575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556119203390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610874565b5f915050610874565b5f5f80516020612ae383398151915261198c8484610d42565b1561196a575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610874565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a7257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a665f80516020612ac3833981519152546001600160a01b031690565b6001600160a01b031614155b156110de5760405163703e46dd60e11b815260040160405180910390fd5b5f6108bb816118b1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611af4575060408051601f3d908101601f19168201909252611af191810190612a24565b60015b611b2157604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f80516020612ac38339815191528114611b5157604051632a87526960e21b815260048101829052602401611b18565b610a2d838361211c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110de5760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b038086165f90815260066020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611bec908490612a11565b90915550505050505050565b611c00612171565b6110de6120ab565b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611c50908490612a11565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290611bec908490612a11565b5f818310611ca15781610a94565b5090919050565b306001600160a01b03851603611e1c575f546001600160a01b03808416911603611d46575f5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044015b6020604051808303815f875af1158015611d1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d409190612a3b565b506109f4565b5f5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015611d95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db99190612a3b565b506040516318950c7160e01b81526001600160a01b038481166004830152602482018390528316906318950c71906044015f604051808303815f87803b158015611e01575f80fd5b505af1158015611e13573d5f803e3d5ffd5b505050506109f4565b5f546001600160a01b03808416911603611e70575f546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201849052909116906323b872dd90606401611d00565b60405163c4652d8360e01b81526001600160a01b03858116600483015284811660248301526044820183905283169063c4652d83906064015f604051808303815f87803b158015611ebf575f80fd5b505af11580156118a7573d5f803e3d5ffd5b835f611edf87838787610d05565b905082811015611efb57611ef687838787856121ba565b611631565b61163187838787876121ba565b5f611f1585858585610d05565b90505f611f23856001612a11565b90505f611f3287838787610cc8565b905082811115611631576001600160a01b038088165f9081526006602090815260408083208684528252808320848a1684528252808320938816835292905220839055611631565b5f5b6001600160a01b0383165f908152600360205260409020611f9c906118be565b811015612031576001600160a01b0383165f908152600360205260408120611fc490836118c7565b90505f5b6001600160a01b0385165f908152600460205260409020611fe8906118be565b811015612027576001600160a01b0385165f90815260046020526040812061201090836118c7565b905061201e86868386612245565b50600101611fc8565b5050600101611f7c565b5061203d816001612a11565b6001600160a01b0383165f81815260026020526040908190209290925590517fb693195b5ff3e376f8b562486abc516e10fe2467b75f0e4165e79cf4ab70dc419061208b9084815260200190565b60405180910390a25050565b5f610a94836001600160a01b038416612308565b6120b3612171565b6118bb5f336118d2565b6120c78282610d42565b6108bb5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401611b18565b5f825f01828154811061210b5761210b6129e9565b905f5260205f200154905092915050565b61212582612354565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561216957610a2d82826123b7565b6108bb612429565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166110de57604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290612202908490612a79565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290611bec908490612a79565b5f61225285858585610d05565b90505f61226b86612264876001612a11565b8686610cc8565b9050818111156122785750805b5f6122838284612a79565b905061229c87612294886001612a11565b878785611c08565b6122a830858785611ca8565b846001600160a01b031686856001600160a01b03167f3ddb7f725ac69363a1df8296c965af4d268f31b082480dcd8419d284fb7fd34286866040516122f7929190918252602082015260400190565b60405180910390a450505050505050565b5f81815260018301602052604081205461234d57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610874565b505f610874565b806001600160a01b03163b5f0361238957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611b18565b5f80516020612ac383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516123d39190612a8c565b5f60405180830381855af49150503d805f811461240b576040519150601f19603f3d011682016040523d82523d5f602084013e612410565b606091505b5091509150612420858383612448565b95945050505050565b34156110de5760405163b398979f60e01b815260040160405180910390fd5b60608261245d57612458826124a4565b610a94565b815115801561247457506001600160a01b0384163b155b1561249d57604051639996b31560e01b81526001600160a01b0385166004820152602401611b18565b5080610a94565b8051156124b45780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f602082840312156124dd575f80fd5b81356001600160e01b031981168114610a94575f80fd5b6001600160a01b03811681146118bb575f80fd5b5f60208284031215612518575f80fd5b8135610a94816124f4565b5f60208284031215612533575f80fd5b5035919050565b602080825282518282018190525f918401906040840190835b8181101561257a5783516001600160a01b0316835260209384019390920191600101612553565b509095945050505050565b5f8060408385031215612596575f80fd5b8235915060208301356125a8816124f4565b809150509250929050565b5f80604083850312156125c4575f80fd5b82356125cf816124f4565b915060208301356125a8816124f4565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612604575f80fd5b823561260f816124f4565b915060208301356001600160401b03811115612629575f80fd5b8301601f81018513612639575f80fd5b80356001600160401b03811115612652576126526125df565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612680576126806125df565b604052818152828201602001871015612697575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f805f606084860312156126c8575f80fd5b83356126d3816124f4565b92506020840135915060408401356126ea816124f4565b809150509250925092565b5f805f60608486031215612707575f80fd5b8335612712816124f4565b92506020840135612722816124f4565b929592945050506040919091013590565b5f805f8060808587031215612746575f80fd5b8435612751816124f4565b9350602085013592506040850135612768816124f4565b91506060850135612778816124f4565b939692955090935050565b5f805f60608486031215612795575f80fd5b83356127a0816124f4565b925060208401356127b0816124f4565b915060408401356126ea816124f4565b5f8083601f8401126127d0575f80fd5b5081356001600160401b038111156127e6575f80fd5b6020830191508360208260051b8501011115612800575f80fd5b9250929050565b5f805f805f805f806080898b03121561281e575f80fd5b88356001600160401b03811115612833575f80fd5b61283f8b828c016127c0565b90995097505060208901356001600160401b0381111561285d575f80fd5b6128698b828c016127c0565b90975095505060408901356001600160401b03811115612887575f80fd5b6128938b828c016127c0565b90955093505060608901356001600160401b038111156128b1575f80fd5b6128bd8b828c016127c0565b999c989b5096995094979396929594505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f60408486031215612918575f80fd5b8335925060208401356001600160401b03811115612934575f80fd5b612940868287016127c0565b9497909650939450505050565b5f805f805f8060608789031215612962575f80fd5b86356001600160401b03811115612977575f80fd5b61298389828a016127c0565b90975095505060208701356001600160401b038111156129a1575f80fd5b6129ad89828a016127c0565b90955093505060408701356001600160401b038111156129cb575f80fd5b6129d789828a016127c0565b979a9699509497509295939492505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610874576108746129fd565b5f60208284031215612a34575f80fd5b5051919050565b5f60208284031215612a4b575f80fd5b81518015158114610a94575f80fd5b5f82612a7457634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610874576108746129fd565b5f82518060208501845e5f92019182525091905056fedc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220607b8c1972ce4fe4e14ac69101762168966bf4e7c61c37e51539df8ce23e5dde64736f6c634300081a0033","sourceMap":"591:19196:108:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:24;;;;;;;;;;-1:-1:-1;3443:202:24;;;;;:::i;:::-;;:::i;:::-;;;470:14:137;;463:22;445:41;;433:2;418:18;3443:202:24;;;;;;;;612:75:109;;;;;;;;;;-1:-1:-1;612:75:109;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1031:25:137;;;1019:2;1004:18;612:75:109;885:177:137;4759:191:24;;;;;;;;;;-1:-1:-1;4759:191:24;;;;;:::i;:::-;;:::i;19634:151:108:-;;;;;;;;;;-1:-1:-1;19634:151:108;;;;;:::i;:::-;;:::i;:::-;;1747:387;;;;;;;;;;-1:-1:-1;1747:387:108;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6588:195::-;;;;;;;;;;-1:-1:-1;6588:195:108;;;;;:::i;:::-;;:::i;5246:136:24:-;;;;;;;;;;-1:-1:-1;5246:136:24;;;;;:::i;:::-;;:::i;6348:245::-;;;;;;;;;;-1:-1:-1;6348:245:24;;;;;:::i;:::-;;:::i;529:77:109:-;;;;;;;;;;-1:-1:-1;529:77:109;;;;;:::i;:::-;;;;;;;;;;;;;;19488:140:108;;;;;;;;;;-1:-1:-1;19488:140:108;;;;;:::i;:::-;;:::i;8521:226::-;;;;;;;;;;-1:-1:-1;8521:226:108;;;;;:::i;:::-;;:::i;6272:123::-;;;;;;;;;;-1:-1:-1;6272:123:108;;;;;:::i;:::-;;:::i;4158:214:26:-;;;;;;:::i;:::-;;:::i;3705:134::-;;;;;;;;;;;;;:::i;1457:146:109:-;;;;;;;;;;-1:-1:-1;1457:146:109;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8251:214:108;;;;;;;;;;-1:-1:-1;8251:214:108;;;;;:::i;:::-;-1:-1:-1;;;;;8409:31:108;;;8383:7;8409:31;;;:23;:31;;;;;;;;:38;;;;;;;;;:49;;;;;;;;;;;;8251:214;10498:786;;;;;;;;;;-1:-1:-1;10498:786:108;;;;;:::i;:::-;;:::i;1192:193:109:-;;;;;;;;;;-1:-1:-1;1192:193:109;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7159:326:108;;;;;;;;;;-1:-1:-1;7159:326:108;;;;;:::i;:::-;;:::i;7869:330::-;;;;;;;;;;-1:-1:-1;7869:330:108;;;;;:::i;:::-;;:::i;1727:68:109:-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1727:68:109;;514:86:110;;;;;;;;;;;;;:::i;6428:154:108:-;;;;;;;;;;-1:-1:-1;6428:154:108;;;;;:::i;:::-;;:::i;7553:244::-;;;;;;;;;;-1:-1:-1;7553:244:108;;;;;:::i;:::-;;:::i;6849:240::-;;;;;;;;;;-1:-1:-1;6849:240:108;;;;;:::i;:::-;;:::i;3732:207:24:-;;;;;;;;;;-1:-1:-1;3732:207:24;;;;;:::i;:::-;;:::i;2140:1187:108:-;;;;;;;;;;;;;:::i;2317:49:24:-;;;;;;;;;;-1:-1:-1;2317:49:24;2362:4;2317:49;;15920:1564:108;;;;;;;;;;-1:-1:-1;15920:1564:108;;;;;:::i;:::-;;:::i;13464:106::-;;;;;;;;;;;;;:::i;1819:58:26:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:26;;;;;;;;;;;;:::i;8786:1661:108:-;;;;;;;;;;-1:-1:-1;8786:1661:108;;;;;:::i;:::-;;:::i;937:191:109:-;;;;;;;;;;-1:-1:-1;937:191:109;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6052:146:108;;;;;;;;;;-1:-1:-1;6052:146:108;;;;;:::i;:::-;;:::i;746:125::-;;;;;;;;;;-1:-1:-1;746:125:108;;;;;:::i;:::-;;:::i;1610:60:109:-;;;;;;;;;;-1:-1:-1;1610:60:109;;;;;:::i;:::-;;;;;;;;;;;;;;;;877:336:108;;;;;;;;;;-1:-1:-1;877:336:108;;;;;:::i;:::-;;:::i;5662:138:24:-;;;;;;;;;;-1:-1:-1;5662:138:24;;;;;:::i;:::-;;:::i;1219:522:108:-;;;;;;;;;;-1:-1:-1;1219:522:108;;;;;:::i;:::-;;:::i;19031:451::-;;;;;;;;;;-1:-1:-1;19031:451:108;;;;;:::i;:::-;;:::i;503:19:109:-;;;;;;;;;;-1:-1:-1;503:19:109;;;;-1:-1:-1;;;;;503:19:109;;;;;;-1:-1:-1;;;;;11186:32:137;;;11168:51;;11156:2;11141:18;503:19:109;11006:219:137;3333:1270:108;;;;;;;;;;-1:-1:-1;3333:1270:108;;;;;:::i;:::-;;:::i;3443:202:24:-;3528:4;-1:-1:-1;;;;;;3551:47:24;;-1:-1:-1;;;3551:47:24;;:87;;-1:-1:-1;;;;;;;;;;1133:40:32;;;3602:36:24;3544:94;3443:202;-1:-1:-1;;3443:202:24:o;4759:191::-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:24;;;;;:24;;;;4759:191::o;19634:151:108:-;2362:4:24;3191:16;2362:4;3191:10;:16::i;:::-;19746:32:108::1;-1:-1:-1::0;;;;;;;;;;;19773:4:108::1;19746:10;:32::i;:::-;19634:151:::0;;:::o;1747:387::-;-1:-1:-1;;;;;1912:25:108;;1856:26;1912:25;;;:17;:25;;;;;1828:16;;1856:26;1912:34;;:32;:34::i;:::-;-1:-1:-1;;;;;1885:71:108;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1885:71:108;;1856:100;;1971:9;1966:136;-1:-1:-1;;;;;1990:25:108;;;;;;:17;:25;;;;;:34;;:32;:34::i;:::-;1986:1;:38;1966:136;;;-1:-1:-1;;;;;2060:25:108;;;;;;:17;:25;;;;;:31;;2089:1;2060:28;:31::i;:::-;2045:9;2055:1;2045:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2045:46:108;;;:12;;;;;;;;;;;:46;2026:3;;1966:136;;;-1:-1:-1;2118:9:108;1747:387;-1:-1:-1;;1747:387:108:o;6588:195::-;6672:7;6710:23;6726:6;6710:15;:23::i;:::-;:28;:66;;6745:27;6765:6;6745:19;:27::i;:::-;:31;;6775:1;6745:31;:::i;:::-;6710:66;;;6741:1;6691:85;6588:195;-1:-1:-1;;6588:195:108:o;5246:136:24:-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;6348:245::-;-1:-1:-1;;;;;6441:34:24;;966:10:29;6441:34:24;6437:102;;6498:30;;-1:-1:-1;;;6498:30:24;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;19488:140:108:-;2362:4:24;3191:16;2362:4;3191:10;:16::i;:::-;19590:31:108::1;-1:-1:-1::0;;;;;;;;;;;19616:4:108::1;19590:9;:31::i;8521:226::-:0;8637:7;8675:65;8697:6;8705:23;8721:6;8705:15;:23::i;:::-;8730:9;-1:-1:-1;;;;;8409:31:108;;;8383:7;8409:31;;;:23;:31;;;;;;;;:38;;;;;;;;;:49;;;;;;;;;;;;8251:214;8675:65;8656:84;8521:226;-1:-1:-1;;;8521:226:108:o;6272:123::-;-1:-1:-1;;;;;6360:28:108;6334:7;6360:28;;;:20;:28;;;;;;;6272:123::o;4158:214:26:-;2653:13;:11;:13::i;:::-;4273:36:::1;4291:17;4273;:36::i;:::-;4319:46;4341:17;4360:4;4319:21;:46::i;3705:134::-:0;3774:7;2924:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3705:134:26;:::o;10498:786:108:-;-1:-1:-1;;;;;;;;;;;3191:16:24;3202:4;3191:10;:16::i;:::-;10961:153:108::1;10986:6;11006:31;11030:6;11006:23;:31::i;:::-;11051:9;11074:10;11098:6;10961:11;:153::i;:::-;11214:9;-1:-1:-1::0;;;;;11130:147:108::1;11180:20;11193:6;11180:12;:20::i;:::-;11130:147;::::0;;11237:10:::1;12902:51:137::0;;12984:2;12969:18;;12962:34;;;-1:-1:-1;;;;;11130:147:108;::::1;::::0;::::1;::::0;12875:18:137;11130:147:108::1;;;;;;;10498:786:::0;;;;:::o;7159:326::-;7293:7;7331:147;7364:6;7388:23;7404:6;7388:15;:23::i;:::-;7429:9;7456:8;7331:15;:147::i;:::-;7312:166;7159:326;-1:-1:-1;;;;7159:326:108:o;7869:330::-;8005:7;8043:149;8078:6;8102:23;8118:6;8102:15;:23::i;:::-;8143:9;8170:8;8043:17;:149::i;514:86:110:-;8870:21:25;4302:15;;-1:-1:-1;;;4302:15:25;;;;4301:16;;-1:-1:-1;;;;;4348:14:25;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:25;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:25;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:25;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:25;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:25;-1:-1:-1;;;5013:22:25;;;4979:67;573:20:110::1;:18;:20::i;:::-;5070:14:25::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:25;;;5142:14;;-1:-1:-1;13160:50:137;;5142:14:25;;13148:2:137;13133:18;5142:14:25;;;;;;;5066:101;4092:1081;;;;;514:86:110:o;6428:154:108:-;6487:7;6513:23;6529:6;6513:15;:23::i;:::-;:28;:62;;6548:23;6564:6;6548:15;:23::i;7553:244::-;-1:-1:-1;;;;;7733:29:108;;;7707:7;7733:29;;;:21;:29;;;;;;;;:36;;;;;;;;;:47;;;;;;;;;;;:57;;;;;;;;;;;;7553:244::o;6849:240::-;-1:-1:-1;;;;;7027:27:108;;;7001:7;7027:27;;;:19;:27;;;;;;;;:34;;;;;;;;;:45;;;;;;;;;;;:55;;;;;;;;;;;;6849:240::o;3732:207:24:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:24;;;;;;;;-1:-1:-1;;;;;3901:31:24;;;;;;;;;;;;;;;3732:207::o;2140:1187:108:-;2207:10;2190:14;2231:29;;;:21;:29;;;;;;;;2227:66;;;2269:24;;-1:-1:-1;;;2269:24:108;;;;;;;;;;;2227:66;-1:-1:-1;;;;;2303:29:108;;;;;;:21;:29;;;;;:36;;-1:-1:-1;;2303:36:108;2335:4;2303:36;;;2449:27;2325:6;2449:19;:27::i;:::-;-1:-1:-1;;;;;2418:28:108;;;;;;:20;:28;;;;;:58;;;;2487:834;-1:-1:-1;;;;;2511:25:108;;;;;;:17;:25;;;;;:34;;:32;:34::i;:::-;2507:1;:38;2487:834;;;-1:-1:-1;;;;;2585:25:108;;2566:16;2585:25;;;:17;:25;;;;;:31;;2614:1;2585:28;:31::i;:::-;2566:50;;2636:9;2631:680;-1:-1:-1;;;;;2655:26:108;;;;;;:18;:26;;;;;:35;;:33;:35::i;:::-;2651:1;:39;2631:680;;;-1:-1:-1;;;;;2735:26:108;;2715:17;2735:26;;;:18;:26;;;;;:32;;2765:1;2735:29;:32::i;:::-;2715:52;;2844:21;2868:145;2905:6;2933:1;2956:9;2987:8;2868:15;:145::i;:::-;2844:169;;3100:196;3131:6;3159:23;3175:6;3159:15;:23::i;:::-;3204:9;3235:8;3265:13;3100:9;:196::i;:::-;-1:-1:-1;;2692:3:108;;2631:680;;;-1:-1:-1;;2547:3:108;;2487:834;;15920:1564;16118:9;16113:1365;16133:20;;;16113:1365;;;16401:20;16424:281;16450:185;16487:10;16519:29;16535:9;;16545:1;16535:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;16519:29::-;16570:10;;16581:1;16570:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16605:9;;16615:1;16605:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;16450:185::-;16653:38;16662:7;;16670:1;16662:10;;;;;;;:::i;:::-;;;;;;;16674:13;;16688:1;16674:16;;;;;;;:::i;:::-;;;;;;;16653:8;:38::i;:::-;16424:8;:281::i;:::-;16401:304;;16719:226;16757:4;16858:9;;16868:1;16858:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16888:10;;16899:1;16888:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16919:12;16719;:226::i;:::-;17104:187;17133:10;17161:27;17177:10;17161:15;:27::i;:::-;17206:10;;17217:1;17206:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17237:9;;17247:1;17237:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17267:7;;17275:1;17267:10;;;;;;;:::i;:::-;;;;;;;17104:11;:187::i;:::-;17306:161;17337:10;17365:27;17381:10;17365:15;:27::i;:::-;17410:10;;17421:1;17410:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17441:9;;17451:1;17441:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17306:13;:161::i;:::-;-1:-1:-1;16155:3:108;;16113:1365;;;;15920:1564;;;;;;;;:::o;13464:106::-;13508:55;13523:10;13535:27;13551:10;13535:15;:27::i;:::-;13508:14;:55::i;:::-;13464:106::o;8786:1661::-;-1:-1:-1;;;;;;;;;;;3191:16:24;3202:4;3191:10;:16::i;:::-;-1:-1:-1;;;;;8978:25:108;::::1;;::::0;;;:17:::1;:25;::::0;;;;:41:::1;::::0;9008:10:::1;8978:29;:41::i;:::-;-1:-1:-1::0;9383:21:108::1;9407:5:::0;;:30:::1;::::0;-1:-1:-1;;;9407:30:108;;9431:4:::1;9407:30;::::0;::::1;11168:51:137::0;-1:-1:-1;;;;;9407:5:108;;::::1;::::0;:15:::1;::::0;11141:18:137;;9407:30:108::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9718:57;::::0;-1:-1:-1;;;9718:57:108;;9741:10:::1;9718:57;::::0;::::1;13820:51:137::0;9761:4:108::1;13887:18:137::0;;;13880:60;13956:18;;;13949:34;;;9383:54:108;;-1:-1:-1;;;;;;9718:22:108;::::1;::::0;::::1;::::0;13793:18:137;;9718:57:108::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;9908:22:108::1;9924:6:::0;9908:13;:22:::1;:::i;:::-;9874:5;::::0;:30:::1;::::0;-1:-1:-1;;;9874:30:108;;9898:4:::1;9874:30;::::0;::::1;11168:51:137::0;-1:-1:-1;;;;;9874:5:108;;::::1;::::0;:15:::1;::::0;11141:18:137;;9874:30:108::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;9870:114;;9951:33;;-1:-1:-1::0;;;9951:33:108::1;;;;;;;;;;;9870:114;10051:160;10074:6;10094:31;10118:6;10094:23;:31::i;:::-;10147:9;10171:10;10195:6;10051:9;:160::i;:::-;10376:9;-1:-1:-1::0;;;;;10286:154:108::1;10334:20;10347:6;10334:12;:20::i;:::-;10286:154;::::0;;10400:10:::1;12902:51:137::0;;12984:2;12969:18;;12962:34;;;-1:-1:-1;;;;;10286:154:108;::::1;::::0;::::1;::::0;12875:18:137;10286:154:108::1;;;;;;;8915:1532;8786:1661:::0;;;;:::o;6052:146::-;-1:-1:-1;;;;;6162:29:108;;6118:7;6162:29;;;:21;:29;;;;;;6144:47;;:15;:47;:::i;746:125::-;8870:21:25;4302:15;;-1:-1:-1;;;4302:15:25;;;;4301:16;;-1:-1:-1;;;;;4348:14:25;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:25;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:25;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:25;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:25;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:25;-1:-1:-1;;;5013:22:25;;;4979:67;810:30:108::1;:28;:30::i;:::-;850:5;:14:::0;;-1:-1:-1;;;;;;850:14:108::1;-1:-1:-1::0;;;;;850:14:108;::::1;;::::0;;5066:101:25;;;;5100:23;;-1:-1:-1;;;;5100:23:25;;;5142:14;;-1:-1:-1;13160:50:137;;5142:14:25;;13148:2:137;13133:18;5142:14:25;;;;;;;5066:101;4092:1081;;;;;746:125:108;:::o;877:336::-;1013:10;996:14;1033:29;;;:21;:29;;;;;:45;;;1089:118;1109:21;;;1089:118;;;1151:45;1182:10;;1193:1;1182:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1151:26:108;;;;;;:18;:26;;;;;;:30;:45::i;:::-;-1:-1:-1;1132:3:108;;1089:118;;5662:138:24;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;1219:522:108:-:0;-1:-1:-1;;;;;1514:26:108;;1457:27;1514:26;;;:18;:26;;;;;1301:16;;1457:27;1514:35;;:33;:35::i;:::-;-1:-1:-1;;;;;1487:72:108;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1487:72:108;;1457:102;;1574:9;1569:139;-1:-1:-1;;;;;1593:26:108;;;;;;:18;:26;;;;;:35;;:33;:35::i;:::-;1589:1;:39;1569:139;;;-1:-1:-1;;;;;1665:26:108;;;;;;:18;:26;;;;;:32;;1695:1;1665:29;:32::i;:::-;1649:10;1660:1;1649:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1649:48:108;;;:13;;;;;;;;;;;:48;1630:3;;1569:139;;19031:451;19312:9;19307:169;19327:20;;;19307:169;;;19400:65;19413:10;19425:9;;19435:1;19425:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19439:10;;19450:1;19439:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19454:7;;19462:1;19454:10;;;;;;;:::i;:::-;;;;;;;19400:12;:65::i;:::-;19349:3;;19307:169;;;;19031:451;;;;;;:::o;3333:1270::-;3513:10;3564:27;3513:10;3564:19;:27::i;:::-;-1:-1:-1;;;;;3533:28:108;;;;;;:20;:28;;;;;:58;;;;3602:995;3622:20;;;3602:995;;;3663:17;3683:10;;3694:1;3683:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3663:33;;3765:21;3789:129;3822:6;3846:1;3865:9;3892;;3902:1;3892:12;;;;;;;:::i;3789:129::-;3765:153;;4026:6;;4033:1;4026:9;;;;;;;:::i;:::-;;;;;;;4010:13;:25;4006:64;;;4044:26;;-1:-1:-1;;;4044:26:108;;;;;;;;;;;4006:64;4128:43;4158:9;;4168:1;4158:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4128:25:108;;;;;;:17;:25;;;;;;:29;:43::i;:::-;;4295:6;;4302:1;4295:9;;;;;;;:::i;:::-;;;;;;;4185:19;:27;4205:6;-1:-1:-1;;;;;4185:27:108;-1:-1:-1;;;;;4185:27:108;;;;;;;;;;;;:52;4213:23;4229:6;4213:15;:23::i;:::-;4185:52;;;;;;;;;;;:63;4238:9;-1:-1:-1;;;;;4185:63:108;-1:-1:-1;;;;;4185:63:108;;;;;;;;;;;;:107;4266:9;;4276:1;4266:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4185:107:108;;;;;;;;;;;;-1:-1:-1;4185:107:108;:119;4367:6;;4374:1;4367:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;4318:31:108;;;;;;;:23;4367:9;4318:31;;;;;;;:34;;;;;;;;:45;;;;;;;;;;;:58;;4367:9;;;;;;;;;;4318:45;;-1:-1:-1;4318:58:108;;4367:9;;4318:58;:::i;:::-;;;;-1:-1:-1;4458:20:108;;-1:-1:-1;4493:13:108;4481:6;;4488:1;4481:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;4458:48;;4520:66;4541:4;4548:9;;4558:1;4548:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;4562:9;4573:12;4520;:66::i;:::-;-1:-1:-1;;;3644:3:108;;3602:995;;;;3486:1117;3333:1270;;;;;;:::o;4148:103:24:-;4214:30;4225:4;966:10:29;4214::24;:30::i;:::-;4148:103;:::o;9117:115:66:-;9180:7;9206:19;9214:3;4556:18;;4474:107;9574:156;9648:7;9698:22;9702:3;9714:5;9698:3;:22::i;7270:387:24:-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:24;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:24;;;;;;;;;:38;;-1:-1:-1;;7475:38:24;7509:4;7475:38;;;7559:12;966:10:29;;887:96;7559:12:24;-1:-1:-1;;;;;7532:40:24;7550:7;-1:-1:-1;;;;;7532:40:24;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7892:388;7970:4;-1:-1:-1;;;;;;;;;;;8059:22:24;8067:4;8073:7;8059;:22::i;:::-;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:24;;;;;;;;;;:39;;-1:-1:-1;;8097:39:24;;;8155:40;966:10:29;;8097:14:24;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;4599:312:26;4679:4;-1:-1:-1;;;;;4688:6:26;4671:23;;;:120;;;4785:6;-1:-1:-1;;;;;4749:42:26;:32;-1:-1:-1;;;;;;;;;;;2035:53:43;-1:-1:-1;;;;;2035:53:43;;1957:138;4749:32:26;-1:-1:-1;;;;;4749:42:26;;;4671:120;4654:251;;;4865:29;;-1:-1:-1;;;4865:29:26;;;;;;;;;;;965:103:110;2362:4:24;3191:16;2362:4;3191:10;:16::i;6052:538:26:-;6169:17;-1:-1:-1;;;;;6151:50:26;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6151:52:26;;;;;;;;-1:-1:-1;;6151:52:26;;;;;;;;;;;;:::i;:::-;;;6147:437;;6513:60;;-1:-1:-1;;;6513:60:26;;-1:-1:-1;;;;;11186:32:137;;6513:60:26;;;11168:51:137;11141:18;;6513:60:26;;;;;;;;6147:437;-1:-1:-1;;;;;;;;;;;6245:40:26;;6241:120;;6312:34;;-1:-1:-1;;;6312:34:26;;;;;1031:25:137;;;1004:18;;6312:34:26;885:177:137;6241:120:26;6374:54;6404:17;6423:4;6374:29;:54::i;5028:213::-;5102:4;-1:-1:-1;;;;;5111:6:26;5094:23;;5090:145;;5195:29;;-1:-1:-1;;;5195:29:26;;;;;;;;;;;5242:244:108;-1:-1:-1;;;;;5412:29:108;;;;;;;:21;:29;;;;;;;;:36;;;;;;;;:47;;;;;;;;;;:57;;;;;;;;;;;:67;;5473:6;;5412:29;:67;;5473:6;;5412:67;:::i;:::-;;;;-1:-1:-1;;;;;;;5242:244:108:o;606:103:110:-;6931:20:25;:18;:20::i;:::-;672:30:110::1;:28;:30::i;4609:309:108:-:0;-1:-1:-1;;;;;4777:27:108;;;;;;;:19;:27;;;;;;;;:34;;;;;;;;:45;;;;;;;;;;:55;;;;;;;;;;;:65;;4836:6;;4777:27;:65;;4836:6;;4777:65;:::i;:::-;;;;-1:-1:-1;;;;;;;4852:31:108;;;;;;;:23;:31;;;;;;;;:38;;;;;;;;:49;;;;;;;;;;;:59;;4905:6;;4852:31;:59;;4905:6;;4852:59;:::i;2557:104:64:-;2615:7;2645:1;2641;:5;:13;;2653:1;2641:13;;;-1:-1:-1;2649:1:64;;2557:104;-1:-1:-1;2557:104:64:o;17490:1535:108:-;17656:4;-1:-1:-1;;;;;17640:21:108;;;17636:1383;;17741:5;;-1:-1:-1;;;;;17733:27:108;;;17741:5;;17733:27;17729:456;;17829:5;;:32;;-1:-1:-1;;;17829:32:108;;-1:-1:-1;;;;;12920:32:137;;;17829::108;;;12902:51:137;12969:18;;;12962:34;;;17829:5:108;;;;:14;;12875:18:137;;17829:32:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17636:1383;;17729:456;17992:5;;:32;;-1:-1:-1;;;17992:32:108;;-1:-1:-1;;;;;12920:32:137;;;17992::108;;;12902:51:137;12969:18;;;12962:34;;;17992:5:108;;;;:13;;12875:18:137;;17992:32:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18108:62:108;;-1:-1:-1;;;18108:62:108;;-1:-1:-1;;;;;12920:32:137;;;18108:62:108;;;12902:51:137;12969:18;;;12962:34;;;18108:44:108;;;;;12875:18:137;;18108:62:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17636:1383;;;18583:5;;-1:-1:-1;;;;;18575:27:108;;;18583:5;;18575:27;18571:438;;18671:5;;:42;;-1:-1:-1;;;18671:42:108;;-1:-1:-1;;;;;13838:32:137;;;18671:42:108;;;13820:51:137;13907:32;;;13887:18;;;13880:60;13956:18;;;13949:34;;;18671:5:108;;;;:18;;13793::137;;18671:42:108;13618:371:137;18571:438:108;18844:150;;-1:-1:-1;;;18844:150:108;;-1:-1:-1;;;;;13838:32:137;;;18844:150:108;;;13820:51:137;13907:32;;;13887:18;;;13880:60;13956:18;;;13949:34;;;18844:48:108;;;;;13793:18:137;;18844:150:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13877:803;14122:5;14100:19;14161:115;14190:6;14122:5;14235:9;14258:8;14161:15;:115::i;:::-;14137:139;;14385:6;14369:13;:22;14365:309;;;14407:163;14437:6;14461:11;14490:9;14517:8;14543:13;14407:12;:163::i;:::-;14365:309;;;14601:62;14614:6;14622:11;14635:9;14646:8;14656:6;14601:12;:62::i;15012:902::-;15219:21;15243:109;15272:6;15292:5;15311:9;15334:8;15243:15;:109::i;:::-;15219:133;-1:-1:-1;15362:19:108;15384:9;:5;15392:1;15384:9;:::i;:::-;15362:31;;15403:23;15429:117;15460:6;15480:11;15505:9;15528:8;15429:17;:117::i;:::-;15403:143;;15579:13;15561:15;:31;15557:351;;;-1:-1:-1;;;;;5915:29:108;;;;;;;:21;:29;;;;;;;;:36;;;;;;;;:47;;;;;;;;;;:57;;;;;;;;;:66;;;15735:162;5745:243;12697:761;12926:9;12921:383;-1:-1:-1;;;;;12945:25:108;;;;;;:17;:25;;;;;:34;;:32;:34::i;:::-;12941:1;:38;12921:383;;;-1:-1:-1;;;;;13019:25:108;;13000:16;13019:25;;;:17;:25;;;;;:31;;13048:1;13019:28;:31::i;:::-;13000:50;;13070:9;13065:229;-1:-1:-1;;;;;13089:26:108;;;;;;:18;:26;;;;;:35;;:33;:35::i;:::-;13085:1;:39;13065:229;;;-1:-1:-1;;;;;13169:26:108;;13149:17;13169:26;;;:18;:26;;;;;:32;;13199:1;13169:29;:32::i;:::-;13149:52;;13220:59;13238:6;13246:11;13259:9;13270:8;13220:17;:59::i;:::-;-1:-1:-1;13126:3:108;;13065:229;;;-1:-1:-1;;12981:3:108;;12921:383;;;-1:-1:-1;13384:15:108;:11;13398:1;13384:15;:::i;:::-;-1:-1:-1;;;;;13353:28:108;;;;;;:20;:28;;;;;;;:46;;;;13415:36;;;;;;13439:11;1031:25:137;;1019:2;1004:18;;885:177;13415:36:108;;;;;;;;12697:761;;:::o;8316:150:66:-;8386:4;8409:50;8414:3;-1:-1:-1;;;;;8434:23:66;;8409:4;:50::i;715:125:110:-;6931:20:25;:18;:20::i;:::-;791:42:110::1;2362:4:24;822:10:110;791;:42::i;4381:197:24:-:0;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:24;;-1:-1:-1;;;;;12920:32:137;;4514:47:24;;;12902:51:137;12969:18;;;12962:34;;;12875:18;;4514:47:24;12728:274:137;4923:118:66;4990:7;5016:3;:11;;5028:5;5016:18;;;;;;;;:::i;:::-;;;;;;;;;5009:25;;4923:118;;;;:::o;2779:335:43:-;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:43;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;2960:148::-;3079:18;:16;:18::i;7084:141:25:-;8870:21;8560:40;-1:-1:-1;;;8560:40:25;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:25;;;;;;;;;;;4924:312:108;-1:-1:-1;;;;;5095:27:108;;;;;;;:19;:27;;;;;;;;:34;;;;;;;;:45;;;;;;;;;;:55;;;;;;;;;;;:65;;5154:6;;5095:27;:65;;5154:6;;5095:65;:::i;:::-;;;;-1:-1:-1;;;;;;;5170:31:108;;;;;;;:23;:31;;;;;;;;:38;;;;;;;;:49;;;;;;;;;;;:59;;5223:6;;5170:31;:59;;5223:6;;5170:59;:::i;11351:1340::-;11596:19;11618:115;11647:6;11667:11;11692:9;11715:8;11618:15;:115::i;:::-;11596:137;-1:-1:-1;11743:21:108;11767:121;11798:6;11818:15;:11;11832:1;11818:15;:::i;:::-;11847:9;11870:8;11767:17;:121::i;:::-;11743:145;;11918:11;11902:13;:27;11898:85;;;-1:-1:-1;11961:11:108;11898:85;11992:17;12012:27;12026:13;12012:11;:27;:::i;:::-;11992:47;-1:-1:-1;12050:66:108;12060:6;12068:15;:11;12082:1;12068:15;:::i;:::-;12085:9;12096:8;12106:9;12050;:66::i;:::-;12450:63;12471:4;12478:8;12488:9;12499:13;12450:12;:63::i;:::-;12613:9;-1:-1:-1;;;;;12529:155:108;12588:11;12566:8;-1:-1:-1;;;;;12529:155:108;;12636:11;12661:13;12529:155;;;;;;15273:25:137;;;15329:2;15314:18;;15307:34;15261:2;15246:18;;15099:248;12529:155:108;;;;;;;;11499:1192;;;11351:1340;;;;:::o;2241:406:66:-;2304:4;4360:21;;;:14;;;:21;;;;;;2320:321;;-1:-1:-1;2362:23:66;;;;;;;;:11;:23;;;;;;;;;;;;;2544:18;;2520:21;;;:14;;;:21;;;;;;:42;;;;2576:11;;2320:321;-1:-1:-1;2625:5:66;2618:12;;2186:281:43;2263:17;-1:-1:-1;;;;;2263:29:43;;2296:1;2263:34;2259:119;;2320:47;;-1:-1:-1;;;2320:47:43;;-1:-1:-1;;;;;11186:32:137;;2320:47:43;;;11168:51:137;11141:18;;2320:47:43;11006:219:137;2259:119:43;-1:-1:-1;;;;;;;;;;;2387:73:43;;-1:-1:-1;;;;;;2387:73:43;-1:-1:-1;;;;;2387:73:43;;;;;;;;;;2186:281::o;4106:253:56:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:56;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:56:o;6598:122:43:-;6648:9;:13;6644:70;;6684:19;;-1:-1:-1;;;6684:19:43;;;;;;;;;;;4625:582:56;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:56;;;:23;5045:49;5041:119;;;5121:24;;-1:-1:-1;;;5121:24:56;;-1:-1:-1;;;;;11186:32:137;;5121:24:56;;;11168:51:137;11141:18;;5121:24:56;11006:219:137;5041:119:56;-1:-1:-1;5180:10:56;5173:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:56;;;;;;;;;;;14:286:137;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:137;;209:43;;199:71;;266:1;263;256:12;497:131;-1:-1:-1;;;;;572:31:137;;562:42;;552:70;;618:1;615;608:12;633:247;692:6;745:2;733:9;724:7;720:23;716:32;713:52;;;761:1;758;751:12;713:52;800:9;787:23;819:31;844:5;819:31;:::i;1067:226::-;1126:6;1179:2;1167:9;1158:7;1154:23;1150:32;1147:52;;;1195:1;1192;1185:12;1147:52;-1:-1:-1;1240:23:137;;1067:226;-1:-1:-1;1067:226:137:o;1480:637::-;1670:2;1682:21;;;1752:13;;1655:18;;;1774:22;;;1622:4;;1853:15;;;1827:2;1812:18;;;1622:4;1896:195;1910:6;1907:1;1904:13;1896:195;;;1975:13;;-1:-1:-1;;;;;1971:39:137;1959:52;;2040:2;2066:15;;;;2031:12;;;;2007:1;1925:9;1896:195;;;-1:-1:-1;2108:3:137;;1480:637;-1:-1:-1;;;;;1480:637:137:o;2122:367::-;2190:6;2198;2251:2;2239:9;2230:7;2226:23;2222:32;2219:52;;;2267:1;2264;2257:12;2219:52;2312:23;;;-1:-1:-1;2411:2:137;2396:18;;2383:32;2424:33;2383:32;2424:33;:::i;:::-;2476:7;2466:17;;;2122:367;;;;;:::o;2494:388::-;2562:6;2570;2623:2;2611:9;2602:7;2598:23;2594:32;2591:52;;;2639:1;2636;2629:12;2591:52;2678:9;2665:23;2697:31;2722:5;2697:31;:::i;:::-;2747:5;-1:-1:-1;2804:2:137;2789:18;;2776:32;2817:33;2776:32;2817:33;:::i;2887:127::-;2948:10;2943:3;2939:20;2936:1;2929:31;2979:4;2976:1;2969:15;3003:4;3000:1;2993:15;3019:1079;3096:6;3104;3157:2;3145:9;3136:7;3132:23;3128:32;3125:52;;;3173:1;3170;3163:12;3125:52;3212:9;3199:23;3231:31;3256:5;3231:31;:::i;:::-;3281:5;-1:-1:-1;3337:2:137;3322:18;;3309:32;-1:-1:-1;;;;;3353:30:137;;3350:50;;;3396:1;3393;3386:12;3350:50;3419:22;;3472:4;3464:13;;3460:27;-1:-1:-1;3450:55:137;;3501:1;3498;3491:12;3450:55;3541:2;3528:16;-1:-1:-1;;;;;3559:6:137;3556:30;3553:56;;;3589:18;;:::i;:::-;3638:2;3632:9;3730:2;3692:17;;-1:-1:-1;;3688:31:137;;;3721:2;3684:40;3680:54;3668:67;;-1:-1:-1;;;;;3750:34:137;;3786:22;;;3747:62;3744:88;;;3812:18;;:::i;:::-;3848:2;3841:22;3872;;;3913:15;;;3930:2;3909:24;3906:37;-1:-1:-1;3903:57:137;;;3956:1;3953;3946:12;3903:57;4012:6;4007:2;4003;3999:11;3994:2;3986:6;3982:15;3969:50;4065:1;4060:2;4051:6;4043;4039:19;4035:28;4028:39;4086:6;4076:16;;;;;3019:1079;;;;;:::o;4103:508::-;4180:6;4188;4196;4249:2;4237:9;4228:7;4224:23;4220:32;4217:52;;;4265:1;4262;4255:12;4217:52;4304:9;4291:23;4323:31;4348:5;4323:31;:::i;:::-;4373:5;-1:-1:-1;4451:2:137;4436:18;;4423:32;;-1:-1:-1;4533:2:137;4518:18;;4505:32;4546:33;4505:32;4546:33;:::i;:::-;4598:7;4588:17;;;4103:508;;;;;:::o;4616:::-;4693:6;4701;4709;4762:2;4750:9;4741:7;4737:23;4733:32;4730:52;;;4778:1;4775;4768:12;4730:52;4817:9;4804:23;4836:31;4861:5;4836:31;:::i;:::-;4886:5;-1:-1:-1;4943:2:137;4928:18;;4915:32;4956:33;4915:32;4956:33;:::i;:::-;4616:508;;5008:7;;-1:-1:-1;;;5088:2:137;5073:18;;;;5060:32;;4616:508::o;5129:650::-;5215:6;5223;5231;5239;5292:3;5280:9;5271:7;5267:23;5263:33;5260:53;;;5309:1;5306;5299:12;5260:53;5348:9;5335:23;5367:31;5392:5;5367:31;:::i;:::-;5417:5;-1:-1:-1;5495:2:137;5480:18;;5467:32;;-1:-1:-1;5577:2:137;5562:18;;5549:32;5590:33;5549:32;5590:33;:::i;:::-;5642:7;-1:-1:-1;5701:2:137;5686:18;;5673:32;5714:33;5673:32;5714:33;:::i;:::-;5129:650;;;;-1:-1:-1;5129:650:137;;-1:-1:-1;;5129:650:137:o;5784:529::-;5861:6;5869;5877;5930:2;5918:9;5909:7;5905:23;5901:32;5898:52;;;5946:1;5943;5936:12;5898:52;5985:9;5972:23;6004:31;6029:5;6004:31;:::i;:::-;6054:5;-1:-1:-1;6111:2:137;6096:18;;6083:32;6124:33;6083:32;6124:33;:::i;:::-;6176:7;-1:-1:-1;6235:2:137;6220:18;;6207:32;6248:33;6207:32;6248:33;:::i;6318:367::-;6381:8;6391:6;6445:3;6438:4;6430:6;6426:17;6422:27;6412:55;;6463:1;6460;6453:12;6412:55;-1:-1:-1;6486:20:137;;-1:-1:-1;;;;;6518:30:137;;6515:50;;;6561:1;6558;6551:12;6515:50;6598:4;6590:6;6586:17;6574:29;;6658:3;6651:4;6641:6;6638:1;6634:14;6626:6;6622:27;6618:38;6615:47;6612:67;;;6675:1;6672;6665:12;6612:67;6318:367;;;;;:::o;6690:1431::-;6884:6;6892;6900;6908;6916;6924;6932;6940;6993:3;6981:9;6972:7;6968:23;6964:33;6961:53;;;7010:1;7007;7000:12;6961:53;7050:9;7037:23;-1:-1:-1;;;;;7075:6:137;7072:30;7069:50;;;7115:1;7112;7105:12;7069:50;7154:70;7216:7;7207:6;7196:9;7192:22;7154:70;:::i;:::-;7243:8;;-1:-1:-1;7128:96:137;-1:-1:-1;;7331:2:137;7316:18;;7303:32;-1:-1:-1;;;;;7347:32:137;;7344:52;;;7392:1;7389;7382:12;7344:52;7431:72;7495:7;7484:8;7473:9;7469:24;7431:72;:::i;:::-;7522:8;;-1:-1:-1;7405:98:137;-1:-1:-1;;7610:2:137;7595:18;;7582:32;-1:-1:-1;;;;;7626:32:137;;7623:52;;;7671:1;7668;7661:12;7623:52;7710:72;7774:7;7763:8;7752:9;7748:24;7710:72;:::i;:::-;7801:8;;-1:-1:-1;7684:98:137;-1:-1:-1;;7889:2:137;7874:18;;7861:32;-1:-1:-1;;;;;7905:32:137;;7902:52;;;7950:1;7947;7940:12;7902:52;7989:72;8053:7;8042:8;8031:9;8027:24;7989:72;:::i;:::-;6690:1431;;;;-1:-1:-1;6690:1431:137;;-1:-1:-1;6690:1431:137;;;;;;8080:8;-1:-1:-1;;;6690:1431:137:o;8126:418::-;8275:2;8264:9;8257:21;8238:4;8307:6;8301:13;8350:6;8345:2;8334:9;8330:18;8323:34;8409:6;8404:2;8396:6;8392:15;8387:2;8376:9;8372:18;8366:50;8465:1;8460:2;8451:6;8440:9;8436:22;8432:31;8425:42;8535:2;8528;8524:7;8519:2;8511:6;8507:15;8503:29;8492:9;8488:45;8484:54;8476:62;;;8126:418;;;;:::o;9346:551::-;9441:6;9449;9457;9510:2;9498:9;9489:7;9485:23;9481:32;9478:52;;;9526:1;9523;9516:12;9478:52;9571:23;;;-1:-1:-1;9669:2:137;9654:18;;9641:32;-1:-1:-1;;;;;9685:30:137;;9682:50;;;9728:1;9725;9718:12;9682:50;9767:70;9829:7;9820:6;9809:9;9805:22;9767:70;:::i;:::-;9346:551;;9856:8;;-1:-1:-1;9741:96:137;;-1:-1:-1;;;;9346:551:137:o;9902:1099::-;10060:6;10068;10076;10084;10092;10100;10153:2;10141:9;10132:7;10128:23;10124:32;10121:52;;;10169:1;10166;10159:12;10121:52;10209:9;10196:23;-1:-1:-1;;;;;10234:6:137;10231:30;10228:50;;;10274:1;10271;10264:12;10228:50;10313:70;10375:7;10366:6;10355:9;10351:22;10313:70;:::i;:::-;10402:8;;-1:-1:-1;10287:96:137;-1:-1:-1;;10490:2:137;10475:18;;10462:32;-1:-1:-1;;;;;10506:32:137;;10503:52;;;10551:1;10548;10541:12;10503:52;10590:72;10654:7;10643:8;10632:9;10628:24;10590:72;:::i;:::-;10681:8;;-1:-1:-1;10564:98:137;-1:-1:-1;;10769:2:137;10754:18;;10741:32;-1:-1:-1;;;;;10785:32:137;;10782:52;;;10830:1;10827;10820:12;10782:52;10869:72;10933:7;10922:8;10911:9;10907:24;10869:72;:::i;:::-;9902:1099;;;;-1:-1:-1;9902:1099:137;;-1:-1:-1;9902:1099:137;;10960:8;;9902:1099;-1:-1:-1;;;9902:1099:137:o;12334:127::-;12395:10;12390:3;12386:20;12383:1;12376:31;12426:4;12423:1;12416:15;12450:4;12447:1;12440:15;12466:127;12527:10;12522:3;12518:20;12515:1;12508:31;12558:4;12555:1;12548:15;12582:4;12579:1;12572:15;12598:125;12663:9;;;12684:10;;;12681:36;;;12697:18;;:::i;13429:184::-;13499:6;13552:2;13540:9;13531:7;13527:23;13523:32;13520:52;;;13568:1;13565;13558:12;13520:52;-1:-1:-1;13591:16:137;;13429:184;-1:-1:-1;13429:184:137:o;13994:277::-;14061:6;14114:2;14102:9;14093:7;14089:23;14085:32;14082:52;;;14130:1;14127;14120:12;14082:52;14162:9;14156:16;14215:5;14208:13;14201:21;14194:5;14191:32;14181:60;;14237:1;14234;14227:12;14276:217;14316:1;14342;14332:132;;14386:10;14381:3;14377:20;14374:1;14367:31;14421:4;14418:1;14411:15;14449:4;14446:1;14439:15;14332:132;-1:-1:-1;14478:9:137;;14276:217::o;14498:128::-;14565:9;;;14586:11;;;14583:37;;;14600:18;;:::i;15352:301::-;15481:3;15519:6;15513:13;15565:6;15558:4;15550:6;15546:17;15541:3;15535:37;15627:1;15591:16;;15616:13;;;-1:-1:-1;15591:16:137;15352:301;-1:-1:-1;15352:301:137:o","linkReferences":{},"immutableReferences":{"39659":[{"start":6647,"length":32},{"start":6688,"length":32},{"start":7014,"length":32}]}},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","WHITELIST_ROLE()":"7a997ab7","acceptGenesisCeremony()":"92a2ebf3","currentEpochByDomain(address)":"0a0b1b64","domainGenesisAccepted(address)":"d1ba90ff","epochDurationByDomain(address)":"3bccf635","epochStakesByDomain(address,uint256,address,address)":"c0b95ab8","epochTotalStakeByDomain(address,uint256,address)":"54300d7a","epochUnstakesByDomain(address,uint256,address,address)":"65f1ea20","getAttestersByDomain(address)":"2924b73b","getCurrentEpoch(address)":"4d3223a5","getCurrentEpochStake(address,address,address)":"70224360","getCurrentEpochUnstake(address,address,address)":"7667b76d","getCustodiansByDomain(address)":"d5ca03de","getEpochByBlockTime(address)":"c3471ff8","getNextEpoch(address)":"8489e580","getNextEpochByBlockTime(address)":"2c7785a8","getRoleAdmin(bytes32)":"248a9ca3","getStakeAtEpoch(address,uint256,address,address)":"8d908258","getTotalStakeForCurrentEpoch(address,address)":"44198e4d","getTotalStakeForEpoch(address,uint256,address)":"5cdf3155","getUnstakeAtEpoch(address,uint256,address,address)":"879b938b","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize()":"8129fc1c","initialize(address)":"c4d66de8","proxiableUUID()":"52d1902d","registerDomain(uint256,address[])":"d37304f8","removeAddressFromWhitelist(address)":"286dd3f5","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","reward(address[],uint256[],address[])":"da33ee7f","rollOverEpoch()":"a887b71c","setGenesisCeremony(address[],address[],uint256[])":"ff62787c","slash(address[],address[],uint256[],uint256[])":"a885c975","stake(address,address,uint256)":"bf6eac2f","supportsInterface(bytes4)":"01ffc9a7","token()":"fc0c546a","unstake(address,address,uint256)":"60829f8a","upgradeToAndCall(address,bytes)":"4f1ef286","whitelistAddress(address)":"41566585"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodianTransferAmountMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GenesisAlreadyAccepted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakeExceedsGenesisStake\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unstake\",\"type\":\"uint256\"}],\"name\":\"AttesterEpochRolledOver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"name\":\"AttesterStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"name\":\"AttesterUnstaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"EpochRolledOver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WHITELIST_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"currentEpochByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentEpoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"domainGenesisAccepted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"epochDurationByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochDuration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"epochStakesByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"epochTotalStakeByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"epochUnstakesByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getAttestersByDomain\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getCurrentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getCurrentEpochStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getCurrentEpochUnstake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getCustodiansByDomain\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getEpochByBlockTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getNextEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getNextEpochByBlockTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStakeAtEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getTotalStakeForCurrentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getTotalStakeForEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getUnstakeAtEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epochDuration\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"}],\"name\":\"registerDomain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"removeAddressFromWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"}],\"name\":\"reward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollOverEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"stakes\",\"type\":\"uint256[]\"}],\"name\":\"setGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"refundAmounts\",\"type\":\"uint256[]\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"whitelistAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize()\":{\"details\":\"Initialize the contract\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/staking/MovementStaking.sol\":\"MovementStaking\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194\",\"dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"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/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040\",\"dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt\"]},\"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/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"]},\"src/staking/MovementStaking.sol\":{\"keccak256\":\"0xc8a4e4541fefdf79e699e0a0ab1de5cf5e247e1bcc5758dd03456f287a2f4806\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://2904e448c31814b10e9de4751d0efdfbd72f3fc7465944869933afe5c29a10b1\",\"dweb:/ipfs/QmZxXrs7AY2kCQVSB6em8osNZTYorwVX5dfcisUTYcqAkN\"]},\"src/staking/MovementStakingStorage.sol\":{\"keccak256\":\"0x9ca2df17c7dec2b75cc96453c60ef64a570ae1adf429d1a92e879127616af4af\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0d53c127b022fd35429ea183b0f1882bb03a62ed4e7e8e79f7058421fe49a947\",\"dweb:/ipfs/QmUMhEebucKiE2MedG9B18vcJMozwQ8yQFwV364Lnrjjej\"]},\"src/staking/base/BaseStaking.sol\":{\"keccak256\":\"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46\",\"dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx\"]},\"src/staking/interfaces/IMovementStaking.sol\":{\"keccak256\":\"0x23a7eca75e0fd004a60f17f88e0a0a011e135a3e666f5853276e3715f64a7f30\",\"urls\":[\"bzz-raw://43f792aa3c470a609ef6f7ab6578123453a4e205e0654dd2fa7d4a25356d76a0\",\"dweb:/ipfs/QmdGb1yzNehEUsWDyeA5BbtF9CJrbJzyng6CRhbBs3xsJ5\"]},\"src/token/base/BaseToken.sol\":{\"keccak256\":\"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e\",\"dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd\"]},\"src/token/base/MintableToken.sol\":{\"keccak256\":\"0x67dcaae55138dda0f6fb9cce7d00b21b1dcf48144d0442073bec83aedbd73ca6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009d22618ed30e84b0839edbe7bd1a18afe7073a62477667bf96d765428385b7\",\"dweb:/ipfs/QmNzA9RjM6SxVJYWohq7JbLvyBrhzzjzQQwBfArBQqCNAQ\"]},\"src/token/base/WrappedToken.sol\":{\"keccak256\":\"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885\",\"dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4\"]},\"src/token/base/WrappedTokenStorage.sol\":{\"keccak256\":\"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08\",\"dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj\"]},\"src/token/custodian/CustodianToken.sol\":{\"keccak256\":\"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04\",\"dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"CustodianTransferAmountMismatch"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[],"type":"error","name":"GenesisAlreadyAccepted"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"StakeExceedsGenesisStake"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"address","name":"attester","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false},{"internalType":"uint256","name":"unstake","type":"uint256","indexed":false}],"type":"event","name":"AttesterEpochRolledOver","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"address","name":"attester","type":"address","indexed":false},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false}],"type":"event","name":"AttesterStaked","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"address","name":"attester","type":"address","indexed":false},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false}],"type":"event","name":"AttesterUnstaked","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":false}],"type":"event","name":"EpochRolledOver","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"WHITELIST_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptGenesisCeremony"},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"currentEpochByDomain","outputs":[{"internalType":"uint256","name":"currentEpoch","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"domainGenesisAccepted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"epochDurationByDomain","outputs":[{"internalType":"uint256","name":"epochDuration","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"epochStakesByDomain","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"epochTotalStakeByDomain","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"epochUnstakesByDomain","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getAttestersByDomain","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getCurrentEpochStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getCurrentEpochUnstake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodiansByDomain","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getEpochByBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getNextEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getNextEpochByBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStakeAtEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getTotalStakeForCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getTotalStakeForEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getUnstakeAtEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epochDuration","type":"uint256"},{"internalType":"address[]","name":"custodians","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"registerDomain"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"removeAddressFromWhitelist"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address[]","name":"custodians","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"reward"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"rollOverEpoch"},{"inputs":[{"internalType":"address[]","name":"custodians","type":"address[]"},{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"stakes","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"setGenesisCeremony"},{"inputs":[{"internalType":"address[]","name":"custodians","type":"address[]"},{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"refundAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"slash"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"contract IERC20","name":"custodian","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"stake"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"unstake"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"whitelistAddress"}],"devdoc":{"kind":"dev","methods":{"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize()":{"details":"Initialize the contract"},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/staking/MovementStaking.sol":"MovementStaking"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/forge-std/src/console.sol":{"keccak256":"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a","urls":["bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194","dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"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/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53","urls":["bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930","dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f","urls":["bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040","dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt"],"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/introspection/ERC165Upgradeable.sol":{"keccak256":"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8","urls":["bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45","dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c","urls":["bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba","dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c","urls":["bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9","dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65","urls":["bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a","dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"],"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/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386","urls":["bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0","dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa","urls":["bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1","dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA"],"license":"MIT"},"src/staking/MovementStaking.sol":{"keccak256":"0xc8a4e4541fefdf79e699e0a0ab1de5cf5e247e1bcc5758dd03456f287a2f4806","urls":["bzz-raw://2904e448c31814b10e9de4751d0efdfbd72f3fc7465944869933afe5c29a10b1","dweb:/ipfs/QmZxXrs7AY2kCQVSB6em8osNZTYorwVX5dfcisUTYcqAkN"],"license":"UNLICENSED"},"src/staking/MovementStakingStorage.sol":{"keccak256":"0x9ca2df17c7dec2b75cc96453c60ef64a570ae1adf429d1a92e879127616af4af","urls":["bzz-raw://0d53c127b022fd35429ea183b0f1882bb03a62ed4e7e8e79f7058421fe49a947","dweb:/ipfs/QmUMhEebucKiE2MedG9B18vcJMozwQ8yQFwV364Lnrjjej"],"license":"UNLICENSED"},"src/staking/base/BaseStaking.sol":{"keccak256":"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393","urls":["bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46","dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx"],"license":"MIT"},"src/staking/interfaces/IMovementStaking.sol":{"keccak256":"0x23a7eca75e0fd004a60f17f88e0a0a011e135a3e666f5853276e3715f64a7f30","urls":["bzz-raw://43f792aa3c470a609ef6f7ab6578123453a4e205e0654dd2fa7d4a25356d76a0","dweb:/ipfs/QmdGb1yzNehEUsWDyeA5BbtF9CJrbJzyng6CRhbBs3xsJ5"],"license":null},"src/token/base/BaseToken.sol":{"keccak256":"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2","urls":["bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e","dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd"],"license":"MIT"},"src/token/base/MintableToken.sol":{"keccak256":"0x67dcaae55138dda0f6fb9cce7d00b21b1dcf48144d0442073bec83aedbd73ca6","urls":["bzz-raw://009d22618ed30e84b0839edbe7bd1a18afe7073a62477667bf96d765428385b7","dweb:/ipfs/QmNzA9RjM6SxVJYWohq7JbLvyBrhzzjzQQwBfArBQqCNAQ"],"license":"MIT"},"src/token/base/WrappedToken.sol":{"keccak256":"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45","urls":["bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885","dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4"],"license":"MIT"},"src/token/base/WrappedTokenStorage.sol":{"keccak256":"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e","urls":["bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08","dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj"],"license":"MIT"},"src/token/custodian/CustodianToken.sol":{"keccak256":"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350","urls":["bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04","dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":56292,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"token","offset":0,"slot":"0","type":"t_contract(IERC20)43663"},{"astId":56296,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochDurationByDomain","offset":0,"slot":"1","type":"t_mapping(t_address,t_uint256)"},{"astId":56300,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"currentEpochByDomain","offset":0,"slot":"2","type":"t_mapping(t_address,t_uint256)"},{"astId":56305,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"attestersByDomain","offset":0,"slot":"3","type":"t_mapping(t_address,t_struct(AddressSet)46651_storage)"},{"astId":56310,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"custodiansByDomain","offset":0,"slot":"4","type":"t_mapping(t_address,t_struct(AddressSet)46651_storage)"},{"astId":56320,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochStakesByDomain","offset":0,"slot":"5","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))"},{"astId":56330,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochUnstakesByDomain","offset":0,"slot":"6","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))"},{"astId":56338,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochTotalStakeByDomain","offset":0,"slot":"7","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_uint256)))"},{"astId":56342,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"domainGenesisAccepted","offset":0,"slot":"8","type":"t_mapping(t_address,t_bool)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_bytes32)dyn_storage":{"encoding":"dynamic_array","label":"bytes32[]","numberOfBytes":"32","base":"t_bytes32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IERC20)43663":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))"},"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_uint256)))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => mapping(address => uint256)))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},"t_mapping(t_address,t_struct(AddressSet)46651_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct EnumerableSet.AddressSet)","numberOfBytes":"32","value":"t_struct(AddressSet)46651_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => mapping(address => uint256)))","numberOfBytes":"32","value":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},"t_mapping(t_uint256,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_struct(AddressSet)46651_storage":{"encoding":"inplace","label":"struct EnumerableSet.AddressSet","numberOfBytes":"64","members":[{"astId":46650,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_inner","offset":0,"slot":"0","type":"t_struct(Set)46336_storage"}]},"t_struct(Set)46336_storage":{"encoding":"inplace","label":"struct EnumerableSet.Set","numberOfBytes":"64","members":[{"astId":46331,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_values","offset":0,"slot":"0","type":"t_array(t_bytes32)dyn_storage"},{"astId":46335,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_positions","offset":0,"slot":"1","type":"t_mapping(t_bytes32,t_uint256)"}]},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/staking/MovementStaking.sol","id":56273,"exportedSymbols":{"BaseStaking":[56403],"EnumerableSet":[46938],"ICustodianToken":[57304],"IERC20":[43663],"IMovementStaking":[56638],"Math":[46220],"MovementStaking":[56272],"MovementStakingStorage":[56348],"SafeERC20":[44015],"console":[24306]},"nodeType":"SourceUnit","src":"39:19749:108","nodes":[{"id":54871,"nodeType":"PragmaDirective","src":"39:24:108","nodes":[],"literals":["solidity","^","0.8",".13"]},{"id":54872,"nodeType":"ImportDirective","src":"64:31:108","nodes":[],"absolutePath":"lib/forge-std/src/console.sol","file":"forge-std/console.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":24307,"symbolAliases":[],"unitAlias":""},{"id":54874,"nodeType":"ImportDirective","src":"96:51:108","nodes":[],"absolutePath":"src/staking/base/BaseStaking.sol","file":"./base/BaseStaking.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":56404,"symbolAliases":[{"foreign":{"id":54873,"name":"BaseStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56403,"src":"104:11:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54876,"nodeType":"ImportDirective","src":"148:82:108","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":44016,"symbolAliases":[{"foreign":{"id":54875,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44015,"src":"156:9:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54878,"nodeType":"ImportDirective","src":"231:69:108","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol","file":"@openzeppelin/contracts/interfaces/IERC20.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":42721,"symbolAliases":[{"foreign":{"id":54877,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43663,"src":"239:6:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54880,"nodeType":"ImportDirective","src":"301:70:108","nodes":[],"absolutePath":"src/token/custodian/CustodianToken.sol","file":"../token/custodian/CustodianToken.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":57640,"symbolAliases":[{"foreign":{"id":54879,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57304,"src":"309:15:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54882,"nodeType":"ImportDirective","src":"372:65:108","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/math/Math.sol","file":"@openzeppelin/contracts/utils/math/Math.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":46221,"symbolAliases":[{"foreign":{"id":54881,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46220,"src":"380:4:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54885,"nodeType":"ImportDirective","src":"438:83:108","nodes":[],"absolutePath":"src/staking/MovementStakingStorage.sol","file":"./MovementStakingStorage.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":56349,"symbolAliases":[{"foreign":{"id":54883,"name":"MovementStakingStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56348,"src":"446:22:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":54884,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46938,"src":"470:13:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54887,"nodeType":"ImportDirective","src":"522:67:108","nodes":[],"absolutePath":"src/staking/interfaces/IMovementStaking.sol","file":"./interfaces/IMovementStaking.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":56639,"symbolAliases":[{"foreign":{"id":54886,"name":"IMovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56638,"src":"530:16:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":56272,"nodeType":"ContractDefinition","src":"591:19196:108","nodes":[{"id":54897,"nodeType":"UsingForDirective","src":"691:49:108","nodes":[],"global":false,"libraryName":{"id":54894,"name":"EnumerableSet","nameLocations":["697:13:108"],"nodeType":"IdentifierPath","referencedDeclaration":46938,"src":"697:13:108"},"typeName":{"id":54896,"nodeType":"UserDefinedTypeName","pathNode":{"id":54895,"name":"EnumerableSet.AddressSet","nameLocations":["715:13:108","729:10:108"],"nodeType":"IdentifierPath","referencedDeclaration":46651,"src":"715:24:108"},"referencedDeclaration":46651,"src":"715:24:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},{"id":54913,"nodeType":"FunctionDefinition","src":"746:125:108","nodes":[],"body":{"id":54912,"nodeType":"Block","src":"800:71:108","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":54905,"name":"__BaseStaking_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56391,"src":"810:28:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"810:30:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54907,"nodeType":"ExpressionStatement","src":"810:30:108"},{"expression":{"id":54910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54908,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"850:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54909,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54900,"src":"858:6:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"src":"850:14:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":54911,"nodeType":"ExpressionStatement","src":"850:14:108"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":54903,"kind":"modifierInvocation","modifierName":{"id":54902,"name":"initializer","nameLocations":["788:11:108"],"nodeType":"IdentifierPath","referencedDeclaration":39493,"src":"788:11:108"},"nodeType":"ModifierInvocation","src":"788:11:108"}],"name":"initialize","nameLocation":"755:10:108","parameters":{"id":54901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54900,"mutability":"mutable","name":"_token","nameLocation":"773:6:108","nodeType":"VariableDeclaration","scope":54913,"src":"766:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"},"typeName":{"id":54899,"nodeType":"UserDefinedTypeName","pathNode":{"id":54898,"name":"IERC20","nameLocations":["766:6:108"],"nodeType":"IdentifierPath","referencedDeclaration":43663,"src":"766:6:108"},"referencedDeclaration":43663,"src":"766:6:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"765:15:108"},"returnParameters":{"id":54904,"nodeType":"ParameterList","parameters":[],"src":"800:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54955,"nodeType":"FunctionDefinition","src":"877:336:108","nodes":[],"body":{"id":54954,"nodeType":"Block","src":"986:227:108","nodes":[],"statements":[{"assignments":[54922],"declarations":[{"constant":false,"id":54922,"mutability":"mutable","name":"domain","nameLocation":"1004:6:108","nodeType":"VariableDeclaration","scope":54954,"src":"996:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54921,"name":"address","nodeType":"ElementaryTypeName","src":"996:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54925,"initialValue":{"expression":{"id":54923,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1013:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1017:6:108","memberName":"sender","nodeType":"MemberAccess","src":"1013:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"996:27:108"},{"expression":{"id":54930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":54926,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56296,"src":"1033:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":54928,"indexExpression":{"id":54927,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54922,"src":"1055:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1033:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54929,"name":"epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54915,"src":"1065:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1033:45:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54931,"nodeType":"ExpressionStatement","src":"1033:45:108"},{"body":{"id":54952,"nodeType":"Block","src":"1137:70:108","statements":[{"expression":{"arguments":[{"baseExpression":{"id":54947,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54918,"src":"1182:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":54949,"indexExpression":{"id":54948,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54933,"src":"1193:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1182:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":54943,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"1151:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":54945,"indexExpression":{"id":54944,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54922,"src":"1170:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1151:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":54946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1178:3:108","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":46678,"src":"1151:30:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$46651_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":54950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1151:45:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54951,"nodeType":"ExpressionStatement","src":"1151:45:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54936,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54933,"src":"1109:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":54937,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54918,"src":"1113:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":54938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1124:6:108","memberName":"length","nodeType":"MemberAccess","src":"1113:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1109:21:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54953,"initializationExpression":{"assignments":[54933],"declarations":[{"constant":false,"id":54933,"mutability":"mutable","name":"i","nameLocation":"1102:1:108","nodeType":"VariableDeclaration","scope":54953,"src":"1094:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54932,"name":"uint256","nodeType":"ElementaryTypeName","src":"1094:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54935,"initialValue":{"hexValue":"30","id":54934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1106:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1094:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":54941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1132:3:108","subExpression":{"id":54940,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54933,"src":"1132:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54942,"nodeType":"ExpressionStatement","src":"1132:3:108"},"nodeType":"ForStatement","src":"1089:118:108"}]},"baseFunctions":[56415],"functionSelector":"d37304f8","implemented":true,"kind":"function","modifiers":[],"name":"registerDomain","nameLocation":"886:14:108","parameters":{"id":54919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54915,"mutability":"mutable","name":"epochDuration","nameLocation":"918:13:108","nodeType":"VariableDeclaration","scope":54955,"src":"910:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54914,"name":"uint256","nodeType":"ElementaryTypeName","src":"910:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54918,"mutability":"mutable","name":"custodians","nameLocation":"960:10:108","nodeType":"VariableDeclaration","scope":54955,"src":"941:29:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54916,"name":"address","nodeType":"ElementaryTypeName","src":"941:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54917,"nodeType":"ArrayTypeName","src":"941:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"900:76:108"},"returnParameters":{"id":54920,"nodeType":"ParameterList","parameters":[],"src":"986:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55008,"nodeType":"FunctionDefinition","src":"1219:522:108","nodes":[],"body":{"id":55007,"nodeType":"Block","src":"1319:422:108","nodes":[],"statements":[{"assignments":[54967],"declarations":[{"constant":false,"id":54967,"mutability":"mutable","name":"custodians","nameLocation":"1474:10:108","nodeType":"VariableDeclaration","scope":55007,"src":"1457:27:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54965,"name":"address","nodeType":"ElementaryTypeName","src":"1457:7:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54966,"nodeType":"ArrayTypeName","src":"1457:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":54977,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":54971,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"1514:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":54973,"indexExpression":{"id":54972,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54957,"src":"1533:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1514:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":54974,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1541:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"1514:33:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":54975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1514:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54970,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1487:13:108","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":54968,"name":"address","nodeType":"ElementaryTypeName","src":"1491:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54969,"nodeType":"ArrayTypeName","src":"1491:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":54976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1487:72:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1457:102:108"},{"body":{"id":55003,"nodeType":"Block","src":"1635:73:108","statements":[{"expression":{"id":55001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":54992,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54967,"src":"1649:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":54994,"indexExpression":{"id":54993,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54979,"src":"1660:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1649:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":54999,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54979,"src":"1695:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":54995,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"1665:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":54997,"indexExpression":{"id":54996,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54957,"src":"1684:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1665:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":54998,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1692:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"1665:29:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1665:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1649:48:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55002,"nodeType":"ExpressionStatement","src":"1649:48:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54982,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54979,"src":"1589:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":54983,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"1593:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":54985,"indexExpression":{"id":54984,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54957,"src":"1612:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1593:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":54986,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1620:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"1593:33:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":54987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1593:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1589:39:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55004,"initializationExpression":{"assignments":[54979],"declarations":[{"constant":false,"id":54979,"mutability":"mutable","name":"i","nameLocation":"1582:1:108","nodeType":"VariableDeclaration","scope":55004,"src":"1574:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54978,"name":"uint256","nodeType":"ElementaryTypeName","src":"1574:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54981,"initialValue":{"hexValue":"30","id":54980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1586:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1574:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":54990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1630:3:108","subExpression":{"id":54989,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54979,"src":"1630:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54991,"nodeType":"ExpressionStatement","src":"1630:3:108"},"nodeType":"ForStatement","src":"1569:139:108"},{"expression":{"id":55005,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54967,"src":"1724:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":54962,"id":55006,"nodeType":"Return","src":"1717:17:108"}]},"baseFunctions":[56553],"functionSelector":"d5ca03de","implemented":true,"kind":"function","modifiers":[],"name":"getCustodiansByDomain","nameLocation":"1228:21:108","parameters":{"id":54958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54957,"mutability":"mutable","name":"domain","nameLocation":"1267:6:108","nodeType":"VariableDeclaration","scope":55008,"src":"1259:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54956,"name":"address","nodeType":"ElementaryTypeName","src":"1259:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1249:30:108"},"returnParameters":{"id":54962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54961,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55008,"src":"1301:16:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54959,"name":"address","nodeType":"ElementaryTypeName","src":"1301:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54960,"nodeType":"ArrayTypeName","src":"1301:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1300:18:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55061,"nodeType":"FunctionDefinition","src":"1747:387:108","nodes":[],"body":{"id":55060,"nodeType":"Block","src":"1846:288:108","nodes":[],"statements":[{"assignments":[55020],"declarations":[{"constant":false,"id":55020,"mutability":"mutable","name":"attesters","nameLocation":"1873:9:108","nodeType":"VariableDeclaration","scope":55060,"src":"1856:26:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55018,"name":"address","nodeType":"ElementaryTypeName","src":"1856:7:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55019,"nodeType":"ArrayTypeName","src":"1856:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":55030,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55024,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"1912:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55026,"indexExpression":{"id":55025,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55010,"src":"1930:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1912:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55027,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1938:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"1912:32:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1912:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55023,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1885:13:108","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":55021,"name":"address","nodeType":"ElementaryTypeName","src":"1889:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55022,"nodeType":"ArrayTypeName","src":"1889:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":55029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1885:71:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1856:100:108"},{"body":{"id":55056,"nodeType":"Block","src":"2031:71:108","statements":[{"expression":{"id":55054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55045,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55020,"src":"2045:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":55047,"indexExpression":{"id":55046,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55032,"src":"2055:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2045:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55052,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55032,"src":"2089:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55048,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"2060:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55050,"indexExpression":{"id":55049,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55010,"src":"2078:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2060:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55051,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2086:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"2060:28:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2060:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2045:46:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55055,"nodeType":"ExpressionStatement","src":"2045:46:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55035,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55032,"src":"1986:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55036,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"1990:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55038,"indexExpression":{"id":55037,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55010,"src":"2008:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1990:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55039,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2016:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"1990:32:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1990:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1986:38:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55057,"initializationExpression":{"assignments":[55032],"declarations":[{"constant":false,"id":55032,"mutability":"mutable","name":"i","nameLocation":"1979:1:108","nodeType":"VariableDeclaration","scope":55057,"src":"1971:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55031,"name":"uint256","nodeType":"ElementaryTypeName","src":"1971:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55034,"initialValue":{"hexValue":"30","id":55033,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1983:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1971:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2026:3:108","subExpression":{"id":55042,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55032,"src":"2026:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55044,"nodeType":"ExpressionStatement","src":"2026:3:108"},"nodeType":"ForStatement","src":"1966:136:108"},{"expression":{"id":55058,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55020,"src":"2118:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":55015,"id":55059,"nodeType":"Return","src":"2111:16:108"}]},"baseFunctions":[56561],"functionSelector":"2924b73b","implemented":true,"kind":"function","modifiers":[],"name":"getAttestersByDomain","nameLocation":"1756:20:108","parameters":{"id":55011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55010,"mutability":"mutable","name":"domain","nameLocation":"1794:6:108","nodeType":"VariableDeclaration","scope":55061,"src":"1786:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55009,"name":"address","nodeType":"ElementaryTypeName","src":"1786:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1776:30:108"},"returnParameters":{"id":55015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55014,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55061,"src":"1828:16:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55012,"name":"address","nodeType":"ElementaryTypeName","src":"1828:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55013,"nodeType":"ArrayTypeName","src":"1828:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1827:18:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55160,"nodeType":"FunctionDefinition","src":"2140:1187:108","nodes":[],"body":{"id":55159,"nodeType":"Block","src":"2180:1147:108","nodes":[],"statements":[{"assignments":[55065],"declarations":[{"constant":false,"id":55065,"mutability":"mutable","name":"domain","nameLocation":"2198:6:108","nodeType":"VariableDeclaration","scope":55159,"src":"2190:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55064,"name":"address","nodeType":"ElementaryTypeName","src":"2190:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55068,"initialValue":{"expression":{"id":55066,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2207:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2211:6:108","memberName":"sender","nodeType":"MemberAccess","src":"2207:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2190:27:108"},{"condition":{"baseExpression":{"id":55069,"name":"domainGenesisAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56342,"src":"2231:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55071,"indexExpression":{"id":55070,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2253:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2231:29:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55075,"nodeType":"IfStatement","src":"2227:66:108","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":55072,"name":"GenesisAlreadyAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56637,"src":"2269:22:108","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":55073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2269:24:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":55074,"nodeType":"RevertStatement","src":"2262:31:108"}},{"expression":{"id":55080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55076,"name":"domainGenesisAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56342,"src":"2303:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55078,"indexExpression":{"id":55077,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2325:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2303:29:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":55079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2335:4:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2303:36:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55081,"nodeType":"ExpressionStatement","src":"2303:36:108"},{"expression":{"id":55088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55082,"name":"currentEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56300,"src":"2418:20:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55084,"indexExpression":{"id":55083,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2439:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2418:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55086,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2469:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55085,"name":"getEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"2449:19:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2449:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2418:58:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55089,"nodeType":"ExpressionStatement","src":"2418:58:108"},{"body":{"id":55157,"nodeType":"Block","src":"2552:769:108","statements":[{"assignments":[55105],"declarations":[{"constant":false,"id":55105,"mutability":"mutable","name":"attester","nameLocation":"2574:8:108","nodeType":"VariableDeclaration","scope":55157,"src":"2566:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55104,"name":"address","nodeType":"ElementaryTypeName","src":"2566:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55112,"initialValue":{"arguments":[{"id":55110,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55091,"src":"2614:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55106,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"2585:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55108,"indexExpression":{"id":55107,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2603:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2585:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55109,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2611:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"2585:28:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2585:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2566:50:108"},{"body":{"id":55155,"nodeType":"Block","src":"2697:614:108","statements":[{"assignments":[55128],"declarations":[{"constant":false,"id":55128,"mutability":"mutable","name":"custodian","nameLocation":"2723:9:108","nodeType":"VariableDeclaration","scope":55155,"src":"2715:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55127,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55135,"initialValue":{"arguments":[{"id":55133,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55114,"src":"2765:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55129,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"2735:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55131,"indexExpression":{"id":55130,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2754:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2735:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55132,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2762:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"2735:29:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2735:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2715:52:108"},{"assignments":[55137],"declarations":[{"constant":false,"id":55137,"mutability":"mutable","name":"attesterStake","nameLocation":"2852:13:108","nodeType":"VariableDeclaration","scope":55155,"src":"2844:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55136,"name":"uint256","nodeType":"ElementaryTypeName","src":"2844:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55144,"initialValue":{"arguments":[{"id":55139,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2905:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":55140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2933:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":55141,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55128,"src":"2956:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55142,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55105,"src":"2987:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55138,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"2868:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2868:145:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2844:169:108"},{"expression":{"arguments":[{"id":55146,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"3131:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55148,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"3175:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55147,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"3159:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3159:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55150,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55128,"src":"3204:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55151,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55105,"src":"3235:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55152,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55137,"src":"3265:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55145,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55320,"src":"3100:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3100:196:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55154,"nodeType":"ExpressionStatement","src":"3100:196:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55117,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55114,"src":"2651:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55118,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"2655:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55120,"indexExpression":{"id":55119,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2674:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2655:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2682:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"2655:33:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2655:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2651:39:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55156,"initializationExpression":{"assignments":[55114],"declarations":[{"constant":false,"id":55114,"mutability":"mutable","name":"j","nameLocation":"2644:1:108","nodeType":"VariableDeclaration","scope":55156,"src":"2636:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55113,"name":"uint256","nodeType":"ElementaryTypeName","src":"2636:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55116,"initialValue":{"hexValue":"30","id":55115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2648:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2636:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2692:3:108","subExpression":{"id":55124,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55114,"src":"2692:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55126,"nodeType":"ExpressionStatement","src":"2692:3:108"},"nodeType":"ForStatement","src":"2631:680:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55094,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55091,"src":"2507:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55095,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"2511:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55097,"indexExpression":{"id":55096,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2529:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2511:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2537:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"2511:32:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2511:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2507:38:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55158,"initializationExpression":{"assignments":[55091],"declarations":[{"constant":false,"id":55091,"mutability":"mutable","name":"i","nameLocation":"2500:1:108","nodeType":"VariableDeclaration","scope":55158,"src":"2492:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55090,"name":"uint256","nodeType":"ElementaryTypeName","src":"2492:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55093,"initialValue":{"hexValue":"30","id":55092,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2504:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2492:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2547:3:108","subExpression":{"id":55101,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55091,"src":"2547:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55103,"nodeType":"ExpressionStatement","src":"2547:3:108"},"nodeType":"ForStatement","src":"2487:834:108"}]},"baseFunctions":[56418],"functionSelector":"92a2ebf3","implemented":true,"kind":"function","modifiers":[],"name":"acceptGenesisCeremony","nameLocation":"2149:21:108","parameters":{"id":55062,"nodeType":"ParameterList","parameters":[],"src":"2170:2:108"},"returnParameters":{"id":55063,"nodeType":"ParameterList","parameters":[],"src":"2180:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":55284,"nodeType":"FunctionDefinition","src":"3333:1270:108","nodes":[],"body":{"id":55283,"nodeType":"Block","src":"3486:1117:108","nodes":[],"statements":[{"assignments":[55173],"declarations":[{"constant":false,"id":55173,"mutability":"mutable","name":"domain","nameLocation":"3504:6:108","nodeType":"VariableDeclaration","scope":55283,"src":"3496:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55172,"name":"address","nodeType":"ElementaryTypeName","src":"3496:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55176,"initialValue":{"expression":{"id":55174,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3513:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3517:6:108","memberName":"sender","nodeType":"MemberAccess","src":"3513:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3496:27:108"},{"expression":{"id":55183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55177,"name":"currentEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56300,"src":"3533:20:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55179,"indexExpression":{"id":55178,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"3554:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3533:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55181,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"3584:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55180,"name":"getEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"3564:19:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3564:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3533:58:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55184,"nodeType":"ExpressionStatement","src":"3533:58:108"},{"body":{"id":55281,"nodeType":"Block","src":"3649:948:108","statements":[{"assignments":[55197],"declarations":[{"constant":false,"id":55197,"mutability":"mutable","name":"custodian","nameLocation":"3671:9:108","nodeType":"VariableDeclaration","scope":55281,"src":"3663:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55196,"name":"address","nodeType":"ElementaryTypeName","src":"3663:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55201,"initialValue":{"baseExpression":{"id":55198,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55163,"src":"3683:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55200,"indexExpression":{"id":55199,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"3694:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3683:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3663:33:108"},{"assignments":[55203],"declarations":[{"constant":false,"id":55203,"mutability":"mutable","name":"attesterStake","nameLocation":"3773:13:108","nodeType":"VariableDeclaration","scope":55281,"src":"3765:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55202,"name":"uint256","nodeType":"ElementaryTypeName","src":"3765:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55212,"initialValue":{"arguments":[{"id":55205,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"3822:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":55206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3846:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":55207,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55197,"src":"3865:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":55208,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"3892:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55210,"indexExpression":{"id":55209,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"3902:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3892:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55204,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"3789:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3789:129:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3765:153:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55213,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55203,"src":"4010:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"id":55214,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55169,"src":"4026:6:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":55216,"indexExpression":{"id":55215,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4033:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4026:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4010:25:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55221,"nodeType":"IfStatement","src":"4006:64:108","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":55218,"name":"StakeExceedsGenesisStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56633,"src":"4044:24:108","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":55219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4044:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":55220,"nodeType":"RevertStatement","src":"4037:33:108"}},{"expression":{"arguments":[{"baseExpression":{"id":55226,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"4158:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55228,"indexExpression":{"id":55227,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4168:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4158:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":55222,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"4128:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55224,"indexExpression":{"id":55223,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"4146:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4128:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55225,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4154:3:108","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":46678,"src":"4128:29:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$46651_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":55229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4128:43:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55230,"nodeType":"ExpressionStatement","src":"4128:43:108"},{"expression":{"id":55247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55231,"name":"epochStakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56320,"src":"4185:19:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55240,"indexExpression":{"id":55232,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"4205:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4185:27:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55241,"indexExpression":{"arguments":[{"id":55234,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"4229:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55233,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"4213:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4213:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4185:52:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55242,"indexExpression":{"id":55236,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55197,"src":"4238:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4185:63:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55243,"indexExpression":{"baseExpression":{"id":55237,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"4266:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55239,"indexExpression":{"id":55238,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4276:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4266:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4185:107:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":55244,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55169,"src":"4295:6:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":55246,"indexExpression":{"id":55245,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4302:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4295:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4185:119:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55248,"nodeType":"ExpressionStatement","src":"4185:119:108"},{"expression":{"id":55259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55249,"name":"epochTotalStakeByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56338,"src":"4318:23:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":55253,"indexExpression":{"id":55250,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"4342:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4318:31:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":55254,"indexExpression":{"hexValue":"30","id":55251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4350:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4318:34:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55255,"indexExpression":{"id":55252,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55197,"src":"4353:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4318:45:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":55256,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55169,"src":"4367:6:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":55258,"indexExpression":{"id":55257,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4374:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4367:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4318:58:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55260,"nodeType":"ExpressionStatement","src":"4318:58:108"},{"assignments":[55262],"declarations":[{"constant":false,"id":55262,"mutability":"mutable","name":"refundAmount","nameLocation":"4466:12:108","nodeType":"VariableDeclaration","scope":55281,"src":"4458:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55261,"name":"uint256","nodeType":"ElementaryTypeName","src":"4458:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55268,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":55263,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55169,"src":"4481:6:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":55265,"indexExpression":{"id":55264,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4488:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4481:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":55266,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55203,"src":"4493:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4481:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4458:48:108"},{"expression":{"arguments":[{"arguments":[{"id":55272,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4541:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":55271,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4533:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55270,"name":"address","nodeType":"ElementaryTypeName","src":"4533:7:108","typeDescriptions":{}}},"id":55273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4533:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":55274,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"4548:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55276,"indexExpression":{"id":55275,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4558:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4548:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55277,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55197,"src":"4562:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55278,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55262,"src":"4573:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55269,"name":"_payAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56203,"src":"4520:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":55279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4520:66:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55280,"nodeType":"ExpressionStatement","src":"4520:66:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55189,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"3622:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55190,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"3626:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3636:6:108","memberName":"length","nodeType":"MemberAccess","src":"3626:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3622:20:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55282,"initializationExpression":{"assignments":[55186],"declarations":[{"constant":false,"id":55186,"mutability":"mutable","name":"i","nameLocation":"3615:1:108","nodeType":"VariableDeclaration","scope":55282,"src":"3607:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55185,"name":"uint256","nodeType":"ElementaryTypeName","src":"3607:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55188,"initialValue":{"hexValue":"30","id":55187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3619:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3607:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3644:3:108","subExpression":{"id":55193,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"3644:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55195,"nodeType":"ExpressionStatement","src":"3644:3:108"},"nodeType":"ForStatement","src":"3602:995:108"}]},"baseFunctions":[56430],"functionSelector":"ff62787c","implemented":true,"kind":"function","modifiers":[],"name":"setGenesisCeremony","nameLocation":"3342:18:108","parameters":{"id":55170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55163,"mutability":"mutable","name":"custodians","nameLocation":"3389:10:108","nodeType":"VariableDeclaration","scope":55284,"src":"3370:29:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55161,"name":"address","nodeType":"ElementaryTypeName","src":"3370:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55162,"nodeType":"ArrayTypeName","src":"3370:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":55166,"mutability":"mutable","name":"attesters","nameLocation":"3428:9:108","nodeType":"VariableDeclaration","scope":55284,"src":"3409:28:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55164,"name":"address","nodeType":"ElementaryTypeName","src":"3409:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55165,"nodeType":"ArrayTypeName","src":"3409:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":55169,"mutability":"mutable","name":"stakes","nameLocation":"3466:6:108","nodeType":"VariableDeclaration","scope":55284,"src":"3447:25:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":55167,"name":"uint256","nodeType":"ElementaryTypeName","src":"3447:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55168,"nodeType":"ArrayTypeName","src":"3447:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3360:118:108"},"returnParameters":{"id":55171,"nodeType":"ParameterList","parameters":[],"src":"3486:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":55320,"nodeType":"FunctionDefinition","src":"4609:309:108","nodes":[],"body":{"id":55319,"nodeType":"Block","src":"4767:151:108","nodes":[],"statements":[{"expression":{"id":55307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55297,"name":"epochStakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56320,"src":"4777:19:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55302,"indexExpression":{"id":55298,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55286,"src":"4797:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4777:27:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55303,"indexExpression":{"id":55299,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55288,"src":"4805:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4777:34:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55304,"indexExpression":{"id":55300,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55290,"src":"4812:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4777:45:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55305,"indexExpression":{"id":55301,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55292,"src":"4823:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4777:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":55306,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55294,"src":"4836:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4777:65:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55308,"nodeType":"ExpressionStatement","src":"4777:65:108"},{"expression":{"id":55317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55309,"name":"epochTotalStakeByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56338,"src":"4852:23:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":55313,"indexExpression":{"id":55310,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55286,"src":"4876:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4852:31:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":55314,"indexExpression":{"id":55311,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55288,"src":"4884:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4852:38:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55315,"indexExpression":{"id":55312,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55290,"src":"4891:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4852:49:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":55316,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55294,"src":"4905:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4852:59:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55318,"nodeType":"ExpressionStatement","src":"4852:59:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_addStake","nameLocation":"4618:9:108","parameters":{"id":55295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55286,"mutability":"mutable","name":"domain","nameLocation":"4645:6:108","nodeType":"VariableDeclaration","scope":55320,"src":"4637:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55285,"name":"address","nodeType":"ElementaryTypeName","src":"4637:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55288,"mutability":"mutable","name":"epoch","nameLocation":"4669:5:108","nodeType":"VariableDeclaration","scope":55320,"src":"4661:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55287,"name":"uint256","nodeType":"ElementaryTypeName","src":"4661:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55290,"mutability":"mutable","name":"custodian","nameLocation":"4692:9:108","nodeType":"VariableDeclaration","scope":55320,"src":"4684:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55289,"name":"address","nodeType":"ElementaryTypeName","src":"4684:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55292,"mutability":"mutable","name":"attester","nameLocation":"4719:8:108","nodeType":"VariableDeclaration","scope":55320,"src":"4711:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55291,"name":"address","nodeType":"ElementaryTypeName","src":"4711:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55294,"mutability":"mutable","name":"amount","nameLocation":"4745:6:108","nodeType":"VariableDeclaration","scope":55320,"src":"4737:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55293,"name":"uint256","nodeType":"ElementaryTypeName","src":"4737:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4627:130:108"},"returnParameters":{"id":55296,"nodeType":"ParameterList","parameters":[],"src":"4767:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55356,"nodeType":"FunctionDefinition","src":"4924:312:108","nodes":[],"body":{"id":55355,"nodeType":"Block","src":"5085:151:108","nodes":[],"statements":[{"expression":{"id":55343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55333,"name":"epochStakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56320,"src":"5095:19:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55338,"indexExpression":{"id":55334,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55322,"src":"5115:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5095:27:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55339,"indexExpression":{"id":55335,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55324,"src":"5123:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5095:34:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55340,"indexExpression":{"id":55336,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55326,"src":"5130:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5095:45:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55341,"indexExpression":{"id":55337,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55328,"src":"5141:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5095:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":55342,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55330,"src":"5154:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5095:65:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55344,"nodeType":"ExpressionStatement","src":"5095:65:108"},{"expression":{"id":55353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55345,"name":"epochTotalStakeByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56338,"src":"5170:23:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":55349,"indexExpression":{"id":55346,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55322,"src":"5194:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5170:31:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":55350,"indexExpression":{"id":55347,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55324,"src":"5202:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5170:38:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55351,"indexExpression":{"id":55348,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55326,"src":"5209:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5170:49:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":55352,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55330,"src":"5223:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5170:59:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55354,"nodeType":"ExpressionStatement","src":"5170:59:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeStake","nameLocation":"4933:12:108","parameters":{"id":55331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55322,"mutability":"mutable","name":"domain","nameLocation":"4963:6:108","nodeType":"VariableDeclaration","scope":55356,"src":"4955:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55321,"name":"address","nodeType":"ElementaryTypeName","src":"4955:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55324,"mutability":"mutable","name":"epoch","nameLocation":"4987:5:108","nodeType":"VariableDeclaration","scope":55356,"src":"4979:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55323,"name":"uint256","nodeType":"ElementaryTypeName","src":"4979:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55326,"mutability":"mutable","name":"custodian","nameLocation":"5010:9:108","nodeType":"VariableDeclaration","scope":55356,"src":"5002:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55325,"name":"address","nodeType":"ElementaryTypeName","src":"5002:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55328,"mutability":"mutable","name":"attester","nameLocation":"5037:8:108","nodeType":"VariableDeclaration","scope":55356,"src":"5029:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55327,"name":"address","nodeType":"ElementaryTypeName","src":"5029:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55330,"mutability":"mutable","name":"amount","nameLocation":"5063:6:108","nodeType":"VariableDeclaration","scope":55356,"src":"5055:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55329,"name":"uint256","nodeType":"ElementaryTypeName","src":"5055:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4945:130:108"},"returnParameters":{"id":55332,"nodeType":"ParameterList","parameters":[],"src":"5085:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55382,"nodeType":"FunctionDefinition","src":"5242:244:108","nodes":[],"body":{"id":55381,"nodeType":"Block","src":"5402:84:108","nodes":[],"statements":[{"expression":{"id":55379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55369,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56330,"src":"5412:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55374,"indexExpression":{"id":55370,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55358,"src":"5434:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5412:29:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55375,"indexExpression":{"id":55371,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55360,"src":"5442:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5412:36:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55376,"indexExpression":{"id":55372,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55362,"src":"5449:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5412:47:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55377,"indexExpression":{"id":55373,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55364,"src":"5460:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5412:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":55378,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55366,"src":"5473:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5412:67:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55380,"nodeType":"ExpressionStatement","src":"5412:67:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_addUnstake","nameLocation":"5251:11:108","parameters":{"id":55367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55358,"mutability":"mutable","name":"domain","nameLocation":"5280:6:108","nodeType":"VariableDeclaration","scope":55382,"src":"5272:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55357,"name":"address","nodeType":"ElementaryTypeName","src":"5272:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55360,"mutability":"mutable","name":"epoch","nameLocation":"5304:5:108","nodeType":"VariableDeclaration","scope":55382,"src":"5296:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55359,"name":"uint256","nodeType":"ElementaryTypeName","src":"5296:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55362,"mutability":"mutable","name":"custodian","nameLocation":"5327:9:108","nodeType":"VariableDeclaration","scope":55382,"src":"5319:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55361,"name":"address","nodeType":"ElementaryTypeName","src":"5319:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55364,"mutability":"mutable","name":"attester","nameLocation":"5354:8:108","nodeType":"VariableDeclaration","scope":55382,"src":"5346:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55363,"name":"address","nodeType":"ElementaryTypeName","src":"5346:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55366,"mutability":"mutable","name":"amount","nameLocation":"5380:6:108","nodeType":"VariableDeclaration","scope":55382,"src":"5372:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55365,"name":"uint256","nodeType":"ElementaryTypeName","src":"5372:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5262:130:108"},"returnParameters":{"id":55368,"nodeType":"ParameterList","parameters":[],"src":"5402:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55408,"nodeType":"FunctionDefinition","src":"5492:247:108","nodes":[],"body":{"id":55407,"nodeType":"Block","src":"5655:84:108","nodes":[],"statements":[{"expression":{"id":55405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55395,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56330,"src":"5665:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55400,"indexExpression":{"id":55396,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55384,"src":"5687:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5665:29:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55401,"indexExpression":{"id":55397,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55386,"src":"5695:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5665:36:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55402,"indexExpression":{"id":55398,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55388,"src":"5702:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5665:47:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55403,"indexExpression":{"id":55399,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55390,"src":"5713:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5665:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":55404,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55392,"src":"5726:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5665:67:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55406,"nodeType":"ExpressionStatement","src":"5665:67:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeUnstake","nameLocation":"5501:14:108","parameters":{"id":55393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55384,"mutability":"mutable","name":"domain","nameLocation":"5533:6:108","nodeType":"VariableDeclaration","scope":55408,"src":"5525:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55383,"name":"address","nodeType":"ElementaryTypeName","src":"5525:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55386,"mutability":"mutable","name":"epoch","nameLocation":"5557:5:108","nodeType":"VariableDeclaration","scope":55408,"src":"5549:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55385,"name":"uint256","nodeType":"ElementaryTypeName","src":"5549:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55388,"mutability":"mutable","name":"custodian","nameLocation":"5580:9:108","nodeType":"VariableDeclaration","scope":55408,"src":"5572:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55387,"name":"address","nodeType":"ElementaryTypeName","src":"5572:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55390,"mutability":"mutable","name":"attester","nameLocation":"5607:8:108","nodeType":"VariableDeclaration","scope":55408,"src":"5599:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55389,"name":"address","nodeType":"ElementaryTypeName","src":"5599:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55392,"mutability":"mutable","name":"amount","nameLocation":"5633:6:108","nodeType":"VariableDeclaration","scope":55408,"src":"5625:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55391,"name":"uint256","nodeType":"ElementaryTypeName","src":"5625:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5515:130:108"},"returnParameters":{"id":55394,"nodeType":"ParameterList","parameters":[],"src":"5655:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55434,"nodeType":"FunctionDefinition","src":"5745:243:108","nodes":[],"body":{"id":55433,"nodeType":"Block","src":"5905:83:108","nodes":[],"statements":[{"expression":{"id":55431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55421,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56330,"src":"5915:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55426,"indexExpression":{"id":55422,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55410,"src":"5937:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5915:29:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55427,"indexExpression":{"id":55423,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55412,"src":"5945:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5915:36:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55428,"indexExpression":{"id":55424,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55414,"src":"5952:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5915:47:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55429,"indexExpression":{"id":55425,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55416,"src":"5963:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5915:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55430,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55418,"src":"5975:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5915:66:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55432,"nodeType":"ExpressionStatement","src":"5915:66:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setUnstake","nameLocation":"5754:11:108","parameters":{"id":55419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55410,"mutability":"mutable","name":"domain","nameLocation":"5783:6:108","nodeType":"VariableDeclaration","scope":55434,"src":"5775:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55409,"name":"address","nodeType":"ElementaryTypeName","src":"5775:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55412,"mutability":"mutable","name":"epoch","nameLocation":"5807:5:108","nodeType":"VariableDeclaration","scope":55434,"src":"5799:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55411,"name":"uint256","nodeType":"ElementaryTypeName","src":"5799:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55414,"mutability":"mutable","name":"custodian","nameLocation":"5830:9:108","nodeType":"VariableDeclaration","scope":55434,"src":"5822:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55413,"name":"address","nodeType":"ElementaryTypeName","src":"5822:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55416,"mutability":"mutable","name":"attester","nameLocation":"5857:8:108","nodeType":"VariableDeclaration","scope":55434,"src":"5849:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55415,"name":"address","nodeType":"ElementaryTypeName","src":"5849:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55418,"mutability":"mutable","name":"amount","nameLocation":"5883:6:108","nodeType":"VariableDeclaration","scope":55434,"src":"5875:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55417,"name":"uint256","nodeType":"ElementaryTypeName","src":"5875:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5765:130:108"},"returnParameters":{"id":55420,"nodeType":"ParameterList","parameters":[],"src":"5905:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55449,"nodeType":"FunctionDefinition","src":"6052:146:108","nodes":[],"body":{"id":55448,"nodeType":"Block","src":"6127:71:108","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":55441,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"6144:5:108","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":55442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6150:9:108","memberName":"timestamp","nodeType":"MemberAccess","src":"6144:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"id":55443,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56296,"src":"6162:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55445,"indexExpression":{"id":55444,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55436,"src":"6184:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6162:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6144:47:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55440,"id":55447,"nodeType":"Return","src":"6137:54:108"}]},"baseFunctions":[56437],"functionSelector":"c3471ff8","implemented":true,"kind":"function","modifiers":[],"name":"getEpochByBlockTime","nameLocation":"6061:19:108","parameters":{"id":55437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55436,"mutability":"mutable","name":"domain","nameLocation":"6089:6:108","nodeType":"VariableDeclaration","scope":55449,"src":"6081:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55435,"name":"address","nodeType":"ElementaryTypeName","src":"6081:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6080:16:108"},"returnParameters":{"id":55440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55439,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55449,"src":"6118:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55438,"name":"uint256","nodeType":"ElementaryTypeName","src":"6118:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6117:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55461,"nodeType":"FunctionDefinition","src":"6272:123:108","nodes":[],"body":{"id":55460,"nodeType":"Block","src":"6343:52:108","nodes":[],"statements":[{"expression":{"baseExpression":{"id":55456,"name":"currentEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56300,"src":"6360:20:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55458,"indexExpression":{"id":55457,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55451,"src":"6381:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6360:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55455,"id":55459,"nodeType":"Return","src":"6353:35:108"}]},"baseFunctions":[56444],"functionSelector":"4d3223a5","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentEpoch","nameLocation":"6281:15:108","parameters":{"id":55452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55451,"mutability":"mutable","name":"domain","nameLocation":"6305:6:108","nodeType":"VariableDeclaration","scope":55461,"src":"6297:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55450,"name":"address","nodeType":"ElementaryTypeName","src":"6297:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6296:16:108"},"returnParameters":{"id":55455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55454,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55461,"src":"6334:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55453,"name":"uint256","nodeType":"ElementaryTypeName","src":"6334:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6333:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55482,"nodeType":"FunctionDefinition","src":"6428:154:108","nodes":[],"body":{"id":55481,"nodeType":"Block","src":"6496:86:108","nodes":[],"statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55469,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55463,"src":"6529:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55468,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"6513:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6513:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6540:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6513:28:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55475,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55463,"src":"6564:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55474,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"6548:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6548:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6574:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6548:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6513:62:108","trueExpression":{"hexValue":"30","id":55473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6544:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55467,"id":55480,"nodeType":"Return","src":"6506:69:108"}]},"baseFunctions":[56451],"functionSelector":"8489e580","implemented":true,"kind":"function","modifiers":[],"name":"getNextEpoch","nameLocation":"6437:12:108","parameters":{"id":55464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55463,"mutability":"mutable","name":"domain","nameLocation":"6458:6:108","nodeType":"VariableDeclaration","scope":55482,"src":"6450:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55462,"name":"address","nodeType":"ElementaryTypeName","src":"6450:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6449:16:108"},"returnParameters":{"id":55467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55482,"src":"6487:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55465,"name":"uint256","nodeType":"ElementaryTypeName","src":"6487:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6486:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55503,"nodeType":"FunctionDefinition","src":"6588:195:108","nodes":[],"body":{"id":55502,"nodeType":"Block","src":"6681:102:108","nodes":[],"statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55490,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55484,"src":"6726:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55489,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"6710:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6710:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6737:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6710:28:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55496,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55484,"src":"6765:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55495,"name":"getEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"6745:19:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6745:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6775:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6745:31:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6710:66:108","trueExpression":{"hexValue":"30","id":55494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6741:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55488,"id":55501,"nodeType":"Return","src":"6691:85:108"}]},"baseFunctions":[56458],"functionSelector":"2c7785a8","implemented":true,"kind":"function","modifiers":[],"name":"getNextEpochByBlockTime","nameLocation":"6597:23:108","parameters":{"id":55485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55484,"mutability":"mutable","name":"domain","nameLocation":"6638:6:108","nodeType":"VariableDeclaration","scope":55503,"src":"6630:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55483,"name":"address","nodeType":"ElementaryTypeName","src":"6630:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6620:30:108"},"returnParameters":{"id":55488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55487,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55503,"src":"6672:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55486,"name":"uint256","nodeType":"ElementaryTypeName","src":"6672:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6671:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55527,"nodeType":"FunctionDefinition","src":"6849:240:108","nodes":[],"body":{"id":55526,"nodeType":"Block","src":"7010:79:108","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55516,"name":"epochStakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56320,"src":"7027:19:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55518,"indexExpression":{"id":55517,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55505,"src":"7047:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7027:27:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55520,"indexExpression":{"id":55519,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55507,"src":"7055:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7027:34:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55522,"indexExpression":{"id":55521,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55509,"src":"7062:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7027:45:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55524,"indexExpression":{"id":55523,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55511,"src":"7073:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7027:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55515,"id":55525,"nodeType":"Return","src":"7020:62:108"}]},"baseFunctions":[56471],"functionSelector":"8d908258","implemented":true,"kind":"function","modifiers":[],"name":"getStakeAtEpoch","nameLocation":"6858:15:108","parameters":{"id":55512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55505,"mutability":"mutable","name":"domain","nameLocation":"6891:6:108","nodeType":"VariableDeclaration","scope":55527,"src":"6883:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55504,"name":"address","nodeType":"ElementaryTypeName","src":"6883:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55507,"mutability":"mutable","name":"epoch","nameLocation":"6915:5:108","nodeType":"VariableDeclaration","scope":55527,"src":"6907:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55506,"name":"uint256","nodeType":"ElementaryTypeName","src":"6907:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55509,"mutability":"mutable","name":"custodian","nameLocation":"6938:9:108","nodeType":"VariableDeclaration","scope":55527,"src":"6930:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55508,"name":"address","nodeType":"ElementaryTypeName","src":"6930:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55511,"mutability":"mutable","name":"attester","nameLocation":"6965:8:108","nodeType":"VariableDeclaration","scope":55527,"src":"6957:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55510,"name":"address","nodeType":"ElementaryTypeName","src":"6957:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6873:106:108"},"returnParameters":{"id":55515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55514,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55527,"src":"7001:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55513,"name":"uint256","nodeType":"ElementaryTypeName","src":"7001:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7000:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55548,"nodeType":"FunctionDefinition","src":"7159:326:108","nodes":[],"body":{"id":55547,"nodeType":"Block","src":"7302:183:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":55539,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55529,"src":"7364:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55541,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55529,"src":"7404:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55540,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"7388:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7388:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55543,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55531,"src":"7429:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55544,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55533,"src":"7456:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55538,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"7331:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7331:147:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55537,"id":55546,"nodeType":"Return","src":"7312:166:108"}]},"baseFunctions":[56482],"functionSelector":"70224360","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentEpochStake","nameLocation":"7168:20:108","parameters":{"id":55534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55529,"mutability":"mutable","name":"domain","nameLocation":"7206:6:108","nodeType":"VariableDeclaration","scope":55548,"src":"7198:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55528,"name":"address","nodeType":"ElementaryTypeName","src":"7198:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55531,"mutability":"mutable","name":"custodian","nameLocation":"7230:9:108","nodeType":"VariableDeclaration","scope":55548,"src":"7222:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55530,"name":"address","nodeType":"ElementaryTypeName","src":"7222:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55533,"mutability":"mutable","name":"attester","nameLocation":"7257:8:108","nodeType":"VariableDeclaration","scope":55548,"src":"7249:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55532,"name":"address","nodeType":"ElementaryTypeName","src":"7249:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7188:83:108"},"returnParameters":{"id":55537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55536,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55548,"src":"7293:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55535,"name":"uint256","nodeType":"ElementaryTypeName","src":"7293:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7292:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55572,"nodeType":"FunctionDefinition","src":"7553:244:108","nodes":[],"body":{"id":55571,"nodeType":"Block","src":"7716:81:108","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55561,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56330,"src":"7733:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55563,"indexExpression":{"id":55562,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55550,"src":"7755:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7733:29:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55565,"indexExpression":{"id":55564,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55552,"src":"7763:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7733:36:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55567,"indexExpression":{"id":55566,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55554,"src":"7770:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7733:47:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55569,"indexExpression":{"id":55568,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55556,"src":"7781:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7733:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55560,"id":55570,"nodeType":"Return","src":"7726:64:108"}]},"baseFunctions":[56495],"functionSelector":"879b938b","implemented":true,"kind":"function","modifiers":[],"name":"getUnstakeAtEpoch","nameLocation":"7562:17:108","parameters":{"id":55557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55550,"mutability":"mutable","name":"domain","nameLocation":"7597:6:108","nodeType":"VariableDeclaration","scope":55572,"src":"7589:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55549,"name":"address","nodeType":"ElementaryTypeName","src":"7589:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55552,"mutability":"mutable","name":"epoch","nameLocation":"7621:5:108","nodeType":"VariableDeclaration","scope":55572,"src":"7613:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55551,"name":"uint256","nodeType":"ElementaryTypeName","src":"7613:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55554,"mutability":"mutable","name":"custodian","nameLocation":"7644:9:108","nodeType":"VariableDeclaration","scope":55572,"src":"7636:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55553,"name":"address","nodeType":"ElementaryTypeName","src":"7636:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55556,"mutability":"mutable","name":"attester","nameLocation":"7671:8:108","nodeType":"VariableDeclaration","scope":55572,"src":"7663:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55555,"name":"address","nodeType":"ElementaryTypeName","src":"7663:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7579:106:108"},"returnParameters":{"id":55560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55559,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55572,"src":"7707:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55558,"name":"uint256","nodeType":"ElementaryTypeName","src":"7707:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7706:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55593,"nodeType":"FunctionDefinition","src":"7869:330:108","nodes":[],"body":{"id":55592,"nodeType":"Block","src":"8014:185:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":55584,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55574,"src":"8078:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55586,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55574,"src":"8118:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55585,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"8102:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8102:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55588,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55576,"src":"8143:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55589,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55578,"src":"8170:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55583,"name":"getUnstakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55572,"src":"8043:17:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8043:149:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55582,"id":55591,"nodeType":"Return","src":"8024:168:108"}]},"baseFunctions":[56506],"functionSelector":"7667b76d","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentEpochUnstake","nameLocation":"7878:22:108","parameters":{"id":55579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55574,"mutability":"mutable","name":"domain","nameLocation":"7918:6:108","nodeType":"VariableDeclaration","scope":55593,"src":"7910:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55573,"name":"address","nodeType":"ElementaryTypeName","src":"7910:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55576,"mutability":"mutable","name":"custodian","nameLocation":"7942:9:108","nodeType":"VariableDeclaration","scope":55593,"src":"7934:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55575,"name":"address","nodeType":"ElementaryTypeName","src":"7934:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55578,"mutability":"mutable","name":"attester","nameLocation":"7969:8:108","nodeType":"VariableDeclaration","scope":55593,"src":"7961:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55577,"name":"address","nodeType":"ElementaryTypeName","src":"7961:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7900:83:108"},"returnParameters":{"id":55582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55581,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55593,"src":"8005:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55580,"name":"uint256","nodeType":"ElementaryTypeName","src":"8005:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8004:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55613,"nodeType":"FunctionDefinition","src":"8251:214:108","nodes":[],"body":{"id":55612,"nodeType":"Block","src":"8392:73:108","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55604,"name":"epochTotalStakeByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56338,"src":"8409:23:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":55606,"indexExpression":{"id":55605,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55595,"src":"8433:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8409:31:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":55608,"indexExpression":{"id":55607,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55597,"src":"8441:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8409:38:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55610,"indexExpression":{"id":55609,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55599,"src":"8448:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8409:49:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55603,"id":55611,"nodeType":"Return","src":"8402:56:108"}]},"baseFunctions":[56517],"functionSelector":"5cdf3155","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStakeForEpoch","nameLocation":"8260:21:108","parameters":{"id":55600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55595,"mutability":"mutable","name":"domain","nameLocation":"8299:6:108","nodeType":"VariableDeclaration","scope":55613,"src":"8291:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55594,"name":"address","nodeType":"ElementaryTypeName","src":"8291:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55597,"mutability":"mutable","name":"epoch","nameLocation":"8323:5:108","nodeType":"VariableDeclaration","scope":55613,"src":"8315:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55596,"name":"uint256","nodeType":"ElementaryTypeName","src":"8315:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55599,"mutability":"mutable","name":"custodian","nameLocation":"8346:9:108","nodeType":"VariableDeclaration","scope":55613,"src":"8338:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55598,"name":"address","nodeType":"ElementaryTypeName","src":"8338:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8281:80:108"},"returnParameters":{"id":55603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55602,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55613,"src":"8383:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55601,"name":"uint256","nodeType":"ElementaryTypeName","src":"8383:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8382:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55631,"nodeType":"FunctionDefinition","src":"8521:226:108","nodes":[],"body":{"id":55630,"nodeType":"Block","src":"8646:101:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":55623,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55615,"src":"8697:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55625,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55615,"src":"8721:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55624,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"8705:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8705:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55627,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55617,"src":"8730:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55622,"name":"getTotalStakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55613,"src":"8675:21:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view returns (uint256)"}},"id":55628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8675:65:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55621,"id":55629,"nodeType":"Return","src":"8656:84:108"}]},"baseFunctions":[56526],"functionSelector":"44198e4d","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStakeForCurrentEpoch","nameLocation":"8530:28:108","parameters":{"id":55618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55615,"mutability":"mutable","name":"domain","nameLocation":"8576:6:108","nodeType":"VariableDeclaration","scope":55631,"src":"8568:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55614,"name":"address","nodeType":"ElementaryTypeName","src":"8568:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55617,"mutability":"mutable","name":"custodian","nameLocation":"8600:9:108","nodeType":"VariableDeclaration","scope":55631,"src":"8592:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55616,"name":"address","nodeType":"ElementaryTypeName","src":"8592:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8558:57:108"},"returnParameters":{"id":55621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55620,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55631,"src":"8637:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55619,"name":"uint256","nodeType":"ElementaryTypeName","src":"8637:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8636:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55718,"nodeType":"FunctionDefinition","src":"8786:1661:108","nodes":[],"body":{"id":55717,"nodeType":"Block","src":"8915:1532:108","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":55648,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9008:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9012:6:108","memberName":"sender","nodeType":"MemberAccess","src":"9008:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":55644,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"8978:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55646,"indexExpression":{"id":55645,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55633,"src":"8996:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8978:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55647,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9004:3:108","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":46678,"src":"8978:29:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$46651_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":55650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8978:41:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55651,"nodeType":"ExpressionStatement","src":"8978:41:108"},{"assignments":[55653],"declarations":[{"constant":false,"id":55653,"mutability":"mutable","name":"balanceBefore","nameLocation":"9391:13:108","nodeType":"VariableDeclaration","scope":55717,"src":"9383:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55652,"name":"uint256","nodeType":"ElementaryTypeName","src":"9383:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55661,"initialValue":{"arguments":[{"arguments":[{"id":55658,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9431:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":55657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9423:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55656,"name":"address","nodeType":"ElementaryTypeName","src":"9423:7:108","typeDescriptions":{}}},"id":55659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9423:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":55654,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"9407:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":55655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9413:9:108","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43620,"src":"9407:15:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":55660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9407:30:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9383:54:108"},{"expression":{"arguments":[{"expression":{"id":55665,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9741:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9745:6:108","memberName":"sender","nodeType":"MemberAccess","src":"9741:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55669,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9761:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":55668,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9753:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55667,"name":"address","nodeType":"ElementaryTypeName","src":"9753:7:108","typeDescriptions":{}}},"id":55670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9753:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55671,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55638,"src":"9768:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":55662,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55636,"src":"9718:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":55664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9728:12:108","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43662,"src":"9718:22:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":55672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9718:57:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55673,"nodeType":"ExpressionStatement","src":"9718:57:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":55678,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9898:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":55677,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9890:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55676,"name":"address","nodeType":"ElementaryTypeName","src":"9890:7:108","typeDescriptions":{}}},"id":55679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9890:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":55674,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"9874:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":55675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9880:9:108","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43620,"src":"9874:15:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":55680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9874:30:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55681,"name":"balanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55653,"src":"9908:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":55682,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55638,"src":"9924:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9908:22:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9874:56:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55688,"nodeType":"IfStatement","src":"9870:114:108","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":55685,"name":"CustodianTransferAmountMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56635,"src":"9951:31:108","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":55686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9951:33:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":55687,"nodeType":"RevertStatement","src":"9944:40:108"}},{"expression":{"arguments":[{"id":55690,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55633,"src":"10074:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55692,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55633,"src":"10118:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55691,"name":"getNextEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55503,"src":"10094:23:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10094:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":55696,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55636,"src":"10147:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":55695,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10139:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55694,"name":"address","nodeType":"ElementaryTypeName","src":"10139:7:108","typeDescriptions":{}}},"id":55697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10139:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55698,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10171:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10175:6:108","memberName":"sender","nodeType":"MemberAccess","src":"10171:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55700,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55638,"src":"10195:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55689,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55320,"src":"10051:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10051:160:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55702,"nodeType":"ExpressionStatement","src":"10051:160:108"},{"eventCall":{"arguments":[{"id":55704,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55633,"src":"10314:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55706,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55633,"src":"10347:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55705,"name":"getNextEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55482,"src":"10334:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10334:20:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":55710,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55636,"src":"10376:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":55709,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10368:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55708,"name":"address","nodeType":"ElementaryTypeName","src":"10368:7:108","typeDescriptions":{}}},"id":55711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10368:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55712,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10400:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10404:6:108","memberName":"sender","nodeType":"MemberAccess","src":"10400:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55714,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55638,"src":"10424:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55703,"name":"AttesterStaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56601,"src":"10286:14:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10286:154:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55716,"nodeType":"EmitStatement","src":"10281:159:108"}]},"baseFunctions":[56536],"functionSelector":"bf6eac2f","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":55641,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56347,"src":"8899:14:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":55642,"kind":"modifierInvocation","modifierName":{"id":55640,"name":"onlyRole","nameLocations":["8890:8:108"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"8890:8:108"},"nodeType":"ModifierInvocation","src":"8890:24:108"}],"name":"stake","nameLocation":"8795:5:108","parameters":{"id":55639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55633,"mutability":"mutable","name":"domain","nameLocation":"8818:6:108","nodeType":"VariableDeclaration","scope":55718,"src":"8810:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55632,"name":"address","nodeType":"ElementaryTypeName","src":"8810:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55636,"mutability":"mutable","name":"custodian","nameLocation":"8841:9:108","nodeType":"VariableDeclaration","scope":55718,"src":"8834:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"},"typeName":{"id":55635,"nodeType":"UserDefinedTypeName","pathNode":{"id":55634,"name":"IERC20","nameLocations":["8834:6:108"],"nodeType":"IdentifierPath","referencedDeclaration":43663,"src":"8834:6:108"},"referencedDeclaration":43663,"src":"8834:6:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":55638,"mutability":"mutable","name":"amount","nameLocation":"8868:6:108","nodeType":"VariableDeclaration","scope":55718,"src":"8860:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55637,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8800:80:108"},"returnParameters":{"id":55643,"nodeType":"ParameterList","parameters":[],"src":"8915:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55753,"nodeType":"FunctionDefinition","src":"10498:786:108","nodes":[],"body":{"id":55752,"nodeType":"Block","src":"10630:654:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":55731,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55720,"src":"10986:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55733,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55720,"src":"11030:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55732,"name":"getNextEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55503,"src":"11006:23:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11006:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55735,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55722,"src":"11051:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55736,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11074:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11078:6:108","memberName":"sender","nodeType":"MemberAccess","src":"11074:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55738,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55724,"src":"11098:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55730,"name":"_addUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55382,"src":"10961:11:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10961:153:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55740,"nodeType":"ExpressionStatement","src":"10961:153:108"},{"eventCall":{"arguments":[{"id":55742,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55720,"src":"11160:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55744,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55720,"src":"11193:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55743,"name":"getNextEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55482,"src":"11180:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11180:20:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55746,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55722,"src":"11214:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55747,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11237:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11241:6:108","memberName":"sender","nodeType":"MemberAccess","src":"11237:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55749,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55724,"src":"11261:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55741,"name":"AttesterUnstaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56613,"src":"11130:16:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11130:147:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55751,"nodeType":"EmitStatement","src":"11125:152:108"}]},"baseFunctions":[56545],"functionSelector":"60829f8a","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":55727,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56347,"src":"10614:14:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":55728,"kind":"modifierInvocation","modifierName":{"id":55726,"name":"onlyRole","nameLocations":["10605:8:108"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"10605:8:108"},"nodeType":"ModifierInvocation","src":"10605:24:108"}],"name":"unstake","nameLocation":"10507:7:108","parameters":{"id":55725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55720,"mutability":"mutable","name":"domain","nameLocation":"10532:6:108","nodeType":"VariableDeclaration","scope":55753,"src":"10524:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55719,"name":"address","nodeType":"ElementaryTypeName","src":"10524:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55722,"mutability":"mutable","name":"custodian","nameLocation":"10556:9:108","nodeType":"VariableDeclaration","scope":55753,"src":"10548:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55721,"name":"address","nodeType":"ElementaryTypeName","src":"10548:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55724,"mutability":"mutable","name":"amount","nameLocation":"10583:6:108","nodeType":"VariableDeclaration","scope":55753,"src":"10575:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55723,"name":"uint256","nodeType":"ElementaryTypeName","src":"10575:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10514:81:108"},"returnParameters":{"id":55729,"nodeType":"ParameterList","parameters":[],"src":"10630:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55828,"nodeType":"FunctionDefinition","src":"11351:1340:108","nodes":[],"body":{"id":55827,"nodeType":"Block","src":"11499:1192:108","nodes":[],"statements":[{"assignments":[55765],"declarations":[{"constant":false,"id":55765,"mutability":"mutable","name":"stakeAmount","nameLocation":"11604:11:108","nodeType":"VariableDeclaration","scope":55827,"src":"11596:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55764,"name":"uint256","nodeType":"ElementaryTypeName","src":"11596:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55772,"initialValue":{"arguments":[{"id":55767,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55755,"src":"11647:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55768,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55757,"src":"11667:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55769,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55759,"src":"11692:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55770,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55761,"src":"11715:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55766,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"11618:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11618:115:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11596:137:108"},{"assignments":[55774],"declarations":[{"constant":false,"id":55774,"mutability":"mutable","name":"unstakeAmount","nameLocation":"11751:13:108","nodeType":"VariableDeclaration","scope":55827,"src":"11743:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55773,"name":"uint256","nodeType":"ElementaryTypeName","src":"11743:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55783,"initialValue":{"arguments":[{"id":55776,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55755,"src":"11798:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55777,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55757,"src":"11818:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11832:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11818:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55780,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55759,"src":"11847:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55781,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55761,"src":"11870:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55775,"name":"getUnstakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55572,"src":"11767:17:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11767:121:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11743:145:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55784,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55774,"src":"11902:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":55785,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55765,"src":"11918:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11902:27:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55792,"nodeType":"IfStatement","src":"11898:85:108","trueBody":{"id":55791,"nodeType":"Block","src":"11931:52:108","statements":[{"expression":{"id":55789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55787,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55774,"src":"11945:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55788,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55765,"src":"11961:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11945:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55790,"nodeType":"ExpressionStatement","src":"11945:27:108"}]}},{"assignments":[55794],"declarations":[{"constant":false,"id":55794,"mutability":"mutable","name":"remainder","nameLocation":"12000:9:108","nodeType":"VariableDeclaration","scope":55827,"src":"11992:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55793,"name":"uint256","nodeType":"ElementaryTypeName","src":"11992:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55798,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55795,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55765,"src":"12012:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":55796,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55774,"src":"12026:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12012:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11992:47:108"},{"expression":{"arguments":[{"id":55800,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55755,"src":"12060:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55801,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55757,"src":"12068:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12082:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12068:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55804,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55759,"src":"12085:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55805,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55761,"src":"12096:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55806,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55794,"src":"12106:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55799,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55320,"src":"12050:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12050:66:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55808,"nodeType":"ExpressionStatement","src":"12050:66:108"},{"expression":{"arguments":[{"arguments":[{"id":55812,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12471:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":55811,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12463:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55810,"name":"address","nodeType":"ElementaryTypeName","src":"12463:7:108","typeDescriptions":{}}},"id":55813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12463:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55814,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55761,"src":"12478:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55815,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55759,"src":"12488:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55816,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55774,"src":"12499:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55809,"name":"_payAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56203,"src":"12450:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":55817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12450:63:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55818,"nodeType":"ExpressionStatement","src":"12450:63:108"},{"eventCall":{"arguments":[{"id":55820,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55761,"src":"12566:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55821,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55757,"src":"12588:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55822,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55759,"src":"12613:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55823,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55765,"src":"12636:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55824,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55774,"src":"12661:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55819,"name":"AttesterEpochRolledOver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56625,"src":"12529:23:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,uint256,uint256)"}},"id":55825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12529:155:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55826,"nodeType":"EmitStatement","src":"12524:160:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_rollOverAttester","nameLocation":"11360:17:108","parameters":{"id":55762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55755,"mutability":"mutable","name":"domain","nameLocation":"11395:6:108","nodeType":"VariableDeclaration","scope":55828,"src":"11387:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55754,"name":"address","nodeType":"ElementaryTypeName","src":"11387:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55757,"mutability":"mutable","name":"epochNumber","nameLocation":"11419:11:108","nodeType":"VariableDeclaration","scope":55828,"src":"11411:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55756,"name":"uint256","nodeType":"ElementaryTypeName","src":"11411:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55759,"mutability":"mutable","name":"custodian","nameLocation":"11448:9:108","nodeType":"VariableDeclaration","scope":55828,"src":"11440:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55758,"name":"address","nodeType":"ElementaryTypeName","src":"11440:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55761,"mutability":"mutable","name":"attester","nameLocation":"11475:8:108","nodeType":"VariableDeclaration","scope":55828,"src":"11467:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55760,"name":"address","nodeType":"ElementaryTypeName","src":"11467:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11377:112:108"},"returnParameters":{"id":55763,"nodeType":"ParameterList","parameters":[],"src":"11499:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55906,"nodeType":"FunctionDefinition","src":"12697:761:108","nodes":[],"body":{"id":55905,"nodeType":"Block","src":"12767:691:108","nodes":[],"statements":[{"body":{"id":55890,"nodeType":"Block","src":"12986:318:108","statements":[{"assignments":[55850],"declarations":[{"constant":false,"id":55850,"mutability":"mutable","name":"attester","nameLocation":"13008:8:108","nodeType":"VariableDeclaration","scope":55890,"src":"13000:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55849,"name":"address","nodeType":"ElementaryTypeName","src":"13000:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55857,"initialValue":{"arguments":[{"id":55855,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55836,"src":"13048:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55851,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"13019:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55853,"indexExpression":{"id":55852,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13037:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13019:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55854,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13045:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"13019:28:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13019:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"13000:50:108"},{"body":{"id":55888,"nodeType":"Block","src":"13131:163:108","statements":[{"assignments":[55873],"declarations":[{"constant":false,"id":55873,"mutability":"mutable","name":"custodian","nameLocation":"13157:9:108","nodeType":"VariableDeclaration","scope":55888,"src":"13149:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55872,"name":"address","nodeType":"ElementaryTypeName","src":"13149:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55880,"initialValue":{"arguments":[{"id":55878,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55859,"src":"13199:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55874,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"13169:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55876,"indexExpression":{"id":55875,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13188:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13169:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55877,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13196:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"13169:29:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13169:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"13149:52:108"},{"expression":{"arguments":[{"id":55882,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13238:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55883,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55832,"src":"13246:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55884,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55873,"src":"13259:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55885,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55850,"src":"13270:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55881,"name":"_rollOverAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55828,"src":"13220:17:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,uint256,address,address)"}},"id":55886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13220:59:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55887,"nodeType":"ExpressionStatement","src":"13220:59:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55862,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55859,"src":"13085:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55863,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"13089:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55865,"indexExpression":{"id":55864,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13108:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13089:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13116:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"13089:33:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13089:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13085:39:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55889,"initializationExpression":{"assignments":[55859],"declarations":[{"constant":false,"id":55859,"mutability":"mutable","name":"j","nameLocation":"13078:1:108","nodeType":"VariableDeclaration","scope":55889,"src":"13070:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55858,"name":"uint256","nodeType":"ElementaryTypeName","src":"13070:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55861,"initialValue":{"hexValue":"30","id":55860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13082:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13070:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13126:3:108","subExpression":{"id":55869,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55859,"src":"13126:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55871,"nodeType":"ExpressionStatement","src":"13126:3:108"},"nodeType":"ForStatement","src":"13065:229:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55839,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55836,"src":"12941:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55840,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"12945:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55842,"indexExpression":{"id":55841,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"12963:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12945:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55843,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12971:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"12945:32:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12945:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12941:38:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55891,"initializationExpression":{"assignments":[55836],"declarations":[{"constant":false,"id":55836,"mutability":"mutable","name":"i","nameLocation":"12934:1:108","nodeType":"VariableDeclaration","scope":55891,"src":"12926:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55835,"name":"uint256","nodeType":"ElementaryTypeName","src":"12926:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55838,"initialValue":{"hexValue":"30","id":55837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12938:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12926:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12981:3:108","subExpression":{"id":55846,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55836,"src":"12981:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55848,"nodeType":"ExpressionStatement","src":"12981:3:108"},"nodeType":"ForStatement","src":"12921:383:108"},{"expression":{"id":55898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55892,"name":"currentEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56300,"src":"13353:20:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55894,"indexExpression":{"id":55893,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13374:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13353:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55895,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55832,"src":"13384:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13398:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13384:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13353:46:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55899,"nodeType":"ExpressionStatement","src":"13353:46:108"},{"eventCall":{"arguments":[{"id":55901,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13431:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55902,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55832,"src":"13439:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55900,"name":"EpochRolledOver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56631,"src":"13415:15:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":55903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13415:36:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55904,"nodeType":"EmitStatement","src":"13410:41:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_rollOverEpoch","nameLocation":"12706:14:108","parameters":{"id":55833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55830,"mutability":"mutable","name":"domain","nameLocation":"12729:6:108","nodeType":"VariableDeclaration","scope":55906,"src":"12721:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55829,"name":"address","nodeType":"ElementaryTypeName","src":"12721:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55832,"mutability":"mutable","name":"epochNumber","nameLocation":"12745:11:108","nodeType":"VariableDeclaration","scope":55906,"src":"12737:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55831,"name":"uint256","nodeType":"ElementaryTypeName","src":"12737:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12720:37:108"},"returnParameters":{"id":55834,"nodeType":"ParameterList","parameters":[],"src":"12767:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55919,"nodeType":"FunctionDefinition","src":"13464:106:108","nodes":[],"body":{"id":55918,"nodeType":"Block","src":"13498:72:108","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":55910,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13523:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13527:6:108","memberName":"sender","nodeType":"MemberAccess","src":"13523:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":55913,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13551:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13555:6:108","memberName":"sender","nodeType":"MemberAccess","src":"13551:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55912,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"13535:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13535:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55909,"name":"_rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55906,"src":"13508:14:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":55916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13508:55:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55917,"nodeType":"ExpressionStatement","src":"13508:55:108"}]},"baseFunctions":[56564],"functionSelector":"a887b71c","implemented":true,"kind":"function","modifiers":[],"name":"rollOverEpoch","nameLocation":"13473:13:108","parameters":{"id":55907,"nodeType":"ParameterList","parameters":[],"src":"13486:2:108"},"returnParameters":{"id":55908,"nodeType":"ParameterList","parameters":[],"src":"13498:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55969,"nodeType":"FunctionDefinition","src":"13877:803:108","nodes":[],"body":{"id":55968,"nodeType":"Block","src":"14037:643:108","nodes":[],"statements":[{"assignments":[55934],"declarations":[{"constant":false,"id":55934,"mutability":"mutable","name":"targetEpoch","nameLocation":"14108:11:108","nodeType":"VariableDeclaration","scope":55968,"src":"14100:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55933,"name":"uint256","nodeType":"ElementaryTypeName","src":"14100:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55936,"initialValue":{"id":55935,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55924,"src":"14122:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14100:27:108"},{"assignments":[55938],"declarations":[{"constant":false,"id":55938,"mutability":"mutable","name":"stakeForEpoch","nameLocation":"14145:13:108","nodeType":"VariableDeclaration","scope":55968,"src":"14137:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55937,"name":"uint256","nodeType":"ElementaryTypeName","src":"14137:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55945,"initialValue":{"arguments":[{"id":55940,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55922,"src":"14190:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55941,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55934,"src":"14210:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55942,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55926,"src":"14235:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55943,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55928,"src":"14258:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55939,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"14161:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14161:115:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14137:139:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55946,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55938,"src":"14369:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":55947,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"14385:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14369:22:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":55966,"nodeType":"Block","src":"14587:87:108","statements":[{"expression":{"arguments":[{"id":55959,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55922,"src":"14614:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55960,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55934,"src":"14622:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55961,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55926,"src":"14635:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55962,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55928,"src":"14646:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55963,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"14656:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55958,"name":"_removeStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55356,"src":"14601:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14601:62:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55965,"nodeType":"ExpressionStatement","src":"14601:62:108"}]},"id":55967,"nodeType":"IfStatement","src":"14365:309:108","trueBody":{"id":55957,"nodeType":"Block","src":"14393:188:108","statements":[{"expression":{"arguments":[{"id":55950,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55922,"src":"14437:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55951,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55934,"src":"14461:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55952,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55926,"src":"14490:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55953,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55928,"src":"14517:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55954,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55938,"src":"14543:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55949,"name":"_removeStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55356,"src":"14407:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14407:163:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55956,"nodeType":"ExpressionStatement","src":"14407:163:108"}]}}]},"documentation":{"id":55920,"nodeType":"StructuredDocumentation","src":"13576:296:108","text":" @dev Slash an attester's stake\n @param domain The domain of the attester\n @param epoch The epoch in which the slash is attempted\n @param custodian The custodian of the token\n @param attester The attester to slash\n @param amount The amount to slash"},"implemented":true,"kind":"function","modifiers":[],"name":"_slashStake","nameLocation":"13886:11:108","parameters":{"id":55931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55922,"mutability":"mutable","name":"domain","nameLocation":"13915:6:108","nodeType":"VariableDeclaration","scope":55969,"src":"13907:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55921,"name":"address","nodeType":"ElementaryTypeName","src":"13907:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55924,"mutability":"mutable","name":"epoch","nameLocation":"13939:5:108","nodeType":"VariableDeclaration","scope":55969,"src":"13931:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55923,"name":"uint256","nodeType":"ElementaryTypeName","src":"13931:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55926,"mutability":"mutable","name":"custodian","nameLocation":"13962:9:108","nodeType":"VariableDeclaration","scope":55969,"src":"13954:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55925,"name":"address","nodeType":"ElementaryTypeName","src":"13954:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55928,"mutability":"mutable","name":"attester","nameLocation":"13989:8:108","nodeType":"VariableDeclaration","scope":55969,"src":"13981:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55927,"name":"address","nodeType":"ElementaryTypeName","src":"13981:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55930,"mutability":"mutable","name":"amount","nameLocation":"14015:6:108","nodeType":"VariableDeclaration","scope":55969,"src":"14007:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55929,"name":"uint256","nodeType":"ElementaryTypeName","src":"14007:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13897:130:108"},"returnParameters":{"id":55932,"nodeType":"ParameterList","parameters":[],"src":"14037:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":56019,"nodeType":"FunctionDefinition","src":"15012:902:108","nodes":[],"body":{"id":56018,"nodeType":"Block","src":"15150:764:108","nodes":[],"statements":[{"assignments":[55982],"declarations":[{"constant":false,"id":55982,"mutability":"mutable","name":"stakeForEpoch","nameLocation":"15227:13:108","nodeType":"VariableDeclaration","scope":56018,"src":"15219:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55981,"name":"uint256","nodeType":"ElementaryTypeName","src":"15219:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55989,"initialValue":{"arguments":[{"id":55984,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55972,"src":"15272:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55985,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55974,"src":"15292:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55986,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55976,"src":"15311:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55987,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55978,"src":"15334:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55983,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"15243:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15243:109:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15219:133:108"},{"assignments":[55991],"declarations":[{"constant":false,"id":55991,"mutability":"mutable","name":"targetEpoch","nameLocation":"15370:11:108","nodeType":"VariableDeclaration","scope":56018,"src":"15362:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55990,"name":"uint256","nodeType":"ElementaryTypeName","src":"15362:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55995,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55992,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55974,"src":"15384:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15392:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15384:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15362:31:108"},{"assignments":[55997],"declarations":[{"constant":false,"id":55997,"mutability":"mutable","name":"unstakeForEpoch","nameLocation":"15411:15:108","nodeType":"VariableDeclaration","scope":56018,"src":"15403:23:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55996,"name":"uint256","nodeType":"ElementaryTypeName","src":"15403:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56004,"initialValue":{"arguments":[{"id":55999,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55972,"src":"15460:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56000,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55991,"src":"15480:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56001,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55976,"src":"15505:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56002,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55978,"src":"15528:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55998,"name":"getUnstakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55572,"src":"15429:17:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":56003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15429:117:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15403:143:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56005,"name":"unstakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55997,"src":"15561:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":56006,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"15579:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15561:31:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56017,"nodeType":"IfStatement","src":"15557:351:108","trueBody":{"id":56016,"nodeType":"Block","src":"15594:314:108","statements":[{"expression":{"arguments":[{"id":56009,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55972,"src":"15764:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56010,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55991,"src":"15788:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56011,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55976,"src":"15817:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56012,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55978,"src":"15844:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56013,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"15870:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56008,"name":"_setUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55434,"src":"15735:11:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":56014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15735:162:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56015,"nodeType":"ExpressionStatement","src":"15735:162:108"}]}}]},"documentation":{"id":55970,"nodeType":"StructuredDocumentation","src":"14686:321:108","text":" @dev Slash an attester's unstake\n @param domain The domain of the attester\n @param epoch The epoch in which the slash is attempted, i.e., epoch - 1 of the epoch where the unstake will be removed\n @param custodian The custodian of the token\n @param attester The attester to slash"},"implemented":true,"kind":"function","modifiers":[],"name":"_slashUnstake","nameLocation":"15021:13:108","parameters":{"id":55979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55972,"mutability":"mutable","name":"domain","nameLocation":"15052:6:108","nodeType":"VariableDeclaration","scope":56019,"src":"15044:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55971,"name":"address","nodeType":"ElementaryTypeName","src":"15044:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55974,"mutability":"mutable","name":"epoch","nameLocation":"15076:5:108","nodeType":"VariableDeclaration","scope":56019,"src":"15068:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55973,"name":"uint256","nodeType":"ElementaryTypeName","src":"15068:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55976,"mutability":"mutable","name":"custodian","nameLocation":"15099:9:108","nodeType":"VariableDeclaration","scope":56019,"src":"15091:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55975,"name":"address","nodeType":"ElementaryTypeName","src":"15091:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55978,"mutability":"mutable","name":"attester","nameLocation":"15126:8:108","nodeType":"VariableDeclaration","scope":56019,"src":"15118:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55977,"name":"address","nodeType":"ElementaryTypeName","src":"15118:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15034:106:108"},"returnParameters":{"id":55980,"nodeType":"ParameterList","parameters":[],"src":"15150:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":56125,"nodeType":"FunctionDefinition","src":"15920:1564:108","nodes":[],"body":{"id":56124,"nodeType":"Block","src":"16103:1381:108","nodes":[],"statements":[{"body":{"id":56122,"nodeType":"Block","src":"16160:1318:108","statements":[{"assignments":[56046],"declarations":[{"constant":false,"id":56046,"mutability":"mutable","name":"refundAmount","nameLocation":"16409:12:108","nodeType":"VariableDeclaration","scope":56122,"src":"16401:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56045,"name":"uint256","nodeType":"ElementaryTypeName","src":"16401:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56074,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":56050,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16487:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16491:6:108","memberName":"sender","nodeType":"MemberAccess","src":"16487:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":56053,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"16535:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56055,"indexExpression":{"id":56054,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16545:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16535:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56052,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"16519:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":56056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16519:29:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56057,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56022,"src":"16570:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56059,"indexExpression":{"id":56058,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16581:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16570:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56060,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"16605:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56062,"indexExpression":{"id":56061,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16615:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16605:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56049,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"16450:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":56063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16450:185:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"baseExpression":{"id":56066,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56028,"src":"16662:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56068,"indexExpression":{"id":56067,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16670:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16662:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56069,"name":"refundAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56031,"src":"16674:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56071,"indexExpression":{"id":56070,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16688:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16674:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56064,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46220,"src":"16653:4:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$46220_$","typeString":"type(library Math)"}},"id":56065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16658:3:108","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":45371,"src":"16653:8:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":56072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16653:38:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56047,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46220,"src":"16424:4:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$46220_$","typeString":"type(library Math)"}},"id":56048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16429:3:108","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":45371,"src":"16424:8:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":56073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16424:281:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16401:304:108"},{"expression":{"arguments":[{"arguments":[{"id":56078,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16757:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":56077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16749:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56076,"name":"address","nodeType":"ElementaryTypeName","src":"16749:7:108","typeDescriptions":{}}},"id":56079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16749:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56080,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"16858:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56082,"indexExpression":{"id":56081,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16868:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16858:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56083,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56022,"src":"16888:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56085,"indexExpression":{"id":56084,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16899:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16888:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56086,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56046,"src":"16919:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56075,"name":"_payAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56203,"src":"16719:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":56087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16719:226:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56088,"nodeType":"ExpressionStatement","src":"16719:226:108"},{"expression":{"arguments":[{"expression":{"id":56090,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17133:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17137:6:108","memberName":"sender","nodeType":"MemberAccess","src":"17133:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":56093,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17177:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17181:6:108","memberName":"sender","nodeType":"MemberAccess","src":"17177:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56092,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"17161:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":56095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17161:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56096,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56022,"src":"17206:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56098,"indexExpression":{"id":56097,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"17217:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17206:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56099,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"17237:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56101,"indexExpression":{"id":56100,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"17247:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17237:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56102,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56028,"src":"17267:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56104,"indexExpression":{"id":56103,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"17275:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17267:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56089,"name":"_slashStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55969,"src":"17104:11:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":56105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17104:187:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56106,"nodeType":"ExpressionStatement","src":"17104:187:108"},{"expression":{"arguments":[{"expression":{"id":56108,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17337:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17341:6:108","memberName":"sender","nodeType":"MemberAccess","src":"17337:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":56111,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17381:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17385:6:108","memberName":"sender","nodeType":"MemberAccess","src":"17381:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56110,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"17365:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":56113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17365:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56114,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56022,"src":"17410:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56116,"indexExpression":{"id":56115,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"17421:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17410:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56117,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"17441:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56119,"indexExpression":{"id":56118,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"17451:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17441:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56107,"name":"_slashUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56019,"src":"17306:13:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,uint256,address,address)"}},"id":56120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17306:161:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56121,"nodeType":"ExpressionStatement","src":"17306:161:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56038,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16133:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":56039,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"16137:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16147:6:108","memberName":"length","nodeType":"MemberAccess","src":"16137:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16133:20:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56123,"initializationExpression":{"assignments":[56035],"declarations":[{"constant":false,"id":56035,"mutability":"mutable","name":"i","nameLocation":"16126:1:108","nodeType":"VariableDeclaration","scope":56123,"src":"16118:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56034,"name":"uint256","nodeType":"ElementaryTypeName","src":"16118:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56037,"initialValue":{"hexValue":"30","id":56036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16130:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16118:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":56043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16155:3:108","subExpression":{"id":56042,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16155:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56044,"nodeType":"ExpressionStatement","src":"16155:3:108"},"nodeType":"ForStatement","src":"16113:1365:108"}]},"baseFunctions":[56579],"functionSelector":"a885c975","implemented":true,"kind":"function","modifiers":[],"name":"slash","nameLocation":"15929:5:108","parameters":{"id":56032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56022,"mutability":"mutable","name":"custodians","nameLocation":"15963:10:108","nodeType":"VariableDeclaration","scope":56125,"src":"15944:29:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56020,"name":"address","nodeType":"ElementaryTypeName","src":"15944:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56021,"nodeType":"ArrayTypeName","src":"15944:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":56025,"mutability":"mutable","name":"attesters","nameLocation":"16002:9:108","nodeType":"VariableDeclaration","scope":56125,"src":"15983:28:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56023,"name":"address","nodeType":"ElementaryTypeName","src":"15983:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56024,"nodeType":"ArrayTypeName","src":"15983:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":56028,"mutability":"mutable","name":"amounts","nameLocation":"16040:7:108","nodeType":"VariableDeclaration","scope":56125,"src":"16021:26:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":56026,"name":"uint256","nodeType":"ElementaryTypeName","src":"16021:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56027,"nodeType":"ArrayTypeName","src":"16021:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":56031,"mutability":"mutable","name":"refundAmounts","nameLocation":"16076:13:108","nodeType":"VariableDeclaration","scope":56125,"src":"16057:32:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":56029,"name":"uint256","nodeType":"ElementaryTypeName","src":"16057:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56030,"nodeType":"ArrayTypeName","src":"16057:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15934:161:108"},"returnParameters":{"id":56033,"nodeType":"ParameterList","parameters":[],"src":"16103:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56203,"nodeType":"FunctionDefinition","src":"17490:1535:108","nodes":[],"body":{"id":56202,"nodeType":"Block","src":"17626:1399:108","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":56141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56136,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56127,"src":"17640:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":56139,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"17656:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":56138,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17648:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56137,"name":"address","nodeType":"ElementaryTypeName","src":"17648:7:108","typeDescriptions":{}}},"id":56140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17648:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17640:21:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":56200,"nodeType":"Block","src":"18201:818:108","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":56179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":56176,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"18583:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":56175,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18575:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56174,"name":"address","nodeType":"ElementaryTypeName","src":"18575:7:108","typeDescriptions":{}}},"id":56177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18575:14:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":56178,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56131,"src":"18593:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18575:27:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":56198,"nodeType":"Block","src":"18761:248:108","statements":[{"expression":{"arguments":[{"id":56193,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56127,"src":"18914:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56194,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56129,"src":"18940:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56195,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"18970:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":56190,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56131,"src":"18860:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56189,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57304,"src":"18844:15:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICustodianToken_$57304_$","typeString":"type(contract ICustodianToken)"}},"id":56191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18844:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICustodianToken_$57304","typeString":"contract ICustodianToken"}},"id":56192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18871:21:108","memberName":"buyCustodialTokenFrom","nodeType":"MemberAccess","referencedDeclaration":57303,"src":"18844:48:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":56196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18844:150:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56197,"nodeType":"ExpressionStatement","src":"18844:150:108"}]},"id":56199,"nodeType":"IfStatement","src":"18571:438:108","trueBody":{"id":56188,"nodeType":"Block","src":"18604:151:108","statements":[{"expression":{"arguments":[{"id":56183,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56127,"src":"18690:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56184,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56129,"src":"18696:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56185,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"18706:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56180,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"18671:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":56182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18677:12:108","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43662,"src":"18671:18:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":56186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18671:42:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56187,"nodeType":"ExpressionStatement","src":"18671:42:108"}]}}]},"id":56201,"nodeType":"IfStatement","src":"17636:1383:108","trueBody":{"id":56173,"nodeType":"Block","src":"17663:532:108","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":56147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":56144,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"17741:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":56143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17733:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56142,"name":"address","nodeType":"ElementaryTypeName","src":"17733:7:108","typeDescriptions":{}}},"id":56145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17733:14:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":56146,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56131,"src":"17751:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17733:27:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":56171,"nodeType":"Block","src":"17909:276:108","statements":[{"expression":{"arguments":[{"id":56159,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56131,"src":"18006:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56160,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"18017:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56156,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"17992:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":56158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17998:7:108","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":43650,"src":"17992:13:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":56161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17992:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56162,"nodeType":"ExpressionStatement","src":"17992:32:108"},{"expression":{"arguments":[{"id":56167,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56129,"src":"18153:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56168,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"18163:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":56164,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56131,"src":"18124:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56163,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57304,"src":"18108:15:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICustodianToken_$57304_$","typeString":"type(contract ICustodianToken)"}},"id":56165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18108:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICustodianToken_$57304","typeString":"contract ICustodianToken"}},"id":56166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18135:17:108","memberName":"buyCustodialToken","nodeType":"MemberAccess","referencedDeclaration":57294,"src":"18108:44:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":56169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18108:62:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56170,"nodeType":"ExpressionStatement","src":"18108:62:108"}]},"id":56172,"nodeType":"IfStatement","src":"17729:456:108","trueBody":{"id":56155,"nodeType":"Block","src":"17762:141:108","statements":[{"expression":{"arguments":[{"id":56151,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56129,"src":"17844:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56152,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"17854:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56148,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"17829:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":56150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17835:8:108","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":43630,"src":"17829:14:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":56153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17829:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56154,"nodeType":"ExpressionStatement","src":"17829:32:108"}]}}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttester","nameLocation":"17499:12:108","parameters":{"id":56134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56127,"mutability":"mutable","name":"from","nameLocation":"17529:4:108","nodeType":"VariableDeclaration","scope":56203,"src":"17521:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56126,"name":"address","nodeType":"ElementaryTypeName","src":"17521:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56129,"mutability":"mutable","name":"attester","nameLocation":"17551:8:108","nodeType":"VariableDeclaration","scope":56203,"src":"17543:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56128,"name":"address","nodeType":"ElementaryTypeName","src":"17543:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56131,"mutability":"mutable","name":"custodian","nameLocation":"17577:9:108","nodeType":"VariableDeclaration","scope":56203,"src":"17569:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56130,"name":"address","nodeType":"ElementaryTypeName","src":"17569:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56133,"mutability":"mutable","name":"amount","nameLocation":"17604:6:108","nodeType":"VariableDeclaration","scope":56203,"src":"17596:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56132,"name":"uint256","nodeType":"ElementaryTypeName","src":"17596:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17511:105:108"},"returnParameters":{"id":56135,"nodeType":"ParameterList","parameters":[],"src":"17626:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":56243,"nodeType":"FunctionDefinition","src":"19031:451:108","nodes":[],"body":{"id":56242,"nodeType":"Block","src":"19173:309:108","nodes":[],"statements":[{"body":{"id":56240,"nodeType":"Block","src":"19354:122:108","statements":[{"expression":{"arguments":[{"expression":{"id":56227,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19413:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19417:6:108","memberName":"sender","nodeType":"MemberAccess","src":"19413:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56229,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56206,"src":"19425:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56231,"indexExpression":{"id":56230,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56216,"src":"19435:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19425:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56232,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56212,"src":"19439:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56234,"indexExpression":{"id":56233,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56216,"src":"19450:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19439:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56235,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56209,"src":"19454:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56237,"indexExpression":{"id":56236,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56216,"src":"19462:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19454:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56226,"name":"_payAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56203,"src":"19400:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":56238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19400:65:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56239,"nodeType":"ExpressionStatement","src":"19400:65:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56219,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56216,"src":"19327:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":56220,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56206,"src":"19331:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19341:6:108","memberName":"length","nodeType":"MemberAccess","src":"19331:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19327:20:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56241,"initializationExpression":{"assignments":[56216],"declarations":[{"constant":false,"id":56216,"mutability":"mutable","name":"i","nameLocation":"19320:1:108","nodeType":"VariableDeclaration","scope":56241,"src":"19312:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56215,"name":"uint256","nodeType":"ElementaryTypeName","src":"19312:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56218,"initialValue":{"hexValue":"30","id":56217,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19324:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"19312:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":56224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19349:3:108","subExpression":{"id":56223,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56216,"src":"19349:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56225,"nodeType":"ExpressionStatement","src":"19349:3:108"},"nodeType":"ForStatement","src":"19307:169:108"}]},"functionSelector":"da33ee7f","implemented":true,"kind":"function","modifiers":[],"name":"reward","nameLocation":"19040:6:108","parameters":{"id":56213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56206,"mutability":"mutable","name":"attesters","nameLocation":"19075:9:108","nodeType":"VariableDeclaration","scope":56243,"src":"19056:28:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56204,"name":"address","nodeType":"ElementaryTypeName","src":"19056:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56205,"nodeType":"ArrayTypeName","src":"19056:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":56209,"mutability":"mutable","name":"amounts","nameLocation":"19113:7:108","nodeType":"VariableDeclaration","scope":56243,"src":"19094:26:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":56207,"name":"uint256","nodeType":"ElementaryTypeName","src":"19094:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56208,"nodeType":"ArrayTypeName","src":"19094:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":56212,"mutability":"mutable","name":"custodians","nameLocation":"19149:10:108","nodeType":"VariableDeclaration","scope":56243,"src":"19130:29:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56210,"name":"address","nodeType":"ElementaryTypeName","src":"19130:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56211,"nodeType":"ArrayTypeName","src":"19130:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"19046:119:108"},"returnParameters":{"id":56214,"nodeType":"ParameterList","parameters":[],"src":"19173:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56257,"nodeType":"FunctionDefinition","src":"19488:140:108","nodes":[],"body":{"id":56256,"nodeType":"Block","src":"19580:48:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":56252,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56347,"src":"19600:14:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":56253,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56245,"src":"19616:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56251,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39213,"src":"19590:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":56254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19590:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56255,"nodeType":"ExpressionStatement","src":"19590:31:108"}]},"baseFunctions":[56584],"functionSelector":"41566585","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":56248,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"19560:18:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":56249,"kind":"modifierInvocation","modifierName":{"id":56247,"name":"onlyRole","nameLocations":["19551:8:108"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"19551:8:108"},"nodeType":"ModifierInvocation","src":"19551:28:108"}],"name":"whitelistAddress","nameLocation":"19497:16:108","parameters":{"id":56246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56245,"mutability":"mutable","name":"addr","nameLocation":"19531:4:108","nodeType":"VariableDeclaration","scope":56257,"src":"19523:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56244,"name":"address","nodeType":"ElementaryTypeName","src":"19523:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19513:28:108"},"returnParameters":{"id":56250,"nodeType":"ParameterList","parameters":[],"src":"19580:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":56271,"nodeType":"FunctionDefinition","src":"19634:151:108","nodes":[],"body":{"id":56270,"nodeType":"Block","src":"19736:49:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":56266,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56347,"src":"19757:14:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":56267,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56259,"src":"19773:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56265,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"19746:10:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":56268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19746:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56269,"nodeType":"ExpressionStatement","src":"19746:32:108"}]},"baseFunctions":[56589],"functionSelector":"286dd3f5","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":56262,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"19716:18:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":56263,"kind":"modifierInvocation","modifierName":{"id":56261,"name":"onlyRole","nameLocations":["19707:8:108"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"19707:8:108"},"nodeType":"ModifierInvocation","src":"19707:28:108"}],"name":"removeAddressFromWhitelist","nameLocation":"19643:26:108","parameters":{"id":56260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56259,"mutability":"mutable","name":"addr","nameLocation":"19687:4:108","nodeType":"VariableDeclaration","scope":56271,"src":"19679:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56258,"name":"address","nodeType":"ElementaryTypeName","src":"19679:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19669:28:108"},"returnParameters":{"id":56264,"nodeType":"ParameterList","parameters":[],"src":"19736:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":54888,"name":"MovementStakingStorage","nameLocations":["623:22:108"],"nodeType":"IdentifierPath","referencedDeclaration":56348,"src":"623:22:108"},"id":54889,"nodeType":"InheritanceSpecifier","src":"623:22:108"},{"baseName":{"id":54890,"name":"IMovementStaking","nameLocations":["651:16:108"],"nodeType":"IdentifierPath","referencedDeclaration":56638,"src":"651:16:108"},"id":54891,"nodeType":"InheritanceSpecifier","src":"651:16:108"},{"baseName":{"id":54892,"name":"BaseStaking","nameLocations":["673:11:108"],"nodeType":"IdentifierPath","referencedDeclaration":56403,"src":"673:11:108"},"id":54893,"nodeType":"InheritanceSpecifier","src":"673:11:108"}],"canonicalName":"MovementStaking","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[56272,56403,39821,42755,39385,41148,45166,41527,40653,39639,56638,56348],"name":"MovementStaking","nameLocation":"600:15:108","scope":56273,"usedErrors":[39402,39405,39666,39671,41454,41457,42965,42978,44073,44076,56633,56635,56637],"usedEvents":[39410,41466,41475,41484,42944,56601,56613,56625,56631]}],"license":"UNLICENSED"},"id":108} \ No newline at end of file diff --git a/protocol/pcp/clients/eth/abis/PCP.json b/protocol/pcp/clients/eth/abis/PCP.json new file mode 100644 index 00000000..8a666980 --- /dev/null +++ b/protocol/pcp/clients/eth/abis/PCP.json @@ -0,0 +1 @@ +{"abi":[{"type":"function","name":"COMMITMENT_ADMIN","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"TRUSTED_ATTESTER","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"acceptGenesisCeremony","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"attesterRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"points","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchGrantCommitmentAdmin","inputs":[{"name":"accounts","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"batchGrantTrustedAttester","inputs":[{"name":"attesters","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitmentFirstSeenAt","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"timestamp","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"commitmentStake","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"commitement","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"commitments","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"createSuperBlockCommitment","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"pure"},{"type":"function","name":"forceLatestCommitment","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStakeForAcceptingEpoch","inputs":[{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCommitmentByAttester","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"getCommitmentFirstSeenAt","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStakeForAcceptingEpoch","inputs":[{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochStartTime","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getLastPostconfirmedSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getMaxTolerableSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getMinCommitmentAgeForPostconfirmation","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextAcceptingEpochWithException","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmedCommitment","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerPrivilegeDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"postconfirmer","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerStartTime","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPresentEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakeForAcceptingEpoch","inputs":[{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakedAttestersForAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getSuperBlockHeightAssignedEpoch","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStakeForAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getValidatorCommitmentAtSuperBlockHeight","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"grantCommitmentAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantTrustedAttester","inputs":[{"name":"attester","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_stakingContract","type":"address","internalType":"contract IMovementStaking"},{"name":"_lastPostconfirmedSuperBlockHeight","type":"uint256","internalType":"uint256"},{"name":"_leadingSuperBlockTolerance","type":"uint256","internalType":"uint256"},{"name":"_epochDuration","type":"uint256","internalType":"uint256"},{"name":"_custodians","type":"address[]","internalType":"address[]"},{"name":"_postconfirmerDuration","type":"uint256","internalType":"uint256"},{"name":"_moveTokenAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isCommitted","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isPostconfirmed","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isWithinPostconfirmerPrivilegeDuration","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"lastPostconfirmedSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"leadingSuperBlockTolerance","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"minCommitmentAgeForPostconfirmation","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"moveTokenAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"openAttestationEnabled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"postconfirmSuperBlocksAndRollover","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"postconfirmedAtL1BlockHeight","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockHeight","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedAtL1BlockHeightByPostconfirmer","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockHeight","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedAtL1BlockTimestamp","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockTimestamp","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedBy","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"attester","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedByPostconfirmer","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedSuperBlocks","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedSuperBlocksVersion","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmerDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmerPrivilegeDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmerRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"postconfirmer","type":"address","internalType":"address"}],"outputs":[{"name":"points","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardPerAttestationPoint","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"rewardPerPostconfirmationPoint","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"setAcceptingEpoch","inputs":[{"name":"newEpoch","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMinCommitmentAgeForPostconfirmation","inputs":[{"name":"_minCommitmentAgeForPostconfirmation","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOpenAttestationEnabled","inputs":[{"name":"enabled","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPostconfirmedCommitmentAtBlockHeight","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPostconfirmerDuration","inputs":[{"name":"_postconfirmerDuration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPostconfirmerPrivilegeDuration","inputs":[{"name":"_postconfirmerPrivilegeDuration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRewardPerAttestationPoint","inputs":[{"name":"rewardPerPoint","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRewardPerPostconfirmationPoint","inputs":[{"name":"rewardPerPoint","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakingContract","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IMovementStaking"}],"stateMutability":"view"},{"type":"function","name":"submitBatchSuperBlockCommitment","inputs":[{"name":"superBlockCommitments","type":"tuple[]","internalType":"struct PCPStorage.SuperBlockCommitment[]","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitSuperBlockCommitment","inputs":[{"name":"commitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"superBlockHeightAssignedEpoch","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epoch","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"versionedPostconfirmedSuperBlocks","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SuperBlockCommitmentSubmitted","inputs":[{"name":"blockHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"stateCommitment","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"attesterStake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SuperBlockPostconfirmed","inputs":[{"name":"blockHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"stateCommitment","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"height","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AttesterAlreadyCommitted","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"PostconfirmerDurationTooLong","inputs":[]},{"type":"error","name":"PostconfirmerDurationTooLongForEpoch","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"UnacceptableSuperBlockCommitment","inputs":[]},{"type":"error","name":"minCommitmentAgeForPostconfirmationTooLong","inputs":[]},{"type":"error","name":"postconfirmerPrivilegeDurationTooLong","inputs":[]}],"bytecode":{"object":"0x60a0604052306080523480156012575f80fd5b50608051613a736100395f395f81816125e10152818161260a015261274b0152613a735ff3fe6080604052600436106104b0575f3560e01c80636c713af81161026d578063bff92c8c1161014a578063e07472ef116100be578063ed8a1d5911610083578063ed8a1d591461102b578063eda67fc41461106c578063ee99205c146110a6578063ef9ae15c146110c4578063f1949add1461092e578063fdafe9ca146110dd575f80fd5b8063e07472ef14610f25578063e4a3fb7414610f5f578063e90d4c0614610f97578063ec18c18614610fdc578063ec23ec2e14610ff1575f80fd5b8063d283392e1161010f578063d283392e14610e52578063d3eef4cc14610e7d578063d440116d14610e92578063d547741f14610eb1578063d783068814610ed0578063da7d28b614610f06575f80fd5b8063bff92c8c14610daa578063c19b406c14610dbf578063cf6772ad14610df5578063d03509ec14610e14578063d2526fef14610e33575f80fd5b806391d14854116101e1578063a217fddf116101a6578063a217fddf14610ce7578063aa0d6fcd14610cfa578063ab208ebd14610d1b578063ad3cb1cc14610d2f578063ba26513e14610d6c578063bb04bd2f14610d8b575f80fd5b806391d1485414610c5657806392a2ebf314610c75578063943b79e214610c89578063949d7c2a14610c9d578063a207fe2f14610cbc575f80fd5b806380e460f01161023257806380e460f014610b905780638129fc1c14610bb057806381df174614610bc457806385e6b8c214610be357806390879f6414610c0e57806391807e4f14610c22575f80fd5b80636c713af814610ad15780636f86529414610ae55780637aa81c2a14610b1b5780637ac561c814610b3a5780637cfd820514610b65575f80fd5b806336568abe1161039b578063556d97c81161030f5780635d3ea8f1116102d45780635d3ea8f114610a145780635db916ab14610a285780635f4d642e14610a485780635f83c7d514610a5c578063622e361614610a715780636978ab1214610a90575f80fd5b8063556d97c81461092e57806355b8119d146109ad57806357342282146109c257806358376877146109e157806359b9959714610a00575f80fd5b806345367f231161036057806345367f2314610895578063491d0467146108b45780634b47d955146108d35780634ceb2e66146108f25780634f1ef2861461090757806352d1902d1461091a575f80fd5b806336568abe146107cf5780633752d675146107ee57806337d7f58f146108025780633ba18005146108165780633d64592714610876575f80fd5b80631241ebe311610432578063248a9ca3116103f7578063248a9ca3146106c357806326624e37146106e25780632bfd11d6146106f65780632f2ff15d146107655780633119edd41461078457806335ea1c63146107a3575f80fd5b80631241ebe31461062757806314e380261461063b5780631db859c71461064f5780631de38fe1146106855780631f83e2a3146106a4575f80fd5b806308c7050f1161047857806308c7050f1461058a5780630cf6b6bd146105ab5780630d39f7f0146105ca5780630e74b609146105e9578063107e21ca14610608575f80fd5b806301ffc9a7146104b4578063026583d7146104e8578063028e490a1461052957806303d3f7fd1461054757806308750a321461055c575b5f80fd5b3480156104bf575f80fd5b506104d36104ce366004613279565b6110f2565b60405190151581526020015b60405180910390f35b3480156104f3575f80fd5b506105076105023660046132a0565b611128565b60408051825181526020808401519082015291810151908201526060016104df565b348015610534575f80fd5b506006545b6040519081526020016104df565b348015610552575f80fd5b5061053960025481565b348015610567575f80fd5b506104d36105763660046132c9565b600c6020525f908152604090205460ff1681565b348015610595575f80fd5b506105a96105a436600461337a565b611161565b005b3480156105b6575f80fd5b506104d36105c536600461337a565b6111ee565b3480156105d5575f80fd5b506105a96105e43660046132c9565b61126d565b3480156105f4575f80fd5b506105a961060336600461337a565b61128a565b348015610613575f80fd5b506105a961062236600461343d565b6112d3565b348015610632575f80fd5b50600454610539565b348015610646575f80fd5b5061053961149e565b34801561065a575f80fd5b506105396106693660046134c1565b601560209081525f928352604080842090915290825290205481565b348015610690575f80fd5b5061053961069f3660046134c1565b6114af565b3480156106af575f80fd5b506105a96106be3660046132c9565b611528565b3480156106ce575f80fd5b506105396106dd3660046132c9565b6115da565b3480156106ed575f80fd5b506105a96115fa565b348015610701575f80fd5b506105076107103660046132c9565b60408051606080820183525f8083526020808401829052928401819052601354815260128352838120948152938252928290208251938401835280548452600181015491840191909152600201549082015290565b348015610770575f80fd5b506105a961077f3660046134c1565b611605565b34801561078f575f80fd5b506105a961079e36600461337a565b611627565b3480156107ae575f80fd5b506107b76116f3565b6040516001600160a01b0390911681526020016104df565b3480156107da575f80fd5b506105a96107e93660046134c1565b6117f2565b3480156107f9575f80fd5b5061053961182a565b34801561080d575f80fd5b50610539611895565b348015610821575f80fd5b5061085b6108303660046134ef565b601260209081525f928352604080842090915290825290208054600182015460029092015490919083565b604080519384526020840192909252908201526060016104df565b348015610881575f80fd5b506105a96108903660046132c9565b6118c5565b3480156108a0575f80fd5b506105396108af3660046132c9565b611979565b3480156108bf575f80fd5b506105396108ce36600461350f565b611a32565b3480156108de575f80fd5b506105a96108ed36600461352a565b611a44565b3480156108fd575f80fd5b5061053960045481565b6105a961091536600461355b565b611ab1565b348015610925575f80fd5b50610539611acc565b348015610939575f80fd5b506105076109483660046134c1565b604080516060810182525f8082526020820181905291810191909152505f9182526008602090815260408084206001600160a01b0393909316845291815291819020815160608101835281548152600182015493810193909352600201549082015290565b3480156109b8575f80fd5b5061053960065481565b3480156109cd575f80fd5b506105a96109dc3660046132c9565b611ae7565b3480156109ec575f80fd5b506001546107b7906001600160a01b031681565b348015610a0b575f80fd5b50600354610539565b348015610a1f575f80fd5b50610539611b04565b348015610a33575f80fd5b506105395f80516020613a1e83398151915281565b348015610a53575f80fd5b50610539611b34565b348015610a67575f80fd5b5061053960165481565b348015610a7c575f80fd5b506105a9610a8b366004613600565b611bcd565b348015610a9b575f80fd5b50610539610aaa3660046134c1565b5f9182526014602090815260408084206001600160a01b0393909316845291905290205490565b348015610adc575f80fd5b50610539611c42565b348015610af0575f80fd5b50610539610aff3660046134c1565b601460209081525f928352604080842090915290825290205481565b348015610b26575f80fd5b50610539610b3536600461369a565b611c72565b348015610b45575f80fd5b50610539610b543660046132c9565b600d6020525f908152604090205481565b348015610b70575f80fd5b50610539610b7f3660046132c9565b600f6020525f908152604090205481565b348015610b9b575f80fd5b506105395f805160206139be83398151915281565b348015610bbb575f80fd5b506105a9611cfb565b348015610bcf575f80fd5b506105a9610bde36600461350f565b611df0565b348015610bee575f80fd5b50610539610bfd3660046132c9565b60076020525f908152604090205481565b348015610c19575f80fd5b50610539611e1e565b348015610c2d575f80fd5b506107b7610c3c3660046132c9565b600b6020525f90815260409020546001600160a01b031681565b348015610c61575f80fd5b506104d3610c703660046134c1565b611ea2565b348015610c80575f80fd5b506105a9611ed8565b348015610c94575f80fd5b50610539611f8d565b348015610ca8575f80fd5b506105a9610cb736600461350f565b611f9e565b348015610cc7575f80fd5b50610539610cd63660046132c9565b600e6020525f908152604090205481565b348015610cf2575f80fd5b506105395f81565b348015610d05575f80fd5b50610d0e611fdb565b6040516104df919061371c565b348015610d26575f80fd5b50600554610539565b348015610d3a575f80fd5b50610d5f604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516104df919061372e565b348015610d77575f80fd5b50610539610d863660046134c1565b612047565b348015610d96575f80fd5b50610539610da5366004613763565b612102565b348015610db5575f80fd5b5061053960055481565b348015610dca575f80fd5b50610539610dd93660046134ef565b600960209081525f928352604080842090915290825290205481565b348015610e00575f80fd5b506105a9610e0f36600461352a565b612115565b348015610e1f575f80fd5b506105a9610e2e3660046132c9565b612162565b348015610e3e575f80fd5b506105a9610e4d36600461378f565b6121db565b348015610e5d575f80fd5b50610539610e6c3660046132c9565b5f9081526007602052604090205490565b348015610e88575f80fd5b5061053960175481565b348015610e9d575f80fd5b50610539610eac36600461350f565b612206565b348015610ebc575f80fd5b506105a9610ecb3660046134c1565b612218565b348015610edb575f80fd5b50610539610eea3660046134ef565b600a60209081525f928352604080842090915290825290205481565b348015610f11575f80fd5b506105a9610f203660046132c9565b612234565b348015610f30575f80fd5b50610539610f3f36600461337a565b80515f908152600a60209081526040808320938201518352929052205490565b348015610f6a575f80fd5b506104d3610f793660046132c9565b5f908152600860209081526040808320338452909152902054151590565b348015610fa2575f80fd5b5061085b610fb13660046134c1565b600860209081525f928352604080842090915290825290208054600182015460029092015490919083565b348015610fe7575f80fd5b5061053960135481565b348015610ffc575f80fd5b506104d361100b3660046132c9565b6013545f9081526012602090815260408083209383529290522054151590565b348015611036575f80fd5b506105396110453660046134c1565b5f9182526015602090815260408084206001600160a01b0393909316845291905290205490565b348015611077575f80fd5b5061085b6110863660046132c9565b60106020525f908152604090208054600182015460029092015490919083565b3480156110b1575f80fd5b505f546107b7906001600160a01b031681565b3480156110cf575f80fd5b506011546104d39060ff1681565b3480156110e8575f80fd5b5061053960035481565b5f6001600160e01b03198216637965db0b60e01b148061112257506301ffc9a760e01b6001600160e01b03198316145b92915050565b60408051606080820183525f808352602080840182905292840152825190810183528581529081018490529081018290525b9392505050565b6111785f805160206139be83398151915233611ea2565b6111e25760405162461bcd60e51b815260206004820152603060248201527f464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d4960448201526f544d454e545f41444d494e5f4f4e4c5960801b60648201526084015b60405180910390fd5b6111eb81611627565b50565b80515f908152600a602090815260408083208285015184529091528120545f0361121957505f919050565b4261122360065490565b60055484515f908152600a6020908152604080832082890151845290915290205461124e91906137c2565b61125891906137c2565b101561126557505f919050565b506001919050565b5f805160206139be833981519152611284816122e6565b50601655565b60115460ff16806112ad57506112ad5f80516020613a1e83398151915233611ea2565b6112c95760405162461bcd60e51b81526004016111d9906137d5565b6111eb33826122f0565b5f6112dc612464565b805490915060ff600160401b82041615906001600160401b03165f811580156113025750825b90505f826001600160401b0316600114801561131d5750303b155b90508115801561132b575080155b156113495760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561137357845460ff60401b1916600160401b1785555b61137b61248c565b5f80546001600160a01b0319166001600160a01b038e1690811790915560028b905560038c9055604051631a6e609f60e31b815263d37304f8906113c5908c908c90600401613817565b5f604051808303815f87803b1580156113dc575f80fd5b505af11580156113ee573d5f803e3d5ffd5b505050506113fb33611f9e565b61140433611df0565b6004879055600180546001600160a01b0319166001600160a01b03881617905561142f600a8a613843565b60055561143d600a8a613843565b60065560016016819055601755831561149057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b5f6114aa6108af611c42565b905090565b5f8054604051630ce52af560e01b8152306004820152602481018590526001600160a01b03848116604483015290911690630ce52af590606401602060405180830381865afa158015611504573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115a9190613856565b5f805160206139be83398151915261153f816122e6565b6006545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015611587573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ab9190613856565b6115b5919061386d565b82106115d45760405163a7075e5f60e01b815260040160405180910390fd5b50600555565b5f9081525f805160206139fe833981519152602052604090206001015490565b6116033361249e565b565b61160e826115da565b611617816122e6565b61162183836124bc565b50505050565b61163e5f805160206139be83398151915233611ea2565b6116be5760405162461bcd60e51b8152602060048201526044602482018190527f5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e908201527f545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f6064820152634f4e4c5960e01b608482015260a4016111d9565b6013545f9081526012602090815260408083208451845282529182902083518155908301516001820155910151600290910155565b5f806116fd611b34565b90505f611708611e1e565b5f8054604051634234a47960e01b815230600482015292935090916001600160a01b0390911690634234a479906024015f60405180830381865afa158015611752573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526117799190810190613880565b905080515f0361178c575f935050505090565b5f815184846040516020016117ab929190918252602082015260400190565b604051602081830303815290604052805190602001205f1c6117cd919061390f565b90508181815181106117e1576117e1613922565b602002602001015194505050505090565b6001600160a01b038116331461181b5760405163334bd91960e11b815260040160405180910390fd5b611825828261255d565b505050565b5f8054604051631dc7f3f160e21b81523060048201526001600160a01b039091169063771fcfc4906024015b602060405180830381865afa158015611871573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114aa9190613856565b5f805460405163d980b40d60e01b81523060048201526001600160a01b039091169063d980b40d90602401611856565b5f805160206139be8339815191526118dc816122e6565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015611922573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119469190613856565b905080611954846002613936565b10611972576040516360bc402f60e01b815260040160405180910390fd5b5050600455565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa1580156119be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119e59190810190613880565b90505f805b8251811015611a2a57611a1685848381518110611a0957611a09613922565b60200260200101516114af565b611a2090836137c2565b91506001016119ea565b509392505050565b5f611122611a3e611c42565b83612047565b611a4e5f33611ea2565b611a6a5760405162461bcd60e51b81526004016111d99061394d565b5f5b8151811015611aad57611aa55f805160206139be833981519152838381518110611a9857611a98613922565b6020026020010151611605565b600101611a6c565b5050565b611ab96125d6565b611ac28261267a565b611aad8282612684565b5f611ad5612740565b505f805160206139de83398151915290565b5f805160206139be833981519152611afe816122e6565b50601755565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401611856565b5f8054604051635c53435960e01b8152306004820152429183916001600160a01b0390911690635c53435990602401602060405180830381865afa158015611b7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ba29190613856565b611bac908361390f565b905060045481611bbc919061390f565b611bc6908261386d565b9250505090565b60115460ff1680611bf05750611bf05f80516020613a1e83398151915233611ea2565b611c0c5760405162461bcd60e51b81526004016111d9906137d5565b5f5b8151811015611aad57611c3a33838381518110611c2d57611c2d613922565b60200260200101516122f0565b600101611c0e565b5f80546040516322fceb7560e01b81523060048201526001600160a01b03909116906322fceb7590602401611856565b5f80546040516324f7ee1760e21b8152306004820152602481018690526001600160a01b0385811660448301528481166064830152909116906393dfb85c90608401602060405180830381865afa158015611ccf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf39190613856565b949350505050565b5f611d04612464565b805490915060ff600160401b82041615906001600160401b03165f81158015611d2a5750825b90505f826001600160401b03166001148015611d455750303b155b905081158015611d53575080155b15611d715760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611d9b57845460ff60401b1916600160401b1785555b611da3612789565b8315611de957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f805160206139be833981519152611e07816122e6565b611aad5f80516020613a1e83398151915283611605565b5f8054604051635c53435960e01b815230600482015242916001600160a01b031690635c53435990602401602060405180830381865afa158015611e64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e889190613856565b611e92908261390f565b611e9c908261386d565b91505090565b5f9182525f805160206139fe833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611ee25f33611ea2565b611f3c5760405162461bcd60e51b815260206004820152602560248201527f4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e6044820152645f4f4e4c5960d81b60648201526084016111d9565b5f8054604080516392a2ebf360e01b815290516001600160a01b03909216926392a2ebf39260048084019382900301818387803b158015611f7b575f80fd5b505af1158015611621573d5f803e3d5ffd5b5f6002546003546114aa91906137c2565b611fa85f33611ea2565b611fc45760405162461bcd60e51b81526004016111d99061394d565b6111eb5f805160206139be83398151915282611605565b5f54604051634234a47960e01b81523060048201526060916001600160a01b031690634234a479906024015f60405180830381865afa158015612020573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114aa9190810190613880565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa15801561208c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120b39190810190613880565b90505f805b82518110156120f9576120e5868483815181106120d7576120d7613922565b602002602001015187611c72565b6120ef90836137c2565b91506001016120b8565b50949350505050565b5f61115a61210e611c42565b8484611c72565b5f805160206139be83398151915261212c816122e6565b5f5b82518110156118255761215a5f80516020613a1e833981519152848381518110611a9857611a98613922565b60010161212e565b5f805160206139be833981519152612179816122e6565b5f54604051631dc8b94960e01b8152306004820152602481018490526001600160a01b0390911690631dc8b949906044015f604051808303815f87803b1580156121c1575f80fd5b505af11580156121d3573d5f803e3d5ffd5b505050505050565b5f805160206139be8339815191526121f2816122e6565b506011805460ff1916911515919091179055565b5f611122612212611c42565b836114af565b612221826115da565b61222a816122e6565b611621838361255d565b5f805160206139be83398151915261224b816122e6565b6005545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015612293573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122b79190613856565b6122c1919061386d565b82106122e057604051633c9f1a5360e01b815260040160405180910390fd5b50600655565b6111eb8133612799565b80515f9081526008602090815260408083206001600160a01b03861684529091529020541561233257604051630ae09ad960e41b815260040160405180910390fd5b805160025460035461234491906137c2565b101561236357604051630ae09ad960e41b815260040160405180910390fd5b80515f90815260076020526040812054900361239257612381611895565b81515f908152600760205260409020555b80515f9081526008602090815260408083206001600160a01b038616845282529182902083518082559184015160018201819055928401516002909101556123da91426127d2565b5f6123e483611a32565b82515f9081526009602090815260408083208287015184529091528120805492935083929091906124169084906137c2565b9091555050604080830151602080850151835190815290810184905290917fa8445a6b8a16633ad62fbc0954848ec55c4d5323d90b9745dbda4121ec5ce12b910160405180910390a2505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00611122565b61249461281c565b6111eb5f336124bc565b6124b560035460016124b091906137c2565b612841565b61249e5750565b5f5f805160206139fe8339815191526124d58484611ea2565b612554575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561250a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050611122565b5f915050611122565b5f5f805160206139fe8339815191526125768484611ea2565b15612554575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050611122565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061265c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126505f805160206139de833981519152546001600160a01b031690565b6001600160a01b031614155b156116035760405163703e46dd60e11b815260040160405180910390fd5b5f611aad816122e6565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156126de575060408051601f3d908101601f191682019092526126db91810190613856565b60015b61270657604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111d9565b5f805160206139de833981519152811461273657604051632a87526960e21b8152600481018290526024016111d9565b6118258383612aaa565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116035760405163703e46dd60e11b815260040160405180910390fd5b61279161281c565b61160361248c565b6127a38282611ea2565b611aad5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111d9565b5f838152600a60209081526040808320858452909152902054156127f557505050565b805f0361280157505050565b5f928352600a60209081526040808520938552929052912055565b612824612aff565b61160357604051631afcd79f60e31b815260040160405180910390fd5b5f818152600760205260408120546003541561290d575f60078161286660018761386d565b81526020019081526020015f205490508082101561290b575f612887611fdb565b90505f5b81518110156129055760085f8781526020019081526020015f205f8383815181106128b8576128b8613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f01545f146128fd575f868152600760205260409020839055612905565b60010161288b565b50819250505b505b80612916611c42565b101561292957612924612b18565b61290d565b5f600361293583611979565b612940906002613936565b61294a9190613843565b6129559060016137c2565b90505f612960611fdb565b90505f805b8251811015612a6a575f83828151811061298157612981613922565b6020908102919091018101515f8a81526008835260408082206001600160a01b038416835284529081902081516060810183528154808252600183015495820195909552600290910154918101919091529092509089146129e3575050612a62565b80515f908152600960209081526040808320828501518452909152902054868110612a5e5781515f908152600a60209081526040808320828601518452909152902054600554612a3390826137c2565b421015612a435750505050612a6a565b612a4d8333612e58565b5060019a9950505050505050505050565b5050505b600101612965565b5080158015612a865750612a7c611c42565b612a84611895565b115b15612a9f57612a93612b18565b50600195945050505050565b505f95945050505050565b612ab382613100565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612af7576118258282613163565b611aad6131d5565b5f612b08612464565b54600160401b900460ff16919050565b5f612b21611c42565b90505f612b2c611fdb565b90505f5b8151811015612e18575f83815260146020526040812083518290859085908110612b5c57612b5c613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612cab575f612bad838381518110612ba057612ba0613922565b6020026020010151611a32565b60165460145f8781526020019081526020015f205f868681518110612bd457612bd4613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612c069190613936565b612c109190613936565b5f5484519192506001600160a01b031690635e00bf4690859085908110612c3957612c39613922565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612c93575f80fd5b505af1158015612ca5573d5f803e3d5ffd5b50505050505b5f83815260156020526040812083518290859085908110612cce57612cce613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612e10575f612d12838381518110612ba057612ba0613922565b60175460155f8781526020019081526020015f205f868681518110612d3957612d39613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612d6b9190613936565b612d759190613936565b5f5484519192506001600160a01b031690635e00bf4690859085908110612d9e57612d9e613922565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612df8575f80fd5b505af1158015612e0a573d5f803e3d5ffd5b50505050505b600101612b30565b505f805460408051632a21edc760e21b815290516001600160a01b039092169263a887b71c9260048084019382900301818387803b1580156121c1575f80fd5b5f612e61611c42565b83515f908152600760205260409020549091508114612e9357604051631f2d18b160e31b815260040160405180910390fd5b8251612ea19060019061386d565b60035414612ec257604051631f2d18b160e31b815260040160405180910390fd5b5f612ecb611fdb565b90505f5b8151811015612f9d57846020015160085f875f015181526020019081526020015f205f848481518110612f0457612f04613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206001015403612f955760145f8481526020019081526020015f205f838381518110612f5857612f58613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f815480929190612f8f9061398f565b91905055505b600101612ecf565b50612fa7846111ee565b612fe8575f8281526015602090815260408083206001600160a01b03871684529091528120805460019290612fdd9084906137c2565b909155506130409050565b826001600160a01b0316612ffa6116f3565b6001600160a01b031603613040575f8281526015602090815260408083206001600160a01b0387168452909152812080546001929061303a9084906137c2565b90915550505b6013545f90815260126020908152604080832087518452825280832087518082558884018051600184015589840180516002909401939093556003829055908552600b845282852080546001600160a01b0319166001600160a01b038a1617905588518552600d845282852043905588518552600e84529382902042905551925187518251918252928101929092527fc28fbeddd1d6ba9496d1b91564f9aa2bc4dffed78aae631bbc6ef67296ad3c3c910160405180910390a250505050565b806001600160a01b03163b5f0361313557604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111d9565b5f805160206139de83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b03168460405161317f91906139a7565b5f60405180830381855af49150503d805f81146131b7576040519150601f19603f3d011682016040523d82523d5f602084013e6131bc565b606091505b50915091506131cc8583836131f4565b95945050505050565b34156116035760405163b398979f60e01b815260040160405180910390fd5b6060826132095761320482613250565b61115a565b815115801561322057506001600160a01b0384163b155b1561324957604051639996b31560e01b81526001600160a01b03851660048201526024016111d9565b508061115a565b8051156132605780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215613289575f80fd5b81356001600160e01b03198116811461115a575f80fd5b5f805f606084860312156132b2575f80fd5b505081359360208301359350604090920135919050565b5f602082840312156132d9575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561331c5761331c6132e0565b604052919050565b5f60608284031215613334575f80fd5b604051606081016001600160401b0381118282101715613356576133566132e0565b60409081528335825260208085013590830152928301359281019290925250919050565b5f6060828403121561338a575f80fd5b61115a8383613324565b6001600160a01b03811681146111eb575f80fd5b5f6001600160401b038211156133c0576133c06132e0565b5060051b60200190565b5f82601f8301126133d9575f80fd5b81356133ec6133e7826133a8565b6132f4565b8082825260208201915060208360051b86010192508583111561340d575f80fd5b602085015b8381101561343357803561342581613394565b835260209283019201613412565b5095945050505050565b5f805f805f805f60e0888a031215613453575f80fd5b873561345e81613394565b965060208801359550604088013594506060880135935060808801356001600160401b0381111561348d575f80fd5b6134998a828b016133ca565b93505060a0880135915060c08801356134b181613394565b8091505092959891949750929550565b5f80604083850312156134d2575f80fd5b8235915060208301356134e481613394565b809150509250929050565b5f8060408385031215613500575f80fd5b50508035926020909101359150565b5f6020828403121561351f575f80fd5b813561115a81613394565b5f6020828403121561353a575f80fd5b81356001600160401b0381111561354f575f80fd5b611cf3848285016133ca565b5f806040838503121561356c575f80fd5b823561357781613394565b915060208301356001600160401b03811115613591575f80fd5b8301601f810185136135a1575f80fd5b80356001600160401b038111156135ba576135ba6132e0565b6135cd601f8201601f19166020016132f4565b8181528660208385010111156135e1575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f60208284031215613610575f80fd5b81356001600160401b03811115613625575f80fd5b8201601f81018413613635575f80fd5b80356136436133e7826133a8565b80828252602082019150602060608402850101925086831115613664575f80fd5b6020840193505b828410156136905761367d8785613324565b825260208201915060608401935061366b565b9695505050505050565b5f805f606084860312156136ac575f80fd5b8335925060208401356136be81613394565b915060408401356136ce81613394565b809150509250925092565b5f8151808452602084019350602083015f5b828110156137125781516001600160a01b03168652602095860195909101906001016136eb565b5093949350505050565b602081525f61115a60208301846136d9565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215613774575f80fd5b823561377f81613394565b915060208301356134e481613394565b5f6020828403121561379f575f80fd5b8135801515811461115a575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115611122576111226137ae565b60208082526022908201527f554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d45604082015261139560f21b606082015260800190565b828152604060208201525f611cf360408301846136d9565b634e487b7160e01b5f52601260045260245ffd5b5f826138515761385161382f565b500490565b5f60208284031215613866575f80fd5b5051919050565b81810381811115611122576111226137ae565b5f60208284031215613890575f80fd5b81516001600160401b038111156138a5575f80fd5b8201601f810184136138b5575f80fd5b80516138c36133e7826133a8565b8082825260208201915060208360051b8501019250868311156138e4575f80fd5b6020840193505b828410156136905783516138fe81613394565b8252602093840193909101906138eb565b5f8261391d5761391d61382f565b500690565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417611122576111226137ae565b60208082526022908201527f4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e6040820152614c5960f01b606082015260800190565b5f600182016139a0576139a06137ae565b5060010190565b5f82518060208501845e5f92019182525091905056fedb2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18a26469706673582212205c57ace4d11ef4f14745cfa900bbfba3b877027ff6007e947931e207f05d43d964736f6c634300081a0033","sourceMap":"545:34540:114:-:0;;;1171:4:22;1128:48;;545:34540:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106104b0575f3560e01c80636c713af81161026d578063bff92c8c1161014a578063e07472ef116100be578063ed8a1d5911610083578063ed8a1d591461102b578063eda67fc41461106c578063ee99205c146110a6578063ef9ae15c146110c4578063f1949add1461092e578063fdafe9ca146110dd575f80fd5b8063e07472ef14610f25578063e4a3fb7414610f5f578063e90d4c0614610f97578063ec18c18614610fdc578063ec23ec2e14610ff1575f80fd5b8063d283392e1161010f578063d283392e14610e52578063d3eef4cc14610e7d578063d440116d14610e92578063d547741f14610eb1578063d783068814610ed0578063da7d28b614610f06575f80fd5b8063bff92c8c14610daa578063c19b406c14610dbf578063cf6772ad14610df5578063d03509ec14610e14578063d2526fef14610e33575f80fd5b806391d14854116101e1578063a217fddf116101a6578063a217fddf14610ce7578063aa0d6fcd14610cfa578063ab208ebd14610d1b578063ad3cb1cc14610d2f578063ba26513e14610d6c578063bb04bd2f14610d8b575f80fd5b806391d1485414610c5657806392a2ebf314610c75578063943b79e214610c89578063949d7c2a14610c9d578063a207fe2f14610cbc575f80fd5b806380e460f01161023257806380e460f014610b905780638129fc1c14610bb057806381df174614610bc457806385e6b8c214610be357806390879f6414610c0e57806391807e4f14610c22575f80fd5b80636c713af814610ad15780636f86529414610ae55780637aa81c2a14610b1b5780637ac561c814610b3a5780637cfd820514610b65575f80fd5b806336568abe1161039b578063556d97c81161030f5780635d3ea8f1116102d45780635d3ea8f114610a145780635db916ab14610a285780635f4d642e14610a485780635f83c7d514610a5c578063622e361614610a715780636978ab1214610a90575f80fd5b8063556d97c81461092e57806355b8119d146109ad57806357342282146109c257806358376877146109e157806359b9959714610a00575f80fd5b806345367f231161036057806345367f2314610895578063491d0467146108b45780634b47d955146108d35780634ceb2e66146108f25780634f1ef2861461090757806352d1902d1461091a575f80fd5b806336568abe146107cf5780633752d675146107ee57806337d7f58f146108025780633ba18005146108165780633d64592714610876575f80fd5b80631241ebe311610432578063248a9ca3116103f7578063248a9ca3146106c357806326624e37146106e25780632bfd11d6146106f65780632f2ff15d146107655780633119edd41461078457806335ea1c63146107a3575f80fd5b80631241ebe31461062757806314e380261461063b5780631db859c71461064f5780631de38fe1146106855780631f83e2a3146106a4575f80fd5b806308c7050f1161047857806308c7050f1461058a5780630cf6b6bd146105ab5780630d39f7f0146105ca5780630e74b609146105e9578063107e21ca14610608575f80fd5b806301ffc9a7146104b4578063026583d7146104e8578063028e490a1461052957806303d3f7fd1461054757806308750a321461055c575b5f80fd5b3480156104bf575f80fd5b506104d36104ce366004613279565b6110f2565b60405190151581526020015b60405180910390f35b3480156104f3575f80fd5b506105076105023660046132a0565b611128565b60408051825181526020808401519082015291810151908201526060016104df565b348015610534575f80fd5b506006545b6040519081526020016104df565b348015610552575f80fd5b5061053960025481565b348015610567575f80fd5b506104d36105763660046132c9565b600c6020525f908152604090205460ff1681565b348015610595575f80fd5b506105a96105a436600461337a565b611161565b005b3480156105b6575f80fd5b506104d36105c536600461337a565b6111ee565b3480156105d5575f80fd5b506105a96105e43660046132c9565b61126d565b3480156105f4575f80fd5b506105a961060336600461337a565b61128a565b348015610613575f80fd5b506105a961062236600461343d565b6112d3565b348015610632575f80fd5b50600454610539565b348015610646575f80fd5b5061053961149e565b34801561065a575f80fd5b506105396106693660046134c1565b601560209081525f928352604080842090915290825290205481565b348015610690575f80fd5b5061053961069f3660046134c1565b6114af565b3480156106af575f80fd5b506105a96106be3660046132c9565b611528565b3480156106ce575f80fd5b506105396106dd3660046132c9565b6115da565b3480156106ed575f80fd5b506105a96115fa565b348015610701575f80fd5b506105076107103660046132c9565b60408051606080820183525f8083526020808401829052928401819052601354815260128352838120948152938252928290208251938401835280548452600181015491840191909152600201549082015290565b348015610770575f80fd5b506105a961077f3660046134c1565b611605565b34801561078f575f80fd5b506105a961079e36600461337a565b611627565b3480156107ae575f80fd5b506107b76116f3565b6040516001600160a01b0390911681526020016104df565b3480156107da575f80fd5b506105a96107e93660046134c1565b6117f2565b3480156107f9575f80fd5b5061053961182a565b34801561080d575f80fd5b50610539611895565b348015610821575f80fd5b5061085b6108303660046134ef565b601260209081525f928352604080842090915290825290208054600182015460029092015490919083565b604080519384526020840192909252908201526060016104df565b348015610881575f80fd5b506105a96108903660046132c9565b6118c5565b3480156108a0575f80fd5b506105396108af3660046132c9565b611979565b3480156108bf575f80fd5b506105396108ce36600461350f565b611a32565b3480156108de575f80fd5b506105a96108ed36600461352a565b611a44565b3480156108fd575f80fd5b5061053960045481565b6105a961091536600461355b565b611ab1565b348015610925575f80fd5b50610539611acc565b348015610939575f80fd5b506105076109483660046134c1565b604080516060810182525f8082526020820181905291810191909152505f9182526008602090815260408084206001600160a01b0393909316845291815291819020815160608101835281548152600182015493810193909352600201549082015290565b3480156109b8575f80fd5b5061053960065481565b3480156109cd575f80fd5b506105a96109dc3660046132c9565b611ae7565b3480156109ec575f80fd5b506001546107b7906001600160a01b031681565b348015610a0b575f80fd5b50600354610539565b348015610a1f575f80fd5b50610539611b04565b348015610a33575f80fd5b506105395f80516020613a1e83398151915281565b348015610a53575f80fd5b50610539611b34565b348015610a67575f80fd5b5061053960165481565b348015610a7c575f80fd5b506105a9610a8b366004613600565b611bcd565b348015610a9b575f80fd5b50610539610aaa3660046134c1565b5f9182526014602090815260408084206001600160a01b0393909316845291905290205490565b348015610adc575f80fd5b50610539611c42565b348015610af0575f80fd5b50610539610aff3660046134c1565b601460209081525f928352604080842090915290825290205481565b348015610b26575f80fd5b50610539610b3536600461369a565b611c72565b348015610b45575f80fd5b50610539610b543660046132c9565b600d6020525f908152604090205481565b348015610b70575f80fd5b50610539610b7f3660046132c9565b600f6020525f908152604090205481565b348015610b9b575f80fd5b506105395f805160206139be83398151915281565b348015610bbb575f80fd5b506105a9611cfb565b348015610bcf575f80fd5b506105a9610bde36600461350f565b611df0565b348015610bee575f80fd5b50610539610bfd3660046132c9565b60076020525f908152604090205481565b348015610c19575f80fd5b50610539611e1e565b348015610c2d575f80fd5b506107b7610c3c3660046132c9565b600b6020525f90815260409020546001600160a01b031681565b348015610c61575f80fd5b506104d3610c703660046134c1565b611ea2565b348015610c80575f80fd5b506105a9611ed8565b348015610c94575f80fd5b50610539611f8d565b348015610ca8575f80fd5b506105a9610cb736600461350f565b611f9e565b348015610cc7575f80fd5b50610539610cd63660046132c9565b600e6020525f908152604090205481565b348015610cf2575f80fd5b506105395f81565b348015610d05575f80fd5b50610d0e611fdb565b6040516104df919061371c565b348015610d26575f80fd5b50600554610539565b348015610d3a575f80fd5b50610d5f604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516104df919061372e565b348015610d77575f80fd5b50610539610d863660046134c1565b612047565b348015610d96575f80fd5b50610539610da5366004613763565b612102565b348015610db5575f80fd5b5061053960055481565b348015610dca575f80fd5b50610539610dd93660046134ef565b600960209081525f928352604080842090915290825290205481565b348015610e00575f80fd5b506105a9610e0f36600461352a565b612115565b348015610e1f575f80fd5b506105a9610e2e3660046132c9565b612162565b348015610e3e575f80fd5b506105a9610e4d36600461378f565b6121db565b348015610e5d575f80fd5b50610539610e6c3660046132c9565b5f9081526007602052604090205490565b348015610e88575f80fd5b5061053960175481565b348015610e9d575f80fd5b50610539610eac36600461350f565b612206565b348015610ebc575f80fd5b506105a9610ecb3660046134c1565b612218565b348015610edb575f80fd5b50610539610eea3660046134ef565b600a60209081525f928352604080842090915290825290205481565b348015610f11575f80fd5b506105a9610f203660046132c9565b612234565b348015610f30575f80fd5b50610539610f3f36600461337a565b80515f908152600a60209081526040808320938201518352929052205490565b348015610f6a575f80fd5b506104d3610f793660046132c9565b5f908152600860209081526040808320338452909152902054151590565b348015610fa2575f80fd5b5061085b610fb13660046134c1565b600860209081525f928352604080842090915290825290208054600182015460029092015490919083565b348015610fe7575f80fd5b5061053960135481565b348015610ffc575f80fd5b506104d361100b3660046132c9565b6013545f9081526012602090815260408083209383529290522054151590565b348015611036575f80fd5b506105396110453660046134c1565b5f9182526015602090815260408084206001600160a01b0393909316845291905290205490565b348015611077575f80fd5b5061085b6110863660046132c9565b60106020525f908152604090208054600182015460029092015490919083565b3480156110b1575f80fd5b505f546107b7906001600160a01b031681565b3480156110cf575f80fd5b506011546104d39060ff1681565b3480156110e8575f80fd5b5061053960035481565b5f6001600160e01b03198216637965db0b60e01b148061112257506301ffc9a760e01b6001600160e01b03198316145b92915050565b60408051606080820183525f808352602080840182905292840152825190810183528581529081018490529081018290525b9392505050565b6111785f805160206139be83398151915233611ea2565b6111e25760405162461bcd60e51b815260206004820152603060248201527f464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d4960448201526f544d454e545f41444d494e5f4f4e4c5960801b60648201526084015b60405180910390fd5b6111eb81611627565b50565b80515f908152600a602090815260408083208285015184529091528120545f0361121957505f919050565b4261122360065490565b60055484515f908152600a6020908152604080832082890151845290915290205461124e91906137c2565b61125891906137c2565b101561126557505f919050565b506001919050565b5f805160206139be833981519152611284816122e6565b50601655565b60115460ff16806112ad57506112ad5f80516020613a1e83398151915233611ea2565b6112c95760405162461bcd60e51b81526004016111d9906137d5565b6111eb33826122f0565b5f6112dc612464565b805490915060ff600160401b82041615906001600160401b03165f811580156113025750825b90505f826001600160401b0316600114801561131d5750303b155b90508115801561132b575080155b156113495760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561137357845460ff60401b1916600160401b1785555b61137b61248c565b5f80546001600160a01b0319166001600160a01b038e1690811790915560028b905560038c9055604051631a6e609f60e31b815263d37304f8906113c5908c908c90600401613817565b5f604051808303815f87803b1580156113dc575f80fd5b505af11580156113ee573d5f803e3d5ffd5b505050506113fb33611f9e565b61140433611df0565b6004879055600180546001600160a01b0319166001600160a01b03881617905561142f600a8a613843565b60055561143d600a8a613843565b60065560016016819055601755831561149057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b5f6114aa6108af611c42565b905090565b5f8054604051630ce52af560e01b8152306004820152602481018590526001600160a01b03848116604483015290911690630ce52af590606401602060405180830381865afa158015611504573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115a9190613856565b5f805160206139be83398151915261153f816122e6565b6006545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015611587573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ab9190613856565b6115b5919061386d565b82106115d45760405163a7075e5f60e01b815260040160405180910390fd5b50600555565b5f9081525f805160206139fe833981519152602052604090206001015490565b6116033361249e565b565b61160e826115da565b611617816122e6565b61162183836124bc565b50505050565b61163e5f805160206139be83398151915233611ea2565b6116be5760405162461bcd60e51b8152602060048201526044602482018190527f5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e908201527f545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f6064820152634f4e4c5960e01b608482015260a4016111d9565b6013545f9081526012602090815260408083208451845282529182902083518155908301516001820155910151600290910155565b5f806116fd611b34565b90505f611708611e1e565b5f8054604051634234a47960e01b815230600482015292935090916001600160a01b0390911690634234a479906024015f60405180830381865afa158015611752573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526117799190810190613880565b905080515f0361178c575f935050505090565b5f815184846040516020016117ab929190918252602082015260400190565b604051602081830303815290604052805190602001205f1c6117cd919061390f565b90508181815181106117e1576117e1613922565b602002602001015194505050505090565b6001600160a01b038116331461181b5760405163334bd91960e11b815260040160405180910390fd5b611825828261255d565b505050565b5f8054604051631dc7f3f160e21b81523060048201526001600160a01b039091169063771fcfc4906024015b602060405180830381865afa158015611871573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114aa9190613856565b5f805460405163d980b40d60e01b81523060048201526001600160a01b039091169063d980b40d90602401611856565b5f805160206139be8339815191526118dc816122e6565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015611922573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119469190613856565b905080611954846002613936565b10611972576040516360bc402f60e01b815260040160405180910390fd5b5050600455565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa1580156119be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119e59190810190613880565b90505f805b8251811015611a2a57611a1685848381518110611a0957611a09613922565b60200260200101516114af565b611a2090836137c2565b91506001016119ea565b509392505050565b5f611122611a3e611c42565b83612047565b611a4e5f33611ea2565b611a6a5760405162461bcd60e51b81526004016111d99061394d565b5f5b8151811015611aad57611aa55f805160206139be833981519152838381518110611a9857611a98613922565b6020026020010151611605565b600101611a6c565b5050565b611ab96125d6565b611ac28261267a565b611aad8282612684565b5f611ad5612740565b505f805160206139de83398151915290565b5f805160206139be833981519152611afe816122e6565b50601755565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401611856565b5f8054604051635c53435960e01b8152306004820152429183916001600160a01b0390911690635c53435990602401602060405180830381865afa158015611b7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ba29190613856565b611bac908361390f565b905060045481611bbc919061390f565b611bc6908261386d565b9250505090565b60115460ff1680611bf05750611bf05f80516020613a1e83398151915233611ea2565b611c0c5760405162461bcd60e51b81526004016111d9906137d5565b5f5b8151811015611aad57611c3a33838381518110611c2d57611c2d613922565b60200260200101516122f0565b600101611c0e565b5f80546040516322fceb7560e01b81523060048201526001600160a01b03909116906322fceb7590602401611856565b5f80546040516324f7ee1760e21b8152306004820152602481018690526001600160a01b0385811660448301528481166064830152909116906393dfb85c90608401602060405180830381865afa158015611ccf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf39190613856565b949350505050565b5f611d04612464565b805490915060ff600160401b82041615906001600160401b03165f81158015611d2a5750825b90505f826001600160401b03166001148015611d455750303b155b905081158015611d53575080155b15611d715760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611d9b57845460ff60401b1916600160401b1785555b611da3612789565b8315611de957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f805160206139be833981519152611e07816122e6565b611aad5f80516020613a1e83398151915283611605565b5f8054604051635c53435960e01b815230600482015242916001600160a01b031690635c53435990602401602060405180830381865afa158015611e64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e889190613856565b611e92908261390f565b611e9c908261386d565b91505090565b5f9182525f805160206139fe833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611ee25f33611ea2565b611f3c5760405162461bcd60e51b815260206004820152602560248201527f4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e6044820152645f4f4e4c5960d81b60648201526084016111d9565b5f8054604080516392a2ebf360e01b815290516001600160a01b03909216926392a2ebf39260048084019382900301818387803b158015611f7b575f80fd5b505af1158015611621573d5f803e3d5ffd5b5f6002546003546114aa91906137c2565b611fa85f33611ea2565b611fc45760405162461bcd60e51b81526004016111d99061394d565b6111eb5f805160206139be83398151915282611605565b5f54604051634234a47960e01b81523060048201526060916001600160a01b031690634234a479906024015f60405180830381865afa158015612020573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114aa9190810190613880565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa15801561208c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120b39190810190613880565b90505f805b82518110156120f9576120e5868483815181106120d7576120d7613922565b602002602001015187611c72565b6120ef90836137c2565b91506001016120b8565b50949350505050565b5f61115a61210e611c42565b8484611c72565b5f805160206139be83398151915261212c816122e6565b5f5b82518110156118255761215a5f80516020613a1e833981519152848381518110611a9857611a98613922565b60010161212e565b5f805160206139be833981519152612179816122e6565b5f54604051631dc8b94960e01b8152306004820152602481018490526001600160a01b0390911690631dc8b949906044015f604051808303815f87803b1580156121c1575f80fd5b505af11580156121d3573d5f803e3d5ffd5b505050505050565b5f805160206139be8339815191526121f2816122e6565b506011805460ff1916911515919091179055565b5f611122612212611c42565b836114af565b612221826115da565b61222a816122e6565b611621838361255d565b5f805160206139be83398151915261224b816122e6565b6005545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015612293573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122b79190613856565b6122c1919061386d565b82106122e057604051633c9f1a5360e01b815260040160405180910390fd5b50600655565b6111eb8133612799565b80515f9081526008602090815260408083206001600160a01b03861684529091529020541561233257604051630ae09ad960e41b815260040160405180910390fd5b805160025460035461234491906137c2565b101561236357604051630ae09ad960e41b815260040160405180910390fd5b80515f90815260076020526040812054900361239257612381611895565b81515f908152600760205260409020555b80515f9081526008602090815260408083206001600160a01b038616845282529182902083518082559184015160018201819055928401516002909101556123da91426127d2565b5f6123e483611a32565b82515f9081526009602090815260408083208287015184529091528120805492935083929091906124169084906137c2565b9091555050604080830151602080850151835190815290810184905290917fa8445a6b8a16633ad62fbc0954848ec55c4d5323d90b9745dbda4121ec5ce12b910160405180910390a2505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00611122565b61249461281c565b6111eb5f336124bc565b6124b560035460016124b091906137c2565b612841565b61249e5750565b5f5f805160206139fe8339815191526124d58484611ea2565b612554575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561250a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050611122565b5f915050611122565b5f5f805160206139fe8339815191526125768484611ea2565b15612554575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050611122565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061265c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126505f805160206139de833981519152546001600160a01b031690565b6001600160a01b031614155b156116035760405163703e46dd60e11b815260040160405180910390fd5b5f611aad816122e6565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156126de575060408051601f3d908101601f191682019092526126db91810190613856565b60015b61270657604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111d9565b5f805160206139de833981519152811461273657604051632a87526960e21b8152600481018290526024016111d9565b6118258383612aaa565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116035760405163703e46dd60e11b815260040160405180910390fd5b61279161281c565b61160361248c565b6127a38282611ea2565b611aad5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111d9565b5f838152600a60209081526040808320858452909152902054156127f557505050565b805f0361280157505050565b5f928352600a60209081526040808520938552929052912055565b612824612aff565b61160357604051631afcd79f60e31b815260040160405180910390fd5b5f818152600760205260408120546003541561290d575f60078161286660018761386d565b81526020019081526020015f205490508082101561290b575f612887611fdb565b90505f5b81518110156129055760085f8781526020019081526020015f205f8383815181106128b8576128b8613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f01545f146128fd575f868152600760205260409020839055612905565b60010161288b565b50819250505b505b80612916611c42565b101561292957612924612b18565b61290d565b5f600361293583611979565b612940906002613936565b61294a9190613843565b6129559060016137c2565b90505f612960611fdb565b90505f805b8251811015612a6a575f83828151811061298157612981613922565b6020908102919091018101515f8a81526008835260408082206001600160a01b038416835284529081902081516060810183528154808252600183015495820195909552600290910154918101919091529092509089146129e3575050612a62565b80515f908152600960209081526040808320828501518452909152902054868110612a5e5781515f908152600a60209081526040808320828601518452909152902054600554612a3390826137c2565b421015612a435750505050612a6a565b612a4d8333612e58565b5060019a9950505050505050505050565b5050505b600101612965565b5080158015612a865750612a7c611c42565b612a84611895565b115b15612a9f57612a93612b18565b50600195945050505050565b505f95945050505050565b612ab382613100565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612af7576118258282613163565b611aad6131d5565b5f612b08612464565b54600160401b900460ff16919050565b5f612b21611c42565b90505f612b2c611fdb565b90505f5b8151811015612e18575f83815260146020526040812083518290859085908110612b5c57612b5c613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612cab575f612bad838381518110612ba057612ba0613922565b6020026020010151611a32565b60165460145f8781526020019081526020015f205f868681518110612bd457612bd4613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612c069190613936565b612c109190613936565b5f5484519192506001600160a01b031690635e00bf4690859085908110612c3957612c39613922565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612c93575f80fd5b505af1158015612ca5573d5f803e3d5ffd5b50505050505b5f83815260156020526040812083518290859085908110612cce57612cce613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612e10575f612d12838381518110612ba057612ba0613922565b60175460155f8781526020019081526020015f205f868681518110612d3957612d39613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612d6b9190613936565b612d759190613936565b5f5484519192506001600160a01b031690635e00bf4690859085908110612d9e57612d9e613922565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612df8575f80fd5b505af1158015612e0a573d5f803e3d5ffd5b50505050505b600101612b30565b505f805460408051632a21edc760e21b815290516001600160a01b039092169263a887b71c9260048084019382900301818387803b1580156121c1575f80fd5b5f612e61611c42565b83515f908152600760205260409020549091508114612e9357604051631f2d18b160e31b815260040160405180910390fd5b8251612ea19060019061386d565b60035414612ec257604051631f2d18b160e31b815260040160405180910390fd5b5f612ecb611fdb565b90505f5b8151811015612f9d57846020015160085f875f015181526020019081526020015f205f848481518110612f0457612f04613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206001015403612f955760145f8481526020019081526020015f205f838381518110612f5857612f58613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f815480929190612f8f9061398f565b91905055505b600101612ecf565b50612fa7846111ee565b612fe8575f8281526015602090815260408083206001600160a01b03871684529091528120805460019290612fdd9084906137c2565b909155506130409050565b826001600160a01b0316612ffa6116f3565b6001600160a01b031603613040575f8281526015602090815260408083206001600160a01b0387168452909152812080546001929061303a9084906137c2565b90915550505b6013545f90815260126020908152604080832087518452825280832087518082558884018051600184015589840180516002909401939093556003829055908552600b845282852080546001600160a01b0319166001600160a01b038a1617905588518552600d845282852043905588518552600e84529382902042905551925187518251918252928101929092527fc28fbeddd1d6ba9496d1b91564f9aa2bc4dffed78aae631bbc6ef67296ad3c3c910160405180910390a250505050565b806001600160a01b03163b5f0361313557604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111d9565b5f805160206139de83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b03168460405161317f91906139a7565b5f60405180830381855af49150503d805f81146131b7576040519150601f19603f3d011682016040523d82523d5f602084013e6131bc565b606091505b50915091506131cc8583836131f4565b95945050505050565b34156116035760405163b398979f60e01b815260040160405180910390fd5b6060826132095761320482613250565b61115a565b815115801561322057506001600160a01b0384163b155b1561324957604051639996b31560e01b81526001600160a01b03851660048201526024016111d9565b508061115a565b8051156132605780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215613289575f80fd5b81356001600160e01b03198116811461115a575f80fd5b5f805f606084860312156132b2575f80fd5b505081359360208301359350604090920135919050565b5f602082840312156132d9575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561331c5761331c6132e0565b604052919050565b5f60608284031215613334575f80fd5b604051606081016001600160401b0381118282101715613356576133566132e0565b60409081528335825260208085013590830152928301359281019290925250919050565b5f6060828403121561338a575f80fd5b61115a8383613324565b6001600160a01b03811681146111eb575f80fd5b5f6001600160401b038211156133c0576133c06132e0565b5060051b60200190565b5f82601f8301126133d9575f80fd5b81356133ec6133e7826133a8565b6132f4565b8082825260208201915060208360051b86010192508583111561340d575f80fd5b602085015b8381101561343357803561342581613394565b835260209283019201613412565b5095945050505050565b5f805f805f805f60e0888a031215613453575f80fd5b873561345e81613394565b965060208801359550604088013594506060880135935060808801356001600160401b0381111561348d575f80fd5b6134998a828b016133ca565b93505060a0880135915060c08801356134b181613394565b8091505092959891949750929550565b5f80604083850312156134d2575f80fd5b8235915060208301356134e481613394565b809150509250929050565b5f8060408385031215613500575f80fd5b50508035926020909101359150565b5f6020828403121561351f575f80fd5b813561115a81613394565b5f6020828403121561353a575f80fd5b81356001600160401b0381111561354f575f80fd5b611cf3848285016133ca565b5f806040838503121561356c575f80fd5b823561357781613394565b915060208301356001600160401b03811115613591575f80fd5b8301601f810185136135a1575f80fd5b80356001600160401b038111156135ba576135ba6132e0565b6135cd601f8201601f19166020016132f4565b8181528660208385010111156135e1575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f60208284031215613610575f80fd5b81356001600160401b03811115613625575f80fd5b8201601f81018413613635575f80fd5b80356136436133e7826133a8565b80828252602082019150602060608402850101925086831115613664575f80fd5b6020840193505b828410156136905761367d8785613324565b825260208201915060608401935061366b565b9695505050505050565b5f805f606084860312156136ac575f80fd5b8335925060208401356136be81613394565b915060408401356136ce81613394565b809150509250925092565b5f8151808452602084019350602083015f5b828110156137125781516001600160a01b03168652602095860195909101906001016136eb565b5093949350505050565b602081525f61115a60208301846136d9565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215613774575f80fd5b823561377f81613394565b915060208301356134e481613394565b5f6020828403121561379f575f80fd5b8135801515811461115a575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115611122576111226137ae565b60208082526022908201527f554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d45604082015261139560f21b606082015260800190565b828152604060208201525f611cf360408301846136d9565b634e487b7160e01b5f52601260045260245ffd5b5f826138515761385161382f565b500490565b5f60208284031215613866575f80fd5b5051919050565b81810381811115611122576111226137ae565b5f60208284031215613890575f80fd5b81516001600160401b038111156138a5575f80fd5b8201601f810184136138b5575f80fd5b80516138c36133e7826133a8565b8082825260208201915060208360051b8501019250868311156138e4575f80fd5b6020840193505b828410156136905783516138fe81613394565b8252602093840193909101906138eb565b5f8261391d5761391d61382f565b500690565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417611122576111226137ae565b60208082526022908201527f4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e6040820152614c5960f01b606082015260800190565b5f600182016139a0576139a06137ae565b5060010190565b5f82518060208501845e5f92019182525091905056fedb2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18a26469706673582212205c57ace4d11ef4f14745cfa900bbfba3b877027ff6007e947931e207f05d43d964736f6c634300081a0033","sourceMap":"545:34540:114:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:20;;;;;;;;;;-1:-1:-1;3443:202:20;;;;;:::i;:::-;;:::i;:::-;;;470:14:147;;463:22;445:41;;433:2;418:18;3443:202:20;;;;;;;;11507:242:114;;;;;;;;;;-1:-1:-1;11507:242:114;;;;;:::i;:::-;;:::i;:::-;;;;1210:13:147;;1192:32;;1280:4;1268:17;;;1262:24;1240:20;;;1233:54;1331:17;;;1325:24;1303:20;;;1296:54;1180:2;1165:18;11507:242:114;968:388:147;6474:129:114;;;;;;;;;;-1:-1:-1;6566:30:114;;6474:129;;;1507:25:147;;;1495:2;1480:18;6474:129:114;1361:177:147;1406:41:115;;;;;;;;;;;;;;;;3846:77;;;;;;;;;;-1:-1:-1;3846:77:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;18915:308:114;;;;;;;;;;-1:-1:-1;18915:308:114;;;;;:::i;:::-;;:::i;:::-;;24939:683;;;;;;;;;;-1:-1:-1;24939:683:114;;;;;:::i;:::-;;:::i;33669:155::-;;;;;;;;;;-1:-1:-1;33669:155:114;;;;;:::i;:::-;;:::i;13996:317::-;;;;;;;;;;-1:-1:-1;13996:317:114;;;;;:::i;:::-;;:::i;2789:1624::-;;;;;;;;;;-1:-1:-1;2789:1624:114;;;;;:::i;:::-;;:::i;5413:111::-;;;;;;;;;;-1:-1:-1;5496:21:114;;5413:111;;33505:158;;;;;;;;;;;;;:::i;5318:107:115:-;;;;;;;;;;-1:-1:-1;5318:107:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;32341:287:114;;;;;;;;;;-1:-1:-1;32341:287:114;;;;;:::i;:::-;;:::i;7053:533::-;;;;;;;;;;-1:-1:-1;7053:533:114;;;;;:::i;:::-;;:::i;4759:191:20:-;;;;;;;;;;-1:-1:-1;4759:191:20;;;;;:::i;:::-;;:::i;17025:115:114:-;;;;;;;;;;;;;:::i;19229:200::-;;;;;;;;;;-1:-1:-1;19229:200:114;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;19382:31:114;;19348:66;;:33;:66;;;;;:74;;;;;;;;;;19341:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19229:200;5246:136:20;;;;;;;;;;-1:-1:-1;5246:136:20;;;;;:::i;:::-;;:::i;18315:405:114:-;;;;;;;;;;-1:-1:-1;18315:405:114;;;;;:::i;:::-;;:::i;9951:929::-;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;6818:32:147;;;6800:51;;6788:2;6773:18;9951:929:114;6654:203:147;6348:245:20;;;;;;;;;;-1:-1:-1;6348:245:20;;;;;:::i;:::-;;:::i;8946:165:114:-;;;;;;;;;;;;;:::i;8574:133::-;;;;;;;;;;;;;:::i;4950:118:115:-;;;;;;;;;;-1:-1:-1;4950:118:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7415:25:147;;;7471:2;7456:18;;7449:34;;;;7499:18;;;7492:34;7403:2;7388:18;4950:118:115;7213:319:147;4837:570:114;;;;;;;;;;-1:-1:-1;4837:570:114;;;;;:::i;:::-;;:::i;32634:607::-;;;;;;;;;;-1:-1:-1;32634:607:114;;;;;:::i;:::-;;:::i;32088:176::-;;;;;;;;;;-1:-1:-1;32088:176:114;;;;;:::i;:::-;;:::i;1866:326::-;;;;;;;;;;-1:-1:-1;1866:326:114;;;;;:::i;:::-;;:::i;1978:36:115:-;;;;;;;;;;;;;;;;4161:214:22;;;;;;:::i;:::-;;:::i;3708:134::-;;;;;;;;;;;;;:::i;14754:209:114:-;;;;;;;;;;-1:-1:-1;14754:209:114;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;14927:19:114;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;14927:29:114;;;;;;;;;;;;;14920:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14754:209;2261:45:115;;;;;;;;;;;;;;;;33830:165:114;;;;;;;;;;-1:-1:-1;33830:165:114;;;;;:::i;:::-;;:::i;405:31:115:-;;;;;;;;;;-1:-1:-1;405:31:115;;;;-1:-1:-1;;;;;405:31:115;;;16884:135:114;;;;;;;;;;-1:-1:-1;16979:33:114;;16884:135;;8131:129;;;;;;;;;;;;;:::i;764:72::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;764:72:114;;9197:414;;;;;;;;;;;;;:::i;5480:40:115:-;;;;;;;;;;;;;;;;14319:430:114;;;;;;;;;;-1:-1:-1;14319:430:114;;;;;:::i;:::-;;:::i;34073:157::-;;;;;;;;;;-1:-1:-1;34073:157:114;;;;;:::i;:::-;34160:7;34186:27;;;:20;:27;;;;;;;;-1:-1:-1;;;;;34186:37:114;;;;;;;;;;;;;34073:157;8745:131;;;;;;;;;;;;;:::i;5168:97:115:-;;;;;;;;;;-1:-1:-1;5168:97:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;30780:311:114;;;;;;;;;;-1:-1:-1;30780:311:114;;;;;:::i;:::-;;:::i;4005:94:115:-;;;;;;;;;;-1:-1:-1;4005:94:115;;;;;:::i;:::-;;;;;;;;;;;;;;4539:109;;;;;;;;;;-1:-1:-1;4539:109:115;;;;;:::i;:::-;;;;;;;;;;;;;;654:72:114;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;654:72:114;;528:89:117;;;;;;;;;;;;;:::i;2198:136:114:-;;;;;;;;;;-1:-1:-1;2198:136:114;;;;;:::i;:::-;;:::i;2880:87:115:-;;;;;;;;;;-1:-1:-1;2880:87:115;;;;;:::i;:::-;;;;;;;;;;;;;;8331:207:114;;;;;;;;;;;;;:::i;3625:76:115:-;;;;;;;;;;-1:-1:-1;3625:76:115;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3625:76:115;;;3732:207:20;;;;;;;;;;-1:-1:-1;3732:207:20;;;;;:::i;:::-;;:::i;4465:195:114:-;;;;;;;;;;;;;:::i;15017:159::-;;;;;;;;;;;;;:::i;1623:237::-;;;;;;;;;;-1:-1:-1;1623:237:114;;;;;:::i;:::-;;:::i;4336:100:115:-;;;;;;;;;;-1:-1:-1;4336:100:115;;;;;:::i;:::-;;;;;;;;;;;;;;2317:49:20;;;;;;;;;;-1:-1:-1;2317:49:20;2362:4;2317:49;;34580:177:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7592:139::-;;;;;;;;;;-1:-1:-1;7689:35:114;;7592:139;;1819:58:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:22;;;;;;;;;;;;:::i;31523:484:114:-;;;;;;;;;;-1:-1:-1;31523:484:114;;;;;:::i;:::-;;:::i;31191:198::-;;;;;;;;;;-1:-1:-1;31191:198:114;;;;;:::i;:::-;;:::i;2106:50:115:-;;;;;;;;;;;;;;;;3248:105;;;;;;;;;;-1:-1:-1;3248:105:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2340:226:114;;;;;;;;;;-1:-1:-1;2340:226:114;;;;;:::i;:::-;;:::i;11026:250::-;;;;;;;;;;-1:-1:-1;11026:250:114;;;;;:::i;:::-;;:::i;7737:132::-;;;;;;;;;;-1:-1:-1;7737:132:114;;;;;:::i;:::-;;:::i;15500:149::-;;;;;;;;;;-1:-1:-1;15500:149:114;;;;;:::i;:::-;15579:7;15605:37;;;:29;:37;;;;;;;15500:149;5580:45:115;;;;;;;;;;;;;;;;33319:180:114;;;;;;;;;;-1:-1:-1;33319:180:114;;;;;:::i;:::-;;:::i;5662:138:20:-;;;;;;;;;;-1:-1:-1;5662:138:20;;;;;:::i;:::-;;:::i;3436:114:115:-;;;;;;;;;;-1:-1:-1;3436:114:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;5787:464:114;;;;;;;;;;-1:-1:-1;5787:464:114;;;;;:::i;:::-;;:::i;15855:221::-;;;;;;;;;;-1:-1:-1;15855:221:114;;;;;:::i;:::-;16008:27;;15960:7;15986:50;;;:21;:50;;;;;;;;16037:31;;;;15986:83;;;;;;;;15855:221;34763:133;;;;;;;;;;-1:-1:-1;34763:133:114;;;;;:::i;:::-;34823:4;34846:19;;;:11;:19;;;;;;;;34866:10;34846:31;;;;;;;:38;:43;;;34763:133;3049:105:115;;;;;;;;;;-1:-1:-1;3049:105:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5074:46;;;;;;;;;;;;;;;;34902:180:114;;;;;;;;;;-1:-1:-1;34902:180:114;;;;;:::i;:::-;35023:31;;34966:4;34989:66;;;:33;:66;;;;;;;;:74;;;;;;;:81;:86;;;34902:180;34316:177;;;;;;;;;;-1:-1:-1;34316:177:114;;;;;:::i;:::-;34413:7;34439:32;;;:25;:32;;;;;;;;-1:-1:-1;;;;;34439:47:114;;;;;;;;;;;;;34316:177;4718:89:115;;;;;;;;;;-1:-1:-1;4718:89:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;261:39;;;;;;;;;;-1:-1:-1;261:39:115;;;;-1:-1:-1;;;;;261:39:115;;;4855:34;;;;;;;;;;-1:-1:-1;4855:34:115;;;;;;;;1598:48;;;;;;;;;;;;;;;;3443:202:20;3528:4;-1:-1:-1;;;;;;3551:47:20;;-1:-1:-1;;;3551:47:20;;:87;;-1:-1:-1;;;;;;;;;;1134:40:28;;;3602:36:20;3544:94;3443:202;-1:-1:-1;;3443:202:20:o;11507:242:114:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;11693:49:114;;;;;;;;;;;;;;;;;;;;;;11507:242;;;;;;:::o;18915:308::-;19034:37;-1:-1:-1;;;;;;;;;;;19060:10:114;19034:7;:37::i;:::-;19013:132;;;;-1:-1:-1;;;19013:132:114;;13236:2:147;19013:132:114;;;13218:21:147;13275:2;13255:18;;;13248:30;13314:34;13294:18;;;13287:62;-1:-1:-1;;;13365:18:147;;;13358:46;13421:19;;19013:132:114;;;;;;;;;19155:61;19195:20;19155:39;:61::i;:::-;18915:308;:::o;24939:683::-;16008:27;;25058:4;15986:50;;;:21;:50;;;;;;;;16037:31;;;;15986:83;;;;;;;;25128:1;25078:51;25074:94;;-1:-1:-1;25152:5:114;;24939:683;-1:-1:-1;24939:683:114:o;25074:94::-;25541:15;25490:35;6566:30;;;6474:129;25490:35;7689;;16008:27;;15960:7;15986:50;;;:21;:50;;;;;;;;16037:31;;;;15986:83;;;;;;;;25372:102;;;;:::i;:::-;:153;;;;:::i;:::-;:184;25368:227;;;-1:-1:-1;25579:5:114;;24939:683;-1:-1:-1;24939:683:114:o;25368:227::-;-1:-1:-1;25611:4:114;;24939:683;-1:-1:-1;24939:683:114:o;33669:155::-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;-1:-1:-1;33775:25:114::1;:42:::0;33669:155::o;13996:317::-;14112:22;;;;;:63;;;14138:37;-1:-1:-1;;;;;;;;;;;14164:10:114;14138:7;:37::i;:::-;14091:144;;;;-1:-1:-1;;;14091:144:114;;;;;;;:::i;:::-;14245:61;14283:10;14295;14245:37;:61::i;2789:1624::-;4158:30:21;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:21;-1:-1:-1;;;4302:15:21;;;4301:16;;-1:-1:-1;;;;;4348:14:21;4279:19;4724:16;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4788:11;-1:-1:-1;;;;;4788:16:21;4803:1;4788:16;:50;;;;-1:-1:-1;4816:4:21;4808:25;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;-1:-1:-1;;;4906:23:21;;;;;;;;;;;4849:91;4949:18;;-1:-1:-1;;4949:18:21;4966:1;4949:18;;;4977:67;;;;5011:22;;-1:-1:-1;;;;5011:22:21;-1:-1:-1;;;5011:22:21;;;4977:67;3225:33:114::1;:31;:33::i;:::-;3268:15;:34:::0;;-1:-1:-1;;;;;;3268:34:114::1;-1:-1:-1::0;;;;;3268:34:114;::::1;::::0;;::::1;::::0;;;3312:26:::1;:56:::0;;;3378:33:::1;:70:::0;;;3458:59:::1;::::0;-1:-1:-1;;;3458:59:114;;:30:::1;::::0;:59:::1;::::0;3489:14;;3505:11;;3458:59:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3527:32;3548:10;3527:20;:32::i;:::-;3569;3590:10;3569:20;:32::i;:::-;3611:21;:46:::0;;;3667:16:::1;:36:::0;;-1:-1:-1;;;;;;3667:36:114::1;-1:-1:-1::0;;;;;3667:36:114;::::1;;::::0;;4242:19:::1;4259:2;4242:14:::0;:19:::1;:::i;:::-;4204:35;:57:::0;4304:19:::1;4321:2;4304:14:::0;:19:::1;:::i;:::-;4271:30;:52:::0;4361:1:::1;4333:25;:29:::0;;;4372:30:::1;:34:::0;5064:101:21;;;;5098:23;;-1:-1:-1;;;;5098:23:21;;;5140:14;;-1:-1:-1;14863:50:147;;5140:14:21;;14851:2:147;14836:18;5140:14:21;;;;;;;5064:101;4092:1079;;;;;2789:1624:114;;;;;;;:::o;33505:158::-;33592:7;33622:34;33636:19;:17;:19::i;33622:34::-;33615:41;;33505:158;:::o;32341:287::-;32445:7;32483:15;;:138;;-1:-1:-1;;;32483:138:114;;32542:4;32483:138;;;15126:51:147;15193:18;;;15186:34;;;-1:-1:-1;;;;;15256:32:147;;;15236:18;;;15229:60;32483:15:114;;;;:33;;15099:18:147;;32483:138:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7053:533::-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;6566:30:114;;7333:15:::1;::::0;:47:::1;::::0;-1:-1:-1;;;7333:47:114;;7374:4:::1;7333:47;::::0;::::1;6800:51:147::0;-1:-1:-1;;;;;7333:15:114;;::::1;::::0;:32:::1;::::0;6773:18:147;;7333:47:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:85;;;;:::i;:::-;7293:36;:125;7289:207;;7441:44;;-1:-1:-1::0;;;7441:44:114::1;;;;;;;;;;;7289:207;-1:-1:-1::0;7505:35:114::1;:74:::0;7053:533::o;4759:191:20:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:20;;;;;:24;;;;4759:191::o;17025:115:114:-;17087:46;17122:10;17087:34;:46::i;:::-;17025:115::o;5246:136:20:-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;18315:405:114:-;18452:37;-1:-1:-1;;;;;;;;;;;18478:10:114;18452:7;:37::i;:::-;18431:152;;;;-1:-1:-1;;;18431:152:114;;15824:2:147;18431:152:114;;;15806:21:147;15863:2;15843:18;;;15836:30;;;15902:34;15882:18;;;15875:62;15973:34;15953:18;;;15946:62;-1:-1:-1;;;16024:19:147;;;16017:35;16069:19;;18431:152:114;15622:472:147;18431:152:114;18627:31;;18593:66;;;;:33;:66;;;;;;;;18660:27;;18593:95;;;;;;;;:118;;;;;;;;;;;;;;;;;;;;18315:405::o;9951:929::-;10000:7;10392:17;10412:27;:25;:27::i;:::-;10392:47;;10449:17;10469:19;:17;:19::i;:::-;10498:26;10527:15;;:66;;-1:-1:-1;;;10527:66:114;;10587:4;10527:66;;;6800:51:147;10449:39:114;;-1:-1:-1;10498:26:114;;-1:-1:-1;;;;;10527:15:114;;;;:51;;6773:18:147;;10527:66:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10527:66:114;;;;;;;;;;;;:::i;:::-;10498:95;;10607:9;:16;10627:1;10607:21;10603:69;;10659:1;10644:17;;;;;9951:929;:::o;10603:69::-;10681:26;10771:9;:16;10745:9;10756;10728:38;;;;;;;;17230:19:147;;;17274:2;17265:12;;17258:28;17311:2;17302:12;;17073:247;10728:38:114;;;;;;;;;;;;;10718:49;;;;;;10710:58;;:77;;;;:::i;:::-;10681:106;;10844:9;10854:18;10844:29;;;;;;;;:::i;:::-;;;;;;;10837:36;;;;;;9951:929;:::o;6348:245:20:-;-1:-1:-1;;;;;6441:34:20;;966:10:25;6441:34:20;6437:102;;6498:30;;-1:-1:-1;;;6498:30:20;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;8946:165:114:-;9013:7;9039:15;;:65;;-1:-1:-1;;;9039:65:114;;9098:4;9039:65;;;6800:51:147;-1:-1:-1;;;;;9039:15:114;;;;:50;;6773:18:147;;9039:65:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8574:133::-;8622:7;8648:15;;:52;;-1:-1:-1;;;8648:52:114;;8694:4;8648:52;;;6800:51:147;-1:-1:-1;;;;;8648:15:114;;;;:37;;6773:18:147;;8648:52:114;6654:203:147;4837:570:114;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;5033:21:114::1;5057:15:::0;;:47:::1;::::0;-1:-1:-1;;;5057:47:114;;5098:4:::1;5057:47;::::0;::::1;6800:51:147::0;-1:-1:-1;;;;;5057:15:114;;::::1;::::0;:32:::1;::::0;6773:18:147;;5057:47:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5033:71:::0;-1:-1:-1;5033:71:114;5229:26:::1;5233:22:::0;5229:1:::1;:26;:::i;:::-;:43;5225:120;;5296:38;;-1:-1:-1::0;;;5296:38:114::1;;;;;;;;;;;5225:120;-1:-1:-1::0;;5354:21:114::1;:46:::0;4837:570::o;32634:607::-;32707:7;32909:15;;:76;;-1:-1:-1;;;32909:76:114;;32970:4;32909:76;;;6800:51:147;32707:7:114;;-1:-1:-1;;;;;32909:15:114;;:39;;6773:18:147;;32909:76:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32909:76:114;;;;;;;;;;;;:::i;:::-;32879:106;;32995:18;33032:9;33027:181;33051:10;:17;33047:1;:21;33027:181;;;33158:39;33176:5;33183:10;33194:1;33183:13;;;;;;;;:::i;:::-;;;;;;;33158:17;:39::i;:::-;33144:53;;;;:::i;:::-;;-1:-1:-1;33070:3:114;;33027:181;;;-1:-1:-1;33224:10:114;32634:607;-1:-1:-1;;;32634:607:114:o;32088:176::-;32184:7;32210:47;32227:19;:17;:19::i;:::-;32248:8;32210:16;:47::i;1866:326::-;1966:39;2362:4:20;1994:10:114;1966:7;:39::i;:::-;1945:120;;;;-1:-1:-1;;;1945:120:114;;;;;;;:::i;:::-;2080:9;2075:111;2099:8;:15;2095:1;:19;2075:111;;;2135:40;-1:-1:-1;;;;;;;;;;;2163:8:114;2172:1;2163:11;;;;;;;;:::i;:::-;;;;;;;2135:9;:40::i;:::-;2116:3;;2075:111;;;;1866:326;:::o;4161:214:22:-;2655:13;:11;:13::i;:::-;4276:36:::1;4294:17;4276;:36::i;:::-;4322:46;4344:17;4363:4;4322:21;:46::i;3708:134::-:0;3777:7;2926:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3708:134:22;:::o;33830:165:114:-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;-1:-1:-1;33941:30:114::1;:47:::0;33830:165::o;8131:129::-;8180:7;8206:15;;:47;;-1:-1:-1;;;8206:47:114;;8247:4;8206:47;;;6800:51:147;-1:-1:-1;;;;;8206:15:114;;;;:32;;6773:18:147;;8206:47:114;6654:203:147;9197:414:114;9255:7;9471:15;;:47;;-1:-1:-1;;;9471:47:114;;9512:4;9471:47;;;6800:51:147;9296:15:114;;9255:7;;-1:-1:-1;;;;;9471:15:114;;;;:32;;6773:18:147;;9471:47:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9457:61;;:11;:61;:::i;:::-;9426:92;;9582:21;;9559:20;:44;;;;:::i;:::-;9535:69;;:20;:69;:::i;:::-;9528:76;;;;9197:414;:::o;14319:430::-;14451:22;;;;;:63;;;14477:37;-1:-1:-1;;;;;;;;;;;14503:10:114;14477:7;:37::i;:::-;14430:144;;;;-1:-1:-1;;;14430:144:114;;;;;;;:::i;:::-;14589:9;14584:159;14608:21;:28;14604:1;:32;14584:159;;;14657:75;14695:10;14707:21;14729:1;14707:24;;;;;;;;:::i;:::-;;;;;;;14657:37;:75::i;:::-;14638:3;;14584:159;;8745:131;8795:7;8821:15;;:48;;-1:-1:-1;;;8821:48:114;;8863:4;8821:48;;;6800:51:147;-1:-1:-1;;;;;8821:15:114;;;;:33;;6773:18:147;;8821:48:114;6654:203:147;30780:311:114;30901:7;30939:15;;:145;;-1:-1:-1;;;30939:145:114;;30989:4;30939:145;;;18381:51:147;18448:18;;;18441:34;;;-1:-1:-1;;;;;18511:32:147;;;18491:18;;;18484:60;18580:32;;;18560:18;;;18553:60;30939:15:114;;;;:24;;18353:19:147;;30939:145:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30920:164;30780:311;-1:-1:-1;;;;30780:311:114:o;528:89:117:-;4158:30:21;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:21;-1:-1:-1;;;4302:15:21;;;4301:16;;-1:-1:-1;;;;;4348:14:21;4279:19;4724:16;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4788:11;-1:-1:-1;;;;;4788:16:21;4803:1;4788:16;:50;;;;-1:-1:-1;4816:4:21;4808:25;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;-1:-1:-1;;;4906:23:21;;;;;;;;;;;4849:91;4949:18;;-1:-1:-1;;4949:18:21;4966:1;4949:18;;;4977:67;;;;5011:22;;-1:-1:-1;;;;5011:22:21;-1:-1:-1;;;5011:22:21;;;4977:67;587:23:117::1;:21;:23::i;:::-;5068:14:21::0;5064:101;;;5098:23;;-1:-1:-1;;;;5098:23:21;;;5140:14;;-1:-1:-1;14863:50:147;;5140:14:21;;14851:2:147;14836:18;5140:14:21;;;;;;;5064:101;4092:1079;;;;;528:89:117:o;2198:136:114:-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;2290:37:114::1;-1:-1:-1::0;;;;;;;;;;;2318:8:114::1;2290:9;:37::i;8331:207::-:0;8381:7;8483:15;;:47;;-1:-1:-1;;;8483:47:114;;8524:4;8483:47;;;6800:51:147;8422:15:114;;-1:-1:-1;;;;;8483:15:114;;:32;;6773:18:147;;8483:47:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8469:61;;:11;:61;:::i;:::-;8454:77;;:11;:77;:::i;:::-;8447:84;;;8331:207;:::o;3732::20:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:20;;;;;;;;-1:-1:-1;;;;;3901:31:20;;;;;;;;;;;;;;;3732:207::o;4465:195:114:-;4523:39;2362:4:20;4551:10:114;4523:7;:39::i;:::-;4515:89;;;;-1:-1:-1;;;4515:89:114;;18826:2:147;4515:89:114;;;18808:21:147;18865:2;18845:18;;;18838:30;18904:34;18884:18;;;18877:62;-1:-1:-1;;;18955:18:147;;;18948:35;19000:19;;4515:89:114;18624:401:147;4515:89:114;4614:15;;;:39;;;-1:-1:-1;;;4614:39:114;;;;-1:-1:-1;;;;;4614:15:114;;;;:37;;:39;;;;;;;;;;:15;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;15017:159;15081:7;15143:26;;15107:33;;:62;;;;:::i;1623:237::-;1708:39;2362:4:20;1736:10:114;1708:7;:39::i;:::-;1687:120;;;;-1:-1:-1;;;1687:120:114;;;;;;;:::i;:::-;1817:36;-1:-1:-1;;;;;;;;;;;1845:7:114;1817:9;:36::i;34580:177::-;34683:15;;:66;;-1:-1:-1;;;34683:66:114;;34743:4;34683:66;;;6800:51:147;34648:16:114;;-1:-1:-1;;;;;34683:15:114;;:51;;6773:18:147;;34683:66:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34683:66:114;;;;;;;;;;;;:::i;31523:484::-;31625:7;31674:15;;:76;;-1:-1:-1;;;31674:76:114;;31735:4;31674:76;;;6800:51:147;31625:7:114;;-1:-1:-1;;;;;31674:15:114;;:39;;6773:18:147;;31674:76:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31674:76:114;;;;;;;;;;;;:::i;:::-;31644:106;;31760:18;31797:9;31792:182;31816:10;:17;31812:1;:21;31792:182;;;31923:40;31932:5;31939:10;31950:1;31939:13;;;;;;;;:::i;:::-;;;;;;;31954:8;31923;:40::i;:::-;31909:54;;;;:::i;:::-;;-1:-1:-1;31835:3:114;;31792:182;;;-1:-1:-1;31990:10:114;31523:484;-1:-1:-1;;;;31523:484:114:o;31191:198::-;31306:7;31332:50;31341:19;:17;:19::i;:::-;31362:9;31373:8;31332;:50::i;2340:226::-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;2452:9:114::1;2447:113;2471:9;:16;2467:1;:20;2447:113;;;2508:41;-1:-1:-1::0;;;;;;;;;;;2536:9:114::1;2546:1;2536:12;;;;;;;;:::i;2508:41::-;2489:3;;2447:113;;11026:250:::0;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;11211:15:114::1;::::0;:58:::1;::::0;-1:-1:-1;;;11211:58:114;;11253:4:::1;11211:58;::::0;::::1;19204:51:147::0;19271:18;;;19264:34;;;-1:-1:-1;;;;;11211:15:114;;::::1;::::0;:33:::1;::::0;19177:18:147;;11211:58:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11026:250:::0;;:::o;7737:132::-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;-1:-1:-1;7830:22:114::1;:32:::0;;-1:-1:-1;;7830:32:114::1;::::0;::::1;;::::0;;;::::1;::::0;;7737:132::o;33319:180::-;33417:7;33443:49;33461:19;:17;:19::i;:::-;33482:9;33443:17;:49::i;5662:138:20:-;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;5787:464:114:-:0;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;7689:35:114;;6008:15:::1;::::0;:47:::1;::::0;-1:-1:-1;;;6008:47:114;;6049:4:::1;6008:47;::::0;::::1;6800:51:147::0;-1:-1:-1;;;;;6008:15:114;;::::1;::::0;:32:::1;::::0;6773:18:147;;6008:47:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:90;;;;:::i;:::-;5973:31;:125;5969:202;;6121:39;;-1:-1:-1::0;;;6121:39:114::1;;;;;;;;;;;5969:202;-1:-1:-1::0;6180:30:114::1;:64:::0;5787:464::o;4148:103:20:-;4214:30;4225:4;966:10:25;4214::20;:30::i;11817:2174:114:-;12062:27;;12050:40;;;;:11;:40;;;;;;;;-1:-1:-1;;;;;12050:50:114;;;;;;;;;:57;:62;12046:113;;12133:26;;-1:-1:-1;;;12133:26:114;;;;;;;;;;;12046:113;12630:27;;12601:26;;12565:33;;:62;;12601:26;12565:62;:::i;:::-;:92;12561:156;;;12680:26;;-1:-1:-1;;;12680:26:114;;;;;;;;;;;12561:156;13081:27;;13051:58;;;;:29;:58;;;;;;:63;;13047:172;;13191:17;:15;:17::i;:::-;13160:27;;13130:58;;;;:29;:58;;;;;:78;13047:172;13287:27;;13275:40;;;;:11;:40;;;;;;;;-1:-1:-1;;;;;13275:50:114;;;;;;;;;;:73;;;;;;;;;;;;;;;;;;;;;;;;13425:106;;13515:15;13425:27;:106::i;:::-;13593:38;13634:43;13668:8;13634:33;:43::i;:::-;13703:27;;13687:44;;;;:15;:44;;;;;;;;13732:31;;;;13687:77;;;;;;;:111;;13593:84;;-1:-1:-1;13593:84:114;;13687:77;;:44;:111;;13593:84;;13687:111;:::i;:::-;;;;-1:-1:-1;;13857:28:114;;;;;13899:31;;;;;13814:170;;19483:25:147;;;19524:18;;;19517:34;;;13857:28:114;;13814:170;;19456:18:147;13814:170:114;;;;;;;11963:2028;11817:2174;;:::o;9071:205:21:-;9129:30;;3147:66;9186:27;8819:122;738:128:117;6929:20:21;:18;:20::i;:::-;817:42:117::1;2362:4:20;848:10:117;817;:42::i;17754:485:114:-:0;18153:67;18182:33;;18218:1;18182:37;;;;:::i;:::-;18153:28;:67::i;:::-;18146:87;;17754:485;:::o;7270:387:20:-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:20;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:20;;;;;;;;;:38;;-1:-1:-1;;7475:38:20;7509:4;7475:38;;;7559:12;966:10:25;;887:96;7559:12:20;-1:-1:-1;;;;;7532:40:20;7550:7;-1:-1:-1;;;;;7532:40:20;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7894:388;7972:4;-1:-1:-1;;;;;;;;;;;8061:22:20;8069:4;8075:7;8061;:22::i;:::-;8057:219;;;8133:5;8099:14;;;;;;;;;;;-1:-1:-1;;;;;8099:31:20;;;;;;;;;;:39;;-1:-1:-1;;8099:39:20;;;8157:40;966:10:25;;8099:14:20;;8157:40;;8133:5;8157:40;8218:4;8211:11;;;;;4578:312:22;4658:4;-1:-1:-1;;;;;4667:6:22;4650:23;;;:120;;;4764:6;-1:-1:-1;;;;;4728:42:22;:32;-1:-1:-1;;;;;;;;;;;1519:53:41;-1:-1:-1;;;;;1519:53:41;;1441:138;4728:32:22;-1:-1:-1;;;;;4728:42:22;;;4650:120;4633:251;;;4844:29;;-1:-1:-1;;;4844:29:22;;;;;;;;;;;991:117:117;2362:4:20;3191:16;2362:4;3191:10;:16::i;6032:538:22:-;6149:17;-1:-1:-1;;;;;6131:50:22;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6131:52:22;;;;;;;;-1:-1:-1;;6131:52:22;;;;;;;;;;;;:::i;:::-;;;6127:437;;6493:60;;-1:-1:-1;;;6493:60:22;;-1:-1:-1;;;;;6818:32:147;;6493:60:22;;;6800:51:147;6773:18;;6493:60:22;6654:203:147;6127:437:22;-1:-1:-1;;;;;;;;;;;6225:40:22;;6221:120;;6292:34;;-1:-1:-1;;;6292:34:22;;;;;1507:25:147;;;1480:18;;6292:34:22;1361:177:147;6221:120:22;6354:54;6384:17;6403:4;6354:29;:54::i;5007:213::-;5081:4;-1:-1:-1;;;;;5090:6:22;5073:23;;5069:145;;5174:29;;-1:-1:-1;;;5174:29:22;;;;;;;;;;;623:109:117;6929:20:21;:18;:20::i;:::-;692:33:117::1;:31;:33::i;4381:197:20:-:0;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:20;;-1:-1:-1;;;;;19222:32:147;;4514:47:20;;;19204:51:147;19271:18;;;19264:34;;;19177:18;;4514:47:20;19030:274:147;16150:443:114;16265:29;;;;:21;:29;;;;;;;;:41;;;;;;;;;:46;16261:263;;16150:443;;;:::o;16261:263::-;16395:9;16408:1;16395:14;16391:133;;16150:443;;;:::o;16391:133::-;16533:29;;;;:21;:29;;;;;;;;:41;;;;;;;;:53;16150:443::o;7082:141:21:-;7149:17;:15;:17::i;:::-;7144:73;;7189:17;;-1:-1:-1;;;7189:17:21;;;;;;;;;;;25967:4503:114;26049:4;26091:47;;;:29;:47;;;;;;16979:33;;26148:1014;;;26406:31;26440:29;26406:31;26470:18;26487:1;26470:16;:18;:::i;:::-;26440:49;;;;;;;;;;;;26406:83;;26525:23;26507:15;:41;26503:649;;;26571:32;26606:37;:35;:37::i;:::-;26571:72;;26771:9;26766:313;26790:15;:22;26786:1;:26;26766:313;;;26845:11;:29;26857:16;26845:29;;;;;;;;;;;:49;26875:15;26891:1;26875:18;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;26845:49:114;-1:-1:-1;;;;;26845:49:114;;;;;;;;;;;;:56;;;26905:1;26845:61;26841:220;;26934:47;;;;:29;:47;;;;;:73;;;27033:5;;26841:220;26814:3;;26766:313;;;;27114:23;27096:41;;26553:599;26503:649;26287:875;26148:1014;27480:15;27458:19;:17;:19::i;:::-;:37;27451:249;;;27674:15;:13;:15::i;:::-;27451:249;;;27885:21;27948:1;27914:30;27928:15;27914:13;:30::i;:::-;27910:34;;:1;:34;:::i;:::-;27909:40;;;;:::i;:::-;:44;;27952:1;27909:44;:::i;:::-;27885:68;;27963:26;27992:37;:35;:37::i;:::-;27963:66;;28291:31;28345:9;28340:1688;28364:9;:16;28360:1;:20;28340:1688;;;28401:16;28420:9;28430:1;28420:12;;;;;;;;:::i;:::-;;;;;;;;;;;;28446:48;28497:29;;;:11;:29;;;;;;-1:-1:-1;;;;;28497:39:114;;;;;;;;;;28446:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28420:12;;-1:-1:-1;28446:90:114;28739:47;;28735:61;;28788:8;;;;28735:61;28915:27;;28866:30;28899:44;;;:15;:44;;;;;;;;28944:31;;;;28899:77;;;;;;;;28995:39;;;28991:1027;;16008:27;;29242:17;15986:50;;;:21;:50;;;;;;;;16037:31;;;;15986:83;;;;;;;;29423:35;;29411:47;;15986:83;29411:47;:::i;:::-;29393:15;:65;29389:76;;;29460:5;;;;;;29389:76;29484:66;29517:20;29539:10;29484:32;:66::i;:::-;-1:-1:-1;29597:4:114;;25967:4503;-1:-1:-1;;;;;;;;;;25967:4503:114:o;28991:1027::-;28387:1641;;;28340:1688;28382:3;;28340:1688;;;;30241:26;30240:27;:70;;;;;30291:19;:17;:19::i;:::-;30271:17;:15;:17::i;:::-;:39;30240:70;30236:206;;;30326:15;:13;:15::i;:::-;-1:-1:-1;30362:4:114;;25967:4503;-1:-1:-1;;;;;25967:4503:114:o;30236:206::-;-1:-1:-1;30458:5:114;;25967:4503;-1:-1:-1;;;;;25967:4503:114:o;2264:344:41:-;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:41;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;2454:148::-;2573:18;:16;:18::i;8485:120:21:-;8535:4;8558:26;:24;:26::i;:::-;:40;-1:-1:-1;;;8558:40:21;;;;;;-1:-1:-1;8485:120:21:o;22765:1897:114:-;22877:22;22902:19;:17;:19::i;:::-;22877:44;;22931:26;22960:37;:35;:37::i;:::-;22931:66;;23039:9;23034:1580;23058:9;:16;23054:1;:20;23034:1580;;;23152:1;23099:36;;;:20;:36;;;;;23136:12;;23152:1;;23136:9;;23146:1;;23136:12;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23099:50:114;-1:-1:-1;;;;;23099:50:114;;;;;;;;;;;;;:54;23095:697;;;23253:14;23351:47;23385:9;23395:1;23385:12;;;;;;;;:::i;:::-;;;;;;;23351:33;:47::i;:::-;23323:25;;23270:20;:36;23291:14;23270:36;;;;;;;;;;;:50;23307:9;23317:1;23307:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23270:50:114;-1:-1:-1;;;;;23270:50:114;;;;;;;;;;;;;:78;;;;:::i;:::-;:128;;;;:::i;:::-;23543:15;;23576:12;;23253:145;;-1:-1:-1;;;;;;23543:15:114;;:32;;23576:9;;23586:1;;23576:12;;;;;;:::i;:::-;;;;;;;;;;;23598:16;;23543:72;;-1:-1:-1;;;;;;23543:72:114;;;;;;;-1:-1:-1;;;;;15144:32:147;;;23543:72:114;;;15126:51:147;15193:18;;;15186:34;;;23598:16:114;;15236:18:147;;;15229:60;15099:18;;23543:72:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23155:637;23095:697;23912:1;23854:41;;;:25;:41;;;;;23896:12;;23912:1;;23896:9;;23906:1;;23896:12;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23854:55:114;-1:-1:-1;;;;;23854:55:114;;;;;;;;;;;;;:59;23850:754;;;23933:14;24041:47;24075:9;24085:1;24075:12;;;;;;;;:::i;24041:47::-;24008:30;;23950:25;:41;23976:14;23950:41;;;;;;;;;;;:55;23992:9;24002:1;23992:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23950:55:114;-1:-1:-1;;;;;23950:55:114;;;;;;;;;;;;;:88;;;;:::i;:::-;:138;;;;:::i;:::-;24106:15;;24139:12;;23933:155;;-1:-1:-1;;;;;;24106:15:114;;:32;;24139:9;;24149:1;;24139:12;;;;;;:::i;:::-;;;;;;;;;;;24161:16;;24106:72;;-1:-1:-1;;;;;;24106:72:114;;;;;;;-1:-1:-1;;;;;15144:32:147;;;24106:72:114;;;15126:51:147;15193:18;;;15186:34;;;24161:16:114;;15236:18:147;;;15229:60;15099:18;;24106:72:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23915:689;23850:754;23076:3;;23034:1580;;;-1:-1:-1;24624:15:114;;;:31;;;-1:-1:-1;;;24624:31:114;;;;-1:-1:-1;;;;;24624:15:114;;;;:29;;:31;;;;;;;;;;:15;;:31;;;;;;;;;;19627:2891;19756:29;19788:19;:17;:19::i;:::-;20082:27;;20052:58;;;;:29;:58;;;;;;19756:51;;-1:-1:-1;20052:83:114;;20048:155;;20158:34;;-1:-1:-1;;;20158:34:114;;;;;;;;;;;20048:155;20352:27;;:31;;20382:1;;20352:31;:::i;:::-;20315:33;;:68;20311:140;;20406:34;;-1:-1:-1;;;20406:34:114;;;;;;;;;;;20311:140;20551:26;20580:37;:35;:37::i;:::-;20551:66;;20632:9;20627:269;20651:9;:16;20647:1;:20;20627:269;;;20761:20;:31;;;20692:11;:40;20704:20;:27;;;20692:40;;;;;;;;;;;:54;20733:9;20743:1;20733:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;20692:54:114;-1:-1:-1;;;;;20692:54:114;;;;;;;;;;;;:65;;;:100;20688:198;;20812:20;:43;20833:21;20812:43;;;;;;;;;;;:57;20856:9;20866:1;20856:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;20812:57:114;-1:-1:-1;;;;;20812:57:114;;;;;;;;;;;;;:59;;;;;;;;;:::i;:::-;;;;;;20688:198;20669:3;;20627:269;;;;20952:60;20991:20;20952:38;:60::i;:::-;20947:900;;21137:48;;;;:25;:48;;;;;;;;-1:-1:-1;;;;;21137:58:114;;;;;;;;;:63;;21199:1;;21137:48;:63;;21199:1;;21137:63;:::i;:::-;;;;-1:-1:-1;20947:900:114;;-1:-1:-1;20947:900:114;;21731:8;-1:-1:-1;;;;;21709:30:114;:18;:16;:18::i;:::-;-1:-1:-1;;;;;21709:30:114;;21705:132;;21759:48;;;;:25;:48;;;;;;;;-1:-1:-1;;;;;21759:58:114;;;;;;;;;:63;;21821:1;;21759:48;:63;;21821:1;;21759:63;:::i;:::-;;;;-1:-1:-1;;21705:132:114;21891:31;;21857:66;;;;:33;:66;;;;;;;;21924:27;;21857:95;;;;;;;:118;;;;;;;;;;;;;;;;;;;;;;;;;;;21985:33;:63;;;22058:44;;;:15;:44;;;;;:55;;-1:-1:-1;;;;;;22058:55:114;-1:-1:-1;;;;;22058:55:114;;;;;22152:27;;22123:57;;:28;:57;;;;;22183:12;22123:72;;22237:27;;22205:60;;:31;:60;;;;;;22268:15;22205:78;;22387:28;22429:31;;22474:27;;22350:161;;19483:25:147;;;19524:18;;;19517:34;;;;22350:161:114;;19456:18:147;22350:161:114;;;;;;;19746:2772;;19627:2891;;:::o;1671:281:41:-;1748:17;-1:-1:-1;;;;;1748:29:41;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:41;;-1:-1:-1;;;;;6818:32:147;;1805:47:41;;;6800:51:147;6773:18;;1805:47:41;6654:203:147;1744:119:41;-1:-1:-1;;;;;;;;;;;1872:73:41;;-1:-1:-1;;;;;;1872:73:41;-1:-1:-1;;;;;1872:73:41;;;;;;;;;;1671:281::o;3916:253:54:-;3999:12;4024;4038:23;4065:6;-1:-1:-1;;;;;4065:19:54;4085:4;4065:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4023:67;;;;4107:55;4134:6;4142:7;4151:10;4107:26;:55::i;:::-;4100:62;3916:253;-1:-1:-1;;;;;3916:253:54:o;6113:122:41:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:41;;;;;;;;;;;4437:582:54;4581:12;4610:7;4605:408;;4633:19;4641:10;4633:7;:19::i;:::-;4605:408;;;4857:17;;:22;:49;;;;-1:-1:-1;;;;;;4883:18:54;;;:23;4857:49;4853:119;;;4933:24;;-1:-1:-1;;;4933:24:54;;-1:-1:-1;;;;;6818:32:147;;4933:24:54;;;6800:51:147;6773:18;;4933:24:54;6654:203:147;4853:119:54;-1:-1:-1;4992:10:54;4985:17;;5559:487;5690:17;;:21;5686:354;;5887:10;5881:17;5943:15;5930:10;5926:2;5922:19;5915:44;5686:354;6010:19;;-1:-1:-1;;;6010:19:54;;;;;;;;;;;14:286:147;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:147;;209:43;;199:71;;266:1;263;256:12;497:466;574:6;582;590;643:2;631:9;622:7;618:23;614:32;611:52;;;659:1;656;649:12;611:52;-1:-1:-1;;704:23:147;;;824:2;809:18;;796:32;;-1:-1:-1;927:2:147;912:18;;;899:32;;497:466;-1:-1:-1;497:466:147:o;1543:226::-;1602:6;1655:2;1643:9;1634:7;1630:23;1626:32;1623:52;;;1671:1;1668;1661:12;1623:52;-1:-1:-1;1716:23:147;;1543:226;-1:-1:-1;1543:226:147:o;1774:127::-;1835:10;1830:3;1826:20;1823:1;1816:31;1866:4;1863:1;1856:15;1890:4;1887:1;1880:15;1906:275;1977:2;1971:9;2042:2;2023:13;;-1:-1:-1;;2019:27:147;2007:40;;-1:-1:-1;;;;;2062:34:147;;2098:22;;;2059:62;2056:88;;;2124:18;;:::i;:::-;2160:2;2153:22;1906:275;;-1:-1:-1;1906:275:147:o;2186:727::-;2253:5;2301:4;2289:9;2284:3;2280:19;2276:30;2273:50;;;2319:1;2316;2309:12;2273:50;2372:2;2366:9;2414:4;2402:17;;-1:-1:-1;;;;;2434:34:147;;2470:22;;;2431:62;2428:88;;;2496:18;;:::i;:::-;2532:2;2525:22;;;2616:23;;2648;;2744:2;2729:18;;;2716:32;2764:15;;;2757:32;2847:18;;;2834:32;2882:15;;;2875:32;;;;-1:-1:-1;2565:6:147;2186:727;-1:-1:-1;2186:727:147:o;2918:254::-;3016:6;3069:2;3057:9;3048:7;3044:23;3040:32;3037:52;;;3085:1;3082;3075:12;3037:52;3108:58;3158:7;3147:9;3108:58;:::i;3177:149::-;-1:-1:-1;;;;;3270:31:147;;3260:42;;3250:70;;3316:1;3313;3306:12;3331:183;3391:4;-1:-1:-1;;;;;3416:6:147;3413:30;3410:56;;;3446:18;;:::i;:::-;-1:-1:-1;3491:1:147;3487:14;3503:4;3483:25;;3331:183::o;3519:762::-;3573:5;3626:3;3619:4;3611:6;3607:17;3603:27;3593:55;;3644:1;3641;3634:12;3593:55;3684:6;3671:20;3711:64;3727:47;3767:6;3727:47;:::i;:::-;3711:64;:::i;:::-;3799:3;3823:6;3818:3;3811:19;3855:4;3850:3;3846:14;3839:21;;3916:4;3906:6;3903:1;3899:14;3891:6;3887:27;3883:38;3869:52;;3944:3;3936:6;3933:15;3930:35;;;3961:1;3958;3951:12;3930:35;3997:4;3989:6;3985:17;4011:239;4027:6;4022:3;4019:15;4011:239;;;4109:3;4096:17;4126:49;4169:5;4126:49;:::i;:::-;4188:18;;4235:4;4226:14;;;;4044;4011:239;;;-1:-1:-1;4268:7:147;3519:762;-1:-1:-1;;;;;3519:762:147:o;4286:1170::-;4450:6;4458;4466;4474;4482;4490;4498;4551:3;4539:9;4530:7;4526:23;4522:33;4519:53;;;4568:1;4565;4558:12;4519:53;4607:9;4594:23;4626:49;4669:5;4626:49;:::i;:::-;4694:5;-1:-1:-1;4772:2:147;4757:18;;4744:32;;-1:-1:-1;4875:2:147;4860:18;;4847:32;;-1:-1:-1;4978:2:147;4963:18;;4950:32;;-1:-1:-1;5059:3:147;5044:19;;5031:33;-1:-1:-1;;;;;5076:30:147;;5073:50;;;5119:1;5116;5109:12;5073:50;5142:61;5195:7;5186:6;5175:9;5171:22;5142:61;:::i;:::-;5132:71;-1:-1:-1;;5276:3:147;5261:19;;5248:33;;-1:-1:-1;5359:3:147;5344:19;;5331:33;5373:51;5331:33;5373:51;:::i;:::-;5443:7;5433:17;;;4286:1170;;;;;;;;;;:::o;5461:385::-;5529:6;5537;5590:2;5578:9;5569:7;5565:23;5561:32;5558:52;;;5606:1;5603;5596:12;5558:52;5651:23;;;-1:-1:-1;5750:2:147;5735:18;;5722:32;5763:51;5722:32;5763:51;:::i;:::-;5833:7;5823:17;;;5461:385;;;;;:::o;6862:346::-;6930:6;6938;6991:2;6979:9;6970:7;6966:23;6962:32;6959:52;;;7007:1;7004;6997:12;6959:52;-1:-1:-1;;7052:23:147;;;7172:2;7157:18;;;7144:32;;-1:-1:-1;6862:346:147:o;7537:265::-;7596:6;7649:2;7637:9;7628:7;7624:23;7620:32;7617:52;;;7665:1;7662;7655:12;7617:52;7704:9;7691:23;7723:49;7766:5;7723:49;:::i;7807:348::-;7891:6;7944:2;7932:9;7923:7;7919:23;7915:32;7912:52;;;7960:1;7957;7950:12;7912:52;8000:9;7987:23;-1:-1:-1;;;;;8025:6:147;8022:30;8019:50;;;8065:1;8062;8055:12;8019:50;8088:61;8141:7;8132:6;8121:9;8117:22;8088:61;:::i;8160:918::-;8237:6;8245;8298:2;8286:9;8277:7;8273:23;8269:32;8266:52;;;8314:1;8311;8304:12;8266:52;8353:9;8340:23;8372:49;8415:5;8372:49;:::i;:::-;8440:5;-1:-1:-1;8496:2:147;8481:18;;8468:32;-1:-1:-1;;;;;8512:30:147;;8509:50;;;8555:1;8552;8545:12;8509:50;8578:22;;8631:4;8623:13;;8619:27;-1:-1:-1;8609:55:147;;8660:1;8657;8650:12;8609:55;8700:2;8687:16;-1:-1:-1;;;;;8718:6:147;8715:30;8712:56;;;8748:18;;:::i;:::-;8790:57;8837:2;8814:17;;-1:-1:-1;;8810:31:147;8843:2;8806:40;8790:57;:::i;:::-;8870:6;8863:5;8856:21;8918:7;8913:2;8904:6;8900:2;8896:15;8892:24;8889:37;8886:57;;;8939:1;8936;8929:12;8886:57;8994:6;8989:2;8985;8981:11;8976:2;8969:5;8965:14;8952:49;9046:1;9041:2;9032:6;9025:5;9021:18;9017:27;9010:38;9067:5;9057:15;;;;;8160:918;;;;;:::o;9083:965::-;9206:6;9259:2;9247:9;9238:7;9234:23;9230:32;9227:52;;;9275:1;9272;9265:12;9227:52;9315:9;9302:23;-1:-1:-1;;;;;9340:6:147;9337:30;9334:50;;;9380:1;9377;9370:12;9334:50;9403:22;;9456:4;9448:13;;9444:27;-1:-1:-1;9434:55:147;;9485:1;9482;9475:12;9434:55;9525:2;9512:16;9548:64;9564:47;9604:6;9564:47;:::i;9548:64::-;9634:3;9658:6;9653:3;9646:19;9690:2;9685:3;9681:12;9674:19;;9748:2;9740:4;9732:6;9728:17;9724:2;9720:26;9716:35;9702:49;;9774:7;9766:6;9763:19;9760:39;;;9795:1;9792;9785:12;9760:39;9827:2;9823;9819:11;9808:22;;9839:179;9855:6;9850:3;9847:15;9839:179;;;9923:52;9967:7;9962:3;9923:52;:::i;:::-;9918:3;9911:65;10005:2;10000:3;9996:12;9989:19;;9881:4;9876:3;9872:14;9865:21;;9839:179;;;10037:5;9083:965;-1:-1:-1;;;;;;9083:965:147:o;10053:544::-;10130:6;10138;10146;10199:2;10187:9;10178:7;10174:23;10170:32;10167:52;;;10215:1;10212;10205:12;10167:52;10260:23;;;-1:-1:-1;10359:2:147;10344:18;;10331:32;10372:51;10331:32;10372:51;:::i;:::-;10442:7;-1:-1:-1;10501:2:147;10486:18;;10473:32;10514:51;10473:32;10514:51;:::i;:::-;10584:7;10574:17;;;10053:544;;;;;:::o;10602:446::-;10655:3;10693:5;10687:12;10720:6;10715:3;10708:19;10752:4;10747:3;10743:14;10736:21;;10791:4;10784:5;10780:16;10814:1;10824:199;10838:6;10835:1;10832:13;10824:199;;;10903:13;;-1:-1:-1;;;;;10899:39:147;10887:52;;10968:4;10959:14;;;;10996:17;;;;10935:1;10853:9;10824:199;;;-1:-1:-1;11039:3:147;;10602:446;-1:-1:-1;;;;10602:446:147:o;11053:261::-;11232:2;11221:9;11214:21;11195:4;11252:56;11304:2;11293:9;11289:18;11281:6;11252:56;:::i;11319:418::-;11468:2;11457:9;11450:21;11431:4;11500:6;11494:13;11543:6;11538:2;11527:9;11523:18;11516:34;11602:6;11597:2;11589:6;11585:15;11580:2;11569:9;11565:18;11559:50;11658:1;11653:2;11644:6;11633:9;11629:22;11625:31;11618:42;11728:2;11721;11717:7;11712:2;11704:6;11700:15;11696:29;11685:9;11681:45;11677:54;11669:62;;;11319:418;;;;:::o;11742:424::-;11810:6;11818;11871:2;11859:9;11850:7;11846:23;11842:32;11839:52;;;11887:1;11884;11877:12;11839:52;11926:9;11913:23;11945:49;11988:5;11945:49;:::i;:::-;12013:5;-1:-1:-1;12070:2:147;12055:18;;12042:32;12083:51;12042:32;12083:51;:::i;12522:273::-;12578:6;12631:2;12619:9;12610:7;12606:23;12602:32;12599:52;;;12647:1;12644;12637:12;12599:52;12686:9;12673:23;12739:5;12732:13;12725:21;12718:5;12715:32;12705:60;;12761:1;12758;12751:12;13451:127;13512:10;13507:3;13503:20;13500:1;13493:31;13543:4;13540:1;13533:15;13567:4;13564:1;13557:15;13583:125;13648:9;;;13669:10;;;13666:36;;;13682:18;;:::i;13713:398::-;13915:2;13897:21;;;13954:2;13934:18;;;13927:30;13993:34;13988:2;13973:18;;13966:62;-1:-1:-1;;;14059:2:147;14044:18;;14037:32;14101:3;14086:19;;13713:398::o;14116:332::-;14323:6;14312:9;14305:25;14366:2;14361;14350:9;14346:18;14339:30;14286:4;14386:56;14438:2;14427:9;14423:18;14415:6;14386:56;:::i;14453:127::-;14514:10;14509:3;14505:20;14502:1;14495:31;14545:4;14542:1;14535:15;14569:4;14566:1;14559:15;14585:120;14625:1;14651;14641:35;;14656:18;;:::i;:::-;-1:-1:-1;14690:9:147;;14585:120::o;15300:184::-;15370:6;15423:2;15411:9;15402:7;15398:23;15394:32;15391:52;;;15439:1;15436;15429:12;15391:52;-1:-1:-1;15462:16:147;;15300:184;-1:-1:-1;15300:184:147:o;15489:128::-;15556:9;;;15577:11;;;15574:37;;;15591:18;;:::i;16099:969::-;16194:6;16247:2;16235:9;16226:7;16222:23;16218:32;16215:52;;;16263:1;16260;16253:12;16215:52;16296:9;16290:16;-1:-1:-1;;;;;16321:6:147;16318:30;16315:50;;;16361:1;16358;16351:12;16315:50;16384:22;;16437:4;16429:13;;16425:27;-1:-1:-1;16415:55:147;;16466:1;16463;16456:12;16415:55;16499:2;16493:9;16522:64;16538:47;16578:6;16538:47;:::i;16522:64::-;16608:3;16632:6;16627:3;16620:19;16664:2;16659:3;16655:12;16648:19;;16719:2;16709:6;16706:1;16702:14;16698:2;16694:23;16690:32;16676:46;;16745:7;16737:6;16734:19;16731:39;;;16766:1;16763;16756:12;16731:39;16798:2;16794;16790:11;16779:22;;16810:228;16826:6;16821:3;16818:15;16810:228;;;16899:3;16893:10;16916:49;16959:5;16916:49;:::i;:::-;16978:18;;17025:2;16843:12;;;;17016;;;;16810:228;;17325:112;17357:1;17383;17373:35;;17388:18;;:::i;:::-;-1:-1:-1;17422:9:147;;17325:112::o;17442:127::-;17503:10;17498:3;17494:20;17491:1;17484:31;17534:4;17531:1;17524:15;17558:4;17555:1;17548:15;17574:168;17647:9;;;17678;;17695:15;;;17689:22;;17675:37;17665:71;;17716:18;;:::i;17747:398::-;17949:2;17931:21;;;17988:2;17968:18;;;17961:30;18027:34;18022:2;18007:18;;18000:62;-1:-1:-1;;;18093:2:147;18078:18;;18071:32;18135:3;18120:19;;17747:398::o;20030:135::-;20069:3;20090:17;;;20087:43;;20110:18;;:::i;:::-;-1:-1:-1;20157:1:147;20146:13;;20030:135::o;20170:301::-;20299:3;20337:6;20331:13;20383:6;20376:4;20368:6;20364:17;20359:3;20353:37;20445:1;20409:16;;20434:13;;;-1:-1:-1;20409:16:147;20170:301;-1:-1:-1;20170:301:147:o","linkReferences":{},"immutableReferences":{"39766":[{"start":9697,"length":32},{"start":9738,"length":32},{"start":10059,"length":32}]}},"methodIdentifiers":{"COMMITMENT_ADMIN()":"80e460f0","DEFAULT_ADMIN_ROLE()":"a217fddf","TRUSTED_ATTESTER()":"5db916ab","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","acceptGenesisCeremony()":"92a2ebf3","attesterRewardPoints(uint256,address)":"6f865294","batchGrantCommitmentAdmin(address[])":"4b47d955","batchGrantTrustedAttester(address[])":"cf6772ad","commitmentFirstSeenAt(uint256,bytes32)":"d7830688","commitmentStake(uint256,bytes32)":"c19b406c","commitments(uint256,address)":"e90d4c06","createSuperBlockCommitment(uint256,bytes32,bytes32)":"026583d7","forceLatestCommitment((uint256,bytes32,bytes32))":"08c7050f","getAcceptingEpoch()":"6c713af8","getAttesterRewardPoints(uint256,address)":"6978ab12","getAttesterStake(uint256,address)":"ba26513e","getAttesterStakeForAcceptingEpoch(address)":"491d0467","getCommitmentByAttester(uint256,address)":"f1949add","getCommitmentFirstSeenAt((uint256,bytes32,bytes32))":"e07472ef","getCustodianStake(uint256,address)":"1de38fe1","getCustodianStakeForAcceptingEpoch(address)":"d440116d","getEpochDuration()":"5d3ea8f1","getEpochStartTime()":"90879f64","getLastPostconfirmedSuperBlockHeight()":"59b99597","getMaxTolerableSuperBlockHeight()":"943b79e2","getMinCommitmentAgeForPostconfirmation()":"ab208ebd","getNextAcceptingEpochWithException()":"3752d675","getPostconfirmedCommitment(uint256)":"2bfd11d6","getPostconfirmer()":"35ea1c63","getPostconfirmerDuration()":"1241ebe3","getPostconfirmerPrivilegeDuration()":"028e490a","getPostconfirmerRewardPoints(uint256,address)":"ed8a1d59","getPostconfirmerStartTime()":"5f4d642e","getPresentEpoch()":"37d7f58f","getRoleAdmin(bytes32)":"248a9ca3","getStake(uint256,address,address)":"7aa81c2a","getStakeForAcceptingEpoch(address,address)":"bb04bd2f","getStakedAttestersForAcceptingEpoch()":"aa0d6fcd","getSuperBlockHeightAssignedEpoch(uint256)":"d283392e","getTotalStake(uint256)":"45367f23","getTotalStakeForAcceptingEpoch()":"14e38026","getValidatorCommitmentAtSuperBlockHeight(uint256,address)":"556d97c8","grantCommitmentAdmin(address)":"949d7c2a","grantRole(bytes32,address)":"2f2ff15d","grantTrustedAttester(address)":"81df1746","hasRole(bytes32,address)":"91d14854","initialize()":"8129fc1c","initialize(address,uint256,uint256,uint256,address[],uint256,address)":"107e21ca","isCommitted(uint256)":"e4a3fb74","isPostconfirmed(uint256)":"ec23ec2e","isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))":"0cf6b6bd","lastPostconfirmedSuperBlockHeight()":"fdafe9ca","leadingSuperBlockTolerance()":"03d3f7fd","minCommitmentAgeForPostconfirmation()":"bff92c8c","moveTokenAddress()":"58376877","openAttestationEnabled()":"ef9ae15c","postconfirmSuperBlocksAndRollover()":"26624e37","postconfirmedAtL1BlockHeight(uint256)":"7ac561c8","postconfirmedAtL1BlockHeightByPostconfirmer(uint256)":"7cfd8205","postconfirmedAtL1BlockTimestamp(uint256)":"a207fe2f","postconfirmedBy(uint256)":"91807e4f","postconfirmedByPostconfirmer(uint256)":"08750a32","postconfirmedSuperBlocks(uint256)":"eda67fc4","postconfirmedSuperBlocksVersion()":"ec18c186","postconfirmerDuration()":"4ceb2e66","postconfirmerPrivilegeDuration()":"55b8119d","postconfirmerRewardPoints(uint256,address)":"1db859c7","proxiableUUID()":"52d1902d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","rewardPerAttestationPoint()":"5f83c7d5","rewardPerPostconfirmationPoint()":"d3eef4cc","setAcceptingEpoch(uint256)":"d03509ec","setMinCommitmentAgeForPostconfirmation(uint256)":"1f83e2a3","setOpenAttestationEnabled(bool)":"d2526fef","setPostconfirmedCommitmentAtBlockHeight((uint256,bytes32,bytes32))":"3119edd4","setPostconfirmerDuration(uint256)":"3d645927","setPostconfirmerPrivilegeDuration(uint256)":"da7d28b6","setRewardPerAttestationPoint(uint256)":"0d39f7f0","setRewardPerPostconfirmationPoint(uint256)":"57342282","stakingContract()":"ee99205c","submitBatchSuperBlockCommitment((uint256,bytes32,bytes32)[])":"622e3616","submitSuperBlockCommitment((uint256,bytes32,bytes32))":"0e74b609","superBlockHeightAssignedEpoch(uint256)":"85e6b8c2","supportsInterface(bytes4)":"01ffc9a7","upgradeToAndCall(address,bytes)":"4f1ef286","versionedPostconfirmedSuperBlocks(uint256,uint256)":"3ba18005"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AttesterAlreadyCommitted\",\"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\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PostconfirmerDurationTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PostconfirmerDurationTooLongForEpoch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnacceptableSuperBlockCommitment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"minCommitmentAgeForPostconfirmationTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"postconfirmerPrivilegeDurationTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateCommitment\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"attesterStake\",\"type\":\"uint256\"}],\"name\":\"SuperBlockCommitmentSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateCommitment\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"SuperBlockPostconfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COMMITMENT_ADMIN\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRUSTED_ATTESTER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"attesterRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"points\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"}],\"name\":\"batchGrantCommitmentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"}],\"name\":\"batchGrantTrustedAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"commitmentFirstSeenAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitement\",\"type\":\"bytes32\"}],\"name\":\"commitmentStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"commitments\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"name\":\"createSuperBlockCommitment\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"forceLatestCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getCommitmentByAttester\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"getCommitmentFirstSeenAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochStartTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastPostconfirmedSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxTolerableSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinCommitmentAgeForPostconfirmation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextAcceptingEpochWithException\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"getPostconfirmedCommitment\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmerDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmerPrivilegeDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"postconfirmer\",\"type\":\"address\"}],\"name\":\"getPostconfirmerRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmerStartTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPresentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakedAttestersForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"getSuperBlockHeightAssignedEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"getTotalStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getValidatorCommitmentAtSuperBlockHeight\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantCommitmentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"grantTrustedAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IMovementStaking\",\"name\":\"_stakingContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_lastPostconfirmedSuperBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_leadingSuperBlockTolerance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_epochDuration\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_custodians\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_postconfirmerDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_moveTokenAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"isCommitted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"isPostconfirmed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"isWithinPostconfirmerPrivilegeDuration\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPostconfirmedSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"leadingSuperBlockTolerance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minCommitmentAgeForPostconfirmation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"moveTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"openAttestationEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmSuperBlocksAndRollover\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockHeight\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockHeightByPostconfirmer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockHeight\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedBy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedByPostconfirmer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedSuperBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmedSuperBlocksVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmerDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmerPrivilegeDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"postconfirmer\",\"type\":\"address\"}],\"name\":\"postconfirmerRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"points\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPerAttestationPoint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPerPostconfirmationPoint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newEpoch\",\"type\":\"uint256\"}],\"name\":\"setAcceptingEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minCommitmentAgeForPostconfirmation\",\"type\":\"uint256\"}],\"name\":\"setMinCommitmentAgeForPostconfirmation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOpenAttestationEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"setPostconfirmedCommitmentAtBlockHeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_postconfirmerDuration\",\"type\":\"uint256\"}],\"name\":\"setPostconfirmerDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_postconfirmerPrivilegeDuration\",\"type\":\"uint256\"}],\"name\":\"setPostconfirmerPrivilegeDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rewardPerPoint\",\"type\":\"uint256\"}],\"name\":\"setRewardPerAttestationPoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rewardPerPoint\",\"type\":\"uint256\"}],\"name\":\"setRewardPerPostconfirmationPoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakingContract\",\"outputs\":[{\"internalType\":\"contract IMovementStaking\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment[]\",\"name\":\"superBlockCommitments\",\"type\":\"tuple[]\"}],\"name\":\"submitBatchSuperBlockCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"commitment\",\"type\":\"tuple\"}],\"name\":\"submitSuperBlockCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"superBlockHeightAssignedEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"versionedPostconfirmedSuperBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"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.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"getPostconfirmerPrivilegeDuration()\":{\"returns\":{\"_0\":\"The maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize()\":{\"details\":\"Initialize the contract\"},\"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))\":{\"details\":\"The postconfirmer's privilege window is the time period when only the postconfirmer will get rewarded for postconfirmation\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setAcceptingEpoch(uint256)\":{\"params\":{\"newEpoch\":\"The new accepting epoch value\"}},\"setMinCommitmentAgeForPostconfirmation(uint256)\":{\"params\":{\"_minCommitmentAgeForPostconfirmation\":\"New minimum commitment age \"}},\"setPostconfirmerDuration(uint256)\":{\"params\":{\"_postconfirmerDuration\":\"New postconfirmer term duration in time units\"}},\"setPostconfirmerPrivilegeDuration(uint256)\":{\"params\":{\"_postconfirmerPrivilegeDuration\":\"maximum time the postconfirmer is permitted to be non-reactive to an honest superBlock commitment\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"PostconfirmerDurationTooLong()\":[{\"notice\":\"Error thrown when postconfirmer term is greater than 256 blocks\"}],\"PostconfirmerDurationTooLongForEpoch()\":[{\"notice\":\"Error thrown when postconfirmer term is too large for epoch duration\"}],\"minCommitmentAgeForPostconfirmationTooLong()\":[{\"notice\":\"Error thrown when minimum commitment age is greater than epoch duration\"}],\"postconfirmerPrivilegeDurationTooLong()\":[{\"notice\":\"Error thrown when maximum postconfirmer non-reactivity time is greater than epoch duration\"}]},\"kind\":\"user\",\"methods\":{\"COMMITMENT_ADMIN()\":{\"notice\":\"The role that allows the commitment admin to set the accepting epoch\"},\"TRUSTED_ATTESTER()\":{\"notice\":\"The role that allows attesters to submit commitments\"},\"acceptGenesisCeremony()\":{\"notice\":\"Accepts the genesis ceremony.\"},\"getAcceptingEpoch()\":{\"notice\":\"get the accepting epoch\"},\"getAttesterRewardPoints(uint256,address)\":{\"notice\":\"Gets the reward points for an attester in a given epoch\"},\"getAttesterStake(uint256,address)\":{\"notice\":\"Gets the stake for a given attester at a given epoch\"},\"getAttesterStakeForAcceptingEpoch(address)\":{\"notice\":\"Gets the stake for a given attester at the accepting epoch\"},\"getCommitmentByAttester(uint256,address)\":{\"notice\":\"Gets the commitment submitted by an attester for a given height\"},\"getCommitmentFirstSeenAt((uint256,bytes32,bytes32))\":{\"notice\":\"get the timestamp when a commitment was first seen\"},\"getCustodianStake(uint256,address)\":{\"notice\":\"Gets the stake for a given custodian for a given epoch\"},\"getEpochDuration()\":{\"notice\":\"Gets the epoch duration\"},\"getEpochStartTime()\":{\"notice\":\"Gets the time at which the current epoch started\"},\"getLastPostconfirmedSuperBlockHeight()\":{\"notice\":\"Gets the height of the last postconfirmed superblock\"},\"getPostconfirmedCommitment(uint256)\":{\"notice\":\"get the postconfirmed commitment for a given height\"},\"getPostconfirmer()\":{\"notice\":\"Determines the postconfirmer in the accepting epoch using L1 block hash as a source of randomness\"},\"getPostconfirmerDuration()\":{\"notice\":\"Gets the postconfirmer duration\"},\"getPostconfirmerPrivilegeDuration()\":{\"notice\":\"Gets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\"},\"getPostconfirmerRewardPoints(uint256,address)\":{\"notice\":\"Gets the reward points for a postconfirmer in a given epoch\"},\"getPostconfirmerStartTime()\":{\"notice\":\"Gets the time at which the current postconfirmer's term started\"},\"getPresentEpoch()\":{\"notice\":\"get the present epoch\"},\"getStake(uint256,address,address)\":{\"notice\":\"Gets the stake for a given tuple (custodian, attester) at a given epoch\"},\"getStakeForAcceptingEpoch(address,address)\":{\"notice\":\"Gets the stake for a given tuple (custodian, attester) at the accepting epoch\"},\"getStakedAttestersForAcceptingEpoch()\":{\"notice\":\"Gets the attesters who have stake in the current accepting epoch\"},\"getSuperBlockHeightAssignedEpoch(uint256)\":{\"notice\":\"Gets the epoch assigned to a superblock height\"},\"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))\":{\"notice\":\"Checks, for a given superBlock commitment, if the current L1 block time is within the postconfirmer's privilege window\"},\"minCommitmentAgeForPostconfirmation()\":{\"notice\":\"Minimum time that must pass before a commitment can be postconfirmed\"},\"postconfirmSuperBlocksAndRollover()\":{\"notice\":\"postconfirm superblocks and rollover\"},\"postconfirmerDuration()\":{\"notice\":\"Postconfirmer term time in seconds. The postconfirmer remains the same for postconfirmerDuration period.\"},\"postconfirmerPrivilegeDuration()\":{\"notice\":\"Max time the postconfirmer can be non-reactive to an honest superBlock commitment\"},\"setAcceptingEpoch(uint256)\":{\"notice\":\"Sets the accepting epoch to a new value (must be higher than current)\"},\"setMinCommitmentAgeForPostconfirmation(uint256)\":{\"notice\":\"Sets the minimum time that must pass before a commitment can be postconfirmed\"},\"setPostconfirmerDuration(uint256)\":{\"notice\":\"Sets the postconfirmer term duration, must be less than epoch duration\"},\"setPostconfirmerPrivilegeDuration(uint256)\":{\"notice\":\"Sets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\"},\"submitSuperBlockCommitment((uint256,bytes32,bytes32))\":{\"notice\":\"submit a superblock commitment\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/settlement/PCP.sol\":\"PCP\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x949f1b87232ce60ae1d7651dfc4272f258a388448e08b4d624b1acbe05d8b39b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://469b7e1cab4c319957fddef8ad610ce347e2494d15389f3d3f689c4be66c1f7d\",\"dweb:/ipfs/QmdC9UdUZAYzjyZ2ULJgJ5QxhDHRtVJ8MJhHKjiotNfCeY\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x13c2d19041c51b246233f96874a66c0094b8a5ff78af3b85ea27867f302dcbbb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f1bc47de2e6e12b3680e47a4dd5b6e3c1e85b65851378aa1d617309edbc1200d\",\"dweb:/ipfs/QmSPcJ9HmkmsSDvMS4KZijnxoGMAEn8HbQuY4fe8DroZEE\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0xe1448f559716952220b5c696a5cc34d1f11f958bfbfcd05988543f6fd8bfff96\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ebd19cec65d3998dad25dc9beecd33055b1900f26c3f61377c78926ca0637c9a\",\"dweb:/ipfs/QmUda1jFjWf2ptQrahTgU6953SZY7ZWksRaTo2dKGX4BMK\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x37b2d71a3d12d55076e87942fb75e80ec8b6bacecd19b6562474952f6973d87b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4261c708ec31ae8764d242089617dc60c5e54a20ec781a42704886eda988a37a\",\"dweb:/ipfs/QmQqFiotrcCfB36B2pSfwGz4Bi4zhRgwwGAJ8VFBaEtzQ1\"]},\"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/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89\",\"dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xccb9b54747f3733f9ca435191745881587b2b48a12d6903358b59bc8ae39ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://021b637b39bddc68e1beed71677cb52919d27880804b1c7160d53064342786bc\",\"dweb:/ipfs/QmV3wgNQmoi9d6U3P7xwHAEKDoaQzGqGGjcSXsyWMf9rsK\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70\",\"dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"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/utils/SafeERC20.sol\":{\"keccak256\":\"0x6dd0cb67846da3fa1241c520faaa215d6bec8226e37beac6056c51e8af44d24e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://650e533e62b30dcc6edea2b6c91358d5659da3bde42e56adf7316c493b916a15\",\"dweb:/ipfs/QmYkmK2vPE6FjdAoQVpZSJxamTLGno9wzGS495TcMNFViV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e\",\"dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR\"]},\"lib/openzeppelin-contracts/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xb4d040e2cc1d4a66d08b174b97332aa3dbf330bc74f91c725d7ff653efca7eb1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da205f459aac15cadd00538691b525eef81f098a95bc3eedea12968bcb70706\",\"dweb:/ipfs/QmcqTJET3rNsXMGT3UvqLgFS3RrKaHe5x97m4dcfUCWMoW\"]},\"lib/openzeppelin-contracts/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"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/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x91832f9744a308318ef3344caf2122345d6a949e25017461322d13a4ede53f10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77f5fa6ce1145a3637406a77940cd1ab50523187c8ac7281805b3fc2bd6ffd5e\",\"dweb:/ipfs/QmewJyTg2SoBee1bKwks3vktT2wTQhB7TtzZg9xKvzvfUf\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xc240f71206795cead02e49f999b3523414c230cec53423298d8457a7ce9d3ea4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d5813c665d5ea1b73e27844800eb45831b9ba608b2a9216ead318e246fd5e8f\",\"dweb:/ipfs/QmNStA3tbwHZm1tXgdmY4wB3NbYKJtzYWADjKmDMhYHjyA\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x804753930b59f27c3a6747a4cf58b4d291f2c942a2a76edd43d4571a5f6b02bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f05286cf2babfc5bf1c347c447477ca24147bea09bb4f5ba01fe9afd98ab409\",\"dweb:/ipfs/QmUcTFzF4y2U9VoBbv7kx3PDTACdNMoYQuTe89ot2pAqqA\"]},\"src/settlement/PCP.sol\":{\"keccak256\":\"0x55938993344c74fd0bc722fe4fc713ca41ef116f7590eb7fac43e29375914902\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://4d3f02dec5922f7e6cebfa6514795b6727024a0ce066e1aa8d87beb3048ab0c6\",\"dweb:/ipfs/QmbgQ4WAnh8dJ99xRkhhhLuEr164JXWkGipPVrCLuucdn4\"]},\"src/settlement/PCPStorage.sol\":{\"keccak256\":\"0xf8531c966b1c84b009146a45614c016a1e4fe1d27d03d77ed97f5a6e728eb2a1\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://e6e97f51c06ee9d80c212c6f8c1b814ceec46df5836341249e4b6d31137f3cff\",\"dweb:/ipfs/QmVzSLbaveGiCFBLWWiPpR7Ta5xuF9rWhffDeTntwAfiss\"]},\"src/settlement/interfaces/IPCP.sol\":{\"keccak256\":\"0xf9247e3839660b3386697a2cd3882a4557ddc551929f01d8e877de6d2e4d0e89\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://54625a2912af7fa78ae3fb873f3a6db80fc6044d3f8994701d4845032032578f\",\"dweb:/ipfs/QmR5m72PohfHMeFFw2ASDQQgJhkeknbo9R2aGmEQU7a8zg\"]},\"src/settlement/settlement/BaseSettlement.sol\":{\"keccak256\":\"0xf3f6ea0ae8db122d1c6dade60057ea8fa03b8efc8108f03e48049bb9548d2c9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e340fdd89c1872461ec0f98195ef56aaf583ebf2897890ee74c1eefad8e8c86e\",\"dweb:/ipfs/QmWCcRibYEJZEvY1ugrw7jkumrHNxr8z3dMeP457PkbJED\"]},\"src/staking/MovementStaking.sol\":{\"keccak256\":\"0xb61e04fbc6fce5f3d2e64269f2adccea1f27060f714259634ec20eab1cff468f\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0bf80557c4c9156a247c44cc476c5747028fddd392f9d3e3c7cea1a7fac1f670\",\"dweb:/ipfs/QmQ6A6bPUsm2b7yy5eSsJ7MXgQGAF8zWEkJf7uL7sZNXi9\"]},\"src/staking/MovementStakingStorage.sol\":{\"keccak256\":\"0xcb909fbdd31da45891f983aca5387eff88693b31c60d304b6ab7c1128c814225\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fcfd3aadf8c9e714c6e0f5b8b7f6000b54a1a0eeb219d25cb23848411ae17edb\",\"dweb:/ipfs/QmTKyTFmGKHKWk1wKncaAvXBZH9MwJfkdhFbmTUAwTX7UP\"]},\"src/staking/base/BaseStaking.sol\":{\"keccak256\":\"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46\",\"dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx\"]},\"src/staking/interfaces/IMovementStaking.sol\":{\"keccak256\":\"0x250f5a72809b363ebefe5fbcdce50b62a9ff49672a863c8273e0fbe4d59f8933\",\"urls\":[\"bzz-raw://5a4385f838da317ce90fb84cdd83a724d132f7e6c287191673f4e2ce1a486bbe\",\"dweb:/ipfs/Qmbwq1kBumZDyREvc4ryHMNMQ4sgT39fNAK4bUNRoXqchj\"]},\"src/token/base/BaseToken.sol\":{\"keccak256\":\"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e\",\"dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd\"]},\"src/token/base/MintableToken.sol\":{\"keccak256\":\"0xba4c9b5e900564cb3abb081d11b95f23e5f39a5ee799cda54c9f1a49a7aa8a13\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://94ca441f7acc6b312fc3d1d6ce4dab9971fd1cdf176ae5251fe2f28c4c52a35a\",\"dweb:/ipfs/QmXAuDzaJqydZho7CFyKKKtyYATHedyAUHTKAS839oji3o\"]},\"src/token/base/WrappedToken.sol\":{\"keccak256\":\"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885\",\"dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4\"]},\"src/token/base/WrappedTokenStorage.sol\":{\"keccak256\":\"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08\",\"dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj\"]},\"src/token/custodian/CustodianToken.sol\":{\"keccak256\":\"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04\",\"dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"AttesterAlreadyCommitted"},{"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":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"PostconfirmerDurationTooLong"},{"inputs":[],"type":"error","name":"PostconfirmerDurationTooLongForEpoch"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[],"type":"error","name":"UnacceptableSuperBlockCommitment"},{"inputs":[],"type":"error","name":"minCommitmentAgeForPostconfirmationTooLong"},{"inputs":[],"type":"error","name":"postconfirmerPrivilegeDurationTooLong"},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"stateCommitment","type":"bytes32","indexed":false},{"internalType":"uint256","name":"attesterStake","type":"uint256","indexed":false}],"type":"event","name":"SuperBlockCommitmentSubmitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"stateCommitment","type":"bytes32","indexed":false},{"internalType":"uint256","name":"height","type":"uint256","indexed":false}],"type":"event","name":"SuperBlockPostconfirmed","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"COMMITMENT_ADMIN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TRUSTED_ATTESTER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptGenesisCeremony"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"attesterRewardPoints","outputs":[{"internalType":"uint256","name":"points","type":"uint256"}]},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"batchGrantCommitmentAdmin"},{"inputs":[{"internalType":"address[]","name":"attesters","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"batchGrantTrustedAttester"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"stateMutability":"view","type":"function","name":"commitmentFirstSeenAt","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"bytes32","name":"commitement","type":"bytes32"}],"stateMutability":"view","type":"function","name":"commitmentStake","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"commitments","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"createSuperBlockCommitment","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"forceLatestCommitment"},{"inputs":[],"stateMutability":"view","type":"function","name":"getAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterRewardPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getCommitmentByAttester","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"view","type":"function","name":"getCommitmentFirstSeenAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getEpochDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getEpochStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getLastPostconfirmedSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getMaxTolerableSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getMinCommitmentAgeForPostconfirmation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getNextAcceptingEpochWithException","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"getPostconfirmedCommitment","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmer","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmerDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmerPrivilegeDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"postconfirmer","type":"address"}],"stateMutability":"view","type":"function","name":"getPostconfirmerRewardPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmerStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPresentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getStakedAttestersForAcceptingEpoch","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"getSuperBlockHeightAssignedEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}],"stateMutability":"view","type":"function","name":"getTotalStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getTotalStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getValidatorCommitmentAtSuperBlockHeight","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantCommitmentAdmin"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantTrustedAttester"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"contract IMovementStaking","name":"_stakingContract","type":"address"},{"internalType":"uint256","name":"_lastPostconfirmedSuperBlockHeight","type":"uint256"},{"internalType":"uint256","name":"_leadingSuperBlockTolerance","type":"uint256"},{"internalType":"uint256","name":"_epochDuration","type":"uint256"},{"internalType":"address[]","name":"_custodians","type":"address[]"},{"internalType":"uint256","name":"_postconfirmerDuration","type":"uint256"},{"internalType":"address","name":"_moveTokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"isCommitted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"isPostconfirmed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"view","type":"function","name":"isWithinPostconfirmerPrivilegeDuration","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"lastPostconfirmedSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"leadingSuperBlockTolerance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"minCommitmentAgeForPostconfirmation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"moveTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"openAttestationEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"postconfirmSuperBlocksAndRollover"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockHeight","outputs":[{"internalType":"uint256","name":"L1BlockHeight","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockHeightByPostconfirmer","outputs":[{"internalType":"uint256","name":"L1BlockHeight","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockTimestamp","outputs":[{"internalType":"uint256","name":"L1BlockTimestamp","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedBy","outputs":[{"internalType":"address","name":"attester","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedByPostconfirmer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedSuperBlocks","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"postconfirmedSuperBlocksVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"postconfirmerDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"postconfirmerPrivilegeDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"postconfirmer","type":"address"}],"stateMutability":"view","type":"function","name":"postconfirmerRewardPoints","outputs":[{"internalType":"uint256","name":"points","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[],"stateMutability":"view","type":"function","name":"rewardPerAttestationPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"rewardPerPostconfirmationPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"newEpoch","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setAcceptingEpoch"},{"inputs":[{"internalType":"uint256","name":"_minCommitmentAgeForPostconfirmation","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setMinCommitmentAgeForPostconfirmation"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setOpenAttestationEnabled"},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"setPostconfirmedCommitmentAtBlockHeight"},{"inputs":[{"internalType":"uint256","name":"_postconfirmerDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setPostconfirmerDuration"},{"inputs":[{"internalType":"uint256","name":"_postconfirmerPrivilegeDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setPostconfirmerPrivilegeDuration"},{"inputs":[{"internalType":"uint256","name":"rewardPerPoint","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setRewardPerAttestationPoint"},{"inputs":[{"internalType":"uint256","name":"rewardPerPoint","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setRewardPerPostconfirmationPoint"},{"inputs":[],"stateMutability":"view","type":"function","name":"stakingContract","outputs":[{"internalType":"contract IMovementStaking","name":"","type":"address"}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment[]","name":"superBlockCommitments","type":"tuple[]","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"submitBatchSuperBlockCommitment"},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"commitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"submitSuperBlockCommitment"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"superBlockHeightAssignedEpoch","outputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}]},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"versionedPostconfirmedSuperBlocks","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"getPostconfirmerPrivilegeDuration()":{"returns":{"_0":"The maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"}},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize()":{"details":"Initialize the contract"},"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))":{"details":"The postconfirmer's privilege window is the time period when only the postconfirmer will get rewarded for postconfirmation"},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"setAcceptingEpoch(uint256)":{"params":{"newEpoch":"The new accepting epoch value"}},"setMinCommitmentAgeForPostconfirmation(uint256)":{"params":{"_minCommitmentAgeForPostconfirmation":"New minimum commitment age "}},"setPostconfirmerDuration(uint256)":{"params":{"_postconfirmerDuration":"New postconfirmer term duration in time units"}},"setPostconfirmerPrivilegeDuration(uint256)":{"params":{"_postconfirmerPrivilegeDuration":"maximum time the postconfirmer is permitted to be non-reactive to an honest superBlock commitment"}},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"COMMITMENT_ADMIN()":{"notice":"The role that allows the commitment admin to set the accepting epoch"},"TRUSTED_ATTESTER()":{"notice":"The role that allows attesters to submit commitments"},"acceptGenesisCeremony()":{"notice":"Accepts the genesis ceremony."},"getAcceptingEpoch()":{"notice":"get the accepting epoch"},"getAttesterRewardPoints(uint256,address)":{"notice":"Gets the reward points for an attester in a given epoch"},"getAttesterStake(uint256,address)":{"notice":"Gets the stake for a given attester at a given epoch"},"getAttesterStakeForAcceptingEpoch(address)":{"notice":"Gets the stake for a given attester at the accepting epoch"},"getCommitmentByAttester(uint256,address)":{"notice":"Gets the commitment submitted by an attester for a given height"},"getCommitmentFirstSeenAt((uint256,bytes32,bytes32))":{"notice":"get the timestamp when a commitment was first seen"},"getCustodianStake(uint256,address)":{"notice":"Gets the stake for a given custodian for a given epoch"},"getEpochDuration()":{"notice":"Gets the epoch duration"},"getEpochStartTime()":{"notice":"Gets the time at which the current epoch started"},"getLastPostconfirmedSuperBlockHeight()":{"notice":"Gets the height of the last postconfirmed superblock"},"getPostconfirmedCommitment(uint256)":{"notice":"get the postconfirmed commitment for a given height"},"getPostconfirmer()":{"notice":"Determines the postconfirmer in the accepting epoch using L1 block hash as a source of randomness"},"getPostconfirmerDuration()":{"notice":"Gets the postconfirmer duration"},"getPostconfirmerPrivilegeDuration()":{"notice":"Gets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"},"getPostconfirmerRewardPoints(uint256,address)":{"notice":"Gets the reward points for a postconfirmer in a given epoch"},"getPostconfirmerStartTime()":{"notice":"Gets the time at which the current postconfirmer's term started"},"getPresentEpoch()":{"notice":"get the present epoch"},"getStake(uint256,address,address)":{"notice":"Gets the stake for a given tuple (custodian, attester) at a given epoch"},"getStakeForAcceptingEpoch(address,address)":{"notice":"Gets the stake for a given tuple (custodian, attester) at the accepting epoch"},"getStakedAttestersForAcceptingEpoch()":{"notice":"Gets the attesters who have stake in the current accepting epoch"},"getSuperBlockHeightAssignedEpoch(uint256)":{"notice":"Gets the epoch assigned to a superblock height"},"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))":{"notice":"Checks, for a given superBlock commitment, if the current L1 block time is within the postconfirmer's privilege window"},"minCommitmentAgeForPostconfirmation()":{"notice":"Minimum time that must pass before a commitment can be postconfirmed"},"postconfirmSuperBlocksAndRollover()":{"notice":"postconfirm superblocks and rollover"},"postconfirmerDuration()":{"notice":"Postconfirmer term time in seconds. The postconfirmer remains the same for postconfirmerDuration period."},"postconfirmerPrivilegeDuration()":{"notice":"Max time the postconfirmer can be non-reactive to an honest superBlock commitment"},"setAcceptingEpoch(uint256)":{"notice":"Sets the accepting epoch to a new value (must be higher than current)"},"setMinCommitmentAgeForPostconfirmation(uint256)":{"notice":"Sets the minimum time that must pass before a commitment can be postconfirmed"},"setPostconfirmerDuration(uint256)":{"notice":"Sets the postconfirmer term duration, must be less than epoch duration"},"setPostconfirmerPrivilegeDuration(uint256)":{"notice":"Sets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"},"submitSuperBlockCommitment((uint256,bytes32,bytes32))":{"notice":"submit a superblock commitment"}},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/settlement/PCP.sol":"PCP"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x949f1b87232ce60ae1d7651dfc4272f258a388448e08b4d624b1acbe05d8b39b","urls":["bzz-raw://469b7e1cab4c319957fddef8ad610ce347e2494d15389f3d3f689c4be66c1f7d","dweb:/ipfs/QmdC9UdUZAYzjyZ2ULJgJ5QxhDHRtVJ8MJhHKjiotNfCeY"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x13c2d19041c51b246233f96874a66c0094b8a5ff78af3b85ea27867f302dcbbb","urls":["bzz-raw://f1bc47de2e6e12b3680e47a4dd5b6e3c1e85b65851378aa1d617309edbc1200d","dweb:/ipfs/QmSPcJ9HmkmsSDvMS4KZijnxoGMAEn8HbQuY4fe8DroZEE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0xe1448f559716952220b5c696a5cc34d1f11f958bfbfcd05988543f6fd8bfff96","urls":["bzz-raw://ebd19cec65d3998dad25dc9beecd33055b1900f26c3f61377c78926ca0637c9a","dweb:/ipfs/QmUda1jFjWf2ptQrahTgU6953SZY7ZWksRaTo2dKGX4BMK"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x37b2d71a3d12d55076e87942fb75e80ec8b6bacecd19b6562474952f6973d87b","urls":["bzz-raw://4261c708ec31ae8764d242089617dc60c5e54a20ec781a42704886eda988a37a","dweb:/ipfs/QmQqFiotrcCfB36B2pSfwGz4Bi4zhRgwwGAJ8VFBaEtzQ1"],"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/introspection/ERC165Upgradeable.sol":{"keccak256":"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab","urls":["bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89","dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xccb9b54747f3733f9ca435191745881587b2b48a12d6903358b59bc8ae39ea6b","urls":["bzz-raw://021b637b39bddc68e1beed71677cb52919d27880804b1c7160d53064342786bc","dweb:/ipfs/QmV3wgNQmoi9d6U3P7xwHAEKDoaQzGqGGjcSXsyWMf9rsK"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol":{"keccak256":"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7","urls":["bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b","dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"keccak256":"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724","urls":["bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a","dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486","urls":["bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d","dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c","urls":["bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba","dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d","urls":["bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196","dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA"],"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/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898","urls":["bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70","dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2"],"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/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/utils/SafeERC20.sol":{"keccak256":"0x6dd0cb67846da3fa1241c520faaa215d6bec8226e37beac6056c51e8af44d24e","urls":["bzz-raw://650e533e62b30dcc6edea2b6c91358d5659da3bde42e56adf7316c493b916a15","dweb:/ipfs/QmYkmK2vPE6FjdAoQVpZSJxamTLGno9wzGS495TcMNFViV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c","urls":["bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e","dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Arrays.sol":{"keccak256":"0xb4d040e2cc1d4a66d08b174b97332aa3dbf330bc74f91c725d7ff653efca7eb1","urls":["bzz-raw://9da205f459aac15cadd00538691b525eef81f098a95bc3eedea12968bcb70706","dweb:/ipfs/QmcqTJET3rNsXMGT3UvqLgFS3RrKaHe5x97m4dcfUCWMoW"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Comparators.sol":{"keccak256":"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58","urls":["bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd","dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC"],"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/ReentrancyGuard.sol":{"keccak256":"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3","urls":["bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a","dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x91832f9744a308318ef3344caf2122345d6a949e25017461322d13a4ede53f10","urls":["bzz-raw://77f5fa6ce1145a3637406a77940cd1ab50523187c8ac7281805b3fc2bd6ffd5e","dweb:/ipfs/QmewJyTg2SoBee1bKwks3vktT2wTQhB7TtzZg9xKvzvfUf"],"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/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xc240f71206795cead02e49f999b3523414c230cec53423298d8457a7ce9d3ea4","urls":["bzz-raw://7d5813c665d5ea1b73e27844800eb45831b9ba608b2a9216ead318e246fd5e8f","dweb:/ipfs/QmNStA3tbwHZm1tXgdmY4wB3NbYKJtzYWADjKmDMhYHjyA"],"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/structs/EnumerableSet.sol":{"keccak256":"0x804753930b59f27c3a6747a4cf58b4d291f2c942a2a76edd43d4571a5f6b02bc","urls":["bzz-raw://6f05286cf2babfc5bf1c347c447477ca24147bea09bb4f5ba01fe9afd98ab409","dweb:/ipfs/QmUcTFzF4y2U9VoBbv7kx3PDTACdNMoYQuTe89ot2pAqqA"],"license":"MIT"},"src/settlement/PCP.sol":{"keccak256":"0x55938993344c74fd0bc722fe4fc713ca41ef116f7590eb7fac43e29375914902","urls":["bzz-raw://4d3f02dec5922f7e6cebfa6514795b6727024a0ce066e1aa8d87beb3048ab0c6","dweb:/ipfs/QmbgQ4WAnh8dJ99xRkhhhLuEr164JXWkGipPVrCLuucdn4"],"license":"UNLICENSED"},"src/settlement/PCPStorage.sol":{"keccak256":"0xf8531c966b1c84b009146a45614c016a1e4fe1d27d03d77ed97f5a6e728eb2a1","urls":["bzz-raw://e6e97f51c06ee9d80c212c6f8c1b814ceec46df5836341249e4b6d31137f3cff","dweb:/ipfs/QmVzSLbaveGiCFBLWWiPpR7Ta5xuF9rWhffDeTntwAfiss"],"license":"UNLICENSED"},"src/settlement/interfaces/IPCP.sol":{"keccak256":"0xf9247e3839660b3386697a2cd3882a4557ddc551929f01d8e877de6d2e4d0e89","urls":["bzz-raw://54625a2912af7fa78ae3fb873f3a6db80fc6044d3f8994701d4845032032578f","dweb:/ipfs/QmR5m72PohfHMeFFw2ASDQQgJhkeknbo9R2aGmEQU7a8zg"],"license":"UNLICENSED"},"src/settlement/settlement/BaseSettlement.sol":{"keccak256":"0xf3f6ea0ae8db122d1c6dade60057ea8fa03b8efc8108f03e48049bb9548d2c9a","urls":["bzz-raw://e340fdd89c1872461ec0f98195ef56aaf583ebf2897890ee74c1eefad8e8c86e","dweb:/ipfs/QmWCcRibYEJZEvY1ugrw7jkumrHNxr8z3dMeP457PkbJED"],"license":"MIT"},"src/staking/MovementStaking.sol":{"keccak256":"0xb61e04fbc6fce5f3d2e64269f2adccea1f27060f714259634ec20eab1cff468f","urls":["bzz-raw://0bf80557c4c9156a247c44cc476c5747028fddd392f9d3e3c7cea1a7fac1f670","dweb:/ipfs/QmQ6A6bPUsm2b7yy5eSsJ7MXgQGAF8zWEkJf7uL7sZNXi9"],"license":"UNLICENSED"},"src/staking/MovementStakingStorage.sol":{"keccak256":"0xcb909fbdd31da45891f983aca5387eff88693b31c60d304b6ab7c1128c814225","urls":["bzz-raw://fcfd3aadf8c9e714c6e0f5b8b7f6000b54a1a0eeb219d25cb23848411ae17edb","dweb:/ipfs/QmTKyTFmGKHKWk1wKncaAvXBZH9MwJfkdhFbmTUAwTX7UP"],"license":"UNLICENSED"},"src/staking/base/BaseStaking.sol":{"keccak256":"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393","urls":["bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46","dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx"],"license":"MIT"},"src/staking/interfaces/IMovementStaking.sol":{"keccak256":"0x250f5a72809b363ebefe5fbcdce50b62a9ff49672a863c8273e0fbe4d59f8933","urls":["bzz-raw://5a4385f838da317ce90fb84cdd83a724d132f7e6c287191673f4e2ce1a486bbe","dweb:/ipfs/Qmbwq1kBumZDyREvc4ryHMNMQ4sgT39fNAK4bUNRoXqchj"],"license":null},"src/token/base/BaseToken.sol":{"keccak256":"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2","urls":["bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e","dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd"],"license":"MIT"},"src/token/base/MintableToken.sol":{"keccak256":"0xba4c9b5e900564cb3abb081d11b95f23e5f39a5ee799cda54c9f1a49a7aa8a13","urls":["bzz-raw://94ca441f7acc6b312fc3d1d6ce4dab9971fd1cdf176ae5251fe2f28c4c52a35a","dweb:/ipfs/QmXAuDzaJqydZho7CFyKKKtyYATHedyAUHTKAS839oji3o"],"license":"MIT"},"src/token/base/WrappedToken.sol":{"keccak256":"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45","urls":["bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885","dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4"],"license":"MIT"},"src/token/base/WrappedTokenStorage.sol":{"keccak256":"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e","urls":["bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08","dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj"],"license":"MIT"},"src/token/custodian/CustodianToken.sol":{"keccak256":"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350","urls":["bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04","dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":61820,"contract":"src/settlement/PCP.sol:PCP","label":"stakingContract","offset":0,"slot":"0","type":"t_contract(IMovementStaking)64348"},{"astId":61822,"contract":"src/settlement/PCP.sol:PCP","label":"moveTokenAddress","offset":0,"slot":"1","type":"t_address"},{"astId":61824,"contract":"src/settlement/PCP.sol:PCP","label":"leadingSuperBlockTolerance","offset":0,"slot":"2","type":"t_uint256"},{"astId":61826,"contract":"src/settlement/PCP.sol:PCP","label":"lastPostconfirmedSuperBlockHeight","offset":0,"slot":"3","type":"t_uint256"},{"astId":61829,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmerDuration","offset":0,"slot":"4","type":"t_uint256"},{"astId":61832,"contract":"src/settlement/PCP.sol:PCP","label":"minCommitmentAgeForPostconfirmation","offset":0,"slot":"5","type":"t_uint256"},{"astId":61835,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmerPrivilegeDuration","offset":0,"slot":"6","type":"t_uint256"},{"astId":61847,"contract":"src/settlement/PCP.sol:PCP","label":"superBlockHeightAssignedEpoch","offset":0,"slot":"7","type":"t_mapping(t_uint256,t_uint256)"},{"astId":61854,"contract":"src/settlement/PCP.sol:PCP","label":"commitments","offset":0,"slot":"8","type":"t_mapping(t_uint256,t_mapping(t_address,t_struct(SuperBlockCommitment)61843_storage))"},{"astId":61860,"contract":"src/settlement/PCP.sol:PCP","label":"commitmentStake","offset":0,"slot":"9","type":"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))"},{"astId":61866,"contract":"src/settlement/PCP.sol:PCP","label":"commitmentFirstSeenAt","offset":0,"slot":"10","type":"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))"},{"astId":61870,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedBy","offset":0,"slot":"11","type":"t_mapping(t_uint256,t_address)"},{"astId":61874,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedByPostconfirmer","offset":0,"slot":"12","type":"t_mapping(t_uint256,t_bool)"},{"astId":61878,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedAtL1BlockHeight","offset":0,"slot":"13","type":"t_mapping(t_uint256,t_uint256)"},{"astId":61882,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedAtL1BlockTimestamp","offset":0,"slot":"14","type":"t_mapping(t_uint256,t_uint256)"},{"astId":61886,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedAtL1BlockHeightByPostconfirmer","offset":0,"slot":"15","type":"t_mapping(t_uint256,t_uint256)"},{"astId":61891,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedSuperBlocks","offset":0,"slot":"16","type":"t_mapping(t_uint256,t_struct(SuperBlockCommitment)61843_storage)"},{"astId":61893,"contract":"src/settlement/PCP.sol:PCP","label":"openAttestationEnabled","offset":0,"slot":"17","type":"t_bool"},{"astId":61900,"contract":"src/settlement/PCP.sol:PCP","label":"versionedPostconfirmedSuperBlocks","offset":0,"slot":"18","type":"t_mapping(t_uint256,t_mapping(t_uint256,t_struct(SuperBlockCommitment)61843_storage))"},{"astId":61902,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedSuperBlocksVersion","offset":0,"slot":"19","type":"t_uint256"},{"astId":61908,"contract":"src/settlement/PCP.sol:PCP","label":"attesterRewardPoints","offset":0,"slot":"20","type":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},{"astId":61914,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmerRewardPoints","offset":0,"slot":"21","type":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},{"astId":61916,"contract":"src/settlement/PCP.sol:PCP","label":"rewardPerAttestationPoint","offset":0,"slot":"22","type":"t_uint256"},{"astId":61918,"contract":"src/settlement/PCP.sol:PCP","label":"rewardPerPostconfirmationPoint","offset":0,"slot":"23","type":"t_uint256"},{"astId":61922,"contract":"src/settlement/PCP.sol:PCP","label":"__gap","offset":0,"slot":"24","type":"t_array(t_uint256)45_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)45_storage":{"encoding":"inplace","label":"uint256[45]","numberOfBytes":"1440","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IMovementStaking)64348":{"encoding":"inplace","label":"contract IMovementStaking","numberOfBytes":"20"},"t_mapping(t_address,t_struct(SuperBlockCommitment)61843_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct PCPStorage.SuperBlockCommitment)","numberOfBytes":"32","value":"t_struct(SuperBlockCommitment)61843_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint256,t_bool)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_uint256,t_mapping(t_address,t_struct(SuperBlockCommitment)61843_storage))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment))","numberOfBytes":"32","value":"t_mapping(t_address,t_struct(SuperBlockCommitment)61843_storage)"},"t_mapping(t_uint256,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_uint256,t_mapping(t_uint256,t_struct(SuperBlockCommitment)61843_storage))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_struct(SuperBlockCommitment)61843_storage)"},"t_mapping(t_uint256,t_struct(SuperBlockCommitment)61843_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment)","numberOfBytes":"32","value":"t_struct(SuperBlockCommitment)61843_storage"},"t_mapping(t_uint256,t_uint256)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_struct(SuperBlockCommitment)61843_storage":{"encoding":"inplace","label":"struct PCPStorage.SuperBlockCommitment","numberOfBytes":"96","members":[{"astId":61838,"contract":"src/settlement/PCP.sol:PCP","label":"height","offset":0,"slot":"0","type":"t_uint256"},{"astId":61840,"contract":"src/settlement/PCP.sol:PCP","label":"commitment","offset":0,"slot":"1","type":"t_bytes32"},{"astId":61842,"contract":"src/settlement/PCP.sol:PCP","label":"blockId","offset":0,"slot":"2","type":"t_bytes32"}]},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/settlement/PCP.sol","id":61811,"exportedSymbols":{"BaseSettlement":[62077],"EnumerableSet":[52215],"IMovementStaking":[64348],"IPCP":[62022],"Initializable":[39746],"MovementStaking":[63931],"PCP":[61810],"PCPStorage":[61923],"ReentrancyGuard":[45862]},"nodeType":"SourceUnit","src":"39:35047:114","nodes":[{"id":60030,"nodeType":"PragmaDirective","src":"39:24:114","nodes":[],"literals":["solidity","^","0.8",".13"]},{"id":60032,"nodeType":"ImportDirective","src":"65:86:114","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol","file":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":52216,"symbolAliases":[{"foreign":{"id":60031,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52215,"src":"73:13:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60034,"nodeType":"ImportDirective","src":"152:96:114","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":39747,"symbolAliases":[{"foreign":{"id":60033,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39746,"src":"160:13:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60037,"nodeType":"ImportDirective","src":"249:81:114","nodes":[],"absolutePath":"src/staking/MovementStaking.sol","file":"../staking/MovementStaking.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":63932,"symbolAliases":[{"foreign":{"id":60035,"name":"MovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63931,"src":"257:15:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":60036,"name":"IMovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64348,"src":"274:16:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60039,"nodeType":"ImportDirective","src":"331:44:114","nodes":[],"absolutePath":"src/settlement/PCPStorage.sol","file":"./PCPStorage.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":61924,"symbolAliases":[{"foreign":{"id":60038,"name":"PCPStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61923,"src":"339:10:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60041,"nodeType":"ImportDirective","src":"376:63:114","nodes":[],"absolutePath":"src/settlement/settlement/BaseSettlement.sol","file":"./settlement/BaseSettlement.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":62078,"symbolAliases":[{"foreign":{"id":60040,"name":"BaseSettlement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62077,"src":"384:14:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60043,"nodeType":"ImportDirective","src":"440:43:114","nodes":[],"absolutePath":"src/settlement/interfaces/IPCP.sol","file":"./interfaces/IPCP.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":62023,"symbolAliases":[{"foreign":{"id":60042,"name":"IPCP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62022,"src":"448:4:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60044,"nodeType":"ImportDirective","src":"484:59:114","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":45863,"symbolAliases":[],"unitAlias":""},{"id":61810,"nodeType":"ContractDefinition","src":"545:34540:114","nodes":[{"id":60057,"nodeType":"VariableDeclaration","src":"654:72:114","nodes":[],"baseFunctions":[62021],"constant":true,"functionSelector":"80e460f0","mutability":"constant","name":"COMMITMENT_ADMIN","nameLocation":"678:16:114","scope":61810,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60053,"name":"bytes32","nodeType":"ElementaryTypeName","src":"654:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"434f4d4d49544d454e545f41444d494e","id":60055,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"707:18:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_db2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c","typeString":"literal_string \"COMMITMENT_ADMIN\""},"value":"COMMITMENT_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_db2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c","typeString":"literal_string \"COMMITMENT_ADMIN\""}],"id":60054,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"697:9:114","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":60056,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"697:29:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":60062,"nodeType":"VariableDeclaration","src":"764:72:114","nodes":[],"baseFunctions":[62015],"constant":true,"functionSelector":"5db916ab","mutability":"constant","name":"TRUSTED_ATTESTER","nameLocation":"788:16:114","scope":61810,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60058,"name":"bytes32","nodeType":"ElementaryTypeName","src":"764:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"545255535445445f4154544553544552","id":60060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"817:18:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18","typeString":"literal_string \"TRUSTED_ATTESTER\""},"value":"TRUSTED_ATTESTER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18","typeString":"literal_string \"TRUSTED_ATTESTER\""}],"id":60059,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"807:9:114","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":60061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"807:29:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":60065,"nodeType":"ErrorDefinition","src":"923:37:114","nodes":[],"documentation":{"id":60063,"nodeType":"StructuredDocumentation","src":"843:75:114","text":"@notice Error thrown when postconfirmer term is greater than 256 blocks"},"errorSelector":"38d443c8","name":"PostconfirmerDurationTooLong","nameLocation":"929:28:114","parameters":{"id":60064,"nodeType":"ParameterList","parameters":[],"src":"957:2:114"}},{"id":60068,"nodeType":"ErrorDefinition","src":"1051:45:114","nodes":[],"documentation":{"id":60066,"nodeType":"StructuredDocumentation","src":"966:80:114","text":"@notice Error thrown when postconfirmer term is too large for epoch duration"},"errorSelector":"60bc402f","name":"PostconfirmerDurationTooLongForEpoch","nameLocation":"1057:36:114","parameters":{"id":60067,"nodeType":"ParameterList","parameters":[],"src":"1093:2:114"}},{"id":60071,"nodeType":"ErrorDefinition","src":"1190:51:114","nodes":[],"documentation":{"id":60069,"nodeType":"StructuredDocumentation","src":"1102:83:114","text":"@notice Error thrown when minimum commitment age is greater than epoch duration"},"errorSelector":"a7075e5f","name":"minCommitmentAgeForPostconfirmationTooLong","nameLocation":"1196:42:114","parameters":{"id":60070,"nodeType":"ParameterList","parameters":[],"src":"1238:2:114"}},{"id":60074,"nodeType":"ErrorDefinition","src":"1354:46:114","nodes":[],"documentation":{"id":60072,"nodeType":"StructuredDocumentation","src":"1247:102:114","text":"@notice Error thrown when maximum postconfirmer non-reactivity time is greater than epoch duration"},"errorSelector":"3c9f1a53","name":"postconfirmerPrivilegeDurationTooLong","nameLocation":"1360:37:114","parameters":{"id":60073,"nodeType":"ParameterList","parameters":[],"src":"1397:2:114"}},{"id":60094,"nodeType":"FunctionDefinition","src":"1623:237:114","nodes":[],"body":{"id":60093,"nodeType":"Block","src":"1677:183:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60081,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39144,"src":"1716:18:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60082,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1736:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1740:6:114","memberName":"sender","nodeType":"MemberAccess","src":"1736:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60080,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"1708:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1708:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e4c59","id":60085,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1761:36:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""},"value":"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""}],"id":60079,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1687:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1687:120:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60087,"nodeType":"ExpressionStatement","src":"1687:120:114"},{"expression":{"arguments":[{"id":60089,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"1827:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":60090,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60076,"src":"1845:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60088,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39306,"src":"1817:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":60091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1817:36:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60092,"nodeType":"ExpressionStatement","src":"1817:36:114"}]},"functionSelector":"949d7c2a","implemented":true,"kind":"function","modifiers":[],"name":"grantCommitmentAdmin","nameLocation":"1632:20:114","parameters":{"id":60077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60076,"mutability":"mutable","name":"account","nameLocation":"1661:7:114","nodeType":"VariableDeclaration","scope":60094,"src":"1653:15:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60075,"name":"address","nodeType":"ElementaryTypeName","src":"1653:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1652:17:114"},"returnParameters":{"id":60078,"nodeType":"ParameterList","parameters":[],"src":"1677:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60130,"nodeType":"FunctionDefinition","src":"1866:326:114","nodes":[],"body":{"id":60129,"nodeType":"Block","src":"1935:257:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60102,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39144,"src":"1974:18:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60103,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1994:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1998:6:114","memberName":"sender","nodeType":"MemberAccess","src":"1994:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60101,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"1966:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1966:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e4c59","id":60106,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2019:36:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""},"value":"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""}],"id":60100,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1945:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1945:120:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60108,"nodeType":"ExpressionStatement","src":"1945:120:114"},{"body":{"id":60127,"nodeType":"Block","src":"2121:65:114","statements":[{"expression":{"arguments":[{"id":60121,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"2145:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":60122,"name":"accounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60097,"src":"2163:8:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60124,"indexExpression":{"id":60123,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60110,"src":"2172:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2163:11:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60120,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39306,"src":"2135:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":60125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2135:40:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60126,"nodeType":"ExpressionStatement","src":"2135:40:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60113,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60110,"src":"2095:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":60114,"name":"accounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60097,"src":"2099:8:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2108:6:114","memberName":"length","nodeType":"MemberAccess","src":"2099:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2095:19:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60128,"initializationExpression":{"assignments":[60110],"declarations":[{"constant":false,"id":60110,"mutability":"mutable","name":"i","nameLocation":"2088:1:114","nodeType":"VariableDeclaration","scope":60128,"src":"2080:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60109,"name":"uint256","nodeType":"ElementaryTypeName","src":"2080:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60112,"initialValue":{"hexValue":"30","id":60111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2092:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2080:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2116:3:114","subExpression":{"id":60117,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60110,"src":"2116:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60119,"nodeType":"ExpressionStatement","src":"2116:3:114"},"nodeType":"ForStatement","src":"2075:111:114"}]},"functionSelector":"4b47d955","implemented":true,"kind":"function","modifiers":[],"name":"batchGrantCommitmentAdmin","nameLocation":"1875:25:114","parameters":{"id":60098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60097,"mutability":"mutable","name":"accounts","nameLocation":"1918:8:114","nodeType":"VariableDeclaration","scope":60130,"src":"1901:25:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60095,"name":"address","nodeType":"ElementaryTypeName","src":"1901:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60096,"nodeType":"ArrayTypeName","src":"1901:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1900:27:114"},"returnParameters":{"id":60099,"nodeType":"ParameterList","parameters":[],"src":"1935:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60144,"nodeType":"FunctionDefinition","src":"2198:136:114","nodes":[],"body":{"id":60143,"nodeType":"Block","src":"2280:54:114","nodes":[],"statements":[{"expression":{"arguments":[{"id":60139,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60062,"src":"2300:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":60140,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60132,"src":"2318:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60138,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39306,"src":"2290:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":60141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2290:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60142,"nodeType":"ExpressionStatement","src":"2290:37:114"}]},"functionSelector":"81df1746","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60135,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"2262:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60136,"kind":"modifierInvocation","modifierName":{"id":60134,"name":"onlyRole","nameLocations":["2253:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"2253:8:114"},"nodeType":"ModifierInvocation","src":"2253:26:114"}],"name":"grantTrustedAttester","nameLocation":"2207:20:114","parameters":{"id":60133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60132,"mutability":"mutable","name":"attester","nameLocation":"2236:8:114","nodeType":"VariableDeclaration","scope":60144,"src":"2228:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60131,"name":"address","nodeType":"ElementaryTypeName","src":"2228:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2227:18:114"},"returnParameters":{"id":60137,"nodeType":"ParameterList","parameters":[],"src":"2280:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60174,"nodeType":"FunctionDefinition","src":"2340:226:114","nodes":[],"body":{"id":60173,"nodeType":"Block","src":"2437:129:114","nodes":[],"statements":[{"body":{"id":60171,"nodeType":"Block","src":"2494:66:114","statements":[{"expression":{"arguments":[{"id":60165,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60062,"src":"2518:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":60166,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60147,"src":"2536:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60168,"indexExpression":{"id":60167,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60154,"src":"2546:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2536:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60164,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39306,"src":"2508:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":60169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2508:41:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60170,"nodeType":"ExpressionStatement","src":"2508:41:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60157,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60154,"src":"2467:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":60158,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60147,"src":"2471:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2481:6:114","memberName":"length","nodeType":"MemberAccess","src":"2471:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2467:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60172,"initializationExpression":{"assignments":[60154],"declarations":[{"constant":false,"id":60154,"mutability":"mutable","name":"i","nameLocation":"2460:1:114","nodeType":"VariableDeclaration","scope":60172,"src":"2452:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60153,"name":"uint256","nodeType":"ElementaryTypeName","src":"2452:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60156,"initialValue":{"hexValue":"30","id":60155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2464:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2452:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2489:3:114","subExpression":{"id":60161,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60154,"src":"2489:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60163,"nodeType":"ExpressionStatement","src":"2489:3:114"},"nodeType":"ForStatement","src":"2447:113:114"}]},"functionSelector":"cf6772ad","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60150,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"2419:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60151,"kind":"modifierInvocation","modifierName":{"id":60149,"name":"onlyRole","nameLocations":["2410:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"2410:8:114"},"nodeType":"ModifierInvocation","src":"2410:26:114"}],"name":"batchGrantTrustedAttester","nameLocation":"2349:25:114","parameters":{"id":60148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60147,"mutability":"mutable","name":"attesters","nameLocation":"2392:9:114","nodeType":"VariableDeclaration","scope":60174,"src":"2375:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60145,"name":"address","nodeType":"ElementaryTypeName","src":"2375:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60146,"nodeType":"ArrayTypeName","src":"2375:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2374:28:114"},"returnParameters":{"id":60152,"nodeType":"ParameterList","parameters":[],"src":"2437:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60256,"nodeType":"FunctionDefinition","src":"2789:1624:114","nodes":[],"body":{"id":60255,"nodeType":"Block","src":"3215:1198:114","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":60195,"name":"__BaseSettlement_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62065,"src":"3225:31:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":60196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3225:33:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60197,"nodeType":"ExpressionStatement","src":"3225:33:114"},{"expression":{"id":60200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60198,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"3268:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60199,"name":"_stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60177,"src":"3286:16:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"src":"3268:34:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60201,"nodeType":"ExpressionStatement","src":"3268:34:114"},{"expression":{"id":60204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60202,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61824,"src":"3312:26:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60203,"name":"_leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60181,"src":"3341:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3312:56:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60205,"nodeType":"ExpressionStatement","src":"3312:56:114"},{"expression":{"id":60208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60206,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"3378:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60207,"name":"_lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60179,"src":"3414:34:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3378:70:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60209,"nodeType":"ExpressionStatement","src":"3378:70:114"},{"expression":{"arguments":[{"id":60213,"name":"_epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60183,"src":"3489:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":60214,"name":"_custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60186,"src":"3505:11:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"expression":{"id":60210,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"3458:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3474:14:114","memberName":"registerDomain","nodeType":"MemberAccess","referencedDeclaration":64078,"src":"3458:30:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (uint256,address[] memory) external"}},"id":60215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3458:59:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60216,"nodeType":"ExpressionStatement","src":"3458:59:114"},{"expression":{"arguments":[{"expression":{"id":60218,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3548:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3552:6:114","memberName":"sender","nodeType":"MemberAccess","src":"3548:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60217,"name":"grantCommitmentAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60094,"src":"3527:20:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":60220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3527:32:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60221,"nodeType":"ExpressionStatement","src":"3527:32:114"},{"expression":{"arguments":[{"expression":{"id":60223,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3590:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3594:6:114","memberName":"sender","nodeType":"MemberAccess","src":"3590:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60222,"name":"grantTrustedAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60144,"src":"3569:20:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":60225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3569:32:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60226,"nodeType":"ExpressionStatement","src":"3569:32:114"},{"expression":{"id":60229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60227,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61829,"src":"3611:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60228,"name":"_postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60188,"src":"3635:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3611:46:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60230,"nodeType":"ExpressionStatement","src":"3611:46:114"},{"expression":{"id":60233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60231,"name":"moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61822,"src":"3667:16:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60232,"name":"_moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60190,"src":"3686:17:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3667:36:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60234,"nodeType":"ExpressionStatement","src":"3667:36:114"},{"expression":{"id":60239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60235,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61832,"src":"4204:35:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60236,"name":"_epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60183,"src":"4242:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":60237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4259:2:114","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"4242:19:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4204:57:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60240,"nodeType":"ExpressionStatement","src":"4204:57:114"},{"expression":{"id":60245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60241,"name":"postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61835,"src":"4271:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60242,"name":"_epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60183,"src":"4304:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":60243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4321:2:114","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"4304:19:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4271:52:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60246,"nodeType":"ExpressionStatement","src":"4271:52:114"},{"expression":{"id":60249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60247,"name":"rewardPerAttestationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61916,"src":"4333:25:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":60248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4361:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4333:29:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60250,"nodeType":"ExpressionStatement","src":"4333:29:114"},{"expression":{"id":60253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60251,"name":"rewardPerPostconfirmationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61918,"src":"4372:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":60252,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4405:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4372:34:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60254,"nodeType":"ExpressionStatement","src":"4372:34:114"}]},"functionSelector":"107e21ca","implemented":true,"kind":"function","modifiers":[{"id":60193,"kind":"modifierInvocation","modifierName":{"id":60192,"name":"initializer","nameLocations":["3203:11:114"],"nodeType":"IdentifierPath","referencedDeclaration":39586,"src":"3203:11:114"},"nodeType":"ModifierInvocation","src":"3203:11:114"}],"name":"initialize","nameLocation":"2798:10:114","parameters":{"id":60191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60177,"mutability":"mutable","name":"_stakingContract","nameLocation":"2835:16:114","nodeType":"VariableDeclaration","scope":60256,"src":"2818:33:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"},"typeName":{"id":60176,"nodeType":"UserDefinedTypeName","pathNode":{"id":60175,"name":"IMovementStaking","nameLocations":["2818:16:114"],"nodeType":"IdentifierPath","referencedDeclaration":64348,"src":"2818:16:114"},"referencedDeclaration":64348,"src":"2818:16:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"visibility":"internal"},{"constant":false,"id":60179,"mutability":"mutable","name":"_lastPostconfirmedSuperBlockHeight","nameLocation":"2869:34:114","nodeType":"VariableDeclaration","scope":60256,"src":"2861:42:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60178,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60181,"mutability":"mutable","name":"_leadingSuperBlockTolerance","nameLocation":"2921:27:114","nodeType":"VariableDeclaration","scope":60256,"src":"2913:35:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60180,"name":"uint256","nodeType":"ElementaryTypeName","src":"2913:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60183,"mutability":"mutable","name":"_epochDuration","nameLocation":"2966:14:114","nodeType":"VariableDeclaration","scope":60256,"src":"2958:22:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60182,"name":"uint256","nodeType":"ElementaryTypeName","src":"2958:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60186,"mutability":"mutable","name":"_custodians","nameLocation":"3024:11:114","nodeType":"VariableDeclaration","scope":60256,"src":"3007:28:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60184,"name":"address","nodeType":"ElementaryTypeName","src":"3007:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60185,"nodeType":"ArrayTypeName","src":"3007:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":60188,"mutability":"mutable","name":"_postconfirmerDuration","nameLocation":"3053:22:114","nodeType":"VariableDeclaration","scope":60256,"src":"3045:30:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60187,"name":"uint256","nodeType":"ElementaryTypeName","src":"3045:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60190,"mutability":"mutable","name":"_moveTokenAddress","nameLocation":"3110:17:114","nodeType":"VariableDeclaration","scope":60256,"src":"3102:25:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60189,"name":"address","nodeType":"ElementaryTypeName","src":"3102:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2808:387:114"},"returnParameters":{"id":60194,"nodeType":"ParameterList","parameters":[],"src":"3215:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60275,"nodeType":"FunctionDefinition","src":"4465:195:114","nodes":[],"body":{"id":60274,"nodeType":"Block","src":"4505:155:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60262,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39144,"src":"4531:18:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60263,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4551:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4555:6:114","memberName":"sender","nodeType":"MemberAccess","src":"4551:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60261,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"4523:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4523:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e5f4f4e4c59","id":60266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4564:39:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_b077b31285a16307062fcb4fde0e57e8246ea6dc3cdd1c5dd5880d32a26fbf54","typeString":"literal_string \"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY\""},"value":"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b077b31285a16307062fcb4fde0e57e8246ea6dc3cdd1c5dd5880d32a26fbf54","typeString":"literal_string \"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY\""}],"id":60260,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4515:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4515:89:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60268,"nodeType":"ExpressionStatement","src":"4515:89:114"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":60269,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"4614:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4630:21:114","memberName":"acceptGenesisCeremony","nodeType":"MemberAccess","referencedDeclaration":64081,"src":"4614:37:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":60272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4614:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60273,"nodeType":"ExpressionStatement","src":"4614:39:114"}]},"documentation":{"id":60257,"nodeType":"StructuredDocumentation","src":"4419:41:114","text":"@notice Accepts the genesis ceremony."},"functionSelector":"92a2ebf3","implemented":true,"kind":"function","modifiers":[],"name":"acceptGenesisCeremony","nameLocation":"4474:21:114","parameters":{"id":60258,"nodeType":"ParameterList","parameters":[],"src":"4495:2:114"},"returnParameters":{"id":60259,"nodeType":"ParameterList","parameters":[],"src":"4505:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60309,"nodeType":"FunctionDefinition","src":"4837:570:114","nodes":[],"body":{"id":60308,"nodeType":"Block","src":"4937:470:114","nodes":[],"statements":[{"assignments":[60285],"declarations":[{"constant":false,"id":60285,"mutability":"mutable","name":"epochDuration","nameLocation":"5041:13:114","nodeType":"VariableDeclaration","scope":60308,"src":"5033:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60284,"name":"uint256","nodeType":"ElementaryTypeName","src":"5033:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60293,"initialValue":{"arguments":[{"arguments":[{"id":60290,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5098:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60289,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5090:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60288,"name":"address","nodeType":"ElementaryTypeName","src":"5090:7:114","typeDescriptions":{}}},"id":60291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5090:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60286,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"5057:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5073:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"5057:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5057:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5033:71:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":60294,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5229:1:114","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":60295,"name":"_postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60278,"src":"5233:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5229:26:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":60297,"name":"epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60285,"src":"5259:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5229:43:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60303,"nodeType":"IfStatement","src":"5225:120:114","trueBody":{"id":60302,"nodeType":"Block","src":"5275:70:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60299,"name":"PostconfirmerDurationTooLongForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60068,"src":"5296:36:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5296:38:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60301,"nodeType":"RevertStatement","src":"5289:45:114"}]}},{"expression":{"id":60306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60304,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61829,"src":"5354:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60305,"name":"_postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60278,"src":"5378:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5354:46:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60307,"nodeType":"ExpressionStatement","src":"5354:46:114"}]},"documentation":{"id":60276,"nodeType":"StructuredDocumentation","src":"4666:166:114","text":"@notice Sets the postconfirmer term duration, must be less than epoch duration\n @param _postconfirmerDuration New postconfirmer term duration in time units"},"functionSelector":"3d645927","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60281,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"4919:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60282,"kind":"modifierInvocation","modifierName":{"id":60280,"name":"onlyRole","nameLocations":["4910:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"4910:8:114"},"nodeType":"ModifierInvocation","src":"4910:26:114"}],"name":"setPostconfirmerDuration","nameLocation":"4846:24:114","parameters":{"id":60279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60278,"mutability":"mutable","name":"_postconfirmerDuration","nameLocation":"4879:22:114","nodeType":"VariableDeclaration","scope":60309,"src":"4871:30:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60277,"name":"uint256","nodeType":"ElementaryTypeName","src":"4871:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4870:32:114"},"returnParameters":{"id":60283,"nodeType":"ParameterList","parameters":[],"src":"4937:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60317,"nodeType":"FunctionDefinition","src":"5413:111:114","nodes":[],"body":{"id":60316,"nodeType":"Block","src":"5479:45:114","nodes":[],"statements":[{"expression":{"id":60314,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61829,"src":"5496:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60313,"id":60315,"nodeType":"Return","src":"5489:28:114"}]},"baseFunctions":[61959],"functionSelector":"1241ebe3","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerDuration","nameLocation":"5422:24:114","parameters":{"id":60310,"nodeType":"ParameterList","parameters":[],"src":"5446:2:114"},"returnParameters":{"id":60313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60312,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60317,"src":"5470:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60311,"name":"uint256","nodeType":"ElementaryTypeName","src":"5470:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5469:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60348,"nodeType":"FunctionDefinition","src":"5787:464:114","nodes":[],"body":{"id":60347,"nodeType":"Block","src":"5905:346:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60326,"name":"_postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60320,"src":"5973:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":60331,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6049:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60330,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6041:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60329,"name":"address","nodeType":"ElementaryTypeName","src":"6041:7:114","typeDescriptions":{}}},"id":60332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6041:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60327,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"6008:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6024:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"6008:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6008:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":60334,"name":"getMinCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60396,"src":"6058:38:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6058:40:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6008:90:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5973:125:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60342,"nodeType":"IfStatement","src":"5969:202:114","trueBody":{"id":60341,"nodeType":"Block","src":"6100:71:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60338,"name":"postconfirmerPrivilegeDurationTooLong","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60074,"src":"6121:37:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6121:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60340,"nodeType":"RevertStatement","src":"6114:46:114"}]}},{"expression":{"id":60345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60343,"name":"postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61835,"src":"6180:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60344,"name":"_postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60320,"src":"6213:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6180:64:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60346,"nodeType":"ExpressionStatement","src":"6180:64:114"}]},"documentation":{"id":60318,"nodeType":"StructuredDocumentation","src":"5530:252:114","text":"@notice Sets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\n @param _postconfirmerPrivilegeDuration maximum time the postconfirmer is permitted to be non-reactive to an honest superBlock commitment"},"functionSelector":"da7d28b6","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60323,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"5887:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60324,"kind":"modifierInvocation","modifierName":{"id":60322,"name":"onlyRole","nameLocations":["5878:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"5878:8:114"},"nodeType":"ModifierInvocation","src":"5878:26:114"}],"name":"setPostconfirmerPrivilegeDuration","nameLocation":"5796:33:114","parameters":{"id":60321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60320,"mutability":"mutable","name":"_postconfirmerPrivilegeDuration","nameLocation":"5838:31:114","nodeType":"VariableDeclaration","scope":60348,"src":"5830:39:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60319,"name":"uint256","nodeType":"ElementaryTypeName","src":"5830:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5829:41:114"},"returnParameters":{"id":60325,"nodeType":"ParameterList","parameters":[],"src":"5905:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60357,"nodeType":"FunctionDefinition","src":"6474:129:114","nodes":[],"body":{"id":60356,"nodeType":"Block","src":"6549:54:114","nodes":[],"statements":[{"expression":{"id":60354,"name":"postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61835,"src":"6566:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60353,"id":60355,"nodeType":"Return","src":"6559:37:114"}]},"documentation":{"id":60349,"nodeType":"StructuredDocumentation","src":"6257:212:114","text":"@notice Gets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\n @return The maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"},"functionSelector":"028e490a","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerPrivilegeDuration","nameLocation":"6483:33:114","parameters":{"id":60350,"nodeType":"ParameterList","parameters":[],"src":"6516:2:114"},"returnParameters":{"id":60353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60352,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60357,"src":"6540:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60351,"name":"uint256","nodeType":"ElementaryTypeName","src":"6540:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6539:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60388,"nodeType":"FunctionDefinition","src":"7053:533:114","nodes":[],"body":{"id":60387,"nodeType":"Block","src":"7181:405:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60366,"name":"_minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60360,"src":"7293:36:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":60371,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7374:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60370,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7366:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60369,"name":"address","nodeType":"ElementaryTypeName","src":"7366:7:114","typeDescriptions":{}}},"id":60372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7366:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60367,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"7333:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7349:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"7333:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7333:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":60374,"name":"getPostconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60357,"src":"7383:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7383:35:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7333:85:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7293:125:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60382,"nodeType":"IfStatement","src":"7289:207:114","trueBody":{"id":60381,"nodeType":"Block","src":"7420:76:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60378,"name":"minCommitmentAgeForPostconfirmationTooLong","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60071,"src":"7441:42:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7441:44:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60380,"nodeType":"RevertStatement","src":"7434:51:114"}]}},{"expression":{"id":60385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60383,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61832,"src":"7505:35:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60384,"name":"_minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60360,"src":"7543:36:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7505:74:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60386,"nodeType":"ExpressionStatement","src":"7505:74:114"}]},"documentation":{"id":60358,"nodeType":"StructuredDocumentation","src":"6609:169:114","text":"@notice Sets the minimum time that must pass before a commitment can be postconfirmed\n @param _minCommitmentAgeForPostconfirmation New minimum commitment age "},"functionSelector":"1f83e2a3","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60363,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"7163:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60364,"kind":"modifierInvocation","modifierName":{"id":60362,"name":"onlyRole","nameLocations":["7154:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"7154:8:114"},"nodeType":"ModifierInvocation","src":"7154:26:114"}],"name":"setMinCommitmentAgeForPostconfirmation","nameLocation":"7062:38:114","parameters":{"id":60361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60360,"mutability":"mutable","name":"_minCommitmentAgeForPostconfirmation","nameLocation":"7109:36:114","nodeType":"VariableDeclaration","scope":60388,"src":"7101:44:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60359,"name":"uint256","nodeType":"ElementaryTypeName","src":"7101:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7100:46:114"},"returnParameters":{"id":60365,"nodeType":"ParameterList","parameters":[],"src":"7181:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60396,"nodeType":"FunctionDefinition","src":"7592:139:114","nodes":[],"body":{"id":60395,"nodeType":"Block","src":"7672:59:114","nodes":[],"statements":[{"expression":{"id":60393,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61832,"src":"7689:35:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60392,"id":60394,"nodeType":"Return","src":"7682:42:114"}]},"functionSelector":"ab208ebd","implemented":true,"kind":"function","modifiers":[],"name":"getMinCommitmentAgeForPostconfirmation","nameLocation":"7601:38:114","parameters":{"id":60389,"nodeType":"ParameterList","parameters":[],"src":"7639:2:114"},"returnParameters":{"id":60392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60391,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60396,"src":"7663:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60390,"name":"uint256","nodeType":"ElementaryTypeName","src":"7663:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7662:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60409,"nodeType":"FunctionDefinition","src":"7737:132:114","nodes":[],"body":{"id":60408,"nodeType":"Block","src":"7820:49:114","nodes":[],"statements":[{"expression":{"id":60406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60404,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61893,"src":"7830:22:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60405,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60398,"src":"7855:7:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7830:32:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60407,"nodeType":"ExpressionStatement","src":"7830:32:114"}]},"functionSelector":"d2526fef","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60401,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"7802:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60402,"kind":"modifierInvocation","modifierName":{"id":60400,"name":"onlyRole","nameLocations":["7793:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"7793:8:114"},"nodeType":"ModifierInvocation","src":"7793:26:114"}],"name":"setOpenAttestationEnabled","nameLocation":"7746:25:114","parameters":{"id":60399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60398,"mutability":"mutable","name":"enabled","nameLocation":"7777:7:114","nodeType":"VariableDeclaration","scope":60409,"src":"7772:12:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":60397,"name":"bool","nodeType":"ElementaryTypeName","src":"7772:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7771:14:114"},"returnParameters":{"id":60403,"nodeType":"ParameterList","parameters":[],"src":"7820:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60424,"nodeType":"FunctionDefinition","src":"8131:129:114","nodes":[],"body":{"id":60423,"nodeType":"Block","src":"8189:71:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60419,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8247:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60418,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8239:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60417,"name":"address","nodeType":"ElementaryTypeName","src":"8239:7:114","typeDescriptions":{}}},"id":60420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8239:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60415,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"8206:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8222:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"8206:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8206:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60414,"id":60422,"nodeType":"Return","src":"8199:54:114"}]},"baseFunctions":[61953],"documentation":{"id":60410,"nodeType":"StructuredDocumentation","src":"8091:35:114","text":"@notice Gets the epoch duration"},"functionSelector":"5d3ea8f1","implemented":true,"kind":"function","modifiers":[],"name":"getEpochDuration","nameLocation":"8140:16:114","parameters":{"id":60411,"nodeType":"ParameterList","parameters":[],"src":"8156:2:114"},"returnParameters":{"id":60414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60413,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60424,"src":"8180:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60412,"name":"uint256","nodeType":"ElementaryTypeName","src":"8180:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8179:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60449,"nodeType":"FunctionDefinition","src":"8331:207:114","nodes":[],"body":{"id":60448,"nodeType":"Block","src":"8390:148:114","nodes":[],"statements":[{"assignments":[60431],"declarations":[{"constant":false,"id":60431,"mutability":"mutable","name":"currentTime","nameLocation":"8408:11:114","nodeType":"VariableDeclaration","scope":60448,"src":"8400:19:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60430,"name":"uint256","nodeType":"ElementaryTypeName","src":"8400:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60434,"initialValue":{"expression":{"id":60432,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"8422:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":60433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8428:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"8422:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8400:37:114"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60435,"name":"currentTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60431,"src":"8454:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60436,"name":"currentTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60431,"src":"8469:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"arguments":[{"arguments":[{"id":60441,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8524:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60440,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8516:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60439,"name":"address","nodeType":"ElementaryTypeName","src":"8516:7:114","typeDescriptions":{}}},"id":60442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8516:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60437,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"8483:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8499:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"8483:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8483:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8469:61:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":60445,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8468:63:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8454:77:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60429,"id":60447,"nodeType":"Return","src":"8447:84:114"}]},"documentation":{"id":60425,"nodeType":"StructuredDocumentation","src":"8266:60:114","text":"@notice Gets the time at which the current epoch started"},"functionSelector":"90879f64","implemented":true,"kind":"function","modifiers":[],"name":"getEpochStartTime","nameLocation":"8340:17:114","parameters":{"id":60426,"nodeType":"ParameterList","parameters":[],"src":"8357:2:114"},"returnParameters":{"id":60429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60428,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60449,"src":"8381:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60427,"name":"uint256","nodeType":"ElementaryTypeName","src":"8381:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8380:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60463,"nodeType":"FunctionDefinition","src":"8574:133:114","nodes":[],"body":{"id":60462,"nodeType":"Block","src":"8631:76:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60458,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8694:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60457,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8686:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60456,"name":"address","nodeType":"ElementaryTypeName","src":"8686:7:114","typeDescriptions":{}}},"id":60459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8686:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60454,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"8648:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8664:21:114","memberName":"getEpochByL1BlockTime","nodeType":"MemberAccess","referencedDeclaration":64088,"src":"8648:37:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8648:52:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60453,"id":60461,"nodeType":"Return","src":"8641:59:114"}]},"baseFunctions":[61990],"functionSelector":"37d7f58f","implemented":true,"kind":"function","modifiers":[],"name":"getPresentEpoch","nameLocation":"8583:15:114","parameters":{"id":60450,"nodeType":"ParameterList","parameters":[],"src":"8598:2:114"},"returnParameters":{"id":60453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60452,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60463,"src":"8622:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60451,"name":"uint256","nodeType":"ElementaryTypeName","src":"8622:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8621:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60477,"nodeType":"FunctionDefinition","src":"8745:131:114","nodes":[],"body":{"id":60476,"nodeType":"Block","src":"8804:72:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60472,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8863:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8855:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60470,"name":"address","nodeType":"ElementaryTypeName","src":"8855:7:114","typeDescriptions":{}}},"id":60473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8855:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60468,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"8821:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8837:17:114","memberName":"getAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":64095,"src":"8821:33:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8821:48:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60467,"id":60475,"nodeType":"Return","src":"8814:55:114"}]},"baseFunctions":[61984],"functionSelector":"6c713af8","implemented":true,"kind":"function","modifiers":[],"name":"getAcceptingEpoch","nameLocation":"8754:17:114","parameters":{"id":60464,"nodeType":"ParameterList","parameters":[],"src":"8771:2:114"},"returnParameters":{"id":60467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60477,"src":"8795:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60465,"name":"uint256","nodeType":"ElementaryTypeName","src":"8795:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8794:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60491,"nodeType":"FunctionDefinition","src":"8946:165:114","nodes":[],"body":{"id":60490,"nodeType":"Block","src":"9022:89:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60486,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9098:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60485,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9090:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60484,"name":"address","nodeType":"ElementaryTypeName","src":"9090:7:114","typeDescriptions":{}}},"id":60487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9090:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60482,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"9039:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9055:34:114","memberName":"getNextAcceptingEpochWithException","nodeType":"MemberAccess","referencedDeclaration":64102,"src":"9039:50:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9039:65:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60481,"id":60489,"nodeType":"Return","src":"9032:72:114"}]},"functionSelector":"3752d675","implemented":true,"kind":"function","modifiers":[],"name":"getNextAcceptingEpochWithException","nameLocation":"8955:34:114","parameters":{"id":60478,"nodeType":"ParameterList","parameters":[],"src":"8989:2:114"},"returnParameters":{"id":60481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60480,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60491,"src":"9013:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60479,"name":"uint256","nodeType":"ElementaryTypeName","src":"9013:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9012:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60522,"nodeType":"FunctionDefinition","src":"9197:414:114","nodes":[],"body":{"id":60521,"nodeType":"Block","src":"9264:347:114","nodes":[],"statements":[{"assignments":[60498],"declarations":[{"constant":false,"id":60498,"mutability":"mutable","name":"currentTime","nameLocation":"9282:11:114","nodeType":"VariableDeclaration","scope":60521,"src":"9274:19:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60497,"name":"uint256","nodeType":"ElementaryTypeName","src":"9274:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60501,"initialValue":{"expression":{"id":60499,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"9296:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":60500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9302:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"9296:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9274:37:114"},{"assignments":[60503],"declarations":[{"constant":false,"id":60503,"mutability":"mutable","name":"currentTimeCorrected","nameLocation":"9434:20:114","nodeType":"VariableDeclaration","scope":60521,"src":"9426:28:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60502,"name":"uint256","nodeType":"ElementaryTypeName","src":"9426:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60513,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60504,"name":"currentTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60498,"src":"9457:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"arguments":[{"arguments":[{"id":60509,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9512:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9504:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60507,"name":"address","nodeType":"ElementaryTypeName","src":"9504:7:114","typeDescriptions":{}}},"id":60510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9504:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60505,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"9471:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9487:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"9471:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9471:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9457:61:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9426:92:114"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60514,"name":"currentTimeCorrected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60503,"src":"9535:20:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60515,"name":"currentTimeCorrected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60503,"src":"9559:20:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":60516,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61829,"src":"9582:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9559:44:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":60518,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9558:46:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9535:69:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60496,"id":60520,"nodeType":"Return","src":"9528:76:114"}]},"documentation":{"id":60492,"nodeType":"StructuredDocumentation","src":"9117:75:114","text":"@notice Gets the time at which the current postconfirmer's term started"},"functionSelector":"5f4d642e","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerStartTime","nameLocation":"9206:25:114","parameters":{"id":60493,"nodeType":"ParameterList","parameters":[],"src":"9231:2:114"},"returnParameters":{"id":60496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60495,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60522,"src":"9255:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60494,"name":"uint256","nodeType":"ElementaryTypeName","src":"9255:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9254:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60583,"nodeType":"FunctionDefinition","src":"9951:929:114","nodes":[],"body":{"id":60582,"nodeType":"Block","src":"10009:871:114","nodes":[],"statements":[{"assignments":[60529],"declarations":[{"constant":false,"id":60529,"mutability":"mutable","name":"randSeed1","nameLocation":"10400:9:114","nodeType":"VariableDeclaration","scope":60582,"src":"10392:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60528,"name":"uint256","nodeType":"ElementaryTypeName","src":"10392:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60532,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":60530,"name":"getPostconfirmerStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60522,"src":"10412:25:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10412:27:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10392:47:114"},{"assignments":[60534],"declarations":[{"constant":false,"id":60534,"mutability":"mutable","name":"randSeed2","nameLocation":"10457:9:114","nodeType":"VariableDeclaration","scope":60582,"src":"10449:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60533,"name":"uint256","nodeType":"ElementaryTypeName","src":"10449:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60537,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":60535,"name":"getEpochStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60449,"src":"10469:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10469:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10449:39:114"},{"assignments":[60542],"declarations":[{"constant":false,"id":60542,"mutability":"mutable","name":"attesters","nameLocation":"10515:9:114","nodeType":"VariableDeclaration","scope":60582,"src":"10498:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60540,"name":"address","nodeType":"ElementaryTypeName","src":"10498:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60541,"nodeType":"ArrayTypeName","src":"10498:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":60550,"initialValue":{"arguments":[{"arguments":[{"id":60547,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10587:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10579:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60545,"name":"address","nodeType":"ElementaryTypeName","src":"10579:7:114","typeDescriptions":{}}},"id":60548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10579:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60543,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"10527:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10543:35:114","memberName":"getStakedAttestersForAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":64296,"src":"10527:51:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":60549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10527:66:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10498:95:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":60551,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60542,"src":"10607:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10617:6:114","memberName":"length","nodeType":"MemberAccess","src":"10607:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":60553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10627:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10607:21:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60561,"nodeType":"IfStatement","src":"10603:69:114","trueBody":{"id":60560,"nodeType":"Block","src":"10630:42:114","statements":[{"expression":{"arguments":[{"hexValue":"30","id":60557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10659:1:114","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":60556,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10651:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60555,"name":"address","nodeType":"ElementaryTypeName","src":"10651:7:114","typeDescriptions":{}}},"id":60558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10651:10:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":60527,"id":60559,"nodeType":"Return","src":"10644:17:114"}]}},{"assignments":[60563],"declarations":[{"constant":false,"id":60563,"mutability":"mutable","name":"postconfirmerIndex","nameLocation":"10689:18:114","nodeType":"VariableDeclaration","scope":60582,"src":"10681:26:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60562,"name":"uint256","nodeType":"ElementaryTypeName","src":"10681:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60577,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":60569,"name":"randSeed1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60529,"src":"10745:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":60570,"name":"randSeed2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60534,"src":"10756:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":60567,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10728:3:114","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":60568,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10732:12:114","memberName":"encodePacked","nodeType":"MemberAccess","src":"10728:16:114","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":60571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10728:38:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":60566,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10718:9:114","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":60572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10718:49:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":60565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10710:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":60564,"name":"uint256","nodeType":"ElementaryTypeName","src":"10710:7:114","typeDescriptions":{}}},"id":60573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10710:58:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"expression":{"id":60574,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60542,"src":"10771:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10781:6:114","memberName":"length","nodeType":"MemberAccess","src":"10771:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10710:77:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10681:106:114"},{"expression":{"baseExpression":{"id":60578,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60542,"src":"10844:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60580,"indexExpression":{"id":60579,"name":"postconfirmerIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60563,"src":"10854:18:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10844:29:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":60527,"id":60581,"nodeType":"Return","src":"10837:36:114"}]},"baseFunctions":[61965],"documentation":{"id":60523,"nodeType":"StructuredDocumentation","src":"9617:109:114","text":"@notice Determines the postconfirmer in the accepting epoch using L1 block hash as a source of randomness"},"functionSelector":"35ea1c63","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmer","nameLocation":"9960:16:114","parameters":{"id":60524,"nodeType":"ParameterList","parameters":[],"src":"9976:2:114"},"returnParameters":{"id":60527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60526,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60583,"src":"10000:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60525,"name":"address","nodeType":"ElementaryTypeName","src":"10000:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9999:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60603,"nodeType":"FunctionDefinition","src":"11026:250:114","nodes":[],"body":{"id":60602,"nodeType":"Block","src":"11107:169:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60597,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11253:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60596,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11245:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60595,"name":"address","nodeType":"ElementaryTypeName","src":"11245:7:114","typeDescriptions":{}}},"id":60598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11245:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":60599,"name":"newEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60586,"src":"11260:8:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":60592,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"11211:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11227:17:114","memberName":"setAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":64347,"src":"11211:33:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":60600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11211:58:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60601,"nodeType":"ExpressionStatement","src":"11211:58:114"}]},"baseFunctions":[62009],"documentation":{"id":60584,"nodeType":"StructuredDocumentation","src":"10886:135:114","text":"@notice Sets the accepting epoch to a new value (must be higher than current)\n @param newEpoch The new accepting epoch value"},"functionSelector":"d03509ec","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60589,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"11089:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60590,"kind":"modifierInvocation","modifierName":{"id":60588,"name":"onlyRole","nameLocations":["11080:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"11080:8:114"},"nodeType":"ModifierInvocation","src":"11080:26:114"}],"name":"setAcceptingEpoch","nameLocation":"11035:17:114","parameters":{"id":60587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60586,"mutability":"mutable","name":"newEpoch","nameLocation":"11061:8:114","nodeType":"VariableDeclaration","scope":60603,"src":"11053:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60585,"name":"uint256","nodeType":"ElementaryTypeName","src":"11053:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11052:18:114"},"returnParameters":{"id":60591,"nodeType":"ParameterList","parameters":[],"src":"11107:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":60622,"nodeType":"FunctionDefinition","src":"11507:242:114","nodes":[],"body":{"id":60621,"nodeType":"Block","src":"11676:73:114","nodes":[],"statements":[{"expression":{"arguments":[{"id":60616,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60605,"src":"11714:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":60617,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60607,"src":"11722:10:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":60618,"name":"blockId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60609,"src":"11734:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":60615,"name":"SuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61843,"src":"11693:20:114","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SuperBlockCommitment_$61843_storage_ptr_$","typeString":"type(struct PCPStorage.SuperBlockCommitment storage pointer)"}},"id":60619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11693:49:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"functionReturnParameters":60614,"id":60620,"nodeType":"Return","src":"11686:56:114"}]},"functionSelector":"026583d7","implemented":true,"kind":"function","modifiers":[],"name":"createSuperBlockCommitment","nameLocation":"11516:26:114","parameters":{"id":60610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60605,"mutability":"mutable","name":"height","nameLocation":"11560:6:114","nodeType":"VariableDeclaration","scope":60622,"src":"11552:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60604,"name":"uint256","nodeType":"ElementaryTypeName","src":"11552:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60607,"mutability":"mutable","name":"commitment","nameLocation":"11584:10:114","nodeType":"VariableDeclaration","scope":60622,"src":"11576:18:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60606,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11576:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":60609,"mutability":"mutable","name":"blockId","nameLocation":"11612:7:114","nodeType":"VariableDeclaration","scope":60622,"src":"11604:15:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60608,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11604:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11542:83:114"},"returnParameters":{"id":60614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60613,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60622,"src":"11647:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60612,"nodeType":"UserDefinedTypeName","pathNode":{"id":60611,"name":"SuperBlockCommitment","nameLocations":["11647:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"11647:20:114"},"referencedDeclaration":61843,"src":"11647:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"11646:29:114"},"scope":61810,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":60714,"nodeType":"FunctionDefinition","src":"11817:2174:114","nodes":[],"body":{"id":60713,"nodeType":"Block","src":"11963:2028:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":60631,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"12050:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60634,"indexExpression":{"expression":{"id":60632,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"12062:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60633,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12083:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"12062:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12050:40:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60636,"indexExpression":{"id":60635,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60625,"src":"12091:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12050:50:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":60637,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12101:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"12050:57:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":60638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12111:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12050:62:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60643,"nodeType":"IfStatement","src":"12046:113:114","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60640,"name":"AttesterAlreadyCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61947,"src":"12133:24:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12133:26:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60642,"nodeType":"RevertStatement","src":"12126:33:114"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60644,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"12565:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":60645,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61824,"src":"12601:26:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12565:62:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":60647,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"12630:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60648,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12651:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"12630:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12565:92:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60654,"nodeType":"IfStatement","src":"12561:156:114","trueBody":{"id":60653,"nodeType":"Block","src":"12659:58:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60650,"name":"AttesterAlreadyCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61947,"src":"12680:24:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12680:26:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60652,"nodeType":"RevertStatement","src":"12673:33:114"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":60655,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"13051:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":60658,"indexExpression":{"expression":{"id":60656,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13081:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13102:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"13081:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13051:58:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":60659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13113:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13051:63:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60670,"nodeType":"IfStatement","src":"13047:172:114","trueBody":{"id":60669,"nodeType":"Block","src":"13116:103:114","statements":[{"expression":{"id":60667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":60661,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"13130:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":60664,"indexExpression":{"expression":{"id":60662,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13160:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60663,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13181:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"13160:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13130:58:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":60665,"name":"getPresentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60463,"src":"13191:15:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13191:17:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13130:78:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60668,"nodeType":"ExpressionStatement","src":"13130:78:114"}]}},{"expression":{"id":60678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":60671,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"13275:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60675,"indexExpression":{"expression":{"id":60672,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13287:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60673,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13308:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"13287:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13275:40:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60676,"indexExpression":{"id":60674,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60625,"src":"13316:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13275:50:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60677,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13328:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"src":"13275:73:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":60679,"nodeType":"ExpressionStatement","src":"13275:73:114"},{"expression":{"arguments":[{"expression":{"id":60681,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13453:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60682,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13474:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"13453:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":60683,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13482:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60684,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13503:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"13482:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60685,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"13515:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":60686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13521:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"13515:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":60680,"name":"TrySetCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60889,"src":"13425:27:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (uint256,bytes32,uint256)"}},"id":60687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13425:106:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60688,"nodeType":"ExpressionStatement","src":"13425:106:114"},{"assignments":[60690],"declarations":[{"constant":false,"id":60690,"mutability":"mutable","name":"attesterStakeForAcceptingEpoch","nameLocation":"13601:30:114","nodeType":"VariableDeclaration","scope":60713,"src":"13593:38:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60689,"name":"uint256","nodeType":"ElementaryTypeName","src":"13593:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60694,"initialValue":{"arguments":[{"id":60692,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60625,"src":"13668:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60691,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61603,"src":"13634:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":60693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13634:43:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13593:84:114"},{"expression":{"id":60703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":60695,"name":"commitmentStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61860,"src":"13687:15:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":60700,"indexExpression":{"expression":{"id":60696,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13703:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60697,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13724:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"13703:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13687:44:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":60701,"indexExpression":{"expression":{"id":60698,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13732:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60699,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13753:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"13732:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13687:77:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":60702,"name":"attesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60690,"src":"13768:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13687:111:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60704,"nodeType":"ExpressionStatement","src":"13687:111:114"},{"eventCall":{"arguments":[{"expression":{"id":60706,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13857:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60707,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13878:7:114","memberName":"blockId","nodeType":"MemberAccess","referencedDeclaration":61842,"src":"13857:28:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60708,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13899:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60709,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13920:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"13899:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":60710,"name":"attesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60690,"src":"13944:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":60705,"name":"SuperBlockCommitmentSubmitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61943,"src":"13814:29:114","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,uint256)"}},"id":60711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13814:170:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60712,"nodeType":"EmitStatement","src":"13809:175:114"}]},"documentation":{"id":60623,"nodeType":"StructuredDocumentation","src":"11755:57:114","text":"@dev submits a superBlock commitment for an attester."},"implemented":true,"kind":"function","modifiers":[],"name":"submitSuperBlockCommitmentForAttester","nameLocation":"11826:37:114","parameters":{"id":60629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60625,"mutability":"mutable","name":"attester","nameLocation":"11881:8:114","nodeType":"VariableDeclaration","scope":60714,"src":"11873:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60624,"name":"address","nodeType":"ElementaryTypeName","src":"11873:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":60628,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"11927:20:114","nodeType":"VariableDeclaration","scope":60714,"src":"11899:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60627,"nodeType":"UserDefinedTypeName","pathNode":{"id":60626,"name":"SuperBlockCommitment","nameLocations":["11899:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"11899:20:114"},"referencedDeclaration":61843,"src":"11899:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"11863:90:114"},"returnParameters":{"id":60630,"nodeType":"ParameterList","parameters":[],"src":"11963:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":60738,"nodeType":"FunctionDefinition","src":"13996:317:114","nodes":[],"body":{"id":60737,"nodeType":"Block","src":"14081:232:114","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":60727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60721,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61893,"src":"14112:22:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":60723,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60062,"src":"14146:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60724,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14164:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14168:6:114","memberName":"sender","nodeType":"MemberAccess","src":"14164:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60722,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"14138:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14138:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14112:63:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d454e54","id":60728,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14189:36:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""},"value":"UNAUTHORIZED_SUPERBLOCK_COMMITMENT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""}],"id":60720,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14091:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14091:144:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60730,"nodeType":"ExpressionStatement","src":"14091:144:114"},{"expression":{"arguments":[{"expression":{"id":60732,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14283:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14287:6:114","memberName":"sender","nodeType":"MemberAccess","src":"14283:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":60734,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60717,"src":"14295:10:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":60731,"name":"submitSuperBlockCommitmentForAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60714,"src":"14245:37:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$__$","typeString":"function (address,struct PCPStorage.SuperBlockCommitment memory)"}},"id":60735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14245:61:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60736,"nodeType":"ExpressionStatement","src":"14245:61:114"}]},"baseFunctions":[61972],"functionSelector":"0e74b609","implemented":true,"kind":"function","modifiers":[],"name":"submitSuperBlockCommitment","nameLocation":"14005:26:114","parameters":{"id":60718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60717,"mutability":"mutable","name":"commitment","nameLocation":"14060:10:114","nodeType":"VariableDeclaration","scope":60738,"src":"14032:38:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60716,"nodeType":"UserDefinedTypeName","pathNode":{"id":60715,"name":"SuperBlockCommitment","nameLocations":["14032:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"14032:20:114"},"referencedDeclaration":61843,"src":"14032:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"14031:40:114"},"returnParameters":{"id":60719,"nodeType":"ParameterList","parameters":[],"src":"14081:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":60778,"nodeType":"FunctionDefinition","src":"14319:430:114","nodes":[],"body":{"id":60777,"nodeType":"Block","src":"14420:329:114","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":60752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60746,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61893,"src":"14451:22:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":60748,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60062,"src":"14485:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60749,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14503:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14507:6:114","memberName":"sender","nodeType":"MemberAccess","src":"14503:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60747,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"14477:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14477:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14451:63:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d454e54","id":60753,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14528:36:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""},"value":"UNAUTHORIZED_SUPERBLOCK_COMMITMENT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""}],"id":60745,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14430:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60754,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14430:144:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60755,"nodeType":"ExpressionStatement","src":"14430:144:114"},{"body":{"id":60775,"nodeType":"Block","src":"14643:100:114","statements":[{"expression":{"arguments":[{"expression":{"id":60768,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14695:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14699:6:114","memberName":"sender","nodeType":"MemberAccess","src":"14695:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":60770,"name":"superBlockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60742,"src":"14707:21:114","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$dyn_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory[] memory"}},"id":60772,"indexExpression":{"id":60771,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60757,"src":"14729:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14707:24:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":60767,"name":"submitSuperBlockCommitmentForAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60714,"src":"14657:37:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$__$","typeString":"function (address,struct PCPStorage.SuperBlockCommitment memory)"}},"id":60773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14657:75:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60774,"nodeType":"ExpressionStatement","src":"14657:75:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60760,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60757,"src":"14604:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":60761,"name":"superBlockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60742,"src":"14608:21:114","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$dyn_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory[] memory"}},"id":60762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14630:6:114","memberName":"length","nodeType":"MemberAccess","src":"14608:28:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14604:32:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60776,"initializationExpression":{"assignments":[60757],"declarations":[{"constant":false,"id":60757,"mutability":"mutable","name":"i","nameLocation":"14597:1:114","nodeType":"VariableDeclaration","scope":60776,"src":"14589:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60756,"name":"uint256","nodeType":"ElementaryTypeName","src":"14589:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60759,"initialValue":{"hexValue":"30","id":60758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14601:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"14589:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"14638:3:114","subExpression":{"id":60764,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60757,"src":"14638:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60766,"nodeType":"ExpressionStatement","src":"14638:3:114"},"nodeType":"ForStatement","src":"14584:159:114"}]},"functionSelector":"622e3616","implemented":true,"kind":"function","modifiers":[],"name":"submitBatchSuperBlockCommitment","nameLocation":"14328:31:114","parameters":{"id":60743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60742,"mutability":"mutable","name":"superBlockCommitments","nameLocation":"14390:21:114","nodeType":"VariableDeclaration","scope":60778,"src":"14360:51:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$dyn_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment[]"},"typeName":{"baseType":{"id":60740,"nodeType":"UserDefinedTypeName","pathNode":{"id":60739,"name":"SuperBlockCommitment","nameLocations":["14360:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"14360:20:114"},"referencedDeclaration":61843,"src":"14360:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"id":60741,"nodeType":"ArrayTypeName","src":"14360:22:114","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$61843_storage_$dyn_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment[]"}},"visibility":"internal"}],"src":"14359:53:114"},"returnParameters":{"id":60744,"nodeType":"ParameterList","parameters":[],"src":"14420:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60795,"nodeType":"FunctionDefinition","src":"14754:209:114","nodes":[],"body":{"id":60794,"nodeType":"Block","src":"14910:53:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":60788,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"14927:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60790,"indexExpression":{"id":60789,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60780,"src":"14939:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14927:19:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60792,"indexExpression":{"id":60791,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60782,"src":"14947:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14927:29:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":60787,"id":60793,"nodeType":"Return","src":"14920:36:114"}]},"functionSelector":"556d97c8","implemented":true,"kind":"function","modifiers":[],"name":"getValidatorCommitmentAtSuperBlockHeight","nameLocation":"14763:40:114","parameters":{"id":60783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60780,"mutability":"mutable","name":"height","nameLocation":"14821:6:114","nodeType":"VariableDeclaration","scope":60795,"src":"14813:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60779,"name":"uint256","nodeType":"ElementaryTypeName","src":"14813:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60782,"mutability":"mutable","name":"attester","nameLocation":"14845:8:114","nodeType":"VariableDeclaration","scope":60795,"src":"14837:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60781,"name":"address","nodeType":"ElementaryTypeName","src":"14837:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14803:56:114"},"returnParameters":{"id":60787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60786,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60795,"src":"14881:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60785,"nodeType":"UserDefinedTypeName","pathNode":{"id":60784,"name":"SuperBlockCommitment","nameLocations":["14881:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"14881:20:114"},"referencedDeclaration":61843,"src":"14881:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"14880:29:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60805,"nodeType":"FunctionDefinition","src":"15017:159:114","nodes":[],"body":{"id":60804,"nodeType":"Block","src":"15090:86:114","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60800,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"15107:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":60801,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61824,"src":"15143:26:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15107:62:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60799,"id":60803,"nodeType":"Return","src":"15100:69:114"}]},"functionSelector":"943b79e2","implemented":true,"kind":"function","modifiers":[],"name":"getMaxTolerableSuperBlockHeight","nameLocation":"15026:31:114","parameters":{"id":60796,"nodeType":"ParameterList","parameters":[],"src":"15057:2:114"},"returnParameters":{"id":60799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60798,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60805,"src":"15081:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60797,"name":"uint256","nodeType":"ElementaryTypeName","src":"15081:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15080:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60823,"nodeType":"FunctionDefinition","src":"15261:170:114","nodes":[],"body":{"id":60822,"nodeType":"Block","src":"15378:53:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":60816,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"15395:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60818,"indexExpression":{"id":60817,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60808,"src":"15407:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15395:19:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60820,"indexExpression":{"id":60819,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60810,"src":"15415:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15395:29:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":60815,"id":60821,"nodeType":"Return","src":"15388:36:114"}]},"documentation":{"id":60806,"nodeType":"StructuredDocumentation","src":"15181:75:114","text":"@notice Gets the commitment submitted by an attester for a given height"},"functionSelector":"f1949add","implemented":true,"kind":"function","modifiers":[],"name":"getCommitmentByAttester","nameLocation":"15270:23:114","parameters":{"id":60811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60808,"mutability":"mutable","name":"height","nameLocation":"15302:6:114","nodeType":"VariableDeclaration","scope":60823,"src":"15294:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60807,"name":"uint256","nodeType":"ElementaryTypeName","src":"15294:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60810,"mutability":"mutable","name":"attester","nameLocation":"15318:8:114","nodeType":"VariableDeclaration","scope":60823,"src":"15310:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60809,"name":"address","nodeType":"ElementaryTypeName","src":"15310:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15293:34:114"},"returnParameters":{"id":60815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60814,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60823,"src":"15349:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60813,"nodeType":"UserDefinedTypeName","pathNode":{"id":60812,"name":"SuperBlockCommitment","nameLocations":["15349:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"15349:20:114"},"referencedDeclaration":61843,"src":"15349:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"15348:29:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60836,"nodeType":"FunctionDefinition","src":"15500:149:114","nodes":[],"body":{"id":60835,"nodeType":"Block","src":"15588:61:114","nodes":[],"statements":[{"expression":{"baseExpression":{"id":60831,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"15605:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":60833,"indexExpression":{"id":60832,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60826,"src":"15635:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15605:37:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60830,"id":60834,"nodeType":"Return","src":"15598:44:114"}]},"documentation":{"id":60824,"nodeType":"StructuredDocumentation","src":"15437:58:114","text":"@notice Gets the epoch assigned to a superblock height"},"functionSelector":"d283392e","implemented":true,"kind":"function","modifiers":[],"name":"getSuperBlockHeightAssignedEpoch","nameLocation":"15509:32:114","parameters":{"id":60827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60826,"mutability":"mutable","name":"height","nameLocation":"15550:6:114","nodeType":"VariableDeclaration","scope":60836,"src":"15542:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60825,"name":"uint256","nodeType":"ElementaryTypeName","src":"15542:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15541:16:114"},"returnParameters":{"id":60830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60836,"src":"15579:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60828,"name":"uint256","nodeType":"ElementaryTypeName","src":"15579:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15578:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60854,"nodeType":"FunctionDefinition","src":"15855:221:114","nodes":[],"body":{"id":60853,"nodeType":"Block","src":"15969:107:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":60845,"name":"commitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61866,"src":"15986:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":60848,"indexExpression":{"expression":{"id":60846,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60840,"src":"16008:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60847,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16029:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"16008:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15986:50:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":60851,"indexExpression":{"expression":{"id":60849,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60840,"src":"16037:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16058:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"16037:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15986:83:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60844,"id":60852,"nodeType":"Return","src":"15979:90:114"}]},"documentation":{"id":60837,"nodeType":"StructuredDocumentation","src":"15788:62:114","text":"@notice get the timestamp when a commitment was first seen"},"functionSelector":"e07472ef","implemented":true,"kind":"function","modifiers":[],"name":"getCommitmentFirstSeenAt","nameLocation":"15864:24:114","parameters":{"id":60841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60840,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"15917:20:114","nodeType":"VariableDeclaration","scope":60854,"src":"15889:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60839,"nodeType":"UserDefinedTypeName","pathNode":{"id":60838,"name":"SuperBlockCommitment","nameLocations":["15889:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"15889:20:114"},"referencedDeclaration":61843,"src":"15889:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"15888:50:114"},"returnParameters":{"id":60844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60843,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60854,"src":"15960:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60842,"name":"uint256","nodeType":"ElementaryTypeName","src":"15960:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15959:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60889,"nodeType":"FunctionDefinition","src":"16150:443:114","nodes":[],"body":{"id":60888,"nodeType":"Block","src":"16251:342:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":60864,"name":"commitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61866,"src":"16265:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":60866,"indexExpression":{"id":60865,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60857,"src":"16287:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16265:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":60868,"indexExpression":{"id":60867,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60859,"src":"16295:10:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16265:41:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":60869,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16310:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16265:46:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60873,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60861,"src":"16395:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":60874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16408:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16395:14:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60878,"nodeType":"IfStatement","src":"16391:133:114","trueBody":{"id":60877,"nodeType":"Block","src":"16411:113:114","statements":[{"functionReturnParameters":60863,"id":60876,"nodeType":"Return","src":"16507:7:114"}]}},"id":60879,"nodeType":"IfStatement","src":"16261:263:114","trueBody":{"id":60872,"nodeType":"Block","src":"16313:72:114","statements":[{"functionReturnParameters":60863,"id":60871,"nodeType":"Return","src":"16368:7:114"}]}},{"expression":{"id":60886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":60880,"name":"commitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61866,"src":"16533:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":60883,"indexExpression":{"id":60881,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60857,"src":"16555:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16533:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":60884,"indexExpression":{"id":60882,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60859,"src":"16563:10:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16533:41:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60885,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60861,"src":"16577:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16533:53:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60887,"nodeType":"ExpressionStatement","src":"16533:53:114"}]},"documentation":{"id":60855,"nodeType":"StructuredDocumentation","src":"16082:63:114","text":"@notice Sets the timestamp when a commitment was first seen"},"implemented":true,"kind":"function","modifiers":[],"name":"TrySetCommitmentFirstSeenAt","nameLocation":"16159:27:114","parameters":{"id":60862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60857,"mutability":"mutable","name":"height","nameLocation":"16195:6:114","nodeType":"VariableDeclaration","scope":60889,"src":"16187:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60856,"name":"uint256","nodeType":"ElementaryTypeName","src":"16187:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60859,"mutability":"mutable","name":"commitment","nameLocation":"16211:10:114","nodeType":"VariableDeclaration","scope":60889,"src":"16203:18:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60858,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16203:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":60861,"mutability":"mutable","name":"timestamp","nameLocation":"16231:9:114","nodeType":"VariableDeclaration","scope":60889,"src":"16223:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60860,"name":"uint256","nodeType":"ElementaryTypeName","src":"16223:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16186:55:114"},"returnParameters":{"id":60863,"nodeType":"ParameterList","parameters":[],"src":"16251:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":60898,"nodeType":"FunctionDefinition","src":"16884:135:114","nodes":[],"body":{"id":60897,"nodeType":"Block","src":"16962:57:114","nodes":[],"statements":[{"expression":{"id":60895,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"16979:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60894,"id":60896,"nodeType":"Return","src":"16972:40:114"}]},"baseFunctions":[61978],"documentation":{"id":60890,"nodeType":"StructuredDocumentation","src":"16815:64:114","text":"@notice Gets the height of the last postconfirmed superblock"},"functionSelector":"59b99597","implemented":true,"kind":"function","modifiers":[],"name":"getLastPostconfirmedSuperBlockHeight","nameLocation":"16893:36:114","parameters":{"id":60891,"nodeType":"ParameterList","parameters":[],"src":"16929:2:114"},"returnParameters":{"id":60894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60893,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60898,"src":"16953:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60892,"name":"uint256","nodeType":"ElementaryTypeName","src":"16953:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16952:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60907,"nodeType":"FunctionDefinition","src":"17025:115:114","nodes":[],"body":{"id":60906,"nodeType":"Block","src":"17077:63:114","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":60902,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17122:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17126:6:114","memberName":"sender","nodeType":"MemberAccess","src":"17122:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60901,"name":"postconfirmAndRolloverWithAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60921,"src":"17087:34:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":60904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17087:46:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60905,"nodeType":"ExpressionStatement","src":"17087:46:114"}]},"baseFunctions":[62003],"functionSelector":"26624e37","implemented":true,"kind":"function","modifiers":[],"name":"postconfirmSuperBlocksAndRollover","nameLocation":"17034:33:114","parameters":{"id":60899,"nodeType":"ParameterList","parameters":[],"src":"17067:2:114"},"returnParameters":{"id":60900,"nodeType":"ParameterList","parameters":[],"src":"17077:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60921,"nodeType":"FunctionDefinition","src":"17754:485:114","nodes":[],"body":{"id":60920,"nodeType":"Block","src":"17831:408:114","nodes":[],"statements":[{"body":{"id":60918,"nodeType":"Block","src":"18222:11:114","statements":[]},"condition":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60914,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"18182:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":60915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18218:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"18182:37:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":60913,"name":"attemptPostconfirmOrRollover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61493,"src":"18153:28:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) returns (bool)"}},"id":60917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18153:67:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60919,"nodeType":"WhileStatement","src":"18146:87:114"}]},"documentation":{"id":60908,"nodeType":"StructuredDocumentation","src":"17543:106:114","text":"@notice If the current postconfirmer is not live, we should accept postconfirmations from any attester"},"implemented":true,"kind":"function","modifiers":[],"name":"postconfirmAndRolloverWithAttester","nameLocation":"17763:34:114","parameters":{"id":60911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60910,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60921,"src":"17798:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60909,"name":"address","nodeType":"ElementaryTypeName","src":"17798:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17797:24:114"},"returnParameters":{"id":60912,"nodeType":"ParameterList","parameters":[],"src":"17831:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":60946,"nodeType":"FunctionDefinition","src":"18315:405:114","nodes":[],"body":{"id":60945,"nodeType":"Block","src":"18421:299:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60929,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"18460:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60930,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18478:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18482:6:114","memberName":"sender","nodeType":"MemberAccess","src":"18478:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60928,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"18452:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18452:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":60933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18503:70:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_0977ec2248431def5ae1a15f4d76a33486566739fca9c42d9176f889e347a11f","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0977ec2248431def5ae1a15f4d76a33486566739fca9c42d9176f889e347a11f","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":60927,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18431:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18431:152:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60935,"nodeType":"ExpressionStatement","src":"18431:152:114"},{"expression":{"id":60943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":60936,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61900,"src":"18593:33:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60940,"indexExpression":{"id":60937,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61902,"src":"18627:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18593:66:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60941,"indexExpression":{"expression":{"id":60938,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60924,"src":"18660:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60939,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18681:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"18660:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18593:95:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60942,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60924,"src":"18691:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"src":"18593:118:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":60944,"nodeType":"ExpressionStatement","src":"18593:118:114"}]},"functionSelector":"3119edd4","implemented":true,"kind":"function","modifiers":[],"name":"setPostconfirmedCommitmentAtBlockHeight","nameLocation":"18324:39:114","parameters":{"id":60925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60924,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"18392:20:114","nodeType":"VariableDeclaration","scope":60946,"src":"18364:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60923,"nodeType":"UserDefinedTypeName","pathNode":{"id":60922,"name":"SuperBlockCommitment","nameLocations":["18364:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"18364:20:114"},"referencedDeclaration":61843,"src":"18364:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"18363:50:114"},"returnParameters":{"id":60926,"nodeType":"ParameterList","parameters":[],"src":"18421:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60966,"nodeType":"FunctionDefinition","src":"18915:308:114","nodes":[],"body":{"id":60965,"nodeType":"Block","src":"19003:220:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60954,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"19042:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60955,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19060:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19064:6:114","memberName":"sender","nodeType":"MemberAccess","src":"19060:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60953,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"19034:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19034:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":60958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19085:50:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_769db6d293c786b13b107ddcfdc491f9fdfa9dc0a09944362f64328186fea1df","typeString":"literal_string \"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_769db6d293c786b13b107ddcfdc491f9fdfa9dc0a09944362f64328186fea1df","typeString":"literal_string \"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":60952,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19013:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19013:132:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60960,"nodeType":"ExpressionStatement","src":"19013:132:114"},{"expression":{"arguments":[{"id":60962,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60949,"src":"19195:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":60961,"name":"setPostconfirmedCommitmentAtBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60946,"src":"19155:39:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$__$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory)"}},"id":60963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19155:61:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60964,"nodeType":"ExpressionStatement","src":"19155:61:114"}]},"functionSelector":"08c7050f","implemented":true,"kind":"function","modifiers":[],"name":"forceLatestCommitment","nameLocation":"18924:21:114","parameters":{"id":60950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60949,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"18974:20:114","nodeType":"VariableDeclaration","scope":60966,"src":"18946:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60948,"nodeType":"UserDefinedTypeName","pathNode":{"id":60947,"name":"SuperBlockCommitment","nameLocations":["18946:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"18946:20:114"},"referencedDeclaration":61843,"src":"18946:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"18945:50:114"},"returnParameters":{"id":60951,"nodeType":"ParameterList","parameters":[],"src":"19003:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60981,"nodeType":"FunctionDefinition","src":"19229:200:114","nodes":[],"body":{"id":60980,"nodeType":"Block","src":"19331:98:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":60974,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61900,"src":"19348:33:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60976,"indexExpression":{"id":60975,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61902,"src":"19382:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19348:66:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60978,"indexExpression":{"id":60977,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60968,"src":"19415:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19348:74:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":60973,"id":60979,"nodeType":"Return","src":"19341:81:114"}]},"baseFunctions":[61999],"functionSelector":"2bfd11d6","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmedCommitment","nameLocation":"19238:26:114","parameters":{"id":60969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60968,"mutability":"mutable","name":"height","nameLocation":"19273:6:114","nodeType":"VariableDeclaration","scope":60981,"src":"19265:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60967,"name":"uint256","nodeType":"ElementaryTypeName","src":"19265:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19264:16:114"},"returnParameters":{"id":60973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60972,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60981,"src":"19302:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60971,"nodeType":"UserDefinedTypeName","pathNode":{"id":60970,"name":"SuperBlockCommitment","nameLocations":["19302:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"19302:20:114"},"referencedDeclaration":61843,"src":"19302:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"19301:29:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61137,"nodeType":"FunctionDefinition","src":"19627:2891:114","nodes":[],"body":{"id":61136,"nodeType":"Block","src":"19746:2772:114","nodes":[],"statements":[{"assignments":[60991],"declarations":[{"constant":false,"id":60991,"mutability":"mutable","name":"currentAcceptingEpoch","nameLocation":"19764:21:114","nodeType":"VariableDeclaration","scope":61136,"src":"19756:29:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60990,"name":"uint256","nodeType":"ElementaryTypeName","src":"19756:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60994,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":60992,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"19788:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19788:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19756:51:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":60995,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"20052:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":60998,"indexExpression":{"expression":{"id":60996,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"20082:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60997,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20103:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"20082:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20052:58:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":60999,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60991,"src":"20114:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20052:83:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61005,"nodeType":"IfStatement","src":"20048:155:114","trueBody":{"id":61004,"nodeType":"Block","src":"20137:66:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":61001,"name":"UnacceptableSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61945,"src":"20158:32:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":61002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20158:34:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":61003,"nodeType":"RevertStatement","src":"20151:41:114"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61006,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"20315:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":61007,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"20352:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61008,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20373:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"20352:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":61009,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20382:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20352:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20315:68:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61016,"nodeType":"IfStatement","src":"20311:140:114","trueBody":{"id":61015,"nodeType":"Block","src":"20385:66:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":61012,"name":"UnacceptableSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61945,"src":"20406:32:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":61013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20406:34:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":61014,"nodeType":"RevertStatement","src":"20399:41:114"}]}},{"assignments":[61021],"declarations":[{"constant":false,"id":61021,"mutability":"mutable","name":"attesters","nameLocation":"20568:9:114","nodeType":"VariableDeclaration","scope":61136,"src":"20551:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61019,"name":"address","nodeType":"ElementaryTypeName","src":"20551:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61020,"nodeType":"ArrayTypeName","src":"20551:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61024,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":61022,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61774,"src":"20580:35:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":61023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20580:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"20551:66:114"},{"body":{"id":61059,"nodeType":"Block","src":"20674:222:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":61047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":61036,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"20692:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61039,"indexExpression":{"expression":{"id":61037,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"20704:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61038,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20725:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"20704:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20692:40:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61043,"indexExpression":{"baseExpression":{"id":61040,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61021,"src":"20733:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61042,"indexExpression":{"id":61041,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61026,"src":"20743:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20733:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20692:54:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":61044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20747:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"20692:65:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":61045,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"20761:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61046,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20782:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"20761:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"20692:100:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61058,"nodeType":"IfStatement","src":"20688:198:114","trueBody":{"id":61057,"nodeType":"Block","src":"20794:92:114","statements":[{"expression":{"id":61055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"20812:59:114","subExpression":{"baseExpression":{"baseExpression":{"id":61048,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61908,"src":"20812:20:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61053,"indexExpression":{"id":61049,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60991,"src":"20833:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20812:43:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61054,"indexExpression":{"baseExpression":{"id":61050,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61021,"src":"20856:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61052,"indexExpression":{"id":61051,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61026,"src":"20866:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20856:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20812:57:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61056,"nodeType":"ExpressionStatement","src":"20812:59:114"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61029,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61026,"src":"20647:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61030,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61021,"src":"20651:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20661:6:114","memberName":"length","nodeType":"MemberAccess","src":"20651:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20647:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61060,"initializationExpression":{"assignments":[61026],"declarations":[{"constant":false,"id":61026,"mutability":"mutable","name":"i","nameLocation":"20640:1:114","nodeType":"VariableDeclaration","scope":61060,"src":"20632:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61025,"name":"uint256","nodeType":"ElementaryTypeName","src":"20632:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61028,"initialValue":{"hexValue":"30","id":61027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20644:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"20632:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"20669:3:114","subExpression":{"id":61033,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61026,"src":"20669:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61035,"nodeType":"ExpressionStatement","src":"20669:3:114"},"nodeType":"ForStatement","src":"20627:269:114"},{"condition":{"id":61064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"20951:61:114","subExpression":{"arguments":[{"id":61062,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"20991:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":61061,"name":"isWithinPostconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61288,"src":"20952:38:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$_t_bool_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (bool)"}},"id":61063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20952:60:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":61088,"nodeType":"Block","src":"21217:630:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":61077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61074,"name":"getPostconfirmer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60583,"src":"21709:16:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":61075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21709:18:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":61076,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60987,"src":"21731:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21709:30:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61087,"nodeType":"IfStatement","src":"21705:132:114","trueBody":{"id":61086,"nodeType":"Block","src":"21741:96:114","statements":[{"expression":{"id":61084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":61078,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61914,"src":"21759:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61081,"indexExpression":{"id":61079,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60991,"src":"21785:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21759:48:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61082,"indexExpression":{"id":61080,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60987,"src":"21808:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21759:58:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":61083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21821:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"21759:63:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61085,"nodeType":"ExpressionStatement","src":"21759:63:114"}]}}]},"id":61089,"nodeType":"IfStatement","src":"20947:900:114","trueBody":{"id":61073,"nodeType":"Block","src":"21014:197:114","statements":[{"expression":{"id":61071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":61065,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61914,"src":"21137:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61068,"indexExpression":{"id":61066,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60991,"src":"21163:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21137:48:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61069,"indexExpression":{"id":61067,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60987,"src":"21186:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21137:58:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":61070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21199:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"21137:63:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61072,"nodeType":"ExpressionStatement","src":"21137:63:114"}]}},{"expression":{"id":61097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":61090,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61900,"src":"21857:33:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61094,"indexExpression":{"id":61091,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61902,"src":"21891:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21857:66:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61095,"indexExpression":{"expression":{"id":61092,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"21924:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61093,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21945:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"21924:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21857:95:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61096,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"21955:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"src":"21857:118:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":61098,"nodeType":"ExpressionStatement","src":"21857:118:114"},{"expression":{"id":61102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61099,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"21985:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":61100,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22021:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61101,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22042:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"22021:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21985:63:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61103,"nodeType":"ExpressionStatement","src":"21985:63:114"},{"expression":{"id":61109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":61104,"name":"postconfirmedBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61870,"src":"22058:15:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":61107,"indexExpression":{"expression":{"id":61105,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22074:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61106,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22095:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"22074:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22058:44:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61108,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60987,"src":"22105:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"22058:55:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61110,"nodeType":"ExpressionStatement","src":"22058:55:114"},{"expression":{"id":61117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":61111,"name":"postconfirmedAtL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61878,"src":"22123:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":61114,"indexExpression":{"expression":{"id":61112,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22152:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61113,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22173:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"22152:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22123:57:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":61115,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"22183:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":61116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22189:6:114","memberName":"number","nodeType":"MemberAccess","src":"22183:12:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22123:72:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61118,"nodeType":"ExpressionStatement","src":"22123:72:114"},{"expression":{"id":61125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":61119,"name":"postconfirmedAtL1BlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61882,"src":"22205:31:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":61122,"indexExpression":{"expression":{"id":61120,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22237:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22258:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"22237:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22205:60:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":61123,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"22268:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":61124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22274:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"22268:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22205:78:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61126,"nodeType":"ExpressionStatement","src":"22205:78:114"},{"eventCall":{"arguments":[{"expression":{"id":61128,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22387:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61129,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22408:7:114","memberName":"blockId","nodeType":"MemberAccess","referencedDeclaration":61842,"src":"22387:28:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":61130,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22429:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61131,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22450:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"22429:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":61132,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22474:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61133,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22495:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"22474:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61127,"name":"SuperBlockPostconfirmed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61935,"src":"22350:23:114","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,uint256)"}},"id":61134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22350:161:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61135,"nodeType":"EmitStatement","src":"22345:166:114"}]},"documentation":{"id":60982,"nodeType":"StructuredDocumentation","src":"19434:188:114","text":"@dev Postconfirms a superBlock commitment.\n @dev This function and attemptPostconfirmOrRollover() could call each other recursively, so we must ensure it's safe from re-entrancy"},"implemented":true,"kind":"function","modifiers":[],"name":"_postconfirmSuperBlockCommitment","nameLocation":"19636:32:114","parameters":{"id":60988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60985,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"19697:20:114","nodeType":"VariableDeclaration","scope":61137,"src":"19669:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60984,"nodeType":"UserDefinedTypeName","pathNode":{"id":60983,"name":"SuperBlockCommitment","nameLocations":["19669:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"19669:20:114"},"referencedDeclaration":61843,"src":"19669:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"},{"constant":false,"id":60987,"mutability":"mutable","name":"attester","nameLocation":"19727:8:114","nodeType":"VariableDeclaration","scope":61137,"src":"19719:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60986,"name":"address","nodeType":"ElementaryTypeName","src":"19719:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19668:68:114"},"returnParameters":{"id":60989,"nodeType":"ParameterList","parameters":[],"src":"19746:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61251,"nodeType":"FunctionDefinition","src":"22765:1897:114","nodes":[],"body":{"id":61250,"nodeType":"Block","src":"22799:1863:114","nodes":[],"statements":[{"assignments":[61142],"declarations":[{"constant":false,"id":61142,"mutability":"mutable","name":"acceptingEpoch","nameLocation":"22885:14:114","nodeType":"VariableDeclaration","scope":61250,"src":"22877:22:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61141,"name":"uint256","nodeType":"ElementaryTypeName","src":"22877:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61145,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":61143,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"22902:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22902:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22877:44:114"},{"assignments":[61150],"declarations":[{"constant":false,"id":61150,"mutability":"mutable","name":"attesters","nameLocation":"22948:9:114","nodeType":"VariableDeclaration","scope":61250,"src":"22931:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61148,"name":"address","nodeType":"ElementaryTypeName","src":"22931:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61149,"nodeType":"ArrayTypeName","src":"22931:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61153,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":61151,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61774,"src":"22960:35:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":61152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22960:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"22931:66:114"},{"body":{"id":61243,"nodeType":"Block","src":"23081:1533:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":61165,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61908,"src":"23099:20:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61167,"indexExpression":{"id":61166,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61142,"src":"23120:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23099:36:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61171,"indexExpression":{"baseExpression":{"id":61168,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23136:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61170,"indexExpression":{"id":61169,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23146:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23136:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23099:50:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":61172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23152:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23099:54:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61203,"nodeType":"IfStatement","src":"23095:697:114","trueBody":{"id":61202,"nodeType":"Block","src":"23155:637:114","statements":[{"assignments":[61175],"declarations":[{"constant":false,"id":61175,"mutability":"mutable","name":"reward","nameLocation":"23261:6:114","nodeType":"VariableDeclaration","scope":61202,"src":"23253:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61174,"name":"uint256","nodeType":"ElementaryTypeName","src":"23253:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61191,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":61176,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61908,"src":"23270:20:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61178,"indexExpression":{"id":61177,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61142,"src":"23291:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23270:36:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61182,"indexExpression":{"baseExpression":{"id":61179,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23307:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61181,"indexExpression":{"id":61180,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23317:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23307:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23270:50:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":61183,"name":"rewardPerAttestationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61916,"src":"23323:25:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23270:78:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"baseExpression":{"id":61186,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23385:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61188,"indexExpression":{"id":61187,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23395:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23385:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61185,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61603,"src":"23351:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23351:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23270:128:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23253:145:114"},{"expression":{"arguments":[{"baseExpression":{"id":61195,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23576:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61197,"indexExpression":{"id":61196,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23586:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23576:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61198,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61175,"src":"23590:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61199,"name":"moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61822,"src":"23598:16:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61192,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"23543:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23559:16:114","memberName":"rewardFromDomain","nodeType":"MemberAccess","referencedDeclaration":64321,"src":"23543:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,uint256,address) external"}},"id":61200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23543:72:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61201,"nodeType":"ExpressionStatement","src":"23543:72:114"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":61204,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61914,"src":"23854:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61206,"indexExpression":{"id":61205,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61142,"src":"23880:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23854:41:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61210,"indexExpression":{"baseExpression":{"id":61207,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23896:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61209,"indexExpression":{"id":61208,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23906:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23896:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23854:55:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":61211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23912:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23854:59:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61242,"nodeType":"IfStatement","src":"23850:754:114","trueBody":{"id":61241,"nodeType":"Block","src":"23915:689:114","statements":[{"assignments":[61214],"declarations":[{"constant":false,"id":61214,"mutability":"mutable","name":"reward","nameLocation":"23941:6:114","nodeType":"VariableDeclaration","scope":61241,"src":"23933:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61213,"name":"uint256","nodeType":"ElementaryTypeName","src":"23933:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61230,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":61215,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61914,"src":"23950:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61217,"indexExpression":{"id":61216,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61142,"src":"23976:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23950:41:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61221,"indexExpression":{"baseExpression":{"id":61218,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23992:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61220,"indexExpression":{"id":61219,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"24002:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23992:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23950:55:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":61222,"name":"rewardPerPostconfirmationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61918,"src":"24008:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23950:88:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"baseExpression":{"id":61225,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"24075:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61227,"indexExpression":{"id":61226,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"24085:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24075:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61224,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61603,"src":"24041:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24041:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23950:138:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23933:155:114"},{"expression":{"arguments":[{"baseExpression":{"id":61234,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"24139:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61236,"indexExpression":{"id":61235,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"24149:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24139:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61237,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61214,"src":"24153:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61238,"name":"moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61822,"src":"24161:16:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61231,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"24106:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24122:16:114","memberName":"rewardFromDomain","nodeType":"MemberAccess","referencedDeclaration":64321,"src":"24106:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,uint256,address) external"}},"id":61239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24106:72:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61240,"nodeType":"ExpressionStatement","src":"24106:72:114"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61158,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23054:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61159,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23058:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23068:6:114","memberName":"length","nodeType":"MemberAccess","src":"23058:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23054:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61244,"initializationExpression":{"assignments":[61155],"declarations":[{"constant":false,"id":61155,"mutability":"mutable","name":"i","nameLocation":"23047:1:114","nodeType":"VariableDeclaration","scope":61244,"src":"23039:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61154,"name":"uint256","nodeType":"ElementaryTypeName","src":"23039:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61157,"initialValue":{"hexValue":"30","id":61156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23051:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"23039:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"23076:3:114","subExpression":{"id":61162,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23076:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61164,"nodeType":"ExpressionStatement","src":"23076:3:114"},"nodeType":"ForStatement","src":"23034:1580:114"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":61245,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"24624:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24640:13:114","memberName":"rollOverEpoch","nodeType":"MemberAccess","referencedDeclaration":64215,"src":"24624:29:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":61248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24624:31:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61249,"nodeType":"ExpressionStatement","src":"24624:31:114"}]},"documentation":{"id":61138,"nodeType":"StructuredDocumentation","src":"22524:236:114","text":"@dev nonReentrant because there is no need to reenter this function. It should be called iteratively. \n @dev Marked on the internal method to simplify risks from complex calling patterns. This also calls an external contract."},"implemented":true,"kind":"function","modifiers":[],"name":"rollOverEpoch","nameLocation":"22774:13:114","parameters":{"id":61139,"nodeType":"ParameterList","parameters":[],"src":"22787:2:114"},"returnParameters":{"id":61140,"nodeType":"ParameterList","parameters":[],"src":"22799:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61288,"nodeType":"FunctionDefinition","src":"24939:683:114","nodes":[],"body":{"id":61287,"nodeType":"Block","src":"25064:558:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":61261,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61255,"src":"25103:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":61260,"name":"getCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60854,"src":"25078:24:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (uint256)"}},"id":61262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25078:46:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":61263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25128:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"25078:51:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61268,"nodeType":"IfStatement","src":"25074:94:114","trueBody":{"id":61267,"nodeType":"Block","src":"25131:37:114","statements":[{"expression":{"hexValue":"66616c7365","id":61265,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25152:5:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":61259,"id":61266,"nodeType":"Return","src":"25145:12:114"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":61270,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61255,"src":"25397:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":61269,"name":"getCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60854,"src":"25372:24:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (uint256)"}},"id":61271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25372:46:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61272,"name":"getMinCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60396,"src":"25434:38:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25434:40:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25372:102:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61275,"name":"getPostconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60357,"src":"25490:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25490:35:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25372:153:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61278,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"25541:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":61279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25547:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"25541:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25372:184:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61284,"nodeType":"IfStatement","src":"25368:227:114","trueBody":{"id":61283,"nodeType":"Block","src":"25558:37:114","statements":[{"expression":{"hexValue":"66616c7365","id":61281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25579:5:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":61259,"id":61282,"nodeType":"Return","src":"25572:12:114"}]}},{"expression":{"hexValue":"74727565","id":61285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25611:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":61259,"id":61286,"nodeType":"Return","src":"25604:11:114"}]},"documentation":{"id":61252,"nodeType":"StructuredDocumentation","src":"24668:266:114","text":"@notice Checks, for a given superBlock commitment, if the current L1 block time is within the postconfirmer's privilege window\n @dev The postconfirmer's privilege window is the time period when only the postconfirmer will get rewarded for postconfirmation"},"functionSelector":"0cf6b6bd","implemented":true,"kind":"function","modifiers":[],"name":"isWithinPostconfirmerPrivilegeDuration","nameLocation":"24948:38:114","parameters":{"id":61256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61255,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"25015:20:114","nodeType":"VariableDeclaration","scope":61288,"src":"24987:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":61254,"nodeType":"UserDefinedTypeName","pathNode":{"id":61253,"name":"SuperBlockCommitment","nameLocations":["24987:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"24987:20:114"},"referencedDeclaration":61843,"src":"24987:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"24986:50:114"},"returnParameters":{"id":61259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61288,"src":"25058:4:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61257,"name":"bool","nodeType":"ElementaryTypeName","src":"25058:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"25057:6:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61493,"nodeType":"FunctionDefinition","src":"25967:4503:114","nodes":[],"body":{"id":61492,"nodeType":"Block","src":"26055:4415:114","nodes":[],"statements":[{"assignments":[61297],"declarations":[{"constant":false,"id":61297,"mutability":"mutable","name":"superBlockEpoch","nameLocation":"26073:15:114","nodeType":"VariableDeclaration","scope":61492,"src":"26065:23:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61296,"name":"uint256","nodeType":"ElementaryTypeName","src":"26065:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61301,"initialValue":{"baseExpression":{"id":61298,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"26091:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":61300,"indexExpression":{"id":61299,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"26121:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26091:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26065:73:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61302,"name":"getLastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60898,"src":"26152:36:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26152:38:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":61304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26194:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"26152:43:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":61364,"nodeType":"Block","src":"26287:875:114","statements":[{"assignments":[61308],"declarations":[{"constant":false,"id":61308,"mutability":"mutable","name":"previousSuperBlockEpoch","nameLocation":"26414:23:114","nodeType":"VariableDeclaration","scope":61364,"src":"26406:31:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61307,"name":"uint256","nodeType":"ElementaryTypeName","src":"26406:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61314,"initialValue":{"baseExpression":{"id":61309,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"26440:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":61313,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61310,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"26470:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":61311,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26487:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"26470:18:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26440:49:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26406:83:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61315,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61297,"src":"26507:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":61316,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61308,"src":"26525:23:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26507:41:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61363,"nodeType":"IfStatement","src":"26503:649:114","trueBody":{"id":61362,"nodeType":"Block","src":"26553:599:114","statements":[{"assignments":[61322],"declarations":[{"constant":false,"id":61322,"mutability":"mutable","name":"stakedAttesters","nameLocation":"26588:15:114","nodeType":"VariableDeclaration","scope":61362,"src":"26571:32:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61320,"name":"address","nodeType":"ElementaryTypeName","src":"26571:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61321,"nodeType":"ArrayTypeName","src":"26571:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61325,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":61323,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61774,"src":"26606:35:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":61324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26606:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"26571:72:114"},{"body":{"id":61356,"nodeType":"Block","src":"26819:260:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":61337,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"26845:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61339,"indexExpression":{"id":61338,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"26857:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26845:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61343,"indexExpression":{"baseExpression":{"id":61340,"name":"stakedAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61322,"src":"26875:15:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61342,"indexExpression":{"id":61341,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61327,"src":"26891:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26875:18:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26845:49:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":61344,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26895:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"26845:56:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":61345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26905:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"26845:61:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61355,"nodeType":"IfStatement","src":"26841:220:114","trueBody":{"id":61354,"nodeType":"Block","src":"26908:153:114","statements":[{"expression":{"id":61351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":61347,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"26934:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":61349,"indexExpression":{"id":61348,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"26964:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26934:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61350,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61308,"src":"26984:23:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26934:73:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61352,"nodeType":"ExpressionStatement","src":"26934:73:114"},{"id":61353,"nodeType":"Break","src":"27033:5:114"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61330,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61327,"src":"26786:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61331,"name":"stakedAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61322,"src":"26790:15:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26806:6:114","memberName":"length","nodeType":"MemberAccess","src":"26790:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26786:26:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61357,"initializationExpression":{"assignments":[61327],"declarations":[{"constant":false,"id":61327,"mutability":"mutable","name":"i","nameLocation":"26779:1:114","nodeType":"VariableDeclaration","scope":61357,"src":"26771:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61326,"name":"uint256","nodeType":"ElementaryTypeName","src":"26771:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61329,"initialValue":{"hexValue":"30","id":61328,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26783:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"26771:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"26814:3:114","subExpression":{"id":61334,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61327,"src":"26814:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61336,"nodeType":"ExpressionStatement","src":"26814:3:114"},"nodeType":"ForStatement","src":"26766:313:114"},{"expression":{"id":61360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61358,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61297,"src":"27096:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61359,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61308,"src":"27114:23:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27096:41:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61361,"nodeType":"ExpressionStatement","src":"27096:41:114"}]}}]},"id":61365,"nodeType":"IfStatement","src":"26148:1014:114","trueBody":{"id":61306,"nodeType":"Block","src":"26197:84:114","statements":[]}},{"body":{"id":61373,"nodeType":"Block","src":"27497:203:114","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":61370,"name":"rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61251,"src":"27674:13:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":61371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27674:15:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61372,"nodeType":"ExpressionStatement","src":"27674:15:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61366,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"27458:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27458:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":61368,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61297,"src":"27480:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27458:37:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61374,"nodeType":"WhileStatement","src":"27451:249:114"},{"assignments":[61376],"declarations":[{"constant":false,"id":61376,"mutability":"mutable","name":"supermajority","nameLocation":"27893:13:114","nodeType":"VariableDeclaration","scope":61492,"src":"27885:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61375,"name":"uint256","nodeType":"ElementaryTypeName","src":"27885:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61387,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":61377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27910:1:114","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":61379,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61297,"src":"27928:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61378,"name":"getTotalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61673,"src":"27914:13:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":61380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27914:30:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27910:34:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":61382,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27909:36:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":61383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27948:1:114","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"27909:40:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":61385,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27952:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27909:44:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"27885:68:114"},{"assignments":[61392],"declarations":[{"constant":false,"id":61392,"mutability":"mutable","name":"attesters","nameLocation":"27980:9:114","nodeType":"VariableDeclaration","scope":61492,"src":"27963:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61390,"name":"address","nodeType":"ElementaryTypeName","src":"27963:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61391,"nodeType":"ArrayTypeName","src":"27963:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61395,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":61393,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61774,"src":"27992:35:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":61394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27992:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"27963:66:114"},{"assignments":[61397],"declarations":[{"constant":false,"id":61397,"mutability":"mutable","name":"successfulPostconfirmation","nameLocation":"28296:26:114","nodeType":"VariableDeclaration","scope":61492,"src":"28291:31:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61396,"name":"bool","nodeType":"ElementaryTypeName","src":"28291:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":61399,"initialValue":{"hexValue":"66616c7365","id":61398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"28325:5:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"28291:39:114"},{"body":{"id":61473,"nodeType":"Block","src":"28387:1641:114","statements":[{"assignments":[61412],"declarations":[{"constant":false,"id":61412,"mutability":"mutable","name":"attester","nameLocation":"28409:8:114","nodeType":"VariableDeclaration","scope":61473,"src":"28401:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61411,"name":"address","nodeType":"ElementaryTypeName","src":"28401:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":61416,"initialValue":{"baseExpression":{"id":61413,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61392,"src":"28420:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61415,"indexExpression":{"id":61414,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61401,"src":"28430:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28420:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"28401:31:114"},{"assignments":[61419],"declarations":[{"constant":false,"id":61419,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"28474:20:114","nodeType":"VariableDeclaration","scope":61473,"src":"28446:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":61418,"nodeType":"UserDefinedTypeName","pathNode":{"id":61417,"name":"SuperBlockCommitment","nameLocations":["28446:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"28446:20:114"},"referencedDeclaration":61843,"src":"28446:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"id":61425,"initialValue":{"baseExpression":{"baseExpression":{"id":61420,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"28497:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61422,"indexExpression":{"id":61421,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"28509:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28497:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61424,"indexExpression":{"id":61423,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61412,"src":"28527:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28497:39:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"VariableDeclarationStatement","src":"28446:90:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":61426,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61419,"src":"28739:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61427,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28760:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"28739:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":61428,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"28770:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28739:47:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61431,"nodeType":"IfStatement","src":"28735:61:114","trueBody":{"id":61430,"nodeType":"Continue","src":"28788:8:114"}},{"assignments":[61433],"declarations":[{"constant":false,"id":61433,"mutability":"mutable","name":"totalStakeOnCommitment","nameLocation":"28874:22:114","nodeType":"VariableDeclaration","scope":61473,"src":"28866:30:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61432,"name":"uint256","nodeType":"ElementaryTypeName","src":"28866:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61441,"initialValue":{"baseExpression":{"baseExpression":{"id":61434,"name":"commitmentStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61860,"src":"28899:15:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":61437,"indexExpression":{"expression":{"id":61435,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61419,"src":"28915:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61436,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28936:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"28915:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28899:44:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":61440,"indexExpression":{"expression":{"id":61438,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61419,"src":"28944:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61439,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28965:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"28944:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28899:77:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28866:110:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61442,"name":"totalStakeOnCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61433,"src":"28995:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":61443,"name":"supermajority","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61376,"src":"29021:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28995:39:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61472,"nodeType":"IfStatement","src":"28991:1027:114","trueBody":{"id":61471,"nodeType":"Block","src":"29036:982:114","statements":[{"assignments":[61446],"declarations":[{"constant":false,"id":61446,"mutability":"mutable","name":"firstSeen","nameLocation":"29250:9:114","nodeType":"VariableDeclaration","scope":61471,"src":"29242:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61445,"name":"uint256","nodeType":"ElementaryTypeName","src":"29242:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61450,"initialValue":{"arguments":[{"id":61448,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61419,"src":"29287:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":61447,"name":"getCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60854,"src":"29262:24:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (uint256)"}},"id":61449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29262:46:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29242:66:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":61451,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"29393:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":61452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29399:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"29393:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61453,"name":"firstSeen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61446,"src":"29411:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":61454,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61832,"src":"29423:35:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29411:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29393:65:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61458,"nodeType":"IfStatement","src":"29389:76:114","trueBody":{"id":61457,"nodeType":"Break","src":"29460:5:114"}},{"expression":{"arguments":[{"id":61460,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61419,"src":"29517:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},{"expression":{"id":61461,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"29539:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29543:6:114","memberName":"sender","nodeType":"MemberAccess","src":"29539:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61459,"name":"_postconfirmSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61137,"src":"29484:32:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$_t_address_$returns$__$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory,address)"}},"id":61463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29484:66:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61464,"nodeType":"ExpressionStatement","src":"29484:66:114"},{"expression":{"id":61467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61465,"name":"successfulPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61397,"src":"29568:26:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":61466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"29597:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"29568:33:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61468,"nodeType":"ExpressionStatement","src":"29568:33:114"},{"expression":{"hexValue":"74727565","id":61469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"29999:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":61295,"id":61470,"nodeType":"Return","src":"29992:11:114"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61404,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61401,"src":"28360:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61405,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61392,"src":"28364:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28374:6:114","memberName":"length","nodeType":"MemberAccess","src":"28364:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28360:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61474,"initializationExpression":{"assignments":[61401],"declarations":[{"constant":false,"id":61401,"mutability":"mutable","name":"i","nameLocation":"28353:1:114","nodeType":"VariableDeclaration","scope":61474,"src":"28345:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61400,"name":"uint256","nodeType":"ElementaryTypeName","src":"28345:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61403,"initialValue":{"hexValue":"30","id":61402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28357:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"28345:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"28382:3:114","subExpression":{"id":61408,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61401,"src":"28382:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61410,"nodeType":"ExpressionStatement","src":"28382:3:114"},"nodeType":"ForStatement","src":"28340:1688:114"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":61482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"30240:27:114","subExpression":{"id":61475,"name":"successfulPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61397,"src":"30241:26:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61477,"name":"getPresentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60463,"src":"30271:15:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30271:17:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61479,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"30291:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30291:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30271:39:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"30240:70:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61489,"nodeType":"IfStatement","src":"30236:206:114","trueBody":{"id":61488,"nodeType":"Block","src":"30312:130:114","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":61483,"name":"rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61251,"src":"30326:13:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":61484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30326:15:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61485,"nodeType":"ExpressionStatement","src":"30326:15:114"},{"expression":{"hexValue":"74727565","id":61486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"30362:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":61295,"id":61487,"nodeType":"Return","src":"30355:11:114"}]}},{"expression":{"hexValue":"66616c7365","id":61490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"30458:5:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":61295,"id":61491,"nodeType":"Return","src":"30451:12:114"}]},"documentation":{"id":61289,"nodeType":"StructuredDocumentation","src":"25628:334:114","text":"@dev it is possible if the accepting epoch is behind the presentEpoch that heights dont obtain enough votes in the assigned epoch. \n @dev Moreover, due to the leadingBlockTolerance, the assigned epoch for a height could be ahead of the actual epoch. \n @dev solution is to move to the next epoch and count votes there"},"implemented":true,"kind":"function","modifiers":[],"name":"attemptPostconfirmOrRollover","nameLocation":"25976:28:114","parameters":{"id":61292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61291,"mutability":"mutable","name":"superBlockHeight","nameLocation":"26013:16:114","nodeType":"VariableDeclaration","scope":61493,"src":"26005:24:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61290,"name":"uint256","nodeType":"ElementaryTypeName","src":"26005:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26004:26:114"},"returnParameters":{"id":61295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61294,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61493,"src":"26049:4:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61293,"name":"bool","nodeType":"ElementaryTypeName","src":"26049:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"26048:6:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61517,"nodeType":"FunctionDefinition","src":"30780:311:114","nodes":[],"body":{"id":61516,"nodeType":"Block","src":"30910:181:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":61509,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"30989:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":61508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30981:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61507,"name":"address","nodeType":"ElementaryTypeName","src":"30981:7:114","typeDescriptions":{}}},"id":61510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30981:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61511,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61496,"src":"31012:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61512,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61498,"src":"31035:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61513,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61500,"src":"31062:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61505,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"30939:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30955:8:114","memberName":"getStake","nodeType":"MemberAccess","referencedDeclaration":64122,"src":"30939:24:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view external returns (uint256)"}},"id":61514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30939:145:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61504,"id":61515,"nodeType":"Return","src":"30920:164:114"}]},"documentation":{"id":61494,"nodeType":"StructuredDocumentation","src":"30692:83:114","text":"@notice Gets the stake for a given tuple (custodian, attester) at a given epoch"},"functionSelector":"7aa81c2a","implemented":true,"kind":"function","modifiers":[],"name":"getStake","nameLocation":"30789:8:114","parameters":{"id":61501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61496,"mutability":"mutable","name":"epoch","nameLocation":"30815:5:114","nodeType":"VariableDeclaration","scope":61517,"src":"30807:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61495,"name":"uint256","nodeType":"ElementaryTypeName","src":"30807:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61498,"mutability":"mutable","name":"custodian","nameLocation":"30838:9:114","nodeType":"VariableDeclaration","scope":61517,"src":"30830:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61497,"name":"address","nodeType":"ElementaryTypeName","src":"30830:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61500,"mutability":"mutable","name":"attester","nameLocation":"30865:8:114","nodeType":"VariableDeclaration","scope":61517,"src":"30857:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61499,"name":"address","nodeType":"ElementaryTypeName","src":"30857:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30797:82:114"},"returnParameters":{"id":61504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61503,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61517,"src":"30901:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61502,"name":"uint256","nodeType":"ElementaryTypeName","src":"30901:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30900:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61535,"nodeType":"FunctionDefinition","src":"31191:198:114","nodes":[],"body":{"id":61534,"nodeType":"Block","src":"31315:74:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":61528,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"31341:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31341:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61530,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61520,"src":"31362:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61531,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61522,"src":"31373:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61527,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61517,"src":"31332:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) view returns (uint256)"}},"id":61532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31332:50:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61526,"id":61533,"nodeType":"Return","src":"31325:57:114"}]},"documentation":{"id":61518,"nodeType":"StructuredDocumentation","src":"31097:89:114","text":"@notice Gets the stake for a given tuple (custodian, attester) at the accepting epoch"},"functionSelector":"bb04bd2f","implemented":true,"kind":"function","modifiers":[],"name":"getStakeForAcceptingEpoch","nameLocation":"31200:25:114","parameters":{"id":61523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61520,"mutability":"mutable","name":"custodian","nameLocation":"31243:9:114","nodeType":"VariableDeclaration","scope":61535,"src":"31235:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61519,"name":"address","nodeType":"ElementaryTypeName","src":"31235:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61522,"mutability":"mutable","name":"attester","nameLocation":"31270:8:114","nodeType":"VariableDeclaration","scope":61535,"src":"31262:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61521,"name":"address","nodeType":"ElementaryTypeName","src":"31262:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"31225:59:114"},"returnParameters":{"id":61526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61525,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61535,"src":"31306:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61524,"name":"uint256","nodeType":"ElementaryTypeName","src":"31306:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31305:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61588,"nodeType":"FunctionDefinition","src":"31523:484:114","nodes":[],"body":{"id":61587,"nodeType":"Block","src":"31634:373:114","nodes":[],"statements":[{"assignments":[61549],"declarations":[{"constant":false,"id":61549,"mutability":"mutable","name":"custodians","nameLocation":"31661:10:114","nodeType":"VariableDeclaration","scope":61587,"src":"31644:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61547,"name":"address","nodeType":"ElementaryTypeName","src":"31644:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61548,"nodeType":"ArrayTypeName","src":"31644:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61557,"initialValue":{"arguments":[{"arguments":[{"id":61554,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"31735:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":61553,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31727:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61552,"name":"address","nodeType":"ElementaryTypeName","src":"31727:7:114","typeDescriptions":{}}},"id":61555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31727:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61550,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"31674:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31690:23:114","memberName":"getRegisteredCustodians","nodeType":"MemberAccess","referencedDeclaration":64204,"src":"31674:39:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":61556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31674:76:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"31644:106:114"},{"assignments":[61559],"declarations":[{"constant":false,"id":61559,"mutability":"mutable","name":"totalStake","nameLocation":"31768:10:114","nodeType":"VariableDeclaration","scope":61587,"src":"31760:18:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61558,"name":"uint256","nodeType":"ElementaryTypeName","src":"31760:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61561,"initialValue":{"hexValue":"30","id":61560,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31781:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"31760:22:114"},{"body":{"id":61583,"nodeType":"Block","src":"31840:134:114","statements":[{"expression":{"id":61581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61573,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61559,"src":"31909:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":61575,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61538,"src":"31932:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":61576,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61549,"src":"31939:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61578,"indexExpression":{"id":61577,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61563,"src":"31950:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31939:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61579,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61540,"src":"31954:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61574,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61517,"src":"31923:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) view returns (uint256)"}},"id":61580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31923:40:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31909:54:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61582,"nodeType":"ExpressionStatement","src":"31909:54:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61566,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61563,"src":"31812:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61567,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61549,"src":"31816:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31827:6:114","memberName":"length","nodeType":"MemberAccess","src":"31816:17:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31812:21:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61584,"initializationExpression":{"assignments":[61563],"declarations":[{"constant":false,"id":61563,"mutability":"mutable","name":"i","nameLocation":"31805:1:114","nodeType":"VariableDeclaration","scope":61584,"src":"31797:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61562,"name":"uint256","nodeType":"ElementaryTypeName","src":"31797:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61565,"initialValue":{"hexValue":"30","id":61564,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31809:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"31797:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"31835:3:114","subExpression":{"id":61570,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61563,"src":"31835:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61572,"nodeType":"ExpressionStatement","src":"31835:3:114"},"nodeType":"ForStatement","src":"31792:182:114"},{"expression":{"id":61585,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61559,"src":"31990:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61544,"id":61586,"nodeType":"Return","src":"31983:17:114"}]},"documentation":{"id":61536,"nodeType":"StructuredDocumentation","src":"31395:64:114","text":"@notice Gets the stake for a given attester at a given epoch"},"functionSelector":"ba26513e","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStake","nameLocation":"31532:16:114","parameters":{"id":61541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61538,"mutability":"mutable","name":"epoch","nameLocation":"31566:5:114","nodeType":"VariableDeclaration","scope":61588,"src":"31558:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61537,"name":"uint256","nodeType":"ElementaryTypeName","src":"31558:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61540,"mutability":"mutable","name":"attester","nameLocation":"31589:8:114","nodeType":"VariableDeclaration","scope":61588,"src":"31581:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61539,"name":"address","nodeType":"ElementaryTypeName","src":"31581:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"31548:55:114"},"returnParameters":{"id":61544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61543,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61588,"src":"31625:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61542,"name":"uint256","nodeType":"ElementaryTypeName","src":"31625:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31624:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61603,"nodeType":"FunctionDefinition","src":"32088:176:114","nodes":[],"body":{"id":61602,"nodeType":"Block","src":"32193:71:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":61597,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"32227:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32227:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61599,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61591,"src":"32248:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61596,"name":"getAttesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61588,"src":"32210:16:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":61600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32210:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61595,"id":61601,"nodeType":"Return","src":"32203:54:114"}]},"documentation":{"id":61589,"nodeType":"StructuredDocumentation","src":"32013:70:114","text":"@notice Gets the stake for a given attester at the accepting epoch"},"functionSelector":"491d0467","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStakeForAcceptingEpoch","nameLocation":"32097:33:114","parameters":{"id":61592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61591,"mutability":"mutable","name":"attester","nameLocation":"32148:8:114","nodeType":"VariableDeclaration","scope":61603,"src":"32140:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61590,"name":"address","nodeType":"ElementaryTypeName","src":"32140:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32130:32:114"},"returnParameters":{"id":61595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61594,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61603,"src":"32184:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61593,"name":"uint256","nodeType":"ElementaryTypeName","src":"32184:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32183:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61624,"nodeType":"FunctionDefinition","src":"32341:287:114","nodes":[],"body":{"id":61623,"nodeType":"Block","src":"32454:174:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":61617,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"32542:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":61616,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32534:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61615,"name":"address","nodeType":"ElementaryTypeName","src":"32534:7:114","typeDescriptions":{}}},"id":61618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32534:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61619,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61606,"src":"32575:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61620,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61608,"src":"32598:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61613,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"32483:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32499:17:114","memberName":"getCustodianStake","nodeType":"MemberAccess","referencedDeclaration":64168,"src":"32483:33:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view external returns (uint256)"}},"id":61621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32483:138:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61612,"id":61622,"nodeType":"Return","src":"32464:157:114"}]},"documentation":{"id":61604,"nodeType":"StructuredDocumentation","src":"32270:66:114","text":"@notice Gets the stake for a given custodian for a given epoch"},"functionSelector":"1de38fe1","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStake","nameLocation":"32350:17:114","parameters":{"id":61609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61606,"mutability":"mutable","name":"epoch","nameLocation":"32385:5:114","nodeType":"VariableDeclaration","scope":61624,"src":"32377:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61605,"name":"uint256","nodeType":"ElementaryTypeName","src":"32377:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61608,"mutability":"mutable","name":"custodian","nameLocation":"32408:9:114","nodeType":"VariableDeclaration","scope":61624,"src":"32400:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61607,"name":"address","nodeType":"ElementaryTypeName","src":"32400:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32367:56:114"},"returnParameters":{"id":61612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61611,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61624,"src":"32445:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61610,"name":"uint256","nodeType":"ElementaryTypeName","src":"32445:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32444:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61673,"nodeType":"FunctionDefinition","src":"32634:607:114","nodes":[],"body":{"id":61672,"nodeType":"Block","src":"32716:525:114","nodes":[],"statements":[{"assignments":[61635],"declarations":[{"constant":false,"id":61635,"mutability":"mutable","name":"custodians","nameLocation":"32896:10:114","nodeType":"VariableDeclaration","scope":61672,"src":"32879:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61633,"name":"address","nodeType":"ElementaryTypeName","src":"32879:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61634,"nodeType":"ArrayTypeName","src":"32879:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61643,"initialValue":{"arguments":[{"arguments":[{"id":61640,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"32970:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":61639,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32962:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61638,"name":"address","nodeType":"ElementaryTypeName","src":"32962:7:114","typeDescriptions":{}}},"id":61641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32962:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61636,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"32909:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32925:23:114","memberName":"getRegisteredCustodians","nodeType":"MemberAccess","referencedDeclaration":64204,"src":"32909:39:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":61642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32909:76:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"32879:106:114"},{"assignments":[61645],"declarations":[{"constant":false,"id":61645,"mutability":"mutable","name":"totalStake","nameLocation":"33003:10:114","nodeType":"VariableDeclaration","scope":61672,"src":"32995:18:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61644,"name":"uint256","nodeType":"ElementaryTypeName","src":"32995:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61647,"initialValue":{"hexValue":"30","id":61646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33016:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"32995:22:114"},{"body":{"id":61668,"nodeType":"Block","src":"33075:133:114","statements":[{"expression":{"id":61666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61659,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61645,"src":"33144:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":61661,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61626,"src":"33176:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":61662,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61635,"src":"33183:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61664,"indexExpression":{"id":61663,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61649,"src":"33194:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"33183:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61660,"name":"getCustodianStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61624,"src":"33158:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":61665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33158:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33144:53:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61667,"nodeType":"ExpressionStatement","src":"33144:53:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61652,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61649,"src":"33047:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61653,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61635,"src":"33051:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33062:6:114","memberName":"length","nodeType":"MemberAccess","src":"33051:17:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33047:21:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61669,"initializationExpression":{"assignments":[61649],"declarations":[{"constant":false,"id":61649,"mutability":"mutable","name":"i","nameLocation":"33040:1:114","nodeType":"VariableDeclaration","scope":61669,"src":"33032:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61648,"name":"uint256","nodeType":"ElementaryTypeName","src":"33032:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61651,"initialValue":{"hexValue":"30","id":61650,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33044:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"33032:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"33070:3:114","subExpression":{"id":61656,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61649,"src":"33070:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61658,"nodeType":"ExpressionStatement","src":"33070:3:114"},"nodeType":"ForStatement","src":"33027:181:114"},{"expression":{"id":61670,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61645,"src":"33224:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61630,"id":61671,"nodeType":"Return","src":"33217:17:114"}]},"functionSelector":"45367f23","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStake","nameLocation":"32643:13:114","parameters":{"id":61627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61626,"mutability":"mutable","name":"epoch","nameLocation":"32674:5:114","nodeType":"VariableDeclaration","scope":61673,"src":"32666:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61625,"name":"uint256","nodeType":"ElementaryTypeName","src":"32666:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32656:29:114"},"returnParameters":{"id":61630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61673,"src":"32707:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61628,"name":"uint256","nodeType":"ElementaryTypeName","src":"32707:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32706:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61687,"nodeType":"FunctionDefinition","src":"33319:180:114","nodes":[],"body":{"id":61686,"nodeType":"Block","src":"33426:73:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":61681,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"33461:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33461:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61683,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61675,"src":"33482:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61680,"name":"getCustodianStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61624,"src":"33443:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":61684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33443:49:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61679,"id":61685,"nodeType":"Return","src":"33436:56:114"}]},"functionSelector":"d440116d","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStakeForAcceptingEpoch","nameLocation":"33328:34:114","parameters":{"id":61676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61675,"mutability":"mutable","name":"custodian","nameLocation":"33380:9:114","nodeType":"VariableDeclaration","scope":61687,"src":"33372:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61674,"name":"address","nodeType":"ElementaryTypeName","src":"33372:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"33362:33:114"},"returnParameters":{"id":61679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61678,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61687,"src":"33417:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61677,"name":"uint256","nodeType":"ElementaryTypeName","src":"33417:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33416:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61698,"nodeType":"FunctionDefinition","src":"33505:158:114","nodes":[],"body":{"id":61697,"nodeType":"Block","src":"33605:58:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":61693,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"33636:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33636:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61692,"name":"getTotalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61673,"src":"33622:13:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":61695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33622:34:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61691,"id":61696,"nodeType":"Return","src":"33615:41:114"}]},"functionSelector":"14e38026","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStakeForAcceptingEpoch","nameLocation":"33514:30:114","parameters":{"id":61688,"nodeType":"ParameterList","parameters":[],"src":"33544:2:114"},"returnParameters":{"id":61691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61690,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61698,"src":"33592:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61689,"name":"uint256","nodeType":"ElementaryTypeName","src":"33592:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33591:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61711,"nodeType":"FunctionDefinition","src":"33669:155:114","nodes":[],"body":{"id":61710,"nodeType":"Block","src":"33765:59:114","nodes":[],"statements":[{"expression":{"id":61708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61706,"name":"rewardPerAttestationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61916,"src":"33775:25:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61707,"name":"rewardPerPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61700,"src":"33803:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33775:42:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61709,"nodeType":"ExpressionStatement","src":"33775:42:114"}]},"functionSelector":"0d39f7f0","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":61703,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"33747:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":61704,"kind":"modifierInvocation","modifierName":{"id":61702,"name":"onlyRole","nameLocations":["33738:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"33738:8:114"},"nodeType":"ModifierInvocation","src":"33738:26:114"}],"name":"setRewardPerAttestationPoint","nameLocation":"33678:28:114","parameters":{"id":61701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61700,"mutability":"mutable","name":"rewardPerPoint","nameLocation":"33715:14:114","nodeType":"VariableDeclaration","scope":61711,"src":"33707:22:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61699,"name":"uint256","nodeType":"ElementaryTypeName","src":"33707:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33706:24:114"},"returnParameters":{"id":61705,"nodeType":"ParameterList","parameters":[],"src":"33765:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":61724,"nodeType":"FunctionDefinition","src":"33830:165:114","nodes":[],"body":{"id":61723,"nodeType":"Block","src":"33931:64:114","nodes":[],"statements":[{"expression":{"id":61721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61719,"name":"rewardPerPostconfirmationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61918,"src":"33941:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61720,"name":"rewardPerPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61713,"src":"33974:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33941:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61722,"nodeType":"ExpressionStatement","src":"33941:47:114"}]},"functionSelector":"57342282","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":61716,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"33913:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":61717,"kind":"modifierInvocation","modifierName":{"id":61715,"name":"onlyRole","nameLocations":["33904:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"33904:8:114"},"nodeType":"ModifierInvocation","src":"33904:26:114"}],"name":"setRewardPerPostconfirmationPoint","nameLocation":"33839:33:114","parameters":{"id":61714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61713,"mutability":"mutable","name":"rewardPerPoint","nameLocation":"33881:14:114","nodeType":"VariableDeclaration","scope":61724,"src":"33873:22:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61712,"name":"uint256","nodeType":"ElementaryTypeName","src":"33873:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33872:24:114"},"returnParameters":{"id":61718,"nodeType":"ParameterList","parameters":[],"src":"33931:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":61741,"nodeType":"FunctionDefinition","src":"34073:157:114","nodes":[],"body":{"id":61740,"nodeType":"Block","src":"34169:61:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":61734,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61908,"src":"34186:20:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61736,"indexExpression":{"id":61735,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61727,"src":"34207:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34186:27:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61738,"indexExpression":{"id":61737,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61729,"src":"34214:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34186:37:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61733,"id":61739,"nodeType":"Return","src":"34179:44:114"}]},"documentation":{"id":61725,"nodeType":"StructuredDocumentation","src":"34001:67:114","text":"@notice Gets the reward points for an attester in a given epoch"},"functionSelector":"6978ab12","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterRewardPoints","nameLocation":"34082:23:114","parameters":{"id":61730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61727,"mutability":"mutable","name":"epoch","nameLocation":"34114:5:114","nodeType":"VariableDeclaration","scope":61741,"src":"34106:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61726,"name":"uint256","nodeType":"ElementaryTypeName","src":"34106:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61729,"mutability":"mutable","name":"attester","nameLocation":"34129:8:114","nodeType":"VariableDeclaration","scope":61741,"src":"34121:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61728,"name":"address","nodeType":"ElementaryTypeName","src":"34121:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"34105:33:114"},"returnParameters":{"id":61733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61732,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61741,"src":"34160:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61731,"name":"uint256","nodeType":"ElementaryTypeName","src":"34160:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34159:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61758,"nodeType":"FunctionDefinition","src":"34316:177:114","nodes":[],"body":{"id":61757,"nodeType":"Block","src":"34422:71:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":61751,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61914,"src":"34439:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61753,"indexExpression":{"id":61752,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61744,"src":"34465:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34439:32:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61755,"indexExpression":{"id":61754,"name":"postconfirmer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61746,"src":"34472:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34439:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61750,"id":61756,"nodeType":"Return","src":"34432:54:114"}]},"documentation":{"id":61742,"nodeType":"StructuredDocumentation","src":"34240:71:114","text":"@notice Gets the reward points for a postconfirmer in a given epoch"},"functionSelector":"ed8a1d59","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerRewardPoints","nameLocation":"34325:28:114","parameters":{"id":61747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61744,"mutability":"mutable","name":"epoch","nameLocation":"34362:5:114","nodeType":"VariableDeclaration","scope":61758,"src":"34354:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61743,"name":"uint256","nodeType":"ElementaryTypeName","src":"34354:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61746,"mutability":"mutable","name":"postconfirmer","nameLocation":"34377:13:114","nodeType":"VariableDeclaration","scope":61758,"src":"34369:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61745,"name":"address","nodeType":"ElementaryTypeName","src":"34369:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"34353:38:114"},"returnParameters":{"id":61750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61749,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61758,"src":"34413:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61748,"name":"uint256","nodeType":"ElementaryTypeName","src":"34413:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34412:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61774,"nodeType":"FunctionDefinition","src":"34580:177:114","nodes":[],"body":{"id":61773,"nodeType":"Block","src":"34666:91:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":61769,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"34743:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":61768,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34735:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61767,"name":"address","nodeType":"ElementaryTypeName","src":"34735:7:114","typeDescriptions":{}}},"id":61770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34735:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61765,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"34683:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34699:35:114","memberName":"getStakedAttestersForAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":64296,"src":"34683:51:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":61771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34683:66:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":61764,"id":61772,"nodeType":"Return","src":"34676:73:114"}]},"documentation":{"id":61759,"nodeType":"StructuredDocumentation","src":"34499:76:114","text":"@notice Gets the attesters who have stake in the current accepting epoch"},"functionSelector":"aa0d6fcd","implemented":true,"kind":"function","modifiers":[],"name":"getStakedAttestersForAcceptingEpoch","nameLocation":"34589:35:114","parameters":{"id":61760,"nodeType":"ParameterList","parameters":[],"src":"34624:2:114"},"returnParameters":{"id":61764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61763,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61774,"src":"34648:16:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61761,"name":"address","nodeType":"ElementaryTypeName","src":"34648:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61762,"nodeType":"ArrayTypeName","src":"34648:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"34647:18:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61792,"nodeType":"FunctionDefinition","src":"34763:133:114","nodes":[],"body":{"id":61791,"nodeType":"Block","src":"34829:67:114","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":61781,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"34846:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61783,"indexExpression":{"id":61782,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61776,"src":"34858:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34846:19:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61786,"indexExpression":{"expression":{"id":61784,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"34866:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34870:6:114","memberName":"sender","nodeType":"MemberAccess","src":"34866:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34846:31:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":61787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34878:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"34846:38:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":61788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34888:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34846:43:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":61780,"id":61790,"nodeType":"Return","src":"34839:50:114"}]},"functionSelector":"e4a3fb74","implemented":true,"kind":"function","modifiers":[],"name":"isCommitted","nameLocation":"34772:11:114","parameters":{"id":61777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61776,"mutability":"mutable","name":"height","nameLocation":"34792:6:114","nodeType":"VariableDeclaration","scope":61792,"src":"34784:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61775,"name":"uint256","nodeType":"ElementaryTypeName","src":"34784:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34783:16:114"},"returnParameters":{"id":61780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61779,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61792,"src":"34823:4:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61778,"name":"bool","nodeType":"ElementaryTypeName","src":"34823:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34822:6:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":61809,"nodeType":"FunctionDefinition","src":"34902:180:114","nodes":[],"body":{"id":61808,"nodeType":"Block","src":"34972:110:114","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":61799,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61900,"src":"34989:33:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61801,"indexExpression":{"id":61800,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61902,"src":"35023:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34989:66:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61803,"indexExpression":{"id":61802,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61794,"src":"35056:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34989:74:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":61804,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35064:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"34989:81:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":61805,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35074:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34989:86:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":61798,"id":61807,"nodeType":"Return","src":"34982:93:114"}]},"functionSelector":"ec23ec2e","implemented":true,"kind":"function","modifiers":[],"name":"isPostconfirmed","nameLocation":"34911:15:114","parameters":{"id":61795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61794,"mutability":"mutable","name":"height","nameLocation":"34935:6:114","nodeType":"VariableDeclaration","scope":61809,"src":"34927:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61793,"name":"uint256","nodeType":"ElementaryTypeName","src":"34927:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34926:16:114"},"returnParameters":{"id":61798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61797,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61809,"src":"34966:4:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61796,"name":"bool","nodeType":"ElementaryTypeName","src":"34966:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34965:6:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":60045,"name":"Initializable","nameLocations":["561:13:114"],"nodeType":"IdentifierPath","referencedDeclaration":39746,"src":"561:13:114"},"id":60046,"nodeType":"InheritanceSpecifier","src":"561:13:114"},{"baseName":{"id":60047,"name":"BaseSettlement","nameLocations":["576:14:114"],"nodeType":"IdentifierPath","referencedDeclaration":62077,"src":"576:14:114"},"id":60048,"nodeType":"InheritanceSpecifier","src":"576:14:114"},{"baseName":{"id":60049,"name":"PCPStorage","nameLocations":["592:10:114"],"nodeType":"IdentifierPath","referencedDeclaration":61923,"src":"592:10:114"},"id":60050,"nodeType":"InheritanceSpecifier","src":"592:10:114"},{"baseName":{"id":60051,"name":"IPCP","nameLocations":["604:4:114"],"nodeType":"IdentifierPath","referencedDeclaration":62022,"src":"604:4:114"},"id":60052,"nodeType":"InheritanceSpecifier","src":"604:4:114"}],"canonicalName":"PCP","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[61810,62022,61923,62077,39928,42948,39478,41255,47988,41634,40760,39746],"name":"PCP","nameLocation":"554:3:114","scope":61811,"usedErrors":[39495,39498,39773,39778,41561,41564,43143,43156,44429,45732,60065,60068,60071,60074,61945,61947],"usedEvents":[39503,41573,41582,41591,42896,61935,61943]}],"license":"UNLICENSED"},"id":114} \ No newline at end of file diff --git a/protocol/pcp/clients/eth/src/builder/mod.rs b/protocol/pcp/clients/eth/src/builder/mod.rs new file mode 100644 index 00000000..e69de29b diff --git a/protocol/pcp/clients/eth/src/client/mod.rs b/protocol/pcp/clients/eth/src/client/mod.rs new file mode 100644 index 00000000..e988d6bb --- /dev/null +++ b/protocol/pcp/clients/eth/src/client/mod.rs @@ -0,0 +1,290 @@ +use crate::util::send_eth_transaction::send_transaction; +use crate::util::send_eth_transaction::McrEthConnectorError; +use crate::util::send_eth_transaction::VerifyRule; +use alloy::providers::{Provider, RootProvider}; +use alloy::pubsub::PubSubFrontend; +use alloy_primitives::Address; +use alloy_primitives::U256; +use alloy_sol_types::sol; +use anyhow::Context; +use pcp_protocol_client_core_util::{CommitmentStream, McrClientError, McrClientOperations}; +use pcp_types::block_commitment::{BlockCommitment, Commitment, Id}; +use serde_json::Value as JsonValue; +use std::array::TryFromSliceError; +use std::fs; +use std::path::Path; +use tokio_stream::StreamExt; + +// Note: we prefer using the ABI because the [`sol!`](alloy_sol_types::sol) macro, when used with smart contract code directly, will not handle inheritance. +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + PCP, + "abis/PCP.json" +); + +// Note: we prefer using the ABI because the [`sol!`](alloy_sol_types::sol) macro, when used with smart contract code directly, will not handle inheritance. +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + MovementStaking, + "abis/MovementStaking.json" +); + +// Note: we prefer using the ABI because the [`sol!`](alloy_sol_types::sol) macro, when used with smart contract code directly, will not handle inheritance. +sol!( + #[allow(missing_docs)] + #[sol(rpc)] + MOVEToken, + "abis/MOVEToken.json" +); + +pub struct Client

{ + pub(crate) run_commitment_admin_mode: bool, + pub(crate) rpc_provider: P, + pub(crate) ws_provider: RootProvider, + pub(crate) signer_address: Address, + pub(crate) contract_address: Address, + pub(crate) send_transaction_error_rules: Vec>, + pub(crate) gas_limit: u64, + pub(crate) send_transaction_retries: u32, +} + +impl

McrClientOperations for Client

+where + P: Provider + Clone, +{ + async fn post_block_commitment( + &self, + block_commitment: BlockCommitment, + ) -> Result<(), McrClientError> { + let contract = PCP::new(self.contract_address, &self.rpc_provider); + + let eth_block_commitment = PCP::BlockCommitment { + // Currently, to simplify the API, we'll say 0 is uncommitted all other numbers are legitimate heights + height: U256::from(block_commitment.height()), + commitment: alloy_primitives::FixedBytes( + block_commitment.commitment().as_bytes().clone(), + ), + blockId: alloy_primitives::FixedBytes(block_commitment.block_id().as_bytes().clone()), + }; + + if self.run_commitment_admin_mode { + let call_builder = contract.forceLatestCommitment(eth_block_commitment); + send_transaction( + call_builder, + &self.send_transaction_error_rules, + self.send_transaction_retries, + self.gas_limit as u128, + ) + .await + } else { + let call_builder = contract.submitBlockCommitment(eth_block_commitment); + send_transaction( + call_builder, + &self.send_transaction_error_rules, + self.send_transaction_retries, + self.gas_limit as u128, + ) + .await + } + } + + async fn post_block_commitment_batch( + &self, + block_commitments: Vec, + ) -> Result<(), McrClientError> { + let contract = PCP::new(self.contract_address, &self.rpc_provider); + + let eth_block_commitment: Vec<_> = block_commitments + .into_iter() + .map(|block_commitment| { + Ok(PCP::BlockCommitment { + // Currently, to simplify the API, we'll say 0 is uncommitted all other numbers are legitimate heights + height: U256::from(block_commitment.height()), + commitment: alloy_primitives::FixedBytes( + block_commitment.commitment().as_bytes().clone(), + ), + blockId: alloy_primitives::FixedBytes( + block_commitment.block_id().as_bytes().clone(), + ), + }) + }) + .collect::, TryFromSliceError>>() + .map_err(|e| McrClientError::Internal(Box::new(e)))?; + + let call_builder = contract.submitBatchBlockCommitment(eth_block_commitment); + + send_transaction( + call_builder, + &self.send_transaction_error_rules, + self.send_transaction_retries, + self.gas_limit as u128, + ) + .await + } + + async fn force_block_commitment( + &self, + block_commitment: BlockCommitment, + ) -> Result<(), McrClientError> { + let contract = PCP::new(self.contract_address, &self.rpc_provider); + + let eth_block_commitment = PCP::BlockCommitment { + // Currently, to simplify the API, we'll say 0 is uncommitted all other numbers are legitimate heights + height: U256::from(block_commitment.height()), + commitment: alloy_primitives::FixedBytes( + block_commitment.commitment().as_bytes().clone(), + ), + blockId: alloy_primitives::FixedBytes(block_commitment.block_id().as_bytes().clone()), + }; + + let call_builder = contract.forceLatestCommitment(eth_block_commitment); + send_transaction( + call_builder, + &self.send_transaction_error_rules, + self.send_transaction_retries, + self.gas_limit as u128, + ) + .await + } + + async fn stream_block_commitments(&self) -> Result { + // Register to contract BlockCommitmentSubmitted event + + let contract = PCP::new(self.contract_address, &self.ws_provider); + let event_filter = contract + .BlockAccepted_filter() + .watch() + .await + .map_err(|e| McrClientError::StreamBlockCommitments(Box::new(e)))?; + + let stream = event_filter.into_stream().map(|event| { + event + .and_then(|(commitment, _)| { + let height = commitment.height.try_into().map_err( + |err: alloy::primitives::ruint::FromUintError| { + alloy_sol_types::Error::Other(err.to_string().into()) + }, + )?; + Ok(BlockCommitment::new( + height, + Id::new(commitment.blockHash.0), + Commitment::new(commitment.stateCommitment.0), + )) + }) + .map_err(|err| McrEthConnectorError::EventNotificationError(err).into()) + }); + Ok(Box::pin(stream) as CommitmentStream) + } + + async fn get_commitment_at_height( + &self, + height: u64, + ) -> Result, McrClientError> { + let contract = PCP::new(self.contract_address, &self.ws_provider); + let PCP::getAcceptedCommitmentAtBlockHeightReturn { _0: commitment } = contract + .getAcceptedCommitmentAtBlockHeight(U256::from(height)) + .call() + .await + .map_err(|e| McrClientError::Internal(Box::new(e)))?; + + let return_height: u64 = commitment + .height + .try_into() + .context("failed to convert the commitment height from U256 to u64") + .map_err(|e| McrClientError::Internal(e.into()))?; + // Commitment with height 0 mean not found + Ok((return_height != 0).then_some(BlockCommitment::new( + commitment + .height + .try_into() + .context("failed to convert the commitment height from U256 to u64") + .map_err(|e| McrClientError::Internal(e.into()))?, + Id::new(commitment.blockId.into()), + Commitment::new(commitment.commitment.into()), + ))) + } + + async fn get_posted_commitment_at_height( + &self, + height: u64, + ) -> Result, McrClientError> { + let contract = PCP::new(self.contract_address, &self.ws_provider); + let PCP::getValidatorCommitmentAtBlockHeightReturn { _0: commitment } = contract + .getValidatorCommitmentAtBlockHeight(U256::from(height), self.signer_address) + .call() + .await + .map_err(|e| McrClientError::Internal(Box::new(e)))?; + + let return_height: u64 = commitment + .height + .try_into() + .context("failed to convert the commitment height from U256 to u64") + .map_err(|e| McrClientError::Internal(e.into()))?; + + Ok((return_height != 0).then_some(BlockCommitment::new( + commitment + .height + .try_into() + .context("failed to convert the commitment height from U256 to u64") + .map_err(|e| McrClientError::Internal(e.into()))?, + Id::new(commitment.blockId.into()), + Commitment::new(commitment.commitment.into()), + ))) + } + + async fn get_max_tolerable_block_height(&self) -> Result { + let contract = PCP::new(self.contract_address, &self.ws_provider); + let PCP::getMaxTolerableBlockHeightReturn { _0: block_height } = contract + .getMaxTolerableBlockHeight() + .call() + .await + .map_err(|e| McrClientError::Internal(Box::new(e)))?; + Ok(block_height + .try_into() + .context("Failed to convert the max tolerable block height from U256 to u64") + .map_err(|e| McrClientError::Internal(e.into()))?) + } +} + +pub struct AnvilAddressEntry { + pub address: String, + pub private_key: String, +} + +/// Read the Anvil config file keys and return all address/private keys. +pub fn read_anvil_json_file_addresses>( + anvil_conf_path: P, +) -> Result, McrClientError> { + let file_content = + fs::read_to_string(anvil_conf_path).map_err(|e| McrClientError::Internal(Box::new(e)))?; + + let json_value: JsonValue = + serde_json::from_str(&file_content).map_err(|e| McrClientError::Internal(Box::new(e)))?; + + // Extract the available_accounts and private_keys fields. + let available_accounts_iter = json_value["available_accounts"] + .as_array() + .expect("Available_accounts should be an array") + .iter() + .map(|v| { + let s = v.as_str().expect("Available_accounts elements should be strings"); + s.to_owned() + }); + + let private_keys_iter = json_value["private_keys"] + .as_array() + .expect("Private_keys should be an array") + .iter() + .map(|v| { + let s = v.as_str().expect("Private_keys elements should be strings"); + s.to_owned() + }); + + let res = available_accounts_iter + .zip(private_keys_iter) + .map(|(address, private_key)| AnvilAddressEntry { address, private_key }) + .collect::>(); + Ok(res) +} diff --git a/protocol/pcp/clients/eth/src/config/mod.rs b/protocol/pcp/clients/eth/src/config/mod.rs new file mode 100644 index 00000000..28bea395 --- /dev/null +++ b/protocol/pcp/clients/eth/src/config/mod.rs @@ -0,0 +1,166 @@ +use crate::client::Client; +use crate::util::send_eth_transaction::InsufficentFunds; +use crate::util::send_eth_transaction::SendTransactionErrorRule; +use crate::util::send_eth_transaction::UnderPriced; +use crate::util::send_eth_transaction::VerifyRule; +use alloy::providers::fillers::ChainIdFiller; +use alloy::providers::fillers::FillProvider; +use alloy::providers::fillers::GasFiller; +use alloy::providers::fillers::JoinFill; +use alloy::providers::fillers::NonceFiller; +use alloy::providers::fillers::WalletFiller; +use alloy::providers::{Provider, ProviderBuilder, RootProvider}; +use alloy::signers::Signer as _; +use alloy_network::Ethereum; +use alloy_network::EthereumWallet; +use alloy_primitives::Address; +use alloy_transport::BoxTransport; +use alloy_transport_ws::WsConnect; +use anyhow::Context; +use clap::Parser; +use secure_signer::cryptography::secp256k1::Secp256k1; +use secure_signer::key::TryFromCanonicalString; +use secure_signer_eth::Signer; +use secure_signer_loader::{identifiers::SignerIdentifier, Load}; +use serde::{Deserialize, Serialize}; +use tracing::info; + +#[derive(Parser, Debug, Serialize, Deserialize, Clone)] +pub struct Config { + /// The address of the PCP settlement contract. + pub pcp_contract_address: String, + /// The Ethereum RPC connection URL. + pub rpc_url: String, + /// The Ethereum WebSocket connection URL. + pub ws_url: String, + /// The Ethereum chain ID. + pub chain_id: u64, + /// The signer identifier. + #[arg(value_parser = SignerIdentifier::try_from_canonical_string)] + pub signer_identifier: SignerIdentifier, + /// Whether to run in settlement admin mode. + pub run_commitment_admin_mode: bool, + /// The gas limit for transactions. + pub gas_limit: u64, + /// The number of retries for sending transactions. + pub transaction_send_retries: u32, +} + +impl Config { + /// Creates a new PCP client configuration. + pub fn new( + pcp_contract_address: String, + rpc_url: String, + ws_url: String, + chain_id: u64, + signer_identifier: SignerIdentifier, + run_commitment_admin_mode: bool, + gas_limit: u64, + transaction_send_retries: u32, + ) -> Self { + Config { + pcp_contract_address, + rpc_url, + ws_url, + chain_id, + signer_identifier, + run_commitment_admin_mode, + gas_limit, + transaction_send_retries, + } + } + + /// Builds the PCP client. + pub async fn build( + self, + ) -> Result< + Client< + FillProvider< + JoinFill< + JoinFill< + JoinFill, NonceFiller>, + ChainIdFiller, + >, + WalletFiller, + >, + RootProvider, + BoxTransport, + Ethereum, + >, + >, + anyhow::Error, + > { + let signer_identifier: Box + Send> = + Box::new(self.signer_identifier.clone()); + let signer_provider = signer_identifier.load().await?; + let signer = Signer::try_new(signer_provider, Some(self.chain_id)).await?; + + let signer_address = signer.address(); + info!("Signer address: {}", signer_address); + let contract_address = self + .pcp_contract_address + .parse() + .context("Failed to parse the contract address for the PCP settlement client")?; + + // Build the rpc provider + let rpc_provider = ProviderBuilder::new() + .with_recommended_fillers() + .wallet(EthereumWallet::from(signer)) + .on_builtin(&self.rpc_url) + .await + .context("Failed to create the RPC provider for the PCP settlement client")?; + + let client = Self::build_with_provider( + self.run_commitment_admin_mode, + rpc_provider, + self.ws_url, + signer_address, + contract_address, + self.gas_limit, + self.transaction_send_retries, + ) + .await + .context( + "Failed to create the PCP settlement client with the RPC provider and contract address", + )?; + Ok(client) + } + + // Helper to build the PCP client with a custom provider. + async fn build_with_provider( + run_commitment_admin_mode: bool, + rpc_provider: P, + ws_url: S, + signer_address: Address, + contract_address: Address, + gas_limit: u64, + send_transaction_retries: u32, + ) -> Result, anyhow::Error> + where + P: Provider + Clone, + S: Into, + { + let ws = WsConnect::new(ws_url); + + let ws_provider = ProviderBuilder::new() + .on_ws(ws) + .await + .context("Failed to create the WebSocket provider for the PCP settlement client")?; + + let rule1: Box = Box::new(SendTransactionErrorRule::::new()); + let rule2: Box = + Box::new(SendTransactionErrorRule::::new()); + let send_transaction_error_rules = vec![rule1, rule2]; + + Ok(Client { + run_commitment_admin_mode, + rpc_provider, + ws_provider, + signer_address, + contract_address, + send_transaction_error_rules, + gas_limit, + send_transaction_retries, + }) + } +} diff --git a/protocol/pcp/clients/eth/src/lib.rs b/protocol/pcp/clients/eth/src/lib.rs new file mode 100644 index 00000000..41a68205 --- /dev/null +++ b/protocol/pcp/clients/eth/src/lib.rs @@ -0,0 +1,4 @@ +pub mod builder; +pub mod client; +pub mod config; +pub mod util; diff --git a/protocol/pcp/clients/eth/src/util/mod.rs b/protocol/pcp/clients/eth/src/util/mod.rs new file mode 100644 index 00000000..1def47fc --- /dev/null +++ b/protocol/pcp/clients/eth/src/util/mod.rs @@ -0,0 +1 @@ +pub mod send_eth_transaction; diff --git a/protocol/pcp/clients/eth/src/util/send_eth_transaction.rs b/protocol/pcp/clients/eth/src/util/send_eth_transaction.rs new file mode 100644 index 00000000..53fadfd8 --- /dev/null +++ b/protocol/pcp/clients/eth/src/util/send_eth_transaction.rs @@ -0,0 +1,177 @@ +use alloy::providers::Provider; +use alloy_contract::CallBuilder; +use alloy_contract::CallDecoder; +use alloy_network::Ethereum; +use alloy_transport::{Transport, TransportError}; +use pcp_protocol_client_core_util::McrClientError; +use std::marker::PhantomData; +use thiserror::Error; +use tracing::info; + +#[derive(Error, Debug)] +pub enum McrEthConnectorError { + #[error( + "PCP Settlement Transaction failed because gas estimation is too high. Estimated gas: {0} gas limit:{1}" + )] + GasLimitExceed(u128, u128), + #[error("PCP Settlement Transaction failed because account funds were insufficient: {0}")] + InsufficientFunds(String), + #[error("PCP Settlement Transaction send failed: {0}")] + SendTransactionError(#[from] alloy_contract::Error), + #[error("PCP Settlement Transaction send failed during its execution: {0}")] + RpcTransactionExecution(String), + #[error("PCP Settlement BlockAccepted event notification error: {0}")] + EventNotificationError(#[from] alloy_sol_types::Error), + #[error("PCP Settlement BlockAccepted event notification stream close")] + EventNotificationStreamClosed, +} + +impl From for McrClientError { + fn from(err: McrEthConnectorError) -> Self { + McrClientError::Internal(Box::new(err)) + } +} + +// Define a rule to verify the error generated when a transaction is send to determine if: +// * the Transaction must me resend with more gas: return Ok(true) +// * a specific error must be return: return Err(McrEthConnectorError::xxx); +// * the rule doesn't apply: return Ok(false) +pub trait VerifyRule: Sync + Send { + fn verify(&self, error: &alloy_contract::Error) -> Result; +} + +pub struct SendTransactionErrorRule { + _kind: PhantomData, +} + +impl SendTransactionErrorRule { + pub fn new() -> Self { + SendTransactionErrorRule { _kind: PhantomData } + } +} + +// Define the current 2 errors managed. +pub struct UnderPriced; +pub struct InsufficentFunds; + +impl VerifyRule for SendTransactionErrorRule { + fn verify(&self, error: &alloy_contract::Error) -> Result { + let alloy_contract::Error::TransportError(TransportError::ErrorResp(payload)) = error + else { + return Ok(false); + }; + + if payload.code == -32000 && payload.message.contains("transaction underpriced") { + Ok(true) + } else { + Ok(false) + } + } +} + +impl VerifyRule for SendTransactionErrorRule { + fn verify(&self, error: &alloy_contract::Error) -> Result { + let alloy_contract::Error::TransportError(TransportError::ErrorResp(payload)) = error + else { + return Ok(false); + }; + + if payload.code == -32000 && payload.message.contains("insufficient funds") { + Err(McrEthConnectorError::InsufficientFunds(payload.message.clone())) + } else { + Ok(false) + } + } +} + +pub async fn send_transaction< + P: Provider + Clone, + T: Transport + Clone, + D: CallDecoder + Clone, +>( + base_call_builder: CallBuilder, + send_transaction_error_rules: &[Box], + number_retry: u32, + gas_limit: u128, +) -> Result<(), McrClientError> { + info!("Sending transaction with gas limit: {}", gas_limit); + //validate gas price. + let mut estimate_gas = base_call_builder.estimate_gas().await.expect("Failed to estimate gas"); + // Add 20% because initial gas estimate are too low. + estimate_gas += (estimate_gas * 20) / 100; + + info!("estimated_gas: {}", estimate_gas); + + // Sending Transaction automatically can lead to errors that depend on the state for Eth. + // It's convenient to manage some of them automatically to avoid to fail commitment Transaction. + // I define a first one but other should be added depending on the test with mainnet. + for _ in 0..number_retry { + let call_builder = base_call_builder.clone().gas(estimate_gas); + + //detect if the gas price doesn't execeed the limit. + let gas_price = call_builder + .provider + .get_gas_price() + .await + .map_err(|e| McrClientError::Internal(Box::new(e)))?; + let transaction_fee_wei = estimate_gas * gas_price; + if transaction_fee_wei > gas_limit { + return Err(McrEthConnectorError::GasLimitExceed(transaction_fee_wei, gas_limit).into()); + } + + info!("Sending transaction with gas: {}", estimate_gas); + + //send the Transaction and detect send error. + let pending_transaction = match call_builder.send().await { + Ok(pending_transaction) => pending_transaction, + Err(err) => { + //apply defined rules. + for rule in send_transaction_error_rules { + // Verify all rules. If one rule return true or an error stop verification. + // If true retry with more gas else return the error. + if rule.verify(&err)? { + //increase gas of 10% and retry + estimate_gas += (estimate_gas * 10) / 100; + tokio::time::sleep(tokio::time::Duration::from_secs(1)).await; + continue; + } + } + + return Err(McrEthConnectorError::from(err).into()); + } + }; + + match pending_transaction.get_receipt().await { + // Transaction execution fail + Ok(transaction_receipt) if !transaction_receipt.status() => { + tracing::debug!( + "transaction_receipt.gas_used: {} / estimate_gas: {estimate_gas}", + transaction_receipt.gas_used + ); + // Some valid Tx can abort cause of insufficient gas without consuming all its gas. + // Define a threshold a little less than estimated gas to detect them. + let tx_gas_consumption_threshold = estimate_gas - (estimate_gas * 10) / 100; + if transaction_receipt.gas_used >= tx_gas_consumption_threshold { + tracing::info!("Send commitment Transaction fail because of insufficient gas, receipt:{transaction_receipt:?} "); + estimate_gas += (estimate_gas * 30) / 100; + continue; + } else { + return Err(McrEthConnectorError::RpcTransactionExecution(format!( + "Send commitment Transaction fail, abort Transaction, receipt:{transaction_receipt:?}" + )) + .into()); + } + } + Ok(_) => return Ok(()), + Err(err) => { + return Err(McrEthConnectorError::RpcTransactionExecution(err.to_string()).into()) + } + }; + } + + //Max retry exceed + Err(McrEthConnectorError::RpcTransactionExecution( + "Send commitment Transaction fail because of exceed max retry".to_string(), + ) + .into()) +} diff --git a/protocol/pcp/clients/mock/Cargo.toml b/protocol/pcp/clients/mock/Cargo.toml new file mode 100644 index 00000000..6af221b8 --- /dev/null +++ b/protocol/pcp/clients/mock/Cargo.toml @@ -0,0 +1,23 @@ +[package] +name = "pcp-protocol-client-core-mock" +version = { workspace = true } +edition = { workspace = true } +license = { workspace = true } +authors = { workspace = true } +homepage = { workspace = true } +publish = { workspace = true } +rust-version = { workspace = true } + +[dependencies] +thiserror = { workspace = true } +tokio = { workspace = true } +tokio-stream = { workspace = true } +tracing = { workspace = true } +serde = { workspace = true, features = ["derive"] } +pcp-types = { workspace = true } +pcp-protocol-client-core-util = { workspace = true } +anyhow = { workspace = true } +futures = { workspace = true} + +[lints] +workspace = true diff --git a/protocol/pcp/clients/mock/src/lib.rs b/protocol/pcp/clients/mock/src/lib.rs new file mode 100644 index 00000000..35114c8d --- /dev/null +++ b/protocol/pcp/clients/mock/src/lib.rs @@ -0,0 +1,242 @@ +use pcp_protocol_client_core_util::{CommitmentStream, McrClientError, McrClientOperations}; +use pcp_types::block_commitment::BlockCommitment; +use std::collections::BTreeMap; +use std::sync::{Arc, Mutex}; +use tokio::sync::{mpsc, RwLock}; +use tokio_stream::wrappers::ReceiverStream; + +#[derive(Clone)] +pub struct Client { + commitments: Arc>>, + stream_sender: mpsc::Sender>, + stream_receiver: Arc>>>>, + pub current_height: Arc>, + pub block_lead_tolerance: u64, + paused_at_height: Arc>>, +} + +impl Client { + pub fn new() -> Self { + let (stream_sender, receiver) = mpsc::channel(10); + Client { + commitments: Arc::new(RwLock::new(BTreeMap::new())), + stream_sender, + stream_receiver: Arc::new(Mutex::new(Some(receiver))), + current_height: Arc::new(RwLock::new(0)), + block_lead_tolerance: 16, + paused_at_height: Arc::new(RwLock::new(None)), + } + } + + /// Overrides the commitment to settle on at given height. + /// + /// To have effect, this method needs to be called before a commitment is + /// posted for this height with the `McrClientOperations` API. + pub async fn override_block_commitment(&self, commitment: BlockCommitment) { + let mut commitments = self.commitments.write().await; + commitments.insert(commitment.height(), commitment); + } + + /// Stop streaming commitments after the given height. + /// + /// Any posted commitments will be accumulated. + pub async fn pause_after(&self, height: u64) { + let mut paused_at_height = self.paused_at_height.write().await; + *paused_at_height = Some(height); + } + + /// Stream any commitments that have been posted following the height + /// at which `pause` was called, and resume streaming any newly posted + /// commitments + pub async fn resume(&self) { + let resume_height = { + let mut paused_at_height = self.paused_at_height.write().await; + paused_at_height.take().expect("not paused") + }; + { + let commitments = self.commitments.read().await; + for (_, commitment) in commitments.range(resume_height + 1..) { + println!("resume sends commitment for height {}", commitment.height()); + self.stream_sender.send(Ok(commitment.clone())).await.unwrap(); + } + } + } +} + +impl McrClientOperations for Client { + async fn post_block_commitment( + &self, + block_commitment: BlockCommitment, + ) -> Result<(), McrClientError> { + let height = block_commitment.height(); + + let settled = { + let mut commitments = self.commitments.write().await; + commitments.entry(block_commitment.height()).or_insert(block_commitment).clone() + }; + { + let paused_at_height = self.paused_at_height.read().await; + match *paused_at_height { + Some(ph) if ph < height => {} + _ => { + self.stream_sender + .send(Ok(settled)) + .await + .map_err(|e| McrClientError::Internal(Box::new(e)))?; + } + } + } + + { + let mut current_height = self.current_height.write().await; + if height > *current_height { + *current_height = height; + } + } + + Ok(()) + } + + async fn post_block_commitment_batch( + &self, + block_commitment: Vec, + ) -> Result<(), McrClientError> { + for commitment in block_commitment { + self.post_block_commitment(commitment).await?; + } + Ok(()) + } + + async fn force_block_commitment( + &self, + _block_commitment: BlockCommitment, + ) -> Result<(), McrClientError> { + unimplemented!() + } + + async fn get_posted_commitment_at_height( + &self, + _height: u64, + ) -> Result, McrClientError> { + unimplemented!(); + } + + async fn stream_block_commitments(&self) -> Result { + let receiver = self + .stream_receiver + .lock() + .unwrap() + .take() + .expect("stream_block_commitments already called"); + Ok(Box::pin(ReceiverStream::new(receiver))) + } + + async fn get_commitment_at_height( + &self, + height: u64, + ) -> Result, McrClientError> { + let guard = self.commitments.read().await; + Ok(guard.get(&height).cloned()) + } + + async fn get_max_tolerable_block_height(&self) -> Result { + Ok(*self.current_height.read().await + self.block_lead_tolerance) + } +} + +#[cfg(test)] +pub mod test { + + use super::*; + use pcp_types::block_commitment::Commitment; + + use futures::future; + use tokio::select; + use tokio_stream::StreamExt; + + #[tokio::test] + async fn test_post_block_commitment() -> Result<(), McrClientError> { + let client = Client::new(); + let commitment = BlockCommitment::new(1, Default::default(), Commitment::test()); + client.post_block_commitment(commitment.clone()).await.unwrap(); + let guard = client.commitments.write().await; + assert_eq!(guard.get(&1), Some(&commitment)); + + assert_eq!(*client.current_height.read().await, 1); + assert_eq!(client.get_max_tolerable_block_height().await?, 17); + + Ok(()) + } + + #[tokio::test] + async fn test_post_block_commitment_batch() -> Result<(), McrClientError> { + let client = Client::new(); + let commitment = BlockCommitment::new(1, Default::default(), Commitment::test()); + let commitment2 = BlockCommitment::new(1, Default::default(), Commitment::test()); + client + .post_block_commitment_batch(vec![commitment.clone(), commitment2.clone()]) + .await + .unwrap(); + let guard = client.commitments.write().await; + assert_eq!(guard.get(&1), Some(&commitment)); + assert_eq!(guard.get(&2), Some(&commitment2)); + Ok(()) + } + + #[tokio::test] + async fn test_stream_block_commitments() -> Result<(), McrClientError> { + let client = Client::new(); + let commitment = BlockCommitment::new(1, Default::default(), Commitment::test()); + client.post_block_commitment(commitment.clone()).await.unwrap(); + let mut stream = client.stream_block_commitments().await?; + assert_eq!(stream.next().await.unwrap().unwrap(), commitment); + Ok(()) + } + + #[tokio::test] + async fn test_override_block_commitments() -> Result<(), McrClientError> { + let client = Client::new(); + let commitment = BlockCommitment::new(2, Default::default(), Commitment::test()); + client.override_block_commitment(commitment.clone()).await; + client + .post_block_commitment(BlockCommitment::new(2, Default::default(), Commitment::test())) + .await + .unwrap(); + let mut stream = client.stream_block_commitments().await?; + assert_eq!(stream.next().await.expect("stream has ended")?, commitment); + Ok(()) + } + + #[tokio::test] + async fn test_pause() -> Result<(), McrClientError> { + let client = Client::new(); + let commitment = BlockCommitment::new(2, Default::default(), Commitment::test()); + client.pause_after(1).await; + client.post_block_commitment(commitment.clone()).await?; + let commitment2 = BlockCommitment::new(2, Default::default(), Commitment::test()); + client.post_block_commitment(commitment2).await?; + let mut stream = client.stream_block_commitments().await?; + assert_eq!(stream.next().await.expect("stream has ended")?, commitment); + select! { + biased; + _ = stream.next() => panic!("stream should be paused"), + _ = future::ready(()) => {} + } + Ok(()) + } + + #[tokio::test] + async fn test_resume() -> Result<(), McrClientError> { + let client = Client::new(); + let commitment = BlockCommitment::new(2, Default::default(), Commitment::test()); + client.pause_after(1).await; + client.post_block_commitment(commitment.clone()).await?; + let commitment2 = BlockCommitment::new(2, Default::default(), Commitment::test()); + client.post_block_commitment(commitment2.clone()).await?; + let mut stream = client.stream_block_commitments().await?; + assert_eq!(stream.next().await.expect("stream has ended")?, commitment); + client.resume().await; + assert_eq!(stream.next().await.expect("stream has ended")?, commitment2); + Ok(()) + } +} diff --git a/protocol/pcp/clients/util/Cargo.toml b/protocol/pcp/clients/util/Cargo.toml new file mode 100644 index 00000000..6d87c9d1 --- /dev/null +++ b/protocol/pcp/clients/util/Cargo.toml @@ -0,0 +1,20 @@ +[package] +name = "pcp-protocol-client-core-util" +version = { workspace = true } +edition = { workspace = true } +license = { workspace = true } +authors = { workspace = true } +homepage = { workspace = true } +publish = { workspace = true } +rust-version = { workspace = true } + + +[dependencies] +thiserror = { workspace = true } +tokio = { workspace = true } +tokio-stream = { workspace = true } +serde = { workspace = true, features = ["derive"] } +pcp-types = { workspace = true } + +[lints] +workspace = true diff --git a/protocol/pcp/clients/util/src/lib.rs b/protocol/pcp/clients/util/src/lib.rs new file mode 100644 index 00000000..a69463fa --- /dev/null +++ b/protocol/pcp/clients/util/src/lib.rs @@ -0,0 +1,65 @@ +use pcp_types::block_commitment::BlockCommitment; +use std::future::Future; +use tokio_stream::Stream; + +/// Errors thrown by the McrClient. +#[derive(Debug, thiserror::Error)] +pub enum McrClientError { + #[error("PCP Client failed to post block commitment: {0}")] + PostBlockCommitment(#[source] Box), + #[error("PCP client failed to invoke admin function: {0}")] + AdminFunction(#[source] Box), + #[error("PCP client failed to stream block commitments: {0}")] + StreamBlockCommitments(#[source] Box), + #[error("PCP client failed to get commitment: {0}")] + GetCommitment(#[source] Box), + #[error("PCP client encountered an internal error: {0}")] + Internal(#[source] Box), +} + +/// Stream of block commitments from the settlement client. +pub type CommitmentStream = + std::pin::Pin> + Send>>; + +pub trait McrClientOperations { + /// Posts a block commitment to the settlement client. + fn post_block_commitment( + &self, + block_commitment: BlockCommitment, + ) -> impl Future> + Send; + + /// Posts a batch of block commitments to the settlement client. + fn post_block_commitment_batch( + &self, + block_commitment: Vec, + ) -> impl Future> + Send; + + /// Forces a block commitment + /// This will only work in admin mode + fn force_block_commitment( + &self, + block_commitment: BlockCommitment, + ) -> impl Future> + Send; + + /// Streams block commitments from the settlement client. + fn stream_block_commitments( + &self, + ) -> impl Future> + Send; + + /// Gets the accepted commitment at the given height. + fn get_commitment_at_height( + &self, + height: u64, + ) -> impl Future, McrClientError>> + Send; + + /// Gets the commitment this validator has made at a given height + fn get_posted_commitment_at_height( + &self, + height: u64, + ) -> impl Future, McrClientError>> + Send; + + /// Gets the max tolerable block height. + fn get_max_tolerable_block_height( + &self, + ) -> impl Future> + Send; +} diff --git a/protocol/pcp/manager/src/lib.rs b/protocol/pcp/manager/src/lib.rs index c9513796..914ad420 100644 --- a/protocol/pcp/manager/src/lib.rs +++ b/protocol/pcp/manager/src/lib.rs @@ -1,4 +1,4 @@ -use postconfirmations_types::block_commitment::{SuperBlockCommitment, SuperBlockCommitmentEvent}; +use pcp_types::block_commitment::{SuperBlockCommitment, SuperBlockCommitmentEvent}; use tokio_stream::Stream; mod manager; diff --git a/protocol/pcp/manager/src/manager.rs b/protocol/pcp/manager/src/manager.rs index 5b84e6f3..852505ec 100644 --- a/protocol/pcp/manager/src/manager.rs +++ b/protocol/pcp/manager/src/manager.rs @@ -1,8 +1,8 @@ use crate::{CommitmentEventStream, PcpSettlementManagerOperations, SuperBlockCommitmentEvent}; -use postconfirmations_config::Config; +use pcp_config::Config; use postconfirmations_settlement_client::PcpSettlementClientOperations; -use postconfirmations_types::block_commitment::{ +use pcp_types::block_commitment::{ SuperBlockCommitment, SuperBlockCommitmentRejectionReason, }; @@ -149,7 +149,7 @@ fn process_commitments( mod tests { use super::*; use postconfirmations_settlement_client::mock::PcpSettlementClient; - use postconfirmations_types::block_commitment::{Commitment, SuperBlockCommitment}; + use pcp_types::block_commitment::{Commitment, SuperBlockCommitment}; #[tokio::test] async fn test_block_commitment_accepted() -> Result<(), anyhow::Error> { diff --git a/protocol/pcp/runner/src/main.rs b/protocol/pcp/runner/src/main.rs index c9d99562..9f429f65 100644 --- a/protocol/pcp/runner/src/main.rs +++ b/protocol/pcp/runner/src/main.rs @@ -1,5 +1,5 @@ use ffs_environment::{backend::config_file::ConfigFile, ffs_environment}; -use postconfirmations_config::Config; +use pcp_config::Config; use postconfirmations_settlement_setup::Setup; #[tokio::main] diff --git a/protocol/pcp/util/config/Cargo.toml b/protocol/pcp/util/config/Cargo.toml new file mode 100644 index 00000000..40625c00 --- /dev/null +++ b/protocol/pcp/util/config/Cargo.toml @@ -0,0 +1,22 @@ +[package] +name = "pcp-config" +description = "Configuration of the PCP settlement client" +version.workspace = true +edition.workspace = true +license.workspace = true +authors.workspace = true +repository.workspace = true +homepage.workspace = true +publish.workspace = true +rust-version.workspace = true + +[dependencies] +serde = { workspace = true , features = ["derive"] } +alloy = { workspace = true } +ffs-environment = { workspace = true } +anyhow = { workspace = true } +secure-signer-loader = { workspace = true } +secure-signer = { workspace = true} + +[lints] +workspace = true diff --git a/protocol/pcp/util/config/src/common/deploy.rs b/protocol/pcp/util/config/src/common/deploy.rs new file mode 100644 index 00000000..fc7af00d --- /dev/null +++ b/protocol/pcp/util/config/src/common/deploy.rs @@ -0,0 +1,60 @@ +use alloy::signers::local::PrivateKeySigner; +use ffs_environment::env_short_default; +use secure_signer::key::TryFromCanonicalString; +use secure_signer_loader::identifiers::{local::Local, SignerIdentifier}; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Config { + #[serde(default = "pcp_deployment_working_directory")] + pub pcp_deployment_working_directory: String, + #[serde(default = "default_signer_identifier")] + pub signer_identifier: SignerIdentifier, +} + +env_short_default!( + pcp_deployment_working_directory, + String, + "protocol-units/settlement/pcp/contracts" +); + +env_short_default!( + pcp_local_anvil_account_private_key, + String, + PrivateKeySigner::random().to_bytes().to_string() +); + +pub fn default_signer_identifier() -> SignerIdentifier { + match std::env::var("PCP_SIGNER_IDENTIFIER") { + Ok(str_value) => SignerIdentifier::try_from_canonical_string(&str_value).unwrap(), + Err(_) => SignerIdentifier::Local(Local { + // todo: validate this is a valid private key + private_key_hex_bytes: pcp_local_anvil_account_private_key(), + }), + } +} + +pub fn maybe_deploy() -> Option { + match std::env::var("MAYBE_DEPLOY_PCP") { + Ok(str_value) => { + // if it parses as true then we want to deploy under the default config + let bool_value = str_value.parse::().unwrap_or(false); + + if bool_value { + Some(Config::default()) + } else { + None + } + } + Err(_) => None, + } +} + +impl Default for Config { + fn default() -> Self { + Config { + pcp_deployment_working_directory: pcp_deployment_working_directory(), + signer_identifier: default_signer_identifier(), + } + } +} diff --git a/protocol/pcp/util/config/src/common/eth_connection.rs b/protocol/pcp/util/config/src/common/eth_connection.rs new file mode 100644 index 00000000..437bee14 --- /dev/null +++ b/protocol/pcp/util/config/src/common/eth_connection.rs @@ -0,0 +1,106 @@ +use ffs_environment::env_default; +use serde::{Deserialize, Serialize}; + +const DEFAULT_ETH_RPC_CONNECTION_HOSTNAME: &str = "ethereum-holesky-rpc.publicnode.com"; +const DEFAULT_ETH_RPC_CONNECTION_PORT: u16 = 443; +const DEFAULT_ETH_WS_CONNECTION_HOSTNAME: &str = "ethereum-holesky-rpc.publicnode.com"; +const DEFAULT_ETH_WS_CONNECTION_PORT: u16 = 443; // same as RPC + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Config { + #[serde(default = "default_eth_rpc_connection_protocol")] + pub eth_rpc_connection_protocol: String, + #[serde(default = "default_eth_rpc_connection_hostname")] + pub eth_rpc_connection_hostname: String, + #[serde(default = "default_eth_rpc_connection_port")] + pub eth_rpc_connection_port: u16, + + #[serde(default = "default_eth_ws_connection_protocol")] + pub eth_ws_connection_protocol: String, + #[serde(default = "default_eth_ws_connection_hostname")] + pub eth_ws_connection_hostname: String, + #[serde(default = "default_eth_ws_connection_port")] + pub eth_ws_connection_port: u16, + + #[serde(default)] + pub eth_chain_id: u64, +} + +env_default!( + default_eth_rpc_connection_protocol, + "ETH_RPC_CONNECTION_PROTOCOL", + String, + "https".to_string() +); + +env_default!( + default_eth_rpc_connection_hostname, + "ETH_RPC_CONNECTION_HOSTNAME", + String, + DEFAULT_ETH_RPC_CONNECTION_HOSTNAME.to_string() +); + +env_default!( + default_eth_rpc_connection_port, + "ETH_RPC_CONNECTION_PORT", + u16, + DEFAULT_ETH_RPC_CONNECTION_PORT +); + +env_default!( + default_eth_ws_connection_protocol, + "ETH_WS_CONNECTION_PROTOCOL", + String, + "ws".to_string() +); + +env_default!( + default_eth_ws_connection_hostname, + "ETH_WS_CONNECTION_HOSTNAME", + String, + DEFAULT_ETH_WS_CONNECTION_HOSTNAME.to_string() +); + +env_default!( + default_eth_ws_connection_port, + "ETH_WS_CONNECTION_PORT", + u16, + DEFAULT_ETH_WS_CONNECTION_PORT +); + +env_default!(default_eth_chain_id, "ETH_CHAIN_ID", u64, 0); + +impl Default for Config { + fn default() -> Self { + Config { + eth_rpc_connection_protocol: default_eth_rpc_connection_protocol(), + eth_rpc_connection_hostname: default_eth_rpc_connection_hostname(), + eth_rpc_connection_port: default_eth_rpc_connection_port(), + + eth_ws_connection_protocol: default_eth_ws_connection_protocol(), + eth_ws_connection_hostname: default_eth_ws_connection_hostname(), + eth_ws_connection_port: default_eth_ws_connection_port(), + eth_chain_id: default_eth_chain_id(), + } + } +} + +impl Config { + pub fn eth_rpc_connection_url(&self) -> String { + format!( + "{}://{}:{}", + self.eth_rpc_connection_protocol, + self.eth_rpc_connection_hostname, + self.eth_rpc_connection_port + ) + } + + pub fn eth_ws_connection_url(&self) -> String { + format!( + "{}://{}:{}", + self.eth_ws_connection_protocol, + self.eth_ws_connection_hostname, + self.eth_ws_connection_port + ) + } +} diff --git a/protocol/pcp/util/config/src/common/mod.rs b/protocol/pcp/util/config/src/common/mod.rs new file mode 100644 index 00000000..3c5c62d3 --- /dev/null +++ b/protocol/pcp/util/config/src/common/mod.rs @@ -0,0 +1,6 @@ +pub mod deploy; +pub mod eth_connection; +pub mod settlement; +pub mod staking; +pub mod testing; +pub mod transactions; diff --git a/protocol/pcp/util/config/src/common/settlement.rs b/protocol/pcp/util/config/src/common/settlement.rs new file mode 100644 index 00000000..4f0c0ccf --- /dev/null +++ b/protocol/pcp/util/config/src/common/settlement.rs @@ -0,0 +1,55 @@ +use alloy::signers::local::PrivateKeySigner; +use ffs_environment::env_default; +use secure_signer_loader::identifiers::{local::Local, SignerIdentifier}; +use serde::{Deserialize, Serialize}; +use std::env; + +const DEFAULT_PCP_CONTRACT_ADDRESS: &str = "0x5fc8d32690cc91d4c39d9d3abcbd16989f875707"; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Config { + #[serde(default = "default_should_settle")] + pub should_settle: bool, + #[serde(default = "default_signer_identifier")] + pub signer_identifier: SignerIdentifier, + #[serde(default = "default_pcp_contract_address")] + pub pcp_contract_address: String, + #[serde(default = "default_settlement_super_block_size")] + pub settlement_super_block_size: u64, + #[serde(default = "default_settlement_admin_mode")] + pub settlement_admin_mode: bool, +} + +pub fn default_signer_identifier() -> SignerIdentifier { + let random_wallet = PrivateKeySigner::random(); + let private_key_hex_bytes = random_wallet.to_bytes().to_string(); + let signer_identifier = SignerIdentifier::Local(Local { private_key_hex_bytes }); + signer_identifier +} + +env_default!( + default_pcp_contract_address, + "PCP_CONTRACT_ADDRESS", + String, + DEFAULT_PCP_CONTRACT_ADDRESS.to_string() +); + +env_default!(default_settlement_admin_mode, "PCP_SETTLEMENT_ADMIN_MODE", bool, false); + +env_default!(default_settlement_super_block_size, "PCP_SETTLEMENT_SUPER_BLOCK_SIZE", u64, 1); + +pub fn default_should_settle() -> bool { + env::var("ETH_SIGNER_PRIVATE_KEY").is_ok() +} + +impl Default for Config { + fn default() -> Self { + Config { + should_settle: default_should_settle(), + signer_identifier: default_signer_identifier(), + pcp_contract_address: default_pcp_contract_address(), + settlement_admin_mode: default_settlement_admin_mode(), + settlement_super_block_size: default_settlement_super_block_size(), + } + } +} diff --git a/protocol/pcp/util/config/src/common/staking.rs b/protocol/pcp/util/config/src/common/staking.rs new file mode 100644 index 00000000..a872a95a --- /dev/null +++ b/protocol/pcp/util/config/src/common/staking.rs @@ -0,0 +1,14 @@ +use ffs_environment::env_short_default; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Config { + #[serde(default = "default_move_token_contract_address")] + pub move_token_contract_address: String, + #[serde(default = "default_movement_staking_contract_address")] + pub movement_staking_contract_address: String, +} + +env_short_default!(default_move_token_contract_address, String, "0x0"); + +env_short_default!(default_movement_staking_contract_address, String, "0x0"); diff --git a/protocol/pcp/util/config/src/common/testing.rs b/protocol/pcp/util/config/src/common/testing.rs new file mode 100644 index 00000000..29df0c57 --- /dev/null +++ b/protocol/pcp/util/config/src/common/testing.rs @@ -0,0 +1,46 @@ +use ffs_environment::env_short_default; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Config { + #[serde(default = "Vec::new")] + pub well_known_account_private_keys: Vec, + + #[serde(default = "default_pcp_testing_admin_account_private_key")] + pub pcp_testing_admin_account_private_key: String, + + #[serde(default = "default_move_token_contract_address")] + pub move_token_contract_address: String, + + #[serde(default = "default_movement_staking_contract_address")] + pub movement_staking_contract_address: String, +} + +env_short_default!(default_pcp_testing_admin_account_private_key, String, "0x0"); + +env_short_default!(default_move_token_contract_address, String, "0x0"); + +env_short_default!(default_movement_staking_contract_address, String, "0x0"); + +// env_or_none!( +// default_maybe_testing, +// Config, +// default_pcp_testing_admin_account_private_key, +// default_move_token_contract_address, +// default_movement_staking_contract_address +// ); + +pub fn maybe_testing() -> Option { + std::env::var("MAYBE_TESTING_PCP").ok().map(|_| Config::default()) +} + +impl Default for Config { + fn default() -> Self { + Config { + well_known_account_private_keys: Vec::new(), + pcp_testing_admin_account_private_key: default_pcp_testing_admin_account_private_key(), + move_token_contract_address: default_move_token_contract_address(), + movement_staking_contract_address: default_movement_staking_contract_address(), + } + } +} diff --git a/protocol/pcp/util/config/src/common/transactions.rs b/protocol/pcp/util/config/src/common/transactions.rs new file mode 100644 index 00000000..9b95ce17 --- /dev/null +++ b/protocol/pcp/util/config/src/common/transactions.rs @@ -0,0 +1,29 @@ +use ffs_environment::env_short_default; +use serde::{Deserialize, Serialize}; + +#[derive(Debug, Clone, Serialize, Deserialize)] +pub struct Config { + #[serde(default = "default_gas_limit")] + pub gas_limit: u64, + /// Timeout for batching blocks, in milliseconds + #[serde(default = "default_batch_timeout")] + pub batch_timeout: u64, + #[serde(default = "default_transaction_send_retries")] + pub transaction_send_retries: u32, +} + +env_short_default!(default_gas_limit, u64, 10_000_000_000_000_000 as u64); + +env_short_default!(default_batch_timeout, u64, 2000 as u64); + +env_short_default!(default_transaction_send_retries, u32, 10 as u32); + +impl Default for Config { + fn default() -> Self { + Config { + gas_limit: default_gas_limit(), + batch_timeout: default_batch_timeout(), + transaction_send_retries: default_transaction_send_retries(), + } + } +} diff --git a/protocol/pcp/util/config/src/lib.rs b/protocol/pcp/util/config/src/lib.rs new file mode 100644 index 00000000..fa44f5f4 --- /dev/null +++ b/protocol/pcp/util/config/src/lib.rs @@ -0,0 +1,67 @@ +//! This crate provides configuration parameters for the PCP settlement +//! component of a Movement node. +use serde::{Deserialize, Serialize}; +pub mod common; + +use common::deploy::maybe_deploy; +use common::testing::maybe_testing; +use ffs_environment::env_short_default; + +#[derive(Clone, Debug, Serialize, Deserialize)] +pub struct Config { + /// The ETH connection configuration. + /// This is mandatory for all possible operations. + #[serde(default)] + pub eth_connection: common::eth_connection::Config, + + #[serde(default)] + pub settle: common::settlement::Config, + + #[serde(default)] + pub transactions: common::transactions::Config, + + /// Whether or not to attempt to run locally. + #[serde(default = "maybe_run_local")] + pub maybe_run_local: bool, + + /// Optional deployment of contracts config + #[serde(default = "maybe_deploy")] + pub deploy: Option, + + /// Optional testing config + #[serde(default = "maybe_testing")] + pub testing: Option, +} + +env_short_default!(maybe_run_local, bool, false); + +impl Config { + pub fn eth_rpc_connection_url(&self) -> String { + self.eth_connection.eth_rpc_connection_url() + } + + pub fn eth_ws_connection_url(&self) -> String { + self.eth_connection.eth_ws_connection_url() + } + + pub fn should_settle(&self) -> bool { + self.settle.should_settle + } + + pub fn should_run_local(&self) -> bool { + self.maybe_run_local + } +} + +impl Default for Config { + fn default() -> Self { + Config { + eth_connection: common::eth_connection::Config::default(), + settle: common::settlement::Config::default(), + transactions: common::transactions::Config::default(), + maybe_run_local: maybe_run_local(), + deploy: maybe_deploy(), + testing: maybe_testing(), + } + } +} diff --git a/protocol/pcp/util/types/Cargo.toml b/protocol/pcp/util/types/Cargo.toml new file mode 100644 index 00000000..ff7daf17 --- /dev/null +++ b/protocol/pcp/util/types/Cargo.toml @@ -0,0 +1,27 @@ +[package] +name = "pcp-types" +version = { workspace = true } +edition = { workspace = true } +license = { workspace = true } +authors = { workspace = true } +homepage = { workspace = true } +publish = { workspace = true } +rust-version = { workspace = true } + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html +# [[bin]] +# name = "test-pcp-settlement-client" +# path = "src/bin/e2e/test_client_settlement.rs" + + +[dependencies] +serde = { workspace = true } + +[features] +default = ["eth"] +e2e = ["eth"] +eth = [] +mock = [] + +[lints] +workspace = true diff --git a/protocol/pcp/util/types/src/block_commitment.rs b/protocol/pcp/util/types/src/block_commitment.rs new file mode 100644 index 00000000..05752b51 --- /dev/null +++ b/protocol/pcp/util/types/src/block_commitment.rs @@ -0,0 +1,137 @@ +use serde::{Deserialize, Serialize}; +use std::fmt; + +#[derive( + Serialize, Deserialize, Clone, Copy, Default, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, +)] +pub struct Id([u8; 32]); + +impl Id { + pub fn new(data: [u8; 32]) -> Self { + Self(data) + } + + pub fn as_bytes(&self) -> &[u8; 32] { + &self.0 + } + + pub fn test() -> Self { + Self([0; 32]) + } + + pub fn to_vec(&self) -> Vec { + self.0.into() + } + + pub fn genesis_block() -> Self { + Self([0; 32]) + } +} + +impl AsRef<[u8]> for Id { + fn as_ref(&self) -> &[u8] { + &self.0 + } +} + +impl fmt::Display for Id { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + for byte in &self.0 { + write!(f, "{:02x}", byte)?; + } + Ok(()) + } +} + +#[derive( + Serialize, Deserialize, Clone, Copy, Default, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, +)] +pub struct Commitment([u8; 32]); + +impl Commitment { + pub fn new(data: [u8; 32]) -> Self { + Self(data) + } + + pub fn test() -> Self { + Self([0; 32]) + } + + pub fn as_bytes(&self) -> &[u8; 32] { + &self.0 + } +} + +impl fmt::Display for Commitment { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + for byte in &self.0 { + write!(f, "{:02x}", byte)?; + } + Ok(()) + } +} + +impl From for [u8; 32] { + fn from(commitment: Commitment) -> [u8; 32] { + commitment.0 + } +} + +impl From for Vec { + fn from(commitment: Commitment) -> Vec { + commitment.0.into() + } +} + +#[derive(Serialize, Deserialize, Clone, Default, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] +pub struct SuperBlockCommitment { + height: u64, + block_id: Id, + commitment: Commitment, +} + +impl SuperBlockCommitment { + pub fn new(height: u64, block_id: Id, commitment: Commitment) -> Self { + Self { height, block_id, commitment } + } + + pub fn height(&self) -> u64 { + self.height + } + + pub fn block_id(&self) -> &Id { + &self.block_id + } + + pub fn commitment(&self) -> Commitment { + self.commitment + } + + pub fn test() -> Self { + Self::new(0, Id::test(), Commitment::test()) + } +} + +impl fmt::Display for SuperBlockCommitment { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!( + f, + "SuperBlockCommitment {{ height: {}, block_id: {}, commitment: {} }}", + self.height, self.block_id, self.commitment + ) + } +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] +pub enum SuperBlockCommitmentRejectionReason { + InvalidBlockId, + InvalidCommitment, + InvalidHeight, + ContractError, +} + +#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, Hash, PartialOrd, Ord)] +pub enum SuperBlockCommitmentEvent { + Accepted(SuperBlockCommitment), + Rejected { height: u64, reason: SuperBlockCommitmentRejectionReason }, +} diff --git a/protocol/pcp/util/types/src/lib.rs b/protocol/pcp/util/types/src/lib.rs new file mode 100644 index 00000000..b9091a97 --- /dev/null +++ b/protocol/pcp/util/types/src/lib.rs @@ -0,0 +1 @@ +pub mod block_commitment; diff --git a/sdk/cli/ffs-client/Cargo.toml b/sdk/cli/ffs-client/Cargo.toml index e1e610f8..0c276843 100644 --- a/sdk/cli/ffs-client/Cargo.toml +++ b/sdk/cli/ffs-client/Cargo.toml @@ -15,7 +15,7 @@ clap = { workspace = true} dotenv = { workspace = true } anyhow = { workspace = true } mcr-protocol-client = { workspace = true } -# postconfirmationssettlement-client = { workspace = true } +pcp-protocol-client = { workspace = true } [lints] workspace = true diff --git a/sdk/cli/ffs-client/src/cli/protocol.rs b/sdk/cli/ffs-client/src/cli/protocol.rs index 5d9392a3..aa93530d 100644 --- a/sdk/cli/ffs-client/src/cli/protocol.rs +++ b/sdk/cli/ffs-client/src/cli/protocol.rs @@ -1,6 +1,6 @@ use clap::Subcommand; use mcr_protocol_client::cli::McrProtocolClientSubcommand; -// use postconfirmationssettlement_client::cli::PcpProtocolClientSubcommand; +use postconfirmationssettlement_client::cli::PcpProtocolClientSubcommand; #[derive(Subcommand)] #[clap(rename_all = "kebab-case")] @@ -9,9 +9,9 @@ pub enum Protocol { #[clap(subcommand)] Mcr(McrProtocolClientSubcommand), - // /// PCP protocol commands - // #[clap(subcommand)] - // Pcp(PcpProtocolClientSubcommand), + /// PCP protocol commands + #[clap(subcommand)] + Pcp(PcpProtocolClientSubcommand), } impl Protocol { @@ -20,9 +20,9 @@ impl Protocol { Protocol::Mcr(client) => { client.execute().await?; } - // Protocol::Pcp(client) => { - // client.execute().await?; - // } + Protocol::Pcp(client) => { + client.execute().await?; + } } Ok(()) From a2b52432a0bbd770454b97c1f9a4c24470c8da3a Mon Sep 17 00:00:00 2001 From: apenzk Date: Tue, 18 Mar 2025 18:25:56 +0100 Subject: [PATCH 11/25] two remaining errors in mod.rs --- Cargo.lock | 46 +++++++++++++++++++ protocol/pcp/cli/client/Cargo.toml | 2 + protocol/pcp/cli/client/src/cli/eth/mod.rs | 18 ++++++++ .../src/cli/eth/post_admin_commitment.rs | 22 +++++++++ protocol/pcp/cli/client/src/eth_client.rs | 2 +- protocol/pcp/cli/client/src/lib.rs | 1 + protocol/pcp/clients/eth/src/client/mod.rs | 40 ++++++++-------- protocol/pcp/clients/util/src/lib.rs | 14 +++--- sdk/cli/ffs-client/README.md | 4 +- sdk/cli/ffs-client/src/cli/protocol.rs | 2 +- 10 files changed, 121 insertions(+), 30 deletions(-) create mode 100644 protocol/pcp/cli/client/src/cli/eth/mod.rs create mode 100644 protocol/pcp/cli/client/src/cli/eth/post_admin_commitment.rs diff --git a/Cargo.lock b/Cargo.lock index 06d26513..4c088f56 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3436,6 +3436,8 @@ dependencies = [ "ffs-environment", "futures", "pcp-config", + "pcp-protocol-client-core-eth", + "pcp-protocol-client-core-util", "pcp-types", "secure-signer", "secure-signer-eth", @@ -3449,6 +3451,50 @@ dependencies = [ "tracing-subscriber", ] +[[package]] +name = "pcp-protocol-client-core-eth" +version = "0.0.1" +dependencies = [ + "alloy", + "alloy-contract", + "alloy-network", + "alloy-primitives 0.7.7", + "alloy-provider", + "alloy-rpc-types", + "alloy-signer", + "alloy-sol-types", + "alloy-transport", + "alloy-transport-ws", + "anyhow", + "async-stream", + "async-trait", + "clap", + "futures", + "pcp-protocol-client-core-util", + "pcp-types", + "secure-signer", + "secure-signer-eth", + "secure-signer-loader", + "serde", + "serde_json", + "thiserror 1.0.69", + "tokio", + "tokio-stream", + "tracing", + "tracing-subscriber", +] + +[[package]] +name = "pcp-protocol-client-core-util" +version = "0.0.1" +dependencies = [ + "pcp-types", + "serde", + "thiserror 1.0.69", + "tokio", + "tokio-stream", +] + [[package]] name = "pcp-types" version = "0.0.1" diff --git a/protocol/pcp/cli/client/Cargo.toml b/protocol/pcp/cli/client/Cargo.toml index 1d561edd..96a1916e 100644 --- a/protocol/pcp/cli/client/Cargo.toml +++ b/protocol/pcp/cli/client/Cargo.toml @@ -20,6 +20,8 @@ secure-signer = { workspace = true } secure-signer-eth = { workspace = true } pcp-types = { workspace = true } pcp-config = { workspace = true } +pcp-protocol-client-core-util = { workspace = true } +pcp-protocol-client-core-eth = { workspace = true } alloy = { workspace = true, features = [ "node-bindings", diff --git a/protocol/pcp/cli/client/src/cli/eth/mod.rs b/protocol/pcp/cli/client/src/cli/eth/mod.rs new file mode 100644 index 00000000..84c9997f --- /dev/null +++ b/protocol/pcp/cli/client/src/cli/eth/mod.rs @@ -0,0 +1,18 @@ +pub mod post_admin_commitment; + +use clap::Subcommand; + +#[derive(Subcommand)] +#[clap(rename_all = "kebab-case")] +pub enum Eth { + PostAdminCommitment(post_admin_commitment::PostAdminCommitment), +} + +impl Eth { + pub async fn execute(&self) -> Result<(), anyhow::Error> { + match self { + Eth::PostAdminCommitment(cmd) => cmd.execute().await?, + } + Ok(()) + } +} \ No newline at end of file diff --git a/protocol/pcp/cli/client/src/cli/eth/post_admin_commitment.rs b/protocol/pcp/cli/client/src/cli/eth/post_admin_commitment.rs new file mode 100644 index 00000000..6c36a945 --- /dev/null +++ b/protocol/pcp/cli/client/src/cli/eth/post_admin_commitment.rs @@ -0,0 +1,22 @@ +use anyhow::Context; +use clap::Parser; +use pcp_protocol_client_core_eth::config::Config; +use pcp_protocol_client_core_util::PcpClientOperations; +use pcp_types::block_commitment::SuperBlockCommitment; +use serde::{Deserialize, Serialize}; + +#[derive(Parser, Serialize, Deserialize, Debug, Clone)] +pub struct PostAdminCommitment { + #[clap(flatten)] + pub config: Option, +} + +impl PostAdminCommitment { + pub async fn execute(&self) -> Result<(), anyhow::Error> { + let config = self.config.clone().context("no config provided")?; + let client = config.build().await?; + client.force_block_commitment(SuperBlockCommitment::test()).await?; + + Ok(()) + } +} \ No newline at end of file diff --git a/protocol/pcp/cli/client/src/eth_client.rs b/protocol/pcp/cli/client/src/eth_client.rs index a50265d9..6a356252 100644 --- a/protocol/pcp/cli/client/src/eth_client.rs +++ b/protocol/pcp/cli/client/src/eth_client.rs @@ -25,7 +25,7 @@ use pcp_types::block_commitment::{Commitment, Id, SuperBlockCommitment}; use secure_signer::cryptography::secp256k1::Secp256k1; use secure_signer_loader::Load; // use secure_signing_eth::HsmSigner; -use secure_signer_eth::HsmSigner; +use secure_signer_eth::Signer as HsmSigner; use serde_json::Value as JsonValue; use std::array::TryFromSliceError; use std::fs; diff --git a/protocol/pcp/cli/client/src/lib.rs b/protocol/pcp/cli/client/src/lib.rs index e4ee469a..e0c682b8 100644 --- a/protocol/pcp/cli/client/src/lib.rs +++ b/protocol/pcp/cli/client/src/lib.rs @@ -7,6 +7,7 @@ pub mod mock; // pub use mock::*; pub mod eth_client; +pub mod cli; #[cfg(feature = "eth")] pub use eth_client::PcpSettlementClient; diff --git a/protocol/pcp/clients/eth/src/client/mod.rs b/protocol/pcp/clients/eth/src/client/mod.rs index e988d6bb..6b18f08a 100644 --- a/protocol/pcp/clients/eth/src/client/mod.rs +++ b/protocol/pcp/clients/eth/src/client/mod.rs @@ -8,7 +8,7 @@ use alloy_primitives::U256; use alloy_sol_types::sol; use anyhow::Context; use pcp_protocol_client_core_util::{CommitmentStream, McrClientError, McrClientOperations}; -use pcp_types::block_commitment::{BlockCommitment, Commitment, Id}; +use pcp_types::block_commitment::{SuperBlockCommitment, Commitment, Id}; use serde_json::Value as JsonValue; use std::array::TryFromSliceError; use std::fs; @@ -56,11 +56,11 @@ where { async fn post_block_commitment( &self, - block_commitment: BlockCommitment, + block_commitment: SuperBlockCommitment, ) -> Result<(), McrClientError> { let contract = PCP::new(self.contract_address, &self.rpc_provider); - let eth_block_commitment = PCP::BlockCommitment { + let eth_block_commitment = PCP::SuperBlockCommitment { // Currently, to simplify the API, we'll say 0 is uncommitted all other numbers are legitimate heights height: U256::from(block_commitment.height()), commitment: alloy_primitives::FixedBytes( @@ -79,7 +79,7 @@ where ) .await } else { - let call_builder = contract.submitBlockCommitment(eth_block_commitment); + let call_builder = contract.submitSuperBlockCommitment(eth_block_commitment); send_transaction( call_builder, &self.send_transaction_error_rules, @@ -92,14 +92,14 @@ where async fn post_block_commitment_batch( &self, - block_commitments: Vec, + block_commitments: Vec, ) -> Result<(), McrClientError> { let contract = PCP::new(self.contract_address, &self.rpc_provider); let eth_block_commitment: Vec<_> = block_commitments .into_iter() .map(|block_commitment| { - Ok(PCP::BlockCommitment { + Ok(PCP::SuperBlockCommitment { // Currently, to simplify the API, we'll say 0 is uncommitted all other numbers are legitimate heights height: U256::from(block_commitment.height()), commitment: alloy_primitives::FixedBytes( @@ -113,7 +113,7 @@ where .collect::, TryFromSliceError>>() .map_err(|e| McrClientError::Internal(Box::new(e)))?; - let call_builder = contract.submitBatchBlockCommitment(eth_block_commitment); + let call_builder = contract.submitBatchSuperBlockCommitment(eth_block_commitment); send_transaction( call_builder, @@ -126,11 +126,11 @@ where async fn force_block_commitment( &self, - block_commitment: BlockCommitment, + block_commitment: SuperBlockCommitment, ) -> Result<(), McrClientError> { let contract = PCP::new(self.contract_address, &self.rpc_provider); - let eth_block_commitment = PCP::BlockCommitment { + let eth_block_commitment = PCP::SuperBlockCommitment { // Currently, to simplify the API, we'll say 0 is uncommitted all other numbers are legitimate heights height: U256::from(block_commitment.height()), commitment: alloy_primitives::FixedBytes( @@ -154,7 +154,7 @@ where let contract = PCP::new(self.contract_address, &self.ws_provider); let event_filter = contract - .BlockAccepted_filter() + .SuperBlockAccepted_filter() .watch() .await .map_err(|e| McrClientError::StreamBlockCommitments(Box::new(e)))?; @@ -167,7 +167,7 @@ where alloy_sol_types::Error::Other(err.to_string().into()) }, )?; - Ok(BlockCommitment::new( + Ok(SuperBlockCommitment::new( height, Id::new(commitment.blockHash.0), Commitment::new(commitment.stateCommitment.0), @@ -181,10 +181,10 @@ where async fn get_commitment_at_height( &self, height: u64, - ) -> Result, McrClientError> { + ) -> Result, McrClientError> { let contract = PCP::new(self.contract_address, &self.ws_provider); let PCP::getAcceptedCommitmentAtBlockHeightReturn { _0: commitment } = contract - .getAcceptedCommitmentAtBlockHeight(U256::from(height)) + .getPostconfirmedCommitment(U256::from(height)) .call() .await .map_err(|e| McrClientError::Internal(Box::new(e)))?; @@ -195,7 +195,7 @@ where .context("failed to convert the commitment height from U256 to u64") .map_err(|e| McrClientError::Internal(e.into()))?; // Commitment with height 0 mean not found - Ok((return_height != 0).then_some(BlockCommitment::new( + Ok((return_height != 0).then_some(SuperBlockCommitment::new( commitment .height .try_into() @@ -209,10 +209,10 @@ where async fn get_posted_commitment_at_height( &self, height: u64, - ) -> Result, McrClientError> { + ) -> Result, McrClientError> { let contract = PCP::new(self.contract_address, &self.ws_provider); - let PCP::getValidatorCommitmentAtBlockHeightReturn { _0: commitment } = contract - .getValidatorCommitmentAtBlockHeight(U256::from(height), self.signer_address) + let PCP::getValidatorCommitmentAtSuperBlockHeightReturn { _0: commitment } = contract + .getValidatorCommitmentAtSuperBlockHeight(U256::from(height), self.signer_address) .call() .await .map_err(|e| McrClientError::Internal(Box::new(e)))?; @@ -223,7 +223,7 @@ where .context("failed to convert the commitment height from U256 to u64") .map_err(|e| McrClientError::Internal(e.into()))?; - Ok((return_height != 0).then_some(BlockCommitment::new( + Ok((return_height != 0).then_some(SuperBlockCommitment::new( commitment .height .try_into() @@ -236,8 +236,8 @@ where async fn get_max_tolerable_block_height(&self) -> Result { let contract = PCP::new(self.contract_address, &self.ws_provider); - let PCP::getMaxTolerableBlockHeightReturn { _0: block_height } = contract - .getMaxTolerableBlockHeight() + let PCP::getMaxTolerableSuperBlockHeightReturn { _0: block_height } = contract + .getMaxTolerableSuperBlockHeight() .call() .await .map_err(|e| McrClientError::Internal(Box::new(e)))?; diff --git a/protocol/pcp/clients/util/src/lib.rs b/protocol/pcp/clients/util/src/lib.rs index a69463fa..3a392b53 100644 --- a/protocol/pcp/clients/util/src/lib.rs +++ b/protocol/pcp/clients/util/src/lib.rs @@ -1,4 +1,4 @@ -use pcp_types::block_commitment::BlockCommitment; +use pcp_types::block_commitment::SuperBlockCommitment; use std::future::Future; use tokio_stream::Stream; @@ -19,26 +19,26 @@ pub enum McrClientError { /// Stream of block commitments from the settlement client. pub type CommitmentStream = - std::pin::Pin> + Send>>; + std::pin::Pin> + Send>>; pub trait McrClientOperations { /// Posts a block commitment to the settlement client. fn post_block_commitment( &self, - block_commitment: BlockCommitment, + block_commitment: SuperBlockCommitment, ) -> impl Future> + Send; /// Posts a batch of block commitments to the settlement client. fn post_block_commitment_batch( &self, - block_commitment: Vec, + block_commitment: Vec, ) -> impl Future> + Send; /// Forces a block commitment /// This will only work in admin mode fn force_block_commitment( &self, - block_commitment: BlockCommitment, + block_commitment: SuperBlockCommitment, ) -> impl Future> + Send; /// Streams block commitments from the settlement client. @@ -50,13 +50,13 @@ pub trait McrClientOperations { fn get_commitment_at_height( &self, height: u64, - ) -> impl Future, McrClientError>> + Send; + ) -> impl Future, McrClientError>> + Send; /// Gets the commitment this validator has made at a given height fn get_posted_commitment_at_height( &self, height: u64, - ) -> impl Future, McrClientError>> + Send; + ) -> impl Future, McrClientError>> + Send; /// Gets the max tolerable block height. fn get_max_tolerable_block_height( diff --git a/sdk/cli/ffs-client/README.md b/sdk/cli/ffs-client/README.md index 87f9f159..2a0bfb95 100644 --- a/sdk/cli/ffs-client/README.md +++ b/sdk/cli/ffs-client/README.md @@ -11,11 +11,13 @@ Post a commitment to an MCR implementation: Post using a hex-encoded commitment ```bash +cargo run --bin ffs-client -- protocol mcr post-commitment --commitment-hex cargo run --bin ffs-client -- protocol pcp post-commitment --commitment-hex -``` + ``` Post using a preimage string ```bash +cargo run --bin ffs-client -- protocol mcr post-commitment --preimage-string cargo run --bin ffs-client -- protocol pcp post-commitment --preimage-string ``` diff --git a/sdk/cli/ffs-client/src/cli/protocol.rs b/sdk/cli/ffs-client/src/cli/protocol.rs index aa93530d..1a0e9e31 100644 --- a/sdk/cli/ffs-client/src/cli/protocol.rs +++ b/sdk/cli/ffs-client/src/cli/protocol.rs @@ -1,6 +1,6 @@ use clap::Subcommand; use mcr_protocol_client::cli::McrProtocolClientSubcommand; -use postconfirmationssettlement_client::cli::PcpProtocolClientSubcommand; +use pcp_protocol_client::cli::PcpProtocolClientSubcommand; #[derive(Subcommand)] #[clap(rename_all = "kebab-case")] From c9dbf5ee9e7b5db3441aa16afbcfe9e5d857e062 Mon Sep 17 00:00:00 2001 From: apenzk Date: Tue, 18 Mar 2025 22:23:09 +0100 Subject: [PATCH 12/25] fix errors --- protocol/pcp/clients/eth/src/client/mod.rs | 52 +++++++++---------- .../eth/src/util/send_eth_transaction.rs | 34 ++++++------ protocol/pcp/clients/mock/src/lib.rs | 38 +++++++------- protocol/pcp/clients/util/src/lib.rs | 22 ++++---- 4 files changed, 73 insertions(+), 73 deletions(-) diff --git a/protocol/pcp/clients/eth/src/client/mod.rs b/protocol/pcp/clients/eth/src/client/mod.rs index 6b18f08a..8525546f 100644 --- a/protocol/pcp/clients/eth/src/client/mod.rs +++ b/protocol/pcp/clients/eth/src/client/mod.rs @@ -1,5 +1,5 @@ use crate::util::send_eth_transaction::send_transaction; -use crate::util::send_eth_transaction::McrEthConnectorError; +use crate::util::send_eth_transaction::PcpEthConnectorError; use crate::util::send_eth_transaction::VerifyRule; use alloy::providers::{Provider, RootProvider}; use alloy::pubsub::PubSubFrontend; @@ -7,7 +7,7 @@ use alloy_primitives::Address; use alloy_primitives::U256; use alloy_sol_types::sol; use anyhow::Context; -use pcp_protocol_client_core_util::{CommitmentStream, McrClientError, McrClientOperations}; +use pcp_protocol_client_core_util::{CommitmentStream, PcpClientError, PcpClientOperations}; use pcp_types::block_commitment::{SuperBlockCommitment, Commitment, Id}; use serde_json::Value as JsonValue; use std::array::TryFromSliceError; @@ -50,14 +50,14 @@ pub struct Client

{ pub(crate) send_transaction_retries: u32, } -impl

McrClientOperations for Client

+impl

PcpClientOperations for Client

where P: Provider + Clone, { async fn post_block_commitment( &self, block_commitment: SuperBlockCommitment, - ) -> Result<(), McrClientError> { + ) -> Result<(), PcpClientError> { let contract = PCP::new(self.contract_address, &self.rpc_provider); let eth_block_commitment = PCP::SuperBlockCommitment { @@ -93,7 +93,7 @@ where async fn post_block_commitment_batch( &self, block_commitments: Vec, - ) -> Result<(), McrClientError> { + ) -> Result<(), PcpClientError> { let contract = PCP::new(self.contract_address, &self.rpc_provider); let eth_block_commitment: Vec<_> = block_commitments @@ -111,7 +111,7 @@ where }) }) .collect::, TryFromSliceError>>() - .map_err(|e| McrClientError::Internal(Box::new(e)))?; + .map_err(|e| PcpClientError::Internal(Box::new(e)))?; let call_builder = contract.submitBatchSuperBlockCommitment(eth_block_commitment); @@ -127,7 +127,7 @@ where async fn force_block_commitment( &self, block_commitment: SuperBlockCommitment, - ) -> Result<(), McrClientError> { + ) -> Result<(), PcpClientError> { let contract = PCP::new(self.contract_address, &self.rpc_provider); let eth_block_commitment = PCP::SuperBlockCommitment { @@ -149,15 +149,15 @@ where .await } - async fn stream_block_commitments(&self) -> Result { + async fn stream_block_commitments(&self) -> Result { // Register to contract BlockCommitmentSubmitted event let contract = PCP::new(self.contract_address, &self.ws_provider); let event_filter = contract - .SuperBlockAccepted_filter() + .SuperBlockPostconfirmed_filter() .watch() .await - .map_err(|e| McrClientError::StreamBlockCommitments(Box::new(e)))?; + .map_err(|e| PcpClientError::StreamBlockCommitments(Box::new(e)))?; let stream = event_filter.into_stream().map(|event| { event @@ -173,7 +173,7 @@ where Commitment::new(commitment.stateCommitment.0), )) }) - .map_err(|err| McrEthConnectorError::EventNotificationError(err).into()) + .map_err(|err| PcpEthConnectorError::EventNotificationError(err).into()) }); Ok(Box::pin(stream) as CommitmentStream) } @@ -181,26 +181,26 @@ where async fn get_commitment_at_height( &self, height: u64, - ) -> Result, McrClientError> { + ) -> Result, PcpClientError> { let contract = PCP::new(self.contract_address, &self.ws_provider); - let PCP::getAcceptedCommitmentAtBlockHeightReturn { _0: commitment } = contract + let PCP::getPostconfirmedCommitmentReturn { _0: commitment } = contract .getPostconfirmedCommitment(U256::from(height)) .call() .await - .map_err(|e| McrClientError::Internal(Box::new(e)))?; + .map_err(|e| PcpClientError::Internal(Box::new(e)))?; let return_height: u64 = commitment .height .try_into() .context("failed to convert the commitment height from U256 to u64") - .map_err(|e| McrClientError::Internal(e.into()))?; + .map_err(|e| PcpClientError::Internal(e.into()))?; // Commitment with height 0 mean not found Ok((return_height != 0).then_some(SuperBlockCommitment::new( commitment .height .try_into() .context("failed to convert the commitment height from U256 to u64") - .map_err(|e| McrClientError::Internal(e.into()))?, + .map_err(|e| PcpClientError::Internal(e.into()))?, Id::new(commitment.blockId.into()), Commitment::new(commitment.commitment.into()), ))) @@ -209,42 +209,42 @@ where async fn get_posted_commitment_at_height( &self, height: u64, - ) -> Result, McrClientError> { + ) -> Result, PcpClientError> { let contract = PCP::new(self.contract_address, &self.ws_provider); let PCP::getValidatorCommitmentAtSuperBlockHeightReturn { _0: commitment } = contract .getValidatorCommitmentAtSuperBlockHeight(U256::from(height), self.signer_address) .call() .await - .map_err(|e| McrClientError::Internal(Box::new(e)))?; + .map_err(|e| PcpClientError::Internal(Box::new(e)))?; let return_height: u64 = commitment .height .try_into() .context("failed to convert the commitment height from U256 to u64") - .map_err(|e| McrClientError::Internal(e.into()))?; + .map_err(|e| PcpClientError::Internal(e.into()))?; Ok((return_height != 0).then_some(SuperBlockCommitment::new( commitment .height .try_into() .context("failed to convert the commitment height from U256 to u64") - .map_err(|e| McrClientError::Internal(e.into()))?, + .map_err(|e| PcpClientError::Internal(e.into()))?, Id::new(commitment.blockId.into()), Commitment::new(commitment.commitment.into()), ))) } - async fn get_max_tolerable_block_height(&self) -> Result { + async fn get_max_tolerable_block_height(&self) -> Result { let contract = PCP::new(self.contract_address, &self.ws_provider); let PCP::getMaxTolerableSuperBlockHeightReturn { _0: block_height } = contract .getMaxTolerableSuperBlockHeight() .call() .await - .map_err(|e| McrClientError::Internal(Box::new(e)))?; + .map_err(|e| PcpClientError::Internal(Box::new(e)))?; Ok(block_height .try_into() .context("Failed to convert the max tolerable block height from U256 to u64") - .map_err(|e| McrClientError::Internal(e.into()))?) + .map_err(|e| PcpClientError::Internal(e.into()))?) } } @@ -256,12 +256,12 @@ pub struct AnvilAddressEntry { /// Read the Anvil config file keys and return all address/private keys. pub fn read_anvil_json_file_addresses>( anvil_conf_path: P, -) -> Result, McrClientError> { +) -> Result, PcpClientError> { let file_content = - fs::read_to_string(anvil_conf_path).map_err(|e| McrClientError::Internal(Box::new(e)))?; + fs::read_to_string(anvil_conf_path).map_err(|e| PcpClientError::Internal(Box::new(e)))?; let json_value: JsonValue = - serde_json::from_str(&file_content).map_err(|e| McrClientError::Internal(Box::new(e)))?; + serde_json::from_str(&file_content).map_err(|e| PcpClientError::Internal(Box::new(e)))?; // Extract the available_accounts and private_keys fields. let available_accounts_iter = json_value["available_accounts"] diff --git a/protocol/pcp/clients/eth/src/util/send_eth_transaction.rs b/protocol/pcp/clients/eth/src/util/send_eth_transaction.rs index 53fadfd8..2484413e 100644 --- a/protocol/pcp/clients/eth/src/util/send_eth_transaction.rs +++ b/protocol/pcp/clients/eth/src/util/send_eth_transaction.rs @@ -3,13 +3,13 @@ use alloy_contract::CallBuilder; use alloy_contract::CallDecoder; use alloy_network::Ethereum; use alloy_transport::{Transport, TransportError}; -use pcp_protocol_client_core_util::McrClientError; +use pcp_protocol_client_core_util::PcpClientError; use std::marker::PhantomData; use thiserror::Error; use tracing::info; #[derive(Error, Debug)] -pub enum McrEthConnectorError { +pub enum PcpEthConnectorError { #[error( "PCP Settlement Transaction failed because gas estimation is too high. Estimated gas: {0} gas limit:{1}" )] @@ -26,18 +26,18 @@ pub enum McrEthConnectorError { EventNotificationStreamClosed, } -impl From for McrClientError { - fn from(err: McrEthConnectorError) -> Self { - McrClientError::Internal(Box::new(err)) +impl From for PcpClientError { + fn from(err: PcpEthConnectorError) -> Self { + PcpClientError::Internal(Box::new(err)) } } // Define a rule to verify the error generated when a transaction is send to determine if: // * the Transaction must me resend with more gas: return Ok(true) -// * a specific error must be return: return Err(McrEthConnectorError::xxx); +// * a specific error must be return: return Err(PcpEthConnectorError::xxx); // * the rule doesn't apply: return Ok(false) pub trait VerifyRule: Sync + Send { - fn verify(&self, error: &alloy_contract::Error) -> Result; + fn verify(&self, error: &alloy_contract::Error) -> Result; } pub struct SendTransactionErrorRule { @@ -55,7 +55,7 @@ pub struct UnderPriced; pub struct InsufficentFunds; impl VerifyRule for SendTransactionErrorRule { - fn verify(&self, error: &alloy_contract::Error) -> Result { + fn verify(&self, error: &alloy_contract::Error) -> Result { let alloy_contract::Error::TransportError(TransportError::ErrorResp(payload)) = error else { return Ok(false); @@ -70,14 +70,14 @@ impl VerifyRule for SendTransactionErrorRule { } impl VerifyRule for SendTransactionErrorRule { - fn verify(&self, error: &alloy_contract::Error) -> Result { + fn verify(&self, error: &alloy_contract::Error) -> Result { let alloy_contract::Error::TransportError(TransportError::ErrorResp(payload)) = error else { return Ok(false); }; if payload.code == -32000 && payload.message.contains("insufficient funds") { - Err(McrEthConnectorError::InsufficientFunds(payload.message.clone())) + Err(PcpEthConnectorError::InsufficientFunds(payload.message.clone())) } else { Ok(false) } @@ -93,7 +93,7 @@ pub async fn send_transaction< send_transaction_error_rules: &[Box], number_retry: u32, gas_limit: u128, -) -> Result<(), McrClientError> { +) -> Result<(), PcpClientError> { info!("Sending transaction with gas limit: {}", gas_limit); //validate gas price. let mut estimate_gas = base_call_builder.estimate_gas().await.expect("Failed to estimate gas"); @@ -113,10 +113,10 @@ pub async fn send_transaction< .provider .get_gas_price() .await - .map_err(|e| McrClientError::Internal(Box::new(e)))?; + .map_err(|e| PcpClientError::Internal(Box::new(e)))?; let transaction_fee_wei = estimate_gas * gas_price; if transaction_fee_wei > gas_limit { - return Err(McrEthConnectorError::GasLimitExceed(transaction_fee_wei, gas_limit).into()); + return Err(PcpEthConnectorError::GasLimitExceed(transaction_fee_wei, gas_limit).into()); } info!("Sending transaction with gas: {}", estimate_gas); @@ -137,7 +137,7 @@ pub async fn send_transaction< } } - return Err(McrEthConnectorError::from(err).into()); + return Err(PcpEthConnectorError::from(err).into()); } }; @@ -156,7 +156,7 @@ pub async fn send_transaction< estimate_gas += (estimate_gas * 30) / 100; continue; } else { - return Err(McrEthConnectorError::RpcTransactionExecution(format!( + return Err(PcpEthConnectorError::RpcTransactionExecution(format!( "Send commitment Transaction fail, abort Transaction, receipt:{transaction_receipt:?}" )) .into()); @@ -164,13 +164,13 @@ pub async fn send_transaction< } Ok(_) => return Ok(()), Err(err) => { - return Err(McrEthConnectorError::RpcTransactionExecution(err.to_string()).into()) + return Err(PcpEthConnectorError::RpcTransactionExecution(err.to_string()).into()) } }; } //Max retry exceed - Err(McrEthConnectorError::RpcTransactionExecution( + Err(PcpEthConnectorError::RpcTransactionExecution( "Send commitment Transaction fail because of exceed max retry".to_string(), ) .into()) diff --git a/protocol/pcp/clients/mock/src/lib.rs b/protocol/pcp/clients/mock/src/lib.rs index 35114c8d..2c8c90ea 100644 --- a/protocol/pcp/clients/mock/src/lib.rs +++ b/protocol/pcp/clients/mock/src/lib.rs @@ -1,4 +1,4 @@ -use pcp_protocol_client_core_util::{CommitmentStream, McrClientError, McrClientOperations}; +use pcp_protocol_client_core_util::{CommitmentStream, PcpClientError, PcpClientOperations}; use pcp_types::block_commitment::BlockCommitment; use std::collections::BTreeMap; use std::sync::{Arc, Mutex}; @@ -8,8 +8,8 @@ use tokio_stream::wrappers::ReceiverStream; #[derive(Clone)] pub struct Client { commitments: Arc>>, - stream_sender: mpsc::Sender>, - stream_receiver: Arc>>>>, + stream_sender: mpsc::Sender>, + stream_receiver: Arc>>>>, pub current_height: Arc>, pub block_lead_tolerance: u64, paused_at_height: Arc>>, @@ -31,7 +31,7 @@ impl Client { /// Overrides the commitment to settle on at given height. /// /// To have effect, this method needs to be called before a commitment is - /// posted for this height with the `McrClientOperations` API. + /// posted for this height with the `PcpClientOperations` API. pub async fn override_block_commitment(&self, commitment: BlockCommitment) { let mut commitments = self.commitments.write().await; commitments.insert(commitment.height(), commitment); @@ -63,11 +63,11 @@ impl Client { } } -impl McrClientOperations for Client { +impl PcpClientOperations for Client { async fn post_block_commitment( &self, block_commitment: BlockCommitment, - ) -> Result<(), McrClientError> { + ) -> Result<(), PcpClientError> { let height = block_commitment.height(); let settled = { @@ -82,7 +82,7 @@ impl McrClientOperations for Client { self.stream_sender .send(Ok(settled)) .await - .map_err(|e| McrClientError::Internal(Box::new(e)))?; + .map_err(|e| PcpClientError::Internal(Box::new(e)))?; } } } @@ -100,7 +100,7 @@ impl McrClientOperations for Client { async fn post_block_commitment_batch( &self, block_commitment: Vec, - ) -> Result<(), McrClientError> { + ) -> Result<(), PcpClientError> { for commitment in block_commitment { self.post_block_commitment(commitment).await?; } @@ -110,18 +110,18 @@ impl McrClientOperations for Client { async fn force_block_commitment( &self, _block_commitment: BlockCommitment, - ) -> Result<(), McrClientError> { + ) -> Result<(), PcpClientError> { unimplemented!() } async fn get_posted_commitment_at_height( &self, _height: u64, - ) -> Result, McrClientError> { + ) -> Result, PcpClientError> { unimplemented!(); } - async fn stream_block_commitments(&self) -> Result { + async fn stream_block_commitments(&self) -> Result { let receiver = self .stream_receiver .lock() @@ -134,12 +134,12 @@ impl McrClientOperations for Client { async fn get_commitment_at_height( &self, height: u64, - ) -> Result, McrClientError> { + ) -> Result, PcpClientError> { let guard = self.commitments.read().await; Ok(guard.get(&height).cloned()) } - async fn get_max_tolerable_block_height(&self) -> Result { + async fn get_max_tolerable_block_height(&self) -> Result { Ok(*self.current_height.read().await + self.block_lead_tolerance) } } @@ -155,7 +155,7 @@ pub mod test { use tokio_stream::StreamExt; #[tokio::test] - async fn test_post_block_commitment() -> Result<(), McrClientError> { + async fn test_post_block_commitment() -> Result<(), PcpClientError> { let client = Client::new(); let commitment = BlockCommitment::new(1, Default::default(), Commitment::test()); client.post_block_commitment(commitment.clone()).await.unwrap(); @@ -169,7 +169,7 @@ pub mod test { } #[tokio::test] - async fn test_post_block_commitment_batch() -> Result<(), McrClientError> { + async fn test_post_block_commitment_batch() -> Result<(), PcpClientError> { let client = Client::new(); let commitment = BlockCommitment::new(1, Default::default(), Commitment::test()); let commitment2 = BlockCommitment::new(1, Default::default(), Commitment::test()); @@ -184,7 +184,7 @@ pub mod test { } #[tokio::test] - async fn test_stream_block_commitments() -> Result<(), McrClientError> { + async fn test_stream_block_commitments() -> Result<(), PcpClientError> { let client = Client::new(); let commitment = BlockCommitment::new(1, Default::default(), Commitment::test()); client.post_block_commitment(commitment.clone()).await.unwrap(); @@ -194,7 +194,7 @@ pub mod test { } #[tokio::test] - async fn test_override_block_commitments() -> Result<(), McrClientError> { + async fn test_override_block_commitments() -> Result<(), PcpClientError> { let client = Client::new(); let commitment = BlockCommitment::new(2, Default::default(), Commitment::test()); client.override_block_commitment(commitment.clone()).await; @@ -208,7 +208,7 @@ pub mod test { } #[tokio::test] - async fn test_pause() -> Result<(), McrClientError> { + async fn test_pause() -> Result<(), PcpClientError> { let client = Client::new(); let commitment = BlockCommitment::new(2, Default::default(), Commitment::test()); client.pause_after(1).await; @@ -226,7 +226,7 @@ pub mod test { } #[tokio::test] - async fn test_resume() -> Result<(), McrClientError> { + async fn test_resume() -> Result<(), PcpClientError> { let client = Client::new(); let commitment = BlockCommitment::new(2, Default::default(), Commitment::test()); client.pause_after(1).await; diff --git a/protocol/pcp/clients/util/src/lib.rs b/protocol/pcp/clients/util/src/lib.rs index 3a392b53..1e926d9d 100644 --- a/protocol/pcp/clients/util/src/lib.rs +++ b/protocol/pcp/clients/util/src/lib.rs @@ -2,9 +2,9 @@ use pcp_types::block_commitment::SuperBlockCommitment; use std::future::Future; use tokio_stream::Stream; -/// Errors thrown by the McrClient. +/// Errors thrown by the PcpClient. #[derive(Debug, thiserror::Error)] -pub enum McrClientError { +pub enum PcpClientError { #[error("PCP Client failed to post block commitment: {0}")] PostBlockCommitment(#[source] Box), #[error("PCP client failed to invoke admin function: {0}")] @@ -19,47 +19,47 @@ pub enum McrClientError { /// Stream of block commitments from the settlement client. pub type CommitmentStream = - std::pin::Pin> + Send>>; + std::pin::Pin> + Send>>; -pub trait McrClientOperations { +pub trait PcpClientOperations { /// Posts a block commitment to the settlement client. fn post_block_commitment( &self, block_commitment: SuperBlockCommitment, - ) -> impl Future> + Send; + ) -> impl Future> + Send; /// Posts a batch of block commitments to the settlement client. fn post_block_commitment_batch( &self, block_commitment: Vec, - ) -> impl Future> + Send; + ) -> impl Future> + Send; /// Forces a block commitment /// This will only work in admin mode fn force_block_commitment( &self, block_commitment: SuperBlockCommitment, - ) -> impl Future> + Send; + ) -> impl Future> + Send; /// Streams block commitments from the settlement client. fn stream_block_commitments( &self, - ) -> impl Future> + Send; + ) -> impl Future> + Send; /// Gets the accepted commitment at the given height. fn get_commitment_at_height( &self, height: u64, - ) -> impl Future, McrClientError>> + Send; + ) -> impl Future, PcpClientError>> + Send; /// Gets the commitment this validator has made at a given height fn get_posted_commitment_at_height( &self, height: u64, - ) -> impl Future, McrClientError>> + Send; + ) -> impl Future, PcpClientError>> + Send; /// Gets the max tolerable block height. fn get_max_tolerable_block_height( &self, - ) -> impl Future> + Send; + ) -> impl Future> + Send; } From 13b8daa2e527bcaa5fe2b5889f37faf76b8e83e6 Mon Sep 17 00:00:00 2001 From: apenzk Date: Tue, 18 Mar 2025 23:20:20 +0100 Subject: [PATCH 13/25] replace dummy commitment with some initial params and structs --- Cargo.lock | 21 ++++++++++ Cargo.toml | 3 ++ protocol/pcp/cli/client/Cargo.toml | 2 + protocol/pcp/cli/client/src/cli/mod.rs | 57 +++++++++++++++++++++++--- 4 files changed, 78 insertions(+), 5 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 4c088f56..98efc8d9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2798,6 +2798,15 @@ dependencies = [ "signature", ] +[[package]] +name = "keccak" +version = "0.1.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ecc2af9a1119c51f12a14607e783cb977bde58bc069ff0c3da1095e635d70654" +dependencies = [ + "cpufeatures", +] + [[package]] name = "keccak-asm" version = "0.1.4" @@ -3435,6 +3444,7 @@ dependencies = [ "clap", "ffs-environment", "futures", + "hex", "pcp-config", "pcp-protocol-client-core-eth", "pcp-protocol-client-core-util", @@ -3444,6 +3454,7 @@ dependencies = [ "secure-signer-loader", "serde", "serde_json", + "sha3", "thiserror 1.0.69", "tokio", "tokio-stream", @@ -4430,6 +4441,16 @@ dependencies = [ "digest 0.10.7", ] +[[package]] +name = "sha3" +version = "0.10.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "75872d278a8f37ef87fa0ddbda7802605cb18344497949862c0d4dcb291eba60" +dependencies = [ + "digest 0.10.7", + "keccak", +] + [[package]] name = "sha3-asm" version = "0.1.4" diff --git a/Cargo.toml b/Cargo.toml index 8540a398..d87dfffd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -141,6 +141,9 @@ ffs-environment = { path = "util/environment" } dot-movement = { git = "https://github.com/movementlabsxyz/movement.git", branch = "main" } movement-types = { git = "https://github.com/movementlabsxyz/movement.git", branch = "main" } +hex = "0.4" +sha3 = "0.10" + [workspace.lints.clippy] debug_assert_with_mut_call = "deny" inefficient_to_string = "deny" diff --git a/protocol/pcp/cli/client/Cargo.toml b/protocol/pcp/cli/client/Cargo.toml index 96a1916e..1d3f2734 100644 --- a/protocol/pcp/cli/client/Cargo.toml +++ b/protocol/pcp/cli/client/Cargo.toml @@ -22,6 +22,8 @@ pcp-types = { workspace = true } pcp-config = { workspace = true } pcp-protocol-client-core-util = { workspace = true } pcp-protocol-client-core-eth = { workspace = true } +hex = { workspace = true } +sha3 = { workspace = true } alloy = { workspace = true, features = [ "node-bindings", diff --git a/protocol/pcp/cli/client/src/cli/mod.rs b/protocol/pcp/cli/client/src/cli/mod.rs index 60adec1f..9b39e368 100644 --- a/protocol/pcp/cli/client/src/cli/mod.rs +++ b/protocol/pcp/cli/client/src/cli/mod.rs @@ -1,5 +1,13 @@ pub mod eth; use clap::{Parser, Subcommand}; +use pcp_protocol_client_core_eth::config::Config; +use pcp_protocol_client_core_util::PcpClientOperations; +use pcp_types::block_commitment::{SuperBlockCommitment, Commitment, Id}; +use sha3::{Digest, Keccak256}; +use secure_signer_loader::identifiers::SignerIdentifier; +use secure_signer::key::TryFromCanonicalString; +use anyhow::Context; +use secure_signer_loader::identifiers::local::Local; /// The `pcp-protocol-client` CLI. #[derive(Parser)] @@ -56,14 +64,53 @@ impl PcpProtocolClientSubcommand { } PcpProtocolClientSubcommand::Eth(eth) => eth.execute().await?, PcpProtocolClientSubcommand::PostCommitment(args) => { - // For now, just print what we would do - if let Some(hex) = &args.commitment_hex { - println!("Would post commitment to PCP from hex: {}", hex); + let commitment = if let Some(hex) = &args.commitment_hex { + // Parse hex commitment + let bytes = hex::decode(hex)?; + SuperBlockCommitment::new( + 0, // height + Id::new([0; 32]), // block id + Commitment::new(bytes.try_into().map_err(|_| anyhow::anyhow!("Invalid commitment length. Expected 32 bytes (64 hex characters)."))?), + ) } else if let Some(preimage) = &args.preimage_string { - println!("Would hash and post commitment to PCP from preimage: {}", preimage); - } + // Hash preimage to get commitment + let mut hasher = Keccak256::new(); + hasher.update(preimage.as_bytes()); + let result = hasher.finalize(); + SuperBlockCommitment::new( + 0, // height + Id::new([0; 32]), // block id + Commitment::new(result.into()), + ) + } else { + unreachable!("clap ensures one option is present") + }; + + // Get config and post commitment + let config = get_config()?; + println!("Config: {:?}", config); + let client = config.build().await?; + println!("Starting post commitment process..."); + client.post_block_commitment(commitment).await?; + println!("Successfully posted commitment"); } } Ok(()) } } + +fn get_config() -> Result { + let config = Config::new( + "0x1234567890123456789012345678901234567890".to_string(), // PCP contract address + "http://localhost:8545".to_string(), // RPC URL + "ws://localhost:8546".to_string(), // WS URL + 1, // Chain ID + SignerIdentifier::Local(Local { + private_key_hex_bytes: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef".to_string(), + }), + false, // Run commitment admin mode + 100000, // Gas limit + 3, // Transaction send retries + ); + Ok(config) +} From 8ac58b5060481e8b19050379760d541f8dbfdf40 Mon Sep 17 00:00:00 2001 From: apenzk Date: Tue, 18 Mar 2025 23:26:19 +0100 Subject: [PATCH 14/25] separate functions to improve code tidyness --- protocol/pcp/cli/client/src/cli/mod.rs | 77 ++++++++++++++++---------- 1 file changed, 48 insertions(+), 29 deletions(-) diff --git a/protocol/pcp/cli/client/src/cli/mod.rs b/protocol/pcp/cli/client/src/cli/mod.rs index 9b39e368..2b1bb5de 100644 --- a/protocol/pcp/cli/client/src/cli/mod.rs +++ b/protocol/pcp/cli/client/src/cli/mod.rs @@ -64,41 +64,60 @@ impl PcpProtocolClientSubcommand { } PcpProtocolClientSubcommand::Eth(eth) => eth.execute().await?, PcpProtocolClientSubcommand::PostCommitment(args) => { - let commitment = if let Some(hex) = &args.commitment_hex { - // Parse hex commitment - let bytes = hex::decode(hex)?; - SuperBlockCommitment::new( - 0, // height - Id::new([0; 32]), // block id - Commitment::new(bytes.try_into().map_err(|_| anyhow::anyhow!("Invalid commitment length. Expected 32 bytes (64 hex characters)."))?), - ) - } else if let Some(preimage) = &args.preimage_string { - // Hash preimage to get commitment - let mut hasher = Keccak256::new(); - hasher.update(preimage.as_bytes()); - let result = hasher.finalize(); - SuperBlockCommitment::new( - 0, // height - Id::new([0; 32]), // block id - Commitment::new(result.into()), - ) - } else { - unreachable!("clap ensures one option is present") - }; - - // Get config and post commitment - let config = get_config()?; - println!("Config: {:?}", config); - let client = config.build().await?; - println!("Starting post commitment process..."); - client.post_block_commitment(commitment).await?; - println!("Successfully posted commitment"); + self.handle_post_commitment(args).await?; } } Ok(()) } + + /// Handle the post commitment command. + async fn handle_post_commitment(&self, args: &PostCommitmentArgs) -> Result<(), anyhow::Error> { + let commitment = self.create_commitment(args)?; + + // Get config and post commitment + let config = get_config()?; + println!("Config: {:?}", config); + let client = config.build().await?; + println!("Starting post commitment process..."); + client.post_block_commitment(commitment).await?; + println!("Successfully posted commitment"); + + Ok(()) + } + + /// Create a commitment from the given arguments. + fn create_commitment(&self, args: &PostCommitmentArgs) -> Result { + if let Some(hex) = &args.commitment_hex { + // Parse hex commitment + let bytes = hex::decode(hex)?; + let bytes_len = bytes.len(); + Ok(SuperBlockCommitment::new( + 0, // height + Id::new([0; 32]), // block id + Commitment::new(bytes.try_into() + .map_err(|_| anyhow::anyhow!( + "Invalid commitment length. Expected 32 bytes (64 hex characters), got {} bytes ({} hex characters)", + bytes_len, + bytes_len * 2 + ))?) + )) + } else if let Some(preimage) = &args.preimage_string { + // Hash preimage to get commitment + let mut hasher = Keccak256::new(); + hasher.update(preimage.as_bytes()); + let result = hasher.finalize(); + Ok(SuperBlockCommitment::new( + 0, // height + Id::new([0; 32]), // block id + Commitment::new(result.into()), + )) + } else { + unreachable!("clap ensures one option is present") + } + } } +/// Get the config for the PCP client. fn get_config() -> Result { let config = Config::new( "0x1234567890123456789012345678901234567890".to_string(), // PCP contract address From a1f6f02c6d09dd64ecdd6057811ce602e774a49d Mon Sep 17 00:00:00 2001 From: apenzk Date: Wed, 19 Mar 2025 15:13:42 +0100 Subject: [PATCH 15/25] fix warnings --- protocol/pcp/cli/client/src/cli/mod.rs | 2 -- protocol/pcp/cli/client/src/mock.rs | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/protocol/pcp/cli/client/src/cli/mod.rs b/protocol/pcp/cli/client/src/cli/mod.rs index 2b1bb5de..c045a278 100644 --- a/protocol/pcp/cli/client/src/cli/mod.rs +++ b/protocol/pcp/cli/client/src/cli/mod.rs @@ -5,8 +5,6 @@ use pcp_protocol_client_core_util::PcpClientOperations; use pcp_types::block_commitment::{SuperBlockCommitment, Commitment, Id}; use sha3::{Digest, Keccak256}; use secure_signer_loader::identifiers::SignerIdentifier; -use secure_signer::key::TryFromCanonicalString; -use anyhow::Context; use secure_signer_loader::identifiers::local::Local; /// The `pcp-protocol-client` CLI. diff --git a/protocol/pcp/cli/client/src/mock.rs b/protocol/pcp/cli/client/src/mock.rs index c39a11c7..c5e36b6c 100644 --- a/protocol/pcp/cli/client/src/mock.rs +++ b/protocol/pcp/cli/client/src/mock.rs @@ -114,14 +114,14 @@ impl PcpSettlementClientOperations for PcpSettlementClient { async fn force_block_commitment( &self, - block_commitment: SuperBlockCommitment, + _block_commitment: SuperBlockCommitment, ) -> Result<(), anyhow::Error> { unimplemented!() } async fn get_posted_commitment_at_height( &self, - height: u64, + _height: u64, ) -> Result, anyhow::Error> { unimplemented!(); } From ca725e5795948aed4c2c1c56cf645872bf4278f3 Mon Sep 17 00:00:00 2001 From: apenzk Date: Wed, 19 Mar 2025 15:44:02 +0100 Subject: [PATCH 16/25] move contracts to dlu --- protocol/pcp/{ => dlu/eth}/contracts/.DS_Store | Bin .../eth}/contracts/.github/workflows/test.yml | 0 protocol/pcp/{ => dlu/eth}/contracts/.gitignore | 0 protocol/pcp/{ => dlu/eth}/contracts/.prettierrc | 0 protocol/pcp/{ => dlu/eth}/contracts/README.md | 0 .../{ => dlu/eth}/contracts/deployments/local.json | 0 protocol/pcp/{ => dlu/eth}/contracts/foundry.toml | 0 .../pcp/{ => dlu/eth}/contracts/hardhat.config.ts | 0 .../eth}/contracts/kurtosis_instructions.md | 0 protocol/pcp/{ => dlu/eth}/contracts/package.json | 0 protocol/pcp/{ => dlu/eth}/contracts/remappings.txt | 0 .../eth}/contracts/script/CoreDeployer.s.sol | 0 .../eth}/contracts/script/DeployMOVETokenDev.s.sol | 0 .../{ => dlu/eth}/contracts/script/DeployPCP.s.sol | 0 .../eth}/contracts/script/DeployPCPDev.s.sol | 0 .../eth}/contracts/script/MOVETokenDeployer.s.sol | 0 .../contracts/script/MovementStakingDeployer.s.sol | 0 .../script/MultisigMOVETokenDeployer.s.sol | 0 .../eth}/contracts/script/PCPDeployer.s.sol | 0 .../eth}/contracts/script/StlMoveDeployer.s.sol | 0 .../eth}/contracts/script/VerifyPCPDev.s.sol | 0 .../{ => dlu/eth}/contracts/script/deploy-safe.sh | 0 .../script/helpers/Create3/CREATE3Factory.sol | 0 .../script/helpers/Create3/ICREATE3Factory.sol | 0 .../eth}/contracts/script/helpers/Helper.sol | 0 .../eth}/contracts/script/helpers/config.json | 0 .../eth}/contracts/script/helpers/configOLD.json | 0 .../eth}/contracts/script/helpers/deployments.json | 0 .../contracts/script/helpers/deploymentsOLD.json | 0 .../contracts/script/helpers/safe-deployments.json | 0 .../script/helpers/upgrade/deploymove.json | 0 .../eth}/contracts/script/helpers/upgrade/mcr.json | 0 .../contracts/script/helpers/upgrade/staking.json | 0 .../contracts/script/helpers/upgrade/stlmove.json | 0 .../{ => dlu/eth}/contracts/script/install-deps.sh | 0 .../{ => dlu/eth}/contracts/script/verify-mcr.sh | 0 .../pcp/{ => dlu/eth}/contracts/scripts/README.md | 0 .../pcp/{ => dlu/eth}/contracts/scripts/deploy.ts | 0 .../{ => dlu/eth}/contracts/scripts/tasks/utils.ts | 0 .../eth}/contracts/scripts/test-deployment.ts | 0 .../eth}/contracts/src/proxy/ERC1967Proxy.sol | 0 .../eth}/contracts/src/proxy/ProxyAdmin.sol | 0 .../src/proxy/TransparentUpgradeableProxy.sol | 0 .../{ => dlu/eth}/contracts/src/settlement/PCP.sol | 0 .../eth}/contracts/src/settlement/PCPStorage.sol | 0 .../contracts/src/settlement/interfaces/IPCP.sol | 0 .../src/settlement/settlement/BaseSettlement.sol | 0 .../eth}/contracts/src/staking/MovementStaking.sol | 0 .../src/staking/MovementStakingStorage.sol | 0 .../eth}/contracts/src/staking/base/BaseStaking.sol | 0 .../src/staking/interfaces/IMovementStaking.sol | 0 .../{ => dlu/eth}/contracts/src/token/MOVEToken.sol | 0 .../eth}/contracts/src/token/MOVETokenDev.sol | 0 .../eth}/contracts/src/token/MOVETokenV1.sol | 0 .../eth}/contracts/src/token/base/BaseToken.sol | 0 .../eth}/contracts/src/token/base/MintableToken.sol | 0 .../eth}/contracts/src/token/base/WrappedToken.sol | 0 .../src/token/base/WrappedTokenStorage.sol | 0 .../src/token/custodian/CustodianToken.sol | 0 .../eth}/contracts/src/token/faucet/MOVEFaucet.sol | 0 .../eth}/contracts/src/token/locked/LockedToken.sol | 0 .../src/token/locked/LockedTokenStorage.sol | 0 .../eth}/contracts/src/token/stlMoveToken.sol | 0 .../pcp/{ => dlu/eth}/contracts/test/Deployer.t.sol | 0 .../eth}/contracts/test/settlement/PCP.t.sol | 0 .../contracts/test/staking/MovementStaking.t.sol | 0 .../contracts/test/staking/base/BaseStaking.t.sol | 0 .../{ => dlu/eth}/contracts/test/token/Faucet.t.sol | 0 .../eth}/contracts/test/token/MOVEToken.t.sol | 0 .../eth}/contracts/test/token/MOVETokenV2.t.sol | 0 .../eth}/contracts/test/token/base/BaseToken.t.sol | 0 .../contracts/test/token/base/MintableToken.t.sol | 0 .../contracts/test/token/base/WrappedToken.t.sol | 0 .../test/token/custodian/CustodianToken.t.sol | 0 .../contracts/test/token/locked/LockedToken.t.sol | 0 .../eth}/contracts/test/token/stlMoveToken.t.sol | 0 protocol/pcp/{ => dlu/eth}/contracts/tsconfig.json | 0 .../pcp/{ => dlu/eth}/contracts/upgrader/README.md | 0 .../pcp/{ => dlu/eth}/contracts/upgrader/accept.sh | 0 .../pcp/{ => dlu/eth}/contracts/upgrader/accept.ts | 0 .../{ => dlu/eth}/contracts/upgrader/acceptKms.sh | 0 .../{ => dlu/eth}/contracts/upgrader/acceptKms.ts | 0 .../pcp/{ => dlu/eth}/contracts/upgrader/kmsSign.ts | 0 .../eth}/contracts/upgrader/package-lock.json | 0 .../{ => dlu/eth}/contracts/upgrader/package.json | 0 .../pcp/{ => dlu/eth}/contracts/upgrader/propose.sh | 0 .../pcp/{ => dlu/eth}/contracts/upgrader/propose.ts | 0 .../{ => dlu/eth}/contracts/upgrader/safeDeploy.sh | 0 .../{ => dlu/eth}/contracts/upgrader/safeDeploy.ts | 0 protocol/pcp/{ => dlu/eth}/contracts/yarn.lock | 0 90 files changed, 0 insertions(+), 0 deletions(-) rename protocol/pcp/{ => dlu/eth}/contracts/.DS_Store (100%) rename protocol/pcp/{ => dlu/eth}/contracts/.github/workflows/test.yml (100%) rename protocol/pcp/{ => dlu/eth}/contracts/.gitignore (100%) rename protocol/pcp/{ => dlu/eth}/contracts/.prettierrc (100%) rename protocol/pcp/{ => dlu/eth}/contracts/README.md (100%) rename protocol/pcp/{ => dlu/eth}/contracts/deployments/local.json (100%) rename protocol/pcp/{ => dlu/eth}/contracts/foundry.toml (100%) rename protocol/pcp/{ => dlu/eth}/contracts/hardhat.config.ts (100%) rename protocol/pcp/{ => dlu/eth}/contracts/kurtosis_instructions.md (100%) rename protocol/pcp/{ => dlu/eth}/contracts/package.json (100%) rename protocol/pcp/{ => dlu/eth}/contracts/remappings.txt (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/CoreDeployer.s.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/DeployMOVETokenDev.s.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/DeployPCP.s.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/DeployPCPDev.s.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/MOVETokenDeployer.s.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/MovementStakingDeployer.s.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/MultisigMOVETokenDeployer.s.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/PCPDeployer.s.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/StlMoveDeployer.s.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/VerifyPCPDev.s.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/deploy-safe.sh (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/helpers/Create3/CREATE3Factory.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/helpers/Create3/ICREATE3Factory.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/helpers/Helper.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/helpers/config.json (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/helpers/configOLD.json (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/helpers/deployments.json (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/helpers/deploymentsOLD.json (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/helpers/safe-deployments.json (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/helpers/upgrade/deploymove.json (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/helpers/upgrade/mcr.json (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/helpers/upgrade/staking.json (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/helpers/upgrade/stlmove.json (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/install-deps.sh (100%) rename protocol/pcp/{ => dlu/eth}/contracts/script/verify-mcr.sh (100%) rename protocol/pcp/{ => dlu/eth}/contracts/scripts/README.md (100%) rename protocol/pcp/{ => dlu/eth}/contracts/scripts/deploy.ts (100%) rename protocol/pcp/{ => dlu/eth}/contracts/scripts/tasks/utils.ts (100%) rename protocol/pcp/{ => dlu/eth}/contracts/scripts/test-deployment.ts (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/proxy/ERC1967Proxy.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/proxy/ProxyAdmin.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/proxy/TransparentUpgradeableProxy.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/settlement/PCP.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/settlement/PCPStorage.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/settlement/interfaces/IPCP.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/settlement/settlement/BaseSettlement.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/staking/MovementStaking.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/staking/MovementStakingStorage.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/staking/base/BaseStaking.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/staking/interfaces/IMovementStaking.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/token/MOVEToken.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/token/MOVETokenDev.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/token/MOVETokenV1.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/token/base/BaseToken.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/token/base/MintableToken.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/token/base/WrappedToken.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/token/base/WrappedTokenStorage.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/token/custodian/CustodianToken.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/token/faucet/MOVEFaucet.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/token/locked/LockedToken.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/token/locked/LockedTokenStorage.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/src/token/stlMoveToken.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/test/Deployer.t.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/test/settlement/PCP.t.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/test/staking/MovementStaking.t.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/test/staking/base/BaseStaking.t.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/test/token/Faucet.t.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/test/token/MOVEToken.t.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/test/token/MOVETokenV2.t.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/test/token/base/BaseToken.t.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/test/token/base/MintableToken.t.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/test/token/base/WrappedToken.t.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/test/token/custodian/CustodianToken.t.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/test/token/locked/LockedToken.t.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/test/token/stlMoveToken.t.sol (100%) rename protocol/pcp/{ => dlu/eth}/contracts/tsconfig.json (100%) rename protocol/pcp/{ => dlu/eth}/contracts/upgrader/README.md (100%) rename protocol/pcp/{ => dlu/eth}/contracts/upgrader/accept.sh (100%) rename protocol/pcp/{ => dlu/eth}/contracts/upgrader/accept.ts (100%) rename protocol/pcp/{ => dlu/eth}/contracts/upgrader/acceptKms.sh (100%) rename protocol/pcp/{ => dlu/eth}/contracts/upgrader/acceptKms.ts (100%) rename protocol/pcp/{ => dlu/eth}/contracts/upgrader/kmsSign.ts (100%) rename protocol/pcp/{ => dlu/eth}/contracts/upgrader/package-lock.json (100%) rename protocol/pcp/{ => dlu/eth}/contracts/upgrader/package.json (100%) rename protocol/pcp/{ => dlu/eth}/contracts/upgrader/propose.sh (100%) rename protocol/pcp/{ => dlu/eth}/contracts/upgrader/propose.ts (100%) rename protocol/pcp/{ => dlu/eth}/contracts/upgrader/safeDeploy.sh (100%) rename protocol/pcp/{ => dlu/eth}/contracts/upgrader/safeDeploy.ts (100%) rename protocol/pcp/{ => dlu/eth}/contracts/yarn.lock (100%) diff --git a/protocol/pcp/contracts/.DS_Store b/protocol/pcp/dlu/eth/contracts/.DS_Store similarity index 100% rename from protocol/pcp/contracts/.DS_Store rename to protocol/pcp/dlu/eth/contracts/.DS_Store diff --git a/protocol/pcp/contracts/.github/workflows/test.yml b/protocol/pcp/dlu/eth/contracts/.github/workflows/test.yml similarity index 100% rename from protocol/pcp/contracts/.github/workflows/test.yml rename to protocol/pcp/dlu/eth/contracts/.github/workflows/test.yml diff --git a/protocol/pcp/contracts/.gitignore b/protocol/pcp/dlu/eth/contracts/.gitignore similarity index 100% rename from protocol/pcp/contracts/.gitignore rename to protocol/pcp/dlu/eth/contracts/.gitignore diff --git a/protocol/pcp/contracts/.prettierrc b/protocol/pcp/dlu/eth/contracts/.prettierrc similarity index 100% rename from protocol/pcp/contracts/.prettierrc rename to protocol/pcp/dlu/eth/contracts/.prettierrc diff --git a/protocol/pcp/contracts/README.md b/protocol/pcp/dlu/eth/contracts/README.md similarity index 100% rename from protocol/pcp/contracts/README.md rename to protocol/pcp/dlu/eth/contracts/README.md diff --git a/protocol/pcp/contracts/deployments/local.json b/protocol/pcp/dlu/eth/contracts/deployments/local.json similarity index 100% rename from protocol/pcp/contracts/deployments/local.json rename to protocol/pcp/dlu/eth/contracts/deployments/local.json diff --git a/protocol/pcp/contracts/foundry.toml b/protocol/pcp/dlu/eth/contracts/foundry.toml similarity index 100% rename from protocol/pcp/contracts/foundry.toml rename to protocol/pcp/dlu/eth/contracts/foundry.toml diff --git a/protocol/pcp/contracts/hardhat.config.ts b/protocol/pcp/dlu/eth/contracts/hardhat.config.ts similarity index 100% rename from protocol/pcp/contracts/hardhat.config.ts rename to protocol/pcp/dlu/eth/contracts/hardhat.config.ts diff --git a/protocol/pcp/contracts/kurtosis_instructions.md b/protocol/pcp/dlu/eth/contracts/kurtosis_instructions.md similarity index 100% rename from protocol/pcp/contracts/kurtosis_instructions.md rename to protocol/pcp/dlu/eth/contracts/kurtosis_instructions.md diff --git a/protocol/pcp/contracts/package.json b/protocol/pcp/dlu/eth/contracts/package.json similarity index 100% rename from protocol/pcp/contracts/package.json rename to protocol/pcp/dlu/eth/contracts/package.json diff --git a/protocol/pcp/contracts/remappings.txt b/protocol/pcp/dlu/eth/contracts/remappings.txt similarity index 100% rename from protocol/pcp/contracts/remappings.txt rename to protocol/pcp/dlu/eth/contracts/remappings.txt diff --git a/protocol/pcp/contracts/script/CoreDeployer.s.sol b/protocol/pcp/dlu/eth/contracts/script/CoreDeployer.s.sol similarity index 100% rename from protocol/pcp/contracts/script/CoreDeployer.s.sol rename to protocol/pcp/dlu/eth/contracts/script/CoreDeployer.s.sol diff --git a/protocol/pcp/contracts/script/DeployMOVETokenDev.s.sol b/protocol/pcp/dlu/eth/contracts/script/DeployMOVETokenDev.s.sol similarity index 100% rename from protocol/pcp/contracts/script/DeployMOVETokenDev.s.sol rename to protocol/pcp/dlu/eth/contracts/script/DeployMOVETokenDev.s.sol diff --git a/protocol/pcp/contracts/script/DeployPCP.s.sol b/protocol/pcp/dlu/eth/contracts/script/DeployPCP.s.sol similarity index 100% rename from protocol/pcp/contracts/script/DeployPCP.s.sol rename to protocol/pcp/dlu/eth/contracts/script/DeployPCP.s.sol diff --git a/protocol/pcp/contracts/script/DeployPCPDev.s.sol b/protocol/pcp/dlu/eth/contracts/script/DeployPCPDev.s.sol similarity index 100% rename from protocol/pcp/contracts/script/DeployPCPDev.s.sol rename to protocol/pcp/dlu/eth/contracts/script/DeployPCPDev.s.sol diff --git a/protocol/pcp/contracts/script/MOVETokenDeployer.s.sol b/protocol/pcp/dlu/eth/contracts/script/MOVETokenDeployer.s.sol similarity index 100% rename from protocol/pcp/contracts/script/MOVETokenDeployer.s.sol rename to protocol/pcp/dlu/eth/contracts/script/MOVETokenDeployer.s.sol diff --git a/protocol/pcp/contracts/script/MovementStakingDeployer.s.sol b/protocol/pcp/dlu/eth/contracts/script/MovementStakingDeployer.s.sol similarity index 100% rename from protocol/pcp/contracts/script/MovementStakingDeployer.s.sol rename to protocol/pcp/dlu/eth/contracts/script/MovementStakingDeployer.s.sol diff --git a/protocol/pcp/contracts/script/MultisigMOVETokenDeployer.s.sol b/protocol/pcp/dlu/eth/contracts/script/MultisigMOVETokenDeployer.s.sol similarity index 100% rename from protocol/pcp/contracts/script/MultisigMOVETokenDeployer.s.sol rename to protocol/pcp/dlu/eth/contracts/script/MultisigMOVETokenDeployer.s.sol diff --git a/protocol/pcp/contracts/script/PCPDeployer.s.sol b/protocol/pcp/dlu/eth/contracts/script/PCPDeployer.s.sol similarity index 100% rename from protocol/pcp/contracts/script/PCPDeployer.s.sol rename to protocol/pcp/dlu/eth/contracts/script/PCPDeployer.s.sol diff --git a/protocol/pcp/contracts/script/StlMoveDeployer.s.sol b/protocol/pcp/dlu/eth/contracts/script/StlMoveDeployer.s.sol similarity index 100% rename from protocol/pcp/contracts/script/StlMoveDeployer.s.sol rename to protocol/pcp/dlu/eth/contracts/script/StlMoveDeployer.s.sol diff --git a/protocol/pcp/contracts/script/VerifyPCPDev.s.sol b/protocol/pcp/dlu/eth/contracts/script/VerifyPCPDev.s.sol similarity index 100% rename from protocol/pcp/contracts/script/VerifyPCPDev.s.sol rename to protocol/pcp/dlu/eth/contracts/script/VerifyPCPDev.s.sol diff --git a/protocol/pcp/contracts/script/deploy-safe.sh b/protocol/pcp/dlu/eth/contracts/script/deploy-safe.sh similarity index 100% rename from protocol/pcp/contracts/script/deploy-safe.sh rename to protocol/pcp/dlu/eth/contracts/script/deploy-safe.sh diff --git a/protocol/pcp/contracts/script/helpers/Create3/CREATE3Factory.sol b/protocol/pcp/dlu/eth/contracts/script/helpers/Create3/CREATE3Factory.sol similarity index 100% rename from protocol/pcp/contracts/script/helpers/Create3/CREATE3Factory.sol rename to protocol/pcp/dlu/eth/contracts/script/helpers/Create3/CREATE3Factory.sol diff --git a/protocol/pcp/contracts/script/helpers/Create3/ICREATE3Factory.sol b/protocol/pcp/dlu/eth/contracts/script/helpers/Create3/ICREATE3Factory.sol similarity index 100% rename from protocol/pcp/contracts/script/helpers/Create3/ICREATE3Factory.sol rename to protocol/pcp/dlu/eth/contracts/script/helpers/Create3/ICREATE3Factory.sol diff --git a/protocol/pcp/contracts/script/helpers/Helper.sol b/protocol/pcp/dlu/eth/contracts/script/helpers/Helper.sol similarity index 100% rename from protocol/pcp/contracts/script/helpers/Helper.sol rename to protocol/pcp/dlu/eth/contracts/script/helpers/Helper.sol diff --git a/protocol/pcp/contracts/script/helpers/config.json b/protocol/pcp/dlu/eth/contracts/script/helpers/config.json similarity index 100% rename from protocol/pcp/contracts/script/helpers/config.json rename to protocol/pcp/dlu/eth/contracts/script/helpers/config.json diff --git a/protocol/pcp/contracts/script/helpers/configOLD.json b/protocol/pcp/dlu/eth/contracts/script/helpers/configOLD.json similarity index 100% rename from protocol/pcp/contracts/script/helpers/configOLD.json rename to protocol/pcp/dlu/eth/contracts/script/helpers/configOLD.json diff --git a/protocol/pcp/contracts/script/helpers/deployments.json b/protocol/pcp/dlu/eth/contracts/script/helpers/deployments.json similarity index 100% rename from protocol/pcp/contracts/script/helpers/deployments.json rename to protocol/pcp/dlu/eth/contracts/script/helpers/deployments.json diff --git a/protocol/pcp/contracts/script/helpers/deploymentsOLD.json b/protocol/pcp/dlu/eth/contracts/script/helpers/deploymentsOLD.json similarity index 100% rename from protocol/pcp/contracts/script/helpers/deploymentsOLD.json rename to protocol/pcp/dlu/eth/contracts/script/helpers/deploymentsOLD.json diff --git a/protocol/pcp/contracts/script/helpers/safe-deployments.json b/protocol/pcp/dlu/eth/contracts/script/helpers/safe-deployments.json similarity index 100% rename from protocol/pcp/contracts/script/helpers/safe-deployments.json rename to protocol/pcp/dlu/eth/contracts/script/helpers/safe-deployments.json diff --git a/protocol/pcp/contracts/script/helpers/upgrade/deploymove.json b/protocol/pcp/dlu/eth/contracts/script/helpers/upgrade/deploymove.json similarity index 100% rename from protocol/pcp/contracts/script/helpers/upgrade/deploymove.json rename to protocol/pcp/dlu/eth/contracts/script/helpers/upgrade/deploymove.json diff --git a/protocol/pcp/contracts/script/helpers/upgrade/mcr.json b/protocol/pcp/dlu/eth/contracts/script/helpers/upgrade/mcr.json similarity index 100% rename from protocol/pcp/contracts/script/helpers/upgrade/mcr.json rename to protocol/pcp/dlu/eth/contracts/script/helpers/upgrade/mcr.json diff --git a/protocol/pcp/contracts/script/helpers/upgrade/staking.json b/protocol/pcp/dlu/eth/contracts/script/helpers/upgrade/staking.json similarity index 100% rename from protocol/pcp/contracts/script/helpers/upgrade/staking.json rename to protocol/pcp/dlu/eth/contracts/script/helpers/upgrade/staking.json diff --git a/protocol/pcp/contracts/script/helpers/upgrade/stlmove.json b/protocol/pcp/dlu/eth/contracts/script/helpers/upgrade/stlmove.json similarity index 100% rename from protocol/pcp/contracts/script/helpers/upgrade/stlmove.json rename to protocol/pcp/dlu/eth/contracts/script/helpers/upgrade/stlmove.json diff --git a/protocol/pcp/contracts/script/install-deps.sh b/protocol/pcp/dlu/eth/contracts/script/install-deps.sh similarity index 100% rename from protocol/pcp/contracts/script/install-deps.sh rename to protocol/pcp/dlu/eth/contracts/script/install-deps.sh diff --git a/protocol/pcp/contracts/script/verify-mcr.sh b/protocol/pcp/dlu/eth/contracts/script/verify-mcr.sh similarity index 100% rename from protocol/pcp/contracts/script/verify-mcr.sh rename to protocol/pcp/dlu/eth/contracts/script/verify-mcr.sh diff --git a/protocol/pcp/contracts/scripts/README.md b/protocol/pcp/dlu/eth/contracts/scripts/README.md similarity index 100% rename from protocol/pcp/contracts/scripts/README.md rename to protocol/pcp/dlu/eth/contracts/scripts/README.md diff --git a/protocol/pcp/contracts/scripts/deploy.ts b/protocol/pcp/dlu/eth/contracts/scripts/deploy.ts similarity index 100% rename from protocol/pcp/contracts/scripts/deploy.ts rename to protocol/pcp/dlu/eth/contracts/scripts/deploy.ts diff --git a/protocol/pcp/contracts/scripts/tasks/utils.ts b/protocol/pcp/dlu/eth/contracts/scripts/tasks/utils.ts similarity index 100% rename from protocol/pcp/contracts/scripts/tasks/utils.ts rename to protocol/pcp/dlu/eth/contracts/scripts/tasks/utils.ts diff --git a/protocol/pcp/contracts/scripts/test-deployment.ts b/protocol/pcp/dlu/eth/contracts/scripts/test-deployment.ts similarity index 100% rename from protocol/pcp/contracts/scripts/test-deployment.ts rename to protocol/pcp/dlu/eth/contracts/scripts/test-deployment.ts diff --git a/protocol/pcp/contracts/src/proxy/ERC1967Proxy.sol b/protocol/pcp/dlu/eth/contracts/src/proxy/ERC1967Proxy.sol similarity index 100% rename from protocol/pcp/contracts/src/proxy/ERC1967Proxy.sol rename to protocol/pcp/dlu/eth/contracts/src/proxy/ERC1967Proxy.sol diff --git a/protocol/pcp/contracts/src/proxy/ProxyAdmin.sol b/protocol/pcp/dlu/eth/contracts/src/proxy/ProxyAdmin.sol similarity index 100% rename from protocol/pcp/contracts/src/proxy/ProxyAdmin.sol rename to protocol/pcp/dlu/eth/contracts/src/proxy/ProxyAdmin.sol diff --git a/protocol/pcp/contracts/src/proxy/TransparentUpgradeableProxy.sol b/protocol/pcp/dlu/eth/contracts/src/proxy/TransparentUpgradeableProxy.sol similarity index 100% rename from protocol/pcp/contracts/src/proxy/TransparentUpgradeableProxy.sol rename to protocol/pcp/dlu/eth/contracts/src/proxy/TransparentUpgradeableProxy.sol diff --git a/protocol/pcp/contracts/src/settlement/PCP.sol b/protocol/pcp/dlu/eth/contracts/src/settlement/PCP.sol similarity index 100% rename from protocol/pcp/contracts/src/settlement/PCP.sol rename to protocol/pcp/dlu/eth/contracts/src/settlement/PCP.sol diff --git a/protocol/pcp/contracts/src/settlement/PCPStorage.sol b/protocol/pcp/dlu/eth/contracts/src/settlement/PCPStorage.sol similarity index 100% rename from protocol/pcp/contracts/src/settlement/PCPStorage.sol rename to protocol/pcp/dlu/eth/contracts/src/settlement/PCPStorage.sol diff --git a/protocol/pcp/contracts/src/settlement/interfaces/IPCP.sol b/protocol/pcp/dlu/eth/contracts/src/settlement/interfaces/IPCP.sol similarity index 100% rename from protocol/pcp/contracts/src/settlement/interfaces/IPCP.sol rename to protocol/pcp/dlu/eth/contracts/src/settlement/interfaces/IPCP.sol diff --git a/protocol/pcp/contracts/src/settlement/settlement/BaseSettlement.sol b/protocol/pcp/dlu/eth/contracts/src/settlement/settlement/BaseSettlement.sol similarity index 100% rename from protocol/pcp/contracts/src/settlement/settlement/BaseSettlement.sol rename to protocol/pcp/dlu/eth/contracts/src/settlement/settlement/BaseSettlement.sol diff --git a/protocol/pcp/contracts/src/staking/MovementStaking.sol b/protocol/pcp/dlu/eth/contracts/src/staking/MovementStaking.sol similarity index 100% rename from protocol/pcp/contracts/src/staking/MovementStaking.sol rename to protocol/pcp/dlu/eth/contracts/src/staking/MovementStaking.sol diff --git a/protocol/pcp/contracts/src/staking/MovementStakingStorage.sol b/protocol/pcp/dlu/eth/contracts/src/staking/MovementStakingStorage.sol similarity index 100% rename from protocol/pcp/contracts/src/staking/MovementStakingStorage.sol rename to protocol/pcp/dlu/eth/contracts/src/staking/MovementStakingStorage.sol diff --git a/protocol/pcp/contracts/src/staking/base/BaseStaking.sol b/protocol/pcp/dlu/eth/contracts/src/staking/base/BaseStaking.sol similarity index 100% rename from protocol/pcp/contracts/src/staking/base/BaseStaking.sol rename to protocol/pcp/dlu/eth/contracts/src/staking/base/BaseStaking.sol diff --git a/protocol/pcp/contracts/src/staking/interfaces/IMovementStaking.sol b/protocol/pcp/dlu/eth/contracts/src/staking/interfaces/IMovementStaking.sol similarity index 100% rename from protocol/pcp/contracts/src/staking/interfaces/IMovementStaking.sol rename to protocol/pcp/dlu/eth/contracts/src/staking/interfaces/IMovementStaking.sol diff --git a/protocol/pcp/contracts/src/token/MOVEToken.sol b/protocol/pcp/dlu/eth/contracts/src/token/MOVEToken.sol similarity index 100% rename from protocol/pcp/contracts/src/token/MOVEToken.sol rename to protocol/pcp/dlu/eth/contracts/src/token/MOVEToken.sol diff --git a/protocol/pcp/contracts/src/token/MOVETokenDev.sol b/protocol/pcp/dlu/eth/contracts/src/token/MOVETokenDev.sol similarity index 100% rename from protocol/pcp/contracts/src/token/MOVETokenDev.sol rename to protocol/pcp/dlu/eth/contracts/src/token/MOVETokenDev.sol diff --git a/protocol/pcp/contracts/src/token/MOVETokenV1.sol b/protocol/pcp/dlu/eth/contracts/src/token/MOVETokenV1.sol similarity index 100% rename from protocol/pcp/contracts/src/token/MOVETokenV1.sol rename to protocol/pcp/dlu/eth/contracts/src/token/MOVETokenV1.sol diff --git a/protocol/pcp/contracts/src/token/base/BaseToken.sol b/protocol/pcp/dlu/eth/contracts/src/token/base/BaseToken.sol similarity index 100% rename from protocol/pcp/contracts/src/token/base/BaseToken.sol rename to protocol/pcp/dlu/eth/contracts/src/token/base/BaseToken.sol diff --git a/protocol/pcp/contracts/src/token/base/MintableToken.sol b/protocol/pcp/dlu/eth/contracts/src/token/base/MintableToken.sol similarity index 100% rename from protocol/pcp/contracts/src/token/base/MintableToken.sol rename to protocol/pcp/dlu/eth/contracts/src/token/base/MintableToken.sol diff --git a/protocol/pcp/contracts/src/token/base/WrappedToken.sol b/protocol/pcp/dlu/eth/contracts/src/token/base/WrappedToken.sol similarity index 100% rename from protocol/pcp/contracts/src/token/base/WrappedToken.sol rename to protocol/pcp/dlu/eth/contracts/src/token/base/WrappedToken.sol diff --git a/protocol/pcp/contracts/src/token/base/WrappedTokenStorage.sol b/protocol/pcp/dlu/eth/contracts/src/token/base/WrappedTokenStorage.sol similarity index 100% rename from protocol/pcp/contracts/src/token/base/WrappedTokenStorage.sol rename to protocol/pcp/dlu/eth/contracts/src/token/base/WrappedTokenStorage.sol diff --git a/protocol/pcp/contracts/src/token/custodian/CustodianToken.sol b/protocol/pcp/dlu/eth/contracts/src/token/custodian/CustodianToken.sol similarity index 100% rename from protocol/pcp/contracts/src/token/custodian/CustodianToken.sol rename to protocol/pcp/dlu/eth/contracts/src/token/custodian/CustodianToken.sol diff --git a/protocol/pcp/contracts/src/token/faucet/MOVEFaucet.sol b/protocol/pcp/dlu/eth/contracts/src/token/faucet/MOVEFaucet.sol similarity index 100% rename from protocol/pcp/contracts/src/token/faucet/MOVEFaucet.sol rename to protocol/pcp/dlu/eth/contracts/src/token/faucet/MOVEFaucet.sol diff --git a/protocol/pcp/contracts/src/token/locked/LockedToken.sol b/protocol/pcp/dlu/eth/contracts/src/token/locked/LockedToken.sol similarity index 100% rename from protocol/pcp/contracts/src/token/locked/LockedToken.sol rename to protocol/pcp/dlu/eth/contracts/src/token/locked/LockedToken.sol diff --git a/protocol/pcp/contracts/src/token/locked/LockedTokenStorage.sol b/protocol/pcp/dlu/eth/contracts/src/token/locked/LockedTokenStorage.sol similarity index 100% rename from protocol/pcp/contracts/src/token/locked/LockedTokenStorage.sol rename to protocol/pcp/dlu/eth/contracts/src/token/locked/LockedTokenStorage.sol diff --git a/protocol/pcp/contracts/src/token/stlMoveToken.sol b/protocol/pcp/dlu/eth/contracts/src/token/stlMoveToken.sol similarity index 100% rename from protocol/pcp/contracts/src/token/stlMoveToken.sol rename to protocol/pcp/dlu/eth/contracts/src/token/stlMoveToken.sol diff --git a/protocol/pcp/contracts/test/Deployer.t.sol b/protocol/pcp/dlu/eth/contracts/test/Deployer.t.sol similarity index 100% rename from protocol/pcp/contracts/test/Deployer.t.sol rename to protocol/pcp/dlu/eth/contracts/test/Deployer.t.sol diff --git a/protocol/pcp/contracts/test/settlement/PCP.t.sol b/protocol/pcp/dlu/eth/contracts/test/settlement/PCP.t.sol similarity index 100% rename from protocol/pcp/contracts/test/settlement/PCP.t.sol rename to protocol/pcp/dlu/eth/contracts/test/settlement/PCP.t.sol diff --git a/protocol/pcp/contracts/test/staking/MovementStaking.t.sol b/protocol/pcp/dlu/eth/contracts/test/staking/MovementStaking.t.sol similarity index 100% rename from protocol/pcp/contracts/test/staking/MovementStaking.t.sol rename to protocol/pcp/dlu/eth/contracts/test/staking/MovementStaking.t.sol diff --git a/protocol/pcp/contracts/test/staking/base/BaseStaking.t.sol b/protocol/pcp/dlu/eth/contracts/test/staking/base/BaseStaking.t.sol similarity index 100% rename from protocol/pcp/contracts/test/staking/base/BaseStaking.t.sol rename to protocol/pcp/dlu/eth/contracts/test/staking/base/BaseStaking.t.sol diff --git a/protocol/pcp/contracts/test/token/Faucet.t.sol b/protocol/pcp/dlu/eth/contracts/test/token/Faucet.t.sol similarity index 100% rename from protocol/pcp/contracts/test/token/Faucet.t.sol rename to protocol/pcp/dlu/eth/contracts/test/token/Faucet.t.sol diff --git a/protocol/pcp/contracts/test/token/MOVEToken.t.sol b/protocol/pcp/dlu/eth/contracts/test/token/MOVEToken.t.sol similarity index 100% rename from protocol/pcp/contracts/test/token/MOVEToken.t.sol rename to protocol/pcp/dlu/eth/contracts/test/token/MOVEToken.t.sol diff --git a/protocol/pcp/contracts/test/token/MOVETokenV2.t.sol b/protocol/pcp/dlu/eth/contracts/test/token/MOVETokenV2.t.sol similarity index 100% rename from protocol/pcp/contracts/test/token/MOVETokenV2.t.sol rename to protocol/pcp/dlu/eth/contracts/test/token/MOVETokenV2.t.sol diff --git a/protocol/pcp/contracts/test/token/base/BaseToken.t.sol b/protocol/pcp/dlu/eth/contracts/test/token/base/BaseToken.t.sol similarity index 100% rename from protocol/pcp/contracts/test/token/base/BaseToken.t.sol rename to protocol/pcp/dlu/eth/contracts/test/token/base/BaseToken.t.sol diff --git a/protocol/pcp/contracts/test/token/base/MintableToken.t.sol b/protocol/pcp/dlu/eth/contracts/test/token/base/MintableToken.t.sol similarity index 100% rename from protocol/pcp/contracts/test/token/base/MintableToken.t.sol rename to protocol/pcp/dlu/eth/contracts/test/token/base/MintableToken.t.sol diff --git a/protocol/pcp/contracts/test/token/base/WrappedToken.t.sol b/protocol/pcp/dlu/eth/contracts/test/token/base/WrappedToken.t.sol similarity index 100% rename from protocol/pcp/contracts/test/token/base/WrappedToken.t.sol rename to protocol/pcp/dlu/eth/contracts/test/token/base/WrappedToken.t.sol diff --git a/protocol/pcp/contracts/test/token/custodian/CustodianToken.t.sol b/protocol/pcp/dlu/eth/contracts/test/token/custodian/CustodianToken.t.sol similarity index 100% rename from protocol/pcp/contracts/test/token/custodian/CustodianToken.t.sol rename to protocol/pcp/dlu/eth/contracts/test/token/custodian/CustodianToken.t.sol diff --git a/protocol/pcp/contracts/test/token/locked/LockedToken.t.sol b/protocol/pcp/dlu/eth/contracts/test/token/locked/LockedToken.t.sol similarity index 100% rename from protocol/pcp/contracts/test/token/locked/LockedToken.t.sol rename to protocol/pcp/dlu/eth/contracts/test/token/locked/LockedToken.t.sol diff --git a/protocol/pcp/contracts/test/token/stlMoveToken.t.sol b/protocol/pcp/dlu/eth/contracts/test/token/stlMoveToken.t.sol similarity index 100% rename from protocol/pcp/contracts/test/token/stlMoveToken.t.sol rename to protocol/pcp/dlu/eth/contracts/test/token/stlMoveToken.t.sol diff --git a/protocol/pcp/contracts/tsconfig.json b/protocol/pcp/dlu/eth/contracts/tsconfig.json similarity index 100% rename from protocol/pcp/contracts/tsconfig.json rename to protocol/pcp/dlu/eth/contracts/tsconfig.json diff --git a/protocol/pcp/contracts/upgrader/README.md b/protocol/pcp/dlu/eth/contracts/upgrader/README.md similarity index 100% rename from protocol/pcp/contracts/upgrader/README.md rename to protocol/pcp/dlu/eth/contracts/upgrader/README.md diff --git a/protocol/pcp/contracts/upgrader/accept.sh b/protocol/pcp/dlu/eth/contracts/upgrader/accept.sh similarity index 100% rename from protocol/pcp/contracts/upgrader/accept.sh rename to protocol/pcp/dlu/eth/contracts/upgrader/accept.sh diff --git a/protocol/pcp/contracts/upgrader/accept.ts b/protocol/pcp/dlu/eth/contracts/upgrader/accept.ts similarity index 100% rename from protocol/pcp/contracts/upgrader/accept.ts rename to protocol/pcp/dlu/eth/contracts/upgrader/accept.ts diff --git a/protocol/pcp/contracts/upgrader/acceptKms.sh b/protocol/pcp/dlu/eth/contracts/upgrader/acceptKms.sh similarity index 100% rename from protocol/pcp/contracts/upgrader/acceptKms.sh rename to protocol/pcp/dlu/eth/contracts/upgrader/acceptKms.sh diff --git a/protocol/pcp/contracts/upgrader/acceptKms.ts b/protocol/pcp/dlu/eth/contracts/upgrader/acceptKms.ts similarity index 100% rename from protocol/pcp/contracts/upgrader/acceptKms.ts rename to protocol/pcp/dlu/eth/contracts/upgrader/acceptKms.ts diff --git a/protocol/pcp/contracts/upgrader/kmsSign.ts b/protocol/pcp/dlu/eth/contracts/upgrader/kmsSign.ts similarity index 100% rename from protocol/pcp/contracts/upgrader/kmsSign.ts rename to protocol/pcp/dlu/eth/contracts/upgrader/kmsSign.ts diff --git a/protocol/pcp/contracts/upgrader/package-lock.json b/protocol/pcp/dlu/eth/contracts/upgrader/package-lock.json similarity index 100% rename from protocol/pcp/contracts/upgrader/package-lock.json rename to protocol/pcp/dlu/eth/contracts/upgrader/package-lock.json diff --git a/protocol/pcp/contracts/upgrader/package.json b/protocol/pcp/dlu/eth/contracts/upgrader/package.json similarity index 100% rename from protocol/pcp/contracts/upgrader/package.json rename to protocol/pcp/dlu/eth/contracts/upgrader/package.json diff --git a/protocol/pcp/contracts/upgrader/propose.sh b/protocol/pcp/dlu/eth/contracts/upgrader/propose.sh similarity index 100% rename from protocol/pcp/contracts/upgrader/propose.sh rename to protocol/pcp/dlu/eth/contracts/upgrader/propose.sh diff --git a/protocol/pcp/contracts/upgrader/propose.ts b/protocol/pcp/dlu/eth/contracts/upgrader/propose.ts similarity index 100% rename from protocol/pcp/contracts/upgrader/propose.ts rename to protocol/pcp/dlu/eth/contracts/upgrader/propose.ts diff --git a/protocol/pcp/contracts/upgrader/safeDeploy.sh b/protocol/pcp/dlu/eth/contracts/upgrader/safeDeploy.sh similarity index 100% rename from protocol/pcp/contracts/upgrader/safeDeploy.sh rename to protocol/pcp/dlu/eth/contracts/upgrader/safeDeploy.sh diff --git a/protocol/pcp/contracts/upgrader/safeDeploy.ts b/protocol/pcp/dlu/eth/contracts/upgrader/safeDeploy.ts similarity index 100% rename from protocol/pcp/contracts/upgrader/safeDeploy.ts rename to protocol/pcp/dlu/eth/contracts/upgrader/safeDeploy.ts diff --git a/protocol/pcp/contracts/yarn.lock b/protocol/pcp/dlu/eth/contracts/yarn.lock similarity index 100% rename from protocol/pcp/contracts/yarn.lock rename to protocol/pcp/dlu/eth/contracts/yarn.lock From feadaaa4e0a5007623d1293a70cb860d9d65b7be Mon Sep 17 00:00:00 2001 From: apenzk Date: Wed, 19 Mar 2025 16:33:38 +0100 Subject: [PATCH 17/25] edit --- protocol/pcp/dlu/eth/contracts/src/settlement/PCP.sol | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/protocol/pcp/dlu/eth/contracts/src/settlement/PCP.sol b/protocol/pcp/dlu/eth/contracts/src/settlement/PCP.sol index 8c679325..4654f0f2 100644 --- a/protocol/pcp/dlu/eth/contracts/src/settlement/PCP.sol +++ b/protocol/pcp/dlu/eth/contracts/src/settlement/PCP.sol @@ -269,12 +269,12 @@ contract PCP is Initializable, BaseSettlement, PCPStorage, IPCP { attesterStakeForAcceptingEpoch ); } - function submitSuperBlockCommitment(SuperBlockCommitment memory commitment) external { + function submitSuperBlockCommitment(SuperBlockCommitment memory superBlockCommitment) external { require( openAttestationEnabled || hasRole(TRUSTED_ATTESTER, msg.sender), "UNAUTHORIZED_SUPERBLOCK_COMMITMENT" ); - submitSuperBlockCommitmentForAttester(msg.sender, commitment); + submitSuperBlockCommitmentForAttester(msg.sender, superBlockCommitment); } function submitBatchSuperBlockCommitment(SuperBlockCommitment[] memory superBlockCommitments) public { From c922861a1e8a4a8a8af1c719f5bd5de122768463 Mon Sep 17 00:00:00 2001 From: apenzk Date: Thu, 20 Mar 2025 10:18:20 +0100 Subject: [PATCH 18/25] forge test --- .gitignore | 4 +++- protocol/pcp/dlu/eth/contracts/README.md | 14 +++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index b8b02b54..6332fc87 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,6 @@ target *.pem .debug -.env* \ No newline at end of file +.env* + +.gitmodules \ No newline at end of file diff --git a/protocol/pcp/dlu/eth/contracts/README.md b/protocol/pcp/dlu/eth/contracts/README.md index 6d176b35..fa2e21e2 100644 --- a/protocol/pcp/dlu/eth/contracts/README.md +++ b/protocol/pcp/dlu/eth/contracts/README.md @@ -3,8 +3,20 @@ - **RFC**: [RFC PCP](https://github.com/movementlabsxyz/rfcs/pulls) - **MIP**: [MIP-37](https://github.com/movementlabsxyz/MIP/blob/mip/postconfirmation/MIP/mip-37/README.md) -This directory contains the implementation of the MRC settlement smart contract. To test the contract, run: +This directory contains the implementation of the PCP settlement smart contract. To test the contract, run: +## Testing + +Setup dependencies: +```bash +forge install foundry-rs/forge-std --no-commit +forge install OpenZeppelin/openzeppelin-contracts --no-commit +forge install safe-global/safe-smart-account --no-commit +forge install transmissions11/solmate --no-commit +forge install OpenZeppelin/openzeppelin-contracts-upgradeable --no-commit +``` + +Run tests: ```bash forge test ``` From e97d78b745fecce01d7d9d3a71f137e551254623 Mon Sep 17 00:00:00 2001 From: apenzk Date: Thu, 20 Mar 2025 13:52:37 +0100 Subject: [PATCH 19/25] remove redundant files --- protocol/pcp/config/Cargo.toml | 22 ---- protocol/pcp/config/src/common/deploy.rs | 60 ---------- .../pcp/config/src/common/eth_connection.rs | 106 ------------------ protocol/pcp/config/src/common/mod.rs | 6 - protocol/pcp/config/src/common/settlement.rs | 55 --------- protocol/pcp/config/src/common/staking.rs | 14 --- protocol/pcp/config/src/common/testing.rs | 47 -------- .../pcp/config/src/common/transactions.rs | 29 ----- protocol/pcp/config/src/lib.rs | 67 ----------- 9 files changed, 406 deletions(-) delete mode 100644 protocol/pcp/config/Cargo.toml delete mode 100644 protocol/pcp/config/src/common/deploy.rs delete mode 100644 protocol/pcp/config/src/common/eth_connection.rs delete mode 100644 protocol/pcp/config/src/common/mod.rs delete mode 100644 protocol/pcp/config/src/common/settlement.rs delete mode 100644 protocol/pcp/config/src/common/staking.rs delete mode 100644 protocol/pcp/config/src/common/testing.rs delete mode 100644 protocol/pcp/config/src/common/transactions.rs delete mode 100644 protocol/pcp/config/src/lib.rs diff --git a/protocol/pcp/config/Cargo.toml b/protocol/pcp/config/Cargo.toml deleted file mode 100644 index 25b6177b..00000000 --- a/protocol/pcp/config/Cargo.toml +++ /dev/null @@ -1,22 +0,0 @@ -[package] -name = "postconfirmationsconfig" -description = "Configuration of the PCP settlement client" -version.workspace = true -edition.workspace = true -license.workspace = true -authors.workspace = true -repository.workspace = true -homepage.workspace = true -publish.workspace = true -rust-version.workspace = true - -[dependencies] -serde = { workspace = true , features = ["derive"] } -alloy = { workspace = true } -ffs-environment = { workspace = true } -anyhow = { workspace = true } -secure-signer-loader = { workspace = true } -secure-signer = { workspace = true} - -[lints] -workspace = true diff --git a/protocol/pcp/config/src/common/deploy.rs b/protocol/pcp/config/src/common/deploy.rs deleted file mode 100644 index 1c138f30..00000000 --- a/protocol/pcp/config/src/common/deploy.rs +++ /dev/null @@ -1,60 +0,0 @@ -use alloy::signers::local::PrivateKeySigner; -use ffs_environment::env_short_default; -use secure_signer::key::TryFromCanonicalString; -use secure_signer_loader::identifiers::{local::Local, SignerIdentifier}; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Config { - #[serde(default = "postconfirmations_deployment_working_directory")] - pub postconfirmations_deployment_working_directory: String, - #[serde(default = "default_signer_identifier")] - pub signer_identifier: SignerIdentifier, -} - -env_short_default!( - postconfirmations_deployment_working_directory, - String, - "protocol-units/settlement/pcp/contracts" -); - -env_short_default!( - postconfirmations_local_anvil_account_private_key, - String, - PrivateKeySigner::random().to_bytes().to_string() -); - -pub fn default_signer_identifier() -> SignerIdentifier { - match std::env::var("postconfirmations_SIGNER_IDENTIFIER") { - Ok(str_value) => SignerIdentifier::try_from_canonical_string(&str_value).unwrap(), - Err(_) => SignerIdentifier::Local(Local { - // todo: validate this is a valid private key - private_key_hex_bytes: postconfirmations_local_anvil_account_private_key(), - }), - } -} - -pub fn maybe_deploy() -> Option { - match std::env::var("MAYBE_DEPLOY_PCP") { - Ok(str_value) => { - // if it parses as true then we want to deploy under the default config - let bool_value = str_value.parse::().unwrap_or(false); - - if bool_value { - Some(Config::default()) - } else { - None - } - } - Err(_) => None, - } -} - -impl Default for Config { - fn default() -> Self { - Config { - postconfirmations_deployment_working_directory: postconfirmations_deployment_working_directory(), - signer_identifier: default_signer_identifier(), - } - } -} diff --git a/protocol/pcp/config/src/common/eth_connection.rs b/protocol/pcp/config/src/common/eth_connection.rs deleted file mode 100644 index 437bee14..00000000 --- a/protocol/pcp/config/src/common/eth_connection.rs +++ /dev/null @@ -1,106 +0,0 @@ -use ffs_environment::env_default; -use serde::{Deserialize, Serialize}; - -const DEFAULT_ETH_RPC_CONNECTION_HOSTNAME: &str = "ethereum-holesky-rpc.publicnode.com"; -const DEFAULT_ETH_RPC_CONNECTION_PORT: u16 = 443; -const DEFAULT_ETH_WS_CONNECTION_HOSTNAME: &str = "ethereum-holesky-rpc.publicnode.com"; -const DEFAULT_ETH_WS_CONNECTION_PORT: u16 = 443; // same as RPC - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct Config { - #[serde(default = "default_eth_rpc_connection_protocol")] - pub eth_rpc_connection_protocol: String, - #[serde(default = "default_eth_rpc_connection_hostname")] - pub eth_rpc_connection_hostname: String, - #[serde(default = "default_eth_rpc_connection_port")] - pub eth_rpc_connection_port: u16, - - #[serde(default = "default_eth_ws_connection_protocol")] - pub eth_ws_connection_protocol: String, - #[serde(default = "default_eth_ws_connection_hostname")] - pub eth_ws_connection_hostname: String, - #[serde(default = "default_eth_ws_connection_port")] - pub eth_ws_connection_port: u16, - - #[serde(default)] - pub eth_chain_id: u64, -} - -env_default!( - default_eth_rpc_connection_protocol, - "ETH_RPC_CONNECTION_PROTOCOL", - String, - "https".to_string() -); - -env_default!( - default_eth_rpc_connection_hostname, - "ETH_RPC_CONNECTION_HOSTNAME", - String, - DEFAULT_ETH_RPC_CONNECTION_HOSTNAME.to_string() -); - -env_default!( - default_eth_rpc_connection_port, - "ETH_RPC_CONNECTION_PORT", - u16, - DEFAULT_ETH_RPC_CONNECTION_PORT -); - -env_default!( - default_eth_ws_connection_protocol, - "ETH_WS_CONNECTION_PROTOCOL", - String, - "ws".to_string() -); - -env_default!( - default_eth_ws_connection_hostname, - "ETH_WS_CONNECTION_HOSTNAME", - String, - DEFAULT_ETH_WS_CONNECTION_HOSTNAME.to_string() -); - -env_default!( - default_eth_ws_connection_port, - "ETH_WS_CONNECTION_PORT", - u16, - DEFAULT_ETH_WS_CONNECTION_PORT -); - -env_default!(default_eth_chain_id, "ETH_CHAIN_ID", u64, 0); - -impl Default for Config { - fn default() -> Self { - Config { - eth_rpc_connection_protocol: default_eth_rpc_connection_protocol(), - eth_rpc_connection_hostname: default_eth_rpc_connection_hostname(), - eth_rpc_connection_port: default_eth_rpc_connection_port(), - - eth_ws_connection_protocol: default_eth_ws_connection_protocol(), - eth_ws_connection_hostname: default_eth_ws_connection_hostname(), - eth_ws_connection_port: default_eth_ws_connection_port(), - eth_chain_id: default_eth_chain_id(), - } - } -} - -impl Config { - pub fn eth_rpc_connection_url(&self) -> String { - format!( - "{}://{}:{}", - self.eth_rpc_connection_protocol, - self.eth_rpc_connection_hostname, - self.eth_rpc_connection_port - ) - } - - pub fn eth_ws_connection_url(&self) -> String { - format!( - "{}://{}:{}", - self.eth_ws_connection_protocol, - self.eth_ws_connection_hostname, - self.eth_ws_connection_port - ) - } -} diff --git a/protocol/pcp/config/src/common/mod.rs b/protocol/pcp/config/src/common/mod.rs deleted file mode 100644 index 3c5c62d3..00000000 --- a/protocol/pcp/config/src/common/mod.rs +++ /dev/null @@ -1,6 +0,0 @@ -pub mod deploy; -pub mod eth_connection; -pub mod settlement; -pub mod staking; -pub mod testing; -pub mod transactions; diff --git a/protocol/pcp/config/src/common/settlement.rs b/protocol/pcp/config/src/common/settlement.rs deleted file mode 100644 index 208f3890..00000000 --- a/protocol/pcp/config/src/common/settlement.rs +++ /dev/null @@ -1,55 +0,0 @@ -use alloy::signers::local::PrivateKeySigner; -use ffs_environment::env_default; -use secure_signer_loader::identifiers::{local::Local, SignerIdentifier}; -use serde::{Deserialize, Serialize}; -use std::env; - -const DEFAULT_postconfirmations_CONTRACT_ADDRESS: &str = "0x5fc8d32690cc91d4c39d9d3abcbd16989f875707"; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Config { - #[serde(default = "default_should_settle")] - pub should_settle: bool, - #[serde(default = "default_signer_identifier")] - pub signer_identifier: SignerIdentifier, - #[serde(default = "default_postconfirmations_contract_address")] - pub postconfirmations_contract_address: String, - #[serde(default = "default_settlement_super_block_size")] - pub settlement_super_block_size: u64, - #[serde(default = "default_settlement_admin_mode")] - pub settlement_admin_mode: bool, -} - -pub fn default_signer_identifier() -> SignerIdentifier { - let random_wallet = PrivateKeySigner::random(); - let private_key_hex_bytes = random_wallet.to_bytes().to_string(); - let signer_identifier = SignerIdentifier::Local(Local { private_key_hex_bytes }); - signer_identifier -} - -env_default!( - default_postconfirmations_contract_address, - "postconfirmations_CONTRACT_ADDRESS", - String, - DEFAULT_postconfirmations_CONTRACT_ADDRESS.to_string() -); - -env_default!(default_settlement_admin_mode, "postconfirmations_SETTLEMENT_ADMIN_MODE", bool, false); - -env_default!(default_settlement_super_block_size, "postconfirmations_SETTLEMENT_SUPER_BLOCK_SIZE", u64, 1); - -pub fn default_should_settle() -> bool { - env::var("ETH_SIGNER_PRIVATE_KEY").is_ok() -} - -impl Default for Config { - fn default() -> Self { - Config { - should_settle: default_should_settle(), - signer_identifier: default_signer_identifier(), - postconfirmations_contract_address: default_postconfirmations_contract_address(), - settlement_admin_mode: default_settlement_admin_mode(), - settlement_super_block_size: default_settlement_super_block_size(), - } - } -} diff --git a/protocol/pcp/config/src/common/staking.rs b/protocol/pcp/config/src/common/staking.rs deleted file mode 100644 index a872a95a..00000000 --- a/protocol/pcp/config/src/common/staking.rs +++ /dev/null @@ -1,14 +0,0 @@ -use ffs_environment::env_short_default; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Config { - #[serde(default = "default_move_token_contract_address")] - pub move_token_contract_address: String, - #[serde(default = "default_movement_staking_contract_address")] - pub movement_staking_contract_address: String, -} - -env_short_default!(default_move_token_contract_address, String, "0x0"); - -env_short_default!(default_movement_staking_contract_address, String, "0x0"); diff --git a/protocol/pcp/config/src/common/testing.rs b/protocol/pcp/config/src/common/testing.rs deleted file mode 100644 index 3a49c8bf..00000000 --- a/protocol/pcp/config/src/common/testing.rs +++ /dev/null @@ -1,47 +0,0 @@ -use ffs_environment::env_short_default; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Config { - #[serde(default = "Vec::new")] - pub well_known_account_private_keys: Vec, - - #[serde(default = "default_postconfirmations_testing_admin_account_private_key")] - pub postconfirmations_testing_admin_account_private_key: String, - - #[serde(default = "default_move_token_contract_address")] - pub move_token_contract_address: String, - - #[serde(default = "default_movement_staking_contract_address")] - pub movement_staking_contract_address: String, -} - -env_short_default!(default_postconfirmations_testing_admin_account_private_key, String, "0x0"); - -env_short_default!(default_move_token_contract_address, String, "0x0"); - -env_short_default!(default_movement_staking_contract_address, String, "0x0"); - -// env_or_none!( -// default_maybe_testing, -// Config, -// default_postconfirmations_testing_admin_account_private_key, -// default_move_token_contract_address, -// default_movement_staking_contract_address -// ); - -pub fn maybe_testing() -> Option { - std::env::var("MAYBE_TESTING_PCP").ok().map(|_| Config::default()) -} - -impl Default for Config { - fn default() -> Self { - Config { - well_known_account_private_keys: Vec::new(), - postconfirmations_testing_admin_account_private_key: - default_postconfirmations_testing_admin_account_private_key(), - move_token_contract_address: default_move_token_contract_address(), - movement_staking_contract_address: default_movement_staking_contract_address(), - } - } -} diff --git a/protocol/pcp/config/src/common/transactions.rs b/protocol/pcp/config/src/common/transactions.rs deleted file mode 100644 index 9b95ce17..00000000 --- a/protocol/pcp/config/src/common/transactions.rs +++ /dev/null @@ -1,29 +0,0 @@ -use ffs_environment::env_short_default; -use serde::{Deserialize, Serialize}; - -#[derive(Debug, Clone, Serialize, Deserialize)] -pub struct Config { - #[serde(default = "default_gas_limit")] - pub gas_limit: u64, - /// Timeout for batching blocks, in milliseconds - #[serde(default = "default_batch_timeout")] - pub batch_timeout: u64, - #[serde(default = "default_transaction_send_retries")] - pub transaction_send_retries: u32, -} - -env_short_default!(default_gas_limit, u64, 10_000_000_000_000_000 as u64); - -env_short_default!(default_batch_timeout, u64, 2000 as u64); - -env_short_default!(default_transaction_send_retries, u32, 10 as u32); - -impl Default for Config { - fn default() -> Self { - Config { - gas_limit: default_gas_limit(), - batch_timeout: default_batch_timeout(), - transaction_send_retries: default_transaction_send_retries(), - } - } -} diff --git a/protocol/pcp/config/src/lib.rs b/protocol/pcp/config/src/lib.rs deleted file mode 100644 index fa44f5f4..00000000 --- a/protocol/pcp/config/src/lib.rs +++ /dev/null @@ -1,67 +0,0 @@ -//! This crate provides configuration parameters for the PCP settlement -//! component of a Movement node. -use serde::{Deserialize, Serialize}; -pub mod common; - -use common::deploy::maybe_deploy; -use common::testing::maybe_testing; -use ffs_environment::env_short_default; - -#[derive(Clone, Debug, Serialize, Deserialize)] -pub struct Config { - /// The ETH connection configuration. - /// This is mandatory for all possible operations. - #[serde(default)] - pub eth_connection: common::eth_connection::Config, - - #[serde(default)] - pub settle: common::settlement::Config, - - #[serde(default)] - pub transactions: common::transactions::Config, - - /// Whether or not to attempt to run locally. - #[serde(default = "maybe_run_local")] - pub maybe_run_local: bool, - - /// Optional deployment of contracts config - #[serde(default = "maybe_deploy")] - pub deploy: Option, - - /// Optional testing config - #[serde(default = "maybe_testing")] - pub testing: Option, -} - -env_short_default!(maybe_run_local, bool, false); - -impl Config { - pub fn eth_rpc_connection_url(&self) -> String { - self.eth_connection.eth_rpc_connection_url() - } - - pub fn eth_ws_connection_url(&self) -> String { - self.eth_connection.eth_ws_connection_url() - } - - pub fn should_settle(&self) -> bool { - self.settle.should_settle - } - - pub fn should_run_local(&self) -> bool { - self.maybe_run_local - } -} - -impl Default for Config { - fn default() -> Self { - Config { - eth_connection: common::eth_connection::Config::default(), - settle: common::settlement::Config::default(), - transactions: common::transactions::Config::default(), - maybe_run_local: maybe_run_local(), - deploy: maybe_deploy(), - testing: maybe_testing(), - } - } -} From a2a62c68a82c0b24c1a87d895089bcbf2e8e2509 Mon Sep 17 00:00:00 2001 From: apenzk Date: Thu, 20 Mar 2025 15:55:28 +0100 Subject: [PATCH 20/25] spellright --- .vscode/spellright.dict | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/.vscode/spellright.dict b/.vscode/spellright.dict index 90c4013c..ddef9ada 100644 --- a/.vscode/spellright.dict +++ b/.vscode/spellright.dict @@ -1,15 +1,3 @@ -Aptos -Changelog Fastconfirmation -Fastconfirmations -Merkle -multisig -onchain -preimage -postconfirm -postconfirmed testnet -timelock -timelocks -trustlessness -unstaking +unstaking \ No newline at end of file From 2841263c91a026f21fcc11f90c59b6da8d504fb2 Mon Sep 17 00:00:00 2001 From: apenzk Date: Fri, 21 Mar 2025 11:37:16 +0100 Subject: [PATCH 21/25] update abis --- protocol/mcr/cli/client/abis/MCR.json | 2 +- protocol/mcr/cli/client/abis/MOVEToken.json | 2984 +---------------- .../mcr/cli/client/abis/MovementStaking.json | 2 +- 3 files changed, 3 insertions(+), 2985 deletions(-) diff --git a/protocol/mcr/cli/client/abis/MCR.json b/protocol/mcr/cli/client/abis/MCR.json index 1b1c5c7c..c9eced46 100644 --- a/protocol/mcr/cli/client/abis/MCR.json +++ b/protocol/mcr/cli/client/abis/MCR.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"COMMITMENT_ADMIN","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"TRUSTED_ATTESTER","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"acceptGenesisCeremony","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"acceptorTerm","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchGrantCommitmentAdmin","inputs":[{"name":"accounts","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"batchGrantTrustedAttester","inputs":[{"name":"attesters","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitmentStakes","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"commitement","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"commitments","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"computeTotalStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"computeTotalStakeForAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"createSuperBlockCommitment","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct MCRStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"pure"},{"type":"function","name":"currentAcceptor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"currentAcceptorIsLive","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"pure"},{"type":"function","name":"forceLatestCommitment","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct MCRStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStakeForAcceptingEpoch","inputs":[{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCurrentAcceptor","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStakeForAcceptingEpoch","inputs":[{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getL1BlockStartOfCurrentAcceptorTerm","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getMaxTolerableSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmedCommitment","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct MCRStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"getPresentEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakeForAcceptingEpoch","inputs":[{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakedAttestersForAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getValidatorCommitmentAtSuperBlockHeight","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct MCRStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"grantCommitmentAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantTrustedAttester","inputs":[{"name":"attester","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_stakingContract","type":"address","internalType":"contract IMovementStaking"},{"name":"_lastPostconfirmedSuperBlockHeight","type":"uint256","internalType":"uint256"},{"name":"_leadingSuperBlockTolerance","type":"uint256","internalType":"uint256"},{"name":"_epochDuration","type":"uint256","internalType":"uint256"},{"name":"_custodians","type":"address[]","internalType":"address[]"},{"name":"_acceptorTerm","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lastPostconfirmedSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"leadingSuperBlockTolerance","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"openAttestationEnabled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"postconfirmSuperBlocks","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"postconfirmedAtL1BlockHeight","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockHeight","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedAtL1BlockHeightByAcceptor","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockHeight","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedAtL1BlockTimestamp","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockTimestamp","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedBy","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"attester","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedByAcceptor","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedSuperBlocks","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedSuperBlocksVersion","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setLastPostconfirmedSuperBlockHeight","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOpenAttestationEnabled","inputs":[{"name":"enabled","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPostconfirmedCommitmentAtBlockHeight","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct MCRStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakingContract","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IMovementStaking"}],"stateMutability":"view"},{"type":"function","name":"submitBatchSuperBlockCommitment","inputs":[{"name":"superBlockCommitments","type":"tuple[]","internalType":"struct MCRStorage.SuperBlockCommitment[]","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitSuperBlockCommitment","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct MCRStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"superBlockHeightAssignedEpoch","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epoch","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"versionedPostconfirmedSuperBlocks","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SuperBlockCommitmentSubmitted","inputs":[{"name":"blockHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"stateCommitment","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"attesterStake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SuperBlockPostconfirmed","inputs":[{"name":"blockHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"stateCommitment","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"height","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AttesterAlreadyCommitted","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"UnacceptableSuperBlockCommitment","inputs":[]}],"bytecode":{"object":"0x60a0604052306080523480156012575f80fd5b50608051612cf76100395f395f8181611d5a01528181611d830152611ec40152612cf75ff3fe60806040526004361061039d575f3560e01c80638129fc1c116101de578063c691e6e411610108578063ec18c1861161009d578063f8d26aec1161006d578063f8d26aec14610beb578063f99f6e4c14610c16578063fc2788ad14610c2a578063fdafe9ca14610c60575f80fd5b8063ec18c18614610b65578063eda67fc414610b7a578063ee99205c14610bb4578063ef9ae15c14610bd2575f80fd5b8063d547741f116100d8578063d547741f14610ada578063e4566c7814610af9578063e4d991ee14610b0c578063e90d4c0614610b20575f80fd5b8063c691e6e414610a68578063cf6772ad14610a7d578063d2526fef14610a9c578063d440116d14610abb575f80fd5b8063949d7c2a1161017e578063ad3cb1cc1161014e578063ad3cb1cc146109d9578063ba26513e14610a16578063bb04bd2f14610a35578063c5de60a914610a54575f80fd5b8063949d7c2a1461095b578063a207fe2f1461097a578063a217fddf146109a5578063aa0d6fcd146109b8575f80fd5b806391807e4f116101b957806391807e4f146108e057806391d148541461091457806392a2ebf314610933578063943b79e214610947575f80fd5b80638129fc1c1461088257806381df17461461089657806385e6b8c2146108b5575f80fd5b806336568abe116102ca57806352d1902d1161025f5780636c713af81161022f5780636c713af8146108045780637aa81c2a146108185780637ac561c81461083757806380e460f014610862575f80fd5b806352d1902d14610732578063556d97c8146107465780635db916ab146107c5578063622e3616146107e5575f80fd5b8063491d04671161029a578063491d0467146106c25780634b47d955146106e15780634c17b024146107005780634f1ef2861461071f575f80fd5b806336568abe1461060157806337d7f58f146106205780633ba1800514610634578063410f314614610694575f80fd5b80630daf6181116103405780632bfd11d6116103105780632bfd11d61461051d5780632e55d0f61461058c5780632f2ff15d146105c35780633119edd4146105e2575f80fd5b80630daf6181146104a15780630e74b609146104c05780631de38fe1146104df578063248a9ca3146104fe575f80fd5b806303d3f7fd1161037b57806303d3f7fd1461042c57806303f02fc01461044f57806308c397931461046e57806308c7050f14610482575f80fd5b8063017304e1146103a157806301ffc9a7146103b7578063026583d7146103eb575b5f80fd5b3480156103ac575f80fd5b506103b5610c75565b005b3480156103c2575f80fd5b506103d66103d1366004612528565b610c80565b60405190151581526020015b60405180910390f35b3480156103f6575f80fd5b5061040a61040536600461254f565b610cb6565b60408051825181526020808401519082015291810151908201526060016103e2565b348015610437575f80fd5b5061044160015481565b6040519081526020016103e2565b34801561045a575f80fd5b506103b5610469366004612665565b610cef565b348015610479575f80fd5b50610441610e8d565b34801561048d575f80fd5b506103b561049c36600461272c565b610e9e565b3480156104ac575f80fd5b506104416104bb366004612746565b610f2b565b3480156104cb575f80fd5b506103b56104da36600461272c565b610fe4565b3480156104ea575f80fd5b506104416104f936600461275d565b61102d565b348015610509575f80fd5b50610441610518366004612746565b6110a6565b348015610528575f80fd5b5061040a610537366004612746565b60408051606080820183525f80835260208084018290529284018190526010548152600f8352838120948152938252928290208251938401835280548452600181015491840191909152600201549082015290565b348015610597575f80fd5b506004546105ab906001600160a01b031681565b6040516001600160a01b0390911681526020016103e2565b3480156105ce575f80fd5b506103b56105dd36600461275d565b6110c6565b3480156105ed575f80fd5b506103b56105fc36600461272c565b6110e8565b34801561060c575f80fd5b506103b561061b36600461275d565b6111b4565b34801561062b575f80fd5b506104416111ec565b34801561063f575f80fd5b5061067961064e36600461278b565b600f60209081525f928352604080842090915290825290208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103e2565b34801561069f575f80fd5b506103d66106ae366004612746565b60096020525f908152604090205460ff1681565b3480156106cd575f80fd5b506104416106dc3660046127ab565b611257565b3480156106ec575f80fd5b506103b56106fb3660046127c6565b611269565b34801561070b575f80fd5b506103b561071a366004612746565b6112d6565b6103b561072d3660046127f7565b61136e565b34801561073d575f80fd5b50610441611389565b348015610751575f80fd5b5061040a61076036600461275d565b604080516060810182525f8082526020820181905291810191909152505f9182526006602090815260408084206001600160a01b0393909316845291815291819020815160608101835281548152600182015493810193909352600201549082015290565b3480156107d0575f80fd5b506104415f80516020612ca283398151915281565b3480156107f0575f80fd5b506103b56107ff36600461289c565b6113a4565b34801561080f575f80fd5b50610441611419565b348015610823575f80fd5b50610441610832366004612936565b611449565b348015610842575f80fd5b50610441610851366004612746565b600a6020525f908152604090205481565b34801561086d575f80fd5b506104415f80516020612c4283398151915281565b34801561088d575f80fd5b506103b56114d2565b3480156108a1575f80fd5b506103b56108b03660046127ab565b6115dc565b3480156108c0575f80fd5b506104416108cf366004612746565b60056020525f908152604090205481565b3480156108eb575f80fd5b506105ab6108fa366004612746565b60086020525f90815260409020546001600160a01b031681565b34801561091f575f80fd5b506103d661092e36600461275d565b61160a565b34801561093e575f80fd5b506103b5611640565b348015610952575f80fd5b506104416116f5565b348015610966575f80fd5b506103b56109753660046127ab565b611706565b348015610985575f80fd5b50610441610994366004612746565b600b6020525f908152604090205481565b3480156109b0575f80fd5b506104415f81565b3480156109c3575f80fd5b506109cc611743565b6040516103e291906129b8565b3480156109e4575f80fd5b50610a09604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103e291906129ca565b348015610a21575f80fd5b50610441610a3036600461275d565b6117af565b348015610a40575f80fd5b50610441610a4f3660046129ff565b61186a565b348015610a5f575f80fd5b5061044161187d565b348015610a73575f80fd5b5061044160035481565b348015610a88575f80fd5b506103b5610a973660046127c6565b6118a7565b348015610aa7575f80fd5b506103b5610ab6366004612a2b565b6118f4565b348015610ac6575f80fd5b50610441610ad53660046127ab565b61191f565b348015610ae5575f80fd5b506103b5610af436600461275d565b611931565b348015610b04575f80fd5b5060016103d6565b348015610b17575f80fd5b5061044161194d565b348015610b2b575f80fd5b50610679610b3a36600461275d565b600660209081525f928352604080842090915290825290208054600182015460029092015490919083565b348015610b70575f80fd5b5061044160105481565b348015610b85575f80fd5b50610679610b94366004612746565b600d6020525f908152604090208054600182015460029092015490919083565b348015610bbf575f80fd5b505f546105ab906001600160a01b031681565b348015610bdd575f80fd5b50600e546103d69060ff1681565b348015610bf6575f80fd5b50610441610c05366004612746565b600c6020525f908152604090205481565b348015610c21575f80fd5b506105ab61197d565b348015610c35575f80fd5b50610441610c4436600461278b565b600760209081525f928352604080842090915290825290205481565b348015610c6b575f80fd5b5061044160025481565b610c7e33611a2e565b565b5f6001600160e01b03198216637965db0b60e01b1480610cb057506301ffc9a760e01b6001600160e01b03198316145b92915050565b60408051606080820183525f808352602080840182905292840152825190810183528581529081018490529081018290525b9392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610d335750825b90505f826001600160401b03166001148015610d4e5750303b155b905081158015610d5c575080155b15610d7a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610da457845460ff60401b1916600160401b1785555b610dac611ab4565b5f80546001600160a01b0319166001600160a01b038d1690811790915560018a905560028b9055604051631a6e609f60e31b815263d37304f890610df6908b908b90600401612a4a565b5f604051808303815f87803b158015610e0d575f80fd5b505af1158015610e1f573d5f803e3d5ffd5b50505050610e2c33611706565b610e35336115dc565b60038690558315610e8057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b5f610e996104bb611419565b905090565b610eb55f80516020612c428339815191523361160a565b610f1f5760405162461bcd60e51b815260206004820152603060248201527f464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d4960448201526f544d454e545f41444d494e5f4f4e4c5960801b60648201526084015b60405180910390fd5b610f28816110e8565b50565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa158015610f70573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f979190810190612a62565b90505f805b8251811015610fdc57610fc885848381518110610fbb57610fbb612af1565b602002602001015161102d565b610fd29083612b19565b9150600101610f9c565b509392505050565b600e5460ff168061100757506110075f80516020612ca28339815191523361160a565b6110235760405162461bcd60e51b8152600401610f1690612b2c565b610f283382611ac6565b5f8054604051630ce52af560e01b8152306004820152602481018590526001600160a01b03848116604483015290911690630ce52af590606401602060405180830381865afa158015611082573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce89190612b6e565b5f9081525f80516020612c82833981519152602052604090206001015490565b6110cf826110a6565b6110d881611c2b565b6110e28383611c35565b50505050565b6110ff5f80516020612c428339815191523361160a565b61117f5760405162461bcd60e51b8152602060048201526044602482018190527f5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e908201527f545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f6064820152634f4e4c5960e01b608482015260a401610f16565b6010545f908152600f602090815260408083208451845282529182902083518155908301516001820155910151600290910155565b6001600160a01b03811633146111dd5760405163334bd91960e11b815260040160405180910390fd5b6111e78282611cd6565b505050565b5f805460405163d980b40d60e01b81523060048201526001600160a01b039091169063d980b40d906024015b602060405180830381865afa158015611233573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e999190612b6e565b5f610cb0611263611419565b836117af565b6112735f3361160a565b61128f5760405162461bcd60e51b8152600401610f1690612b85565b5f5b81518110156112d2576112ca5f80516020612c428339815191528383815181106112bd576112bd612af1565b60200260200101516110c6565b600101611291565b5050565b6112ed5f80516020612c428339815191523361160a565b6113695760405162461bcd60e51b815260206004820152604160248201527f5345545f4c4153545f504f5354434f4e4649524d45445f5355504552424c4f4360448201527f4b5f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c6064820152605960f81b608482015260a401610f16565b600255565b611376611d4f565b61137f82611df3565b6112d28282611dfd565b5f611392611eb9565b505f80516020612c6283398151915290565b600e5460ff16806113c757506113c75f80516020612ca28339815191523361160a565b6113e35760405162461bcd60e51b8152600401610f1690612b2c565b5f5b81518110156112d2576114113383838151811061140457611404612af1565b6020026020010151611ac6565b6001016113e5565b5f80546040516322fceb7560e01b81523060048201526001600160a01b03909116906322fceb7590602401611218565b5f80546040516324f7ee1760e21b8152306004820152602481018690526001600160a01b0385811660448301528481166064830152909116906393dfb85c90608401602060405180830381865afa1580156114a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ca9190612b6e565b949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156115165750825b90505f826001600160401b031660011480156115315750303b155b90508115801561153f575080155b1561155d5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561158757845460ff60401b1916600160401b1785555b61158f611f02565b83156115d557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f80516020612c428339815191526115f381611c2b565b6112d25f80516020612ca2833981519152836110c6565b5f9182525f80516020612c82833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61164a5f3361160a565b6116a45760405162461bcd60e51b815260206004820152602560248201527f4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e6044820152645f4f4e4c5960d81b6064820152608401610f16565b5f8054604080516392a2ebf360e01b815290516001600160a01b03909216926392a2ebf39260048084019382900301818387803b1580156116e3575f80fd5b505af11580156110e2573d5f803e3d5ffd5b5f600154600254610e999190612b19565b6117105f3361160a565b61172c5760405162461bcd60e51b8152600401610f1690612b85565b610f285f80516020612c42833981519152826110c6565b5f54604051634234a47960e01b81523060048201526060916001600160a01b031690634234a479906024015f60405180830381865afa158015611788573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e999190810190612a62565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa1580156117f4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261181b9190810190612a62565b90505f805b82518110156118615761184d8684838151811061183f5761183f612af1565b602002602001015187611449565b6118579083612b19565b9150600101611820565b50949350505050565b5f610ce8611876611419565b8484611449565b5f804390505f6001600354836118939190612bdb565b61189d9084612bee565b610ce89190612bee565b5f80516020612c428339815191526118be81611c2b565b5f5b82518110156111e7576118ec5f80516020612ca28339815191528483815181106112bd576112bd612af1565b6001016118c0565b5f80516020612c4283398151915261190b81611c2b565b50600e805460ff1916911515919091179055565b5f610cb061192b611419565b8361102d565b61193a826110a6565b61194381611c2b565b6110e28383611cd6565b5f8054604051639b7cadc760e01b81523060048201526001600160a01b0390911690639b7cadc790602401611218565b5f8061198761187d565b5f8054604051634234a47960e01b81523060048201529240935090916001600160a01b0390911690634234a479906024015f60405180830381865afa1580156119d2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119f99190810190612a62565b80519091505f90611a0a9084612bdb565b9050818181518110611a1e57611a1e612af1565b6020026020010151935050505090565b611a3661197d565b6001600160a01b0316816001600160a01b031614611a965760405162461bcd60e51b815260206004820152601c60248201527f4e6f744163636570746f72416e644163636570746f7249734c697665000000006044820152606401610f16565b611aad6002546001611aa89190612b19565b611f12565b611a965750565b611abc612090565b610f285f33611c35565b80515f9081526006602090815260408083206001600160a01b038616845290915290205415611b0857604051630ae09ad960e41b815260040160405180910390fd5b8051600154600254611b1a9190612b19565b1015611b3957604051630ae09ad960e41b815260040160405180910390fd5b80515f908152600560205260408120549003611b6857611b576111ec565b81515f908152600560205260409020555b80515f9081526006602090815260408083206001600160a01b0386168452825280832084518155918401516001830155830151600290910155611baa83611257565b82515f908152600760209081526040808320828701518452909152812080549293508392909190611bdc908490612b19565b9091555050604080830151602080850151835190815290810184905290917fa8445a6b8a16633ad62fbc0954848ec55c4d5323d90b9745dbda4121ec5ce12b91015b60405180910390a2505050565b610f2881336120d9565b5f5f80516020612c82833981519152611c4e848461160a565b611ccd575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611c833390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610cb0565b5f915050610cb0565b5f5f80516020612c82833981519152611cef848461160a565b15611ccd575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610cb0565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611dd557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611dc95f80516020612c62833981519152546001600160a01b031690565b6001600160a01b031614155b15610c7e5760405163703e46dd60e11b815260040160405180910390fd5b5f6112d281611c2b565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e57575060408051601f3d908101601f19168201909252611e5491810190612b6e565b60015b611e7f57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610f16565b5f80516020612c628339815191528114611eaf57604051632a87526960e21b815260048101829052602401610f16565b6111e78383612112565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c7e5760405163703e46dd60e11b815260040160405180910390fd5b611f0a612090565b610c7e611ab4565b5f81815260056020819052604082205490829081611f31600187612bee565b81526020019081526020015f2054905080821015611f5a575f8481526005602052604090208190555b8091505b81611f67611419565b1015611f9257611f7633611257565b5f03611f8557505f9392505050565b611f8d612167565b611f5e565b611f9b33611257565b5f03611faa57505f9392505050565b5f6003611fb684610f2b565b611fc1906002612c01565b611fcb9190612c18565b90505f611fd6611743565b90505f5b8151811015612084575f828281518110611ff657611ff6612af1565b6020908102919091018101515f8a81526006835260408082206001600160a01b0384168352845280822081516060810183528154808252600183015482880190815260029093015482850152845260078652828420915184529452902054909250858111156120795761206982336121c4565b5060019998505050505050505050565b505050600101611fda565b505f9695505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610c7e57604051631afcd79f60e31b815260040160405180910390fd5b6120e3828261160a565b6112d25760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610f16565b61211b826122e1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561215f576111e78282612344565b6112d26123b6565b5f805460408051632a21edc760e21b815290516001600160a01b039092169263a887b71c9260048084019382900301818387803b1580156121a6575f80fd5b505af11580156121b8573d5f803e3d5ffd5b50505050610c7e6123d5565b5f6121cd611419565b83515f9081526005602052604090205490915081146121ff57604051631f2d18b160e31b815260040160405180910390fd5b825161220d90600190612bee565b6002541461222e57604051631f2d18b160e31b815260040160405180910390fd5b6010545f908152600f602090815260408083208651845282528083208651808255878401805160018401558884018051600294850155928290559085526008845282852080546001600160a01b0319166001600160a01b03891617905587518552600a845282852043905587518552600b84529382902042905551925186518251918252928101929092527fc28fbeddd1d6ba9496d1b91564f9aa2bc4dffed78aae631bbc6ef67296ad3c3c9101611c1e565b806001600160a01b03163b5f0361231657604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610f16565b5f80516020612c6283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516123609190612c2b565b5f60405180830381855af49150503d805f8114612398576040519150601f19603f3d011682016040523d82523d5f602084013e61239d565b606091505b50915091506123ad8583836124a3565b95945050505050565b3415610c7e5760405163b398979f60e01b815260040160405180910390fd5b5f8054604051634234a47960e01b81523060048201526001600160a01b0390911690634234a479906024015f60405180830381865afa15801561241a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124419190810190612a62565b90505f81516001436124539190612bee565b61245e919040612bdb565b905081818151811061247257612472612af1565b602002602001015160045f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b6060826124b8576124b3826124ff565b610ce8565b81511580156124cf57506001600160a01b0384163b155b156124f857604051639996b31560e01b81526001600160a01b0385166004820152602401610f16565b5080610ce8565b80511561250f5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f60208284031215612538575f80fd5b81356001600160e01b031981168114610ce8575f80fd5b5f805f60608486031215612561575f80fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114610f28575f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156125c8576125c861258c565b604052919050565b5f6001600160401b038211156125e8576125e861258c565b5060051b60200190565b5f82601f830112612601575f80fd5b813561261461260f826125d0565b6125a0565b8082825260208201915060208360051b860101925085831115612635575f80fd5b602085015b8381101561265b57803561264d81612578565b83526020928301920161263a565b5095945050505050565b5f805f805f8060c0878903121561267a575f80fd5b863561268581612578565b955060208701359450604087013593506060870135925060808701356001600160401b038111156126b4575f80fd5b6126c089828a016125f2565b9699959850939692959460a09093013593505050565b5f606082840312156126e6575f80fd5b604051606081016001600160401b03811182821017156127085761270861258c565b60409081528335825260208085013590830152928301359281019290925250919050565b5f6060828403121561273c575f80fd5b610ce883836126d6565b5f60208284031215612756575f80fd5b5035919050565b5f806040838503121561276e575f80fd5b82359150602083013561278081612578565b809150509250929050565b5f806040838503121561279c575f80fd5b50508035926020909101359150565b5f602082840312156127bb575f80fd5b8135610ce881612578565b5f602082840312156127d6575f80fd5b81356001600160401b038111156127eb575f80fd5b6114ca848285016125f2565b5f8060408385031215612808575f80fd5b823561281381612578565b915060208301356001600160401b0381111561282d575f80fd5b8301601f8101851361283d575f80fd5b80356001600160401b038111156128565761285661258c565b612869601f8201601f19166020016125a0565b81815286602083850101111561287d575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f602082840312156128ac575f80fd5b81356001600160401b038111156128c1575f80fd5b8201601f810184136128d1575f80fd5b80356128df61260f826125d0565b80828252602082019150602060608402850101925086831115612900575f80fd5b6020840193505b8284101561292c5761291987856126d6565b8252602082019150606084019350612907565b9695505050505050565b5f805f60608486031215612948575f80fd5b83359250602084013561295a81612578565b9150604084013561296a81612578565b809150509250925092565b5f8151808452602084019350602083015f5b828110156129ae5781516001600160a01b0316865260209586019590910190600101612987565b5093949350505050565b602081525f610ce86020830184612975565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215612a10575f80fd5b8235612a1b81612578565b9150602083013561278081612578565b5f60208284031215612a3b575f80fd5b81358015158114610ce8575f80fd5b828152604060208201525f6114ca6040830184612975565b5f60208284031215612a72575f80fd5b81516001600160401b03811115612a87575f80fd5b8201601f81018413612a97575f80fd5b8051612aa561260f826125d0565b8082825260208201915060208360051b850101925086831115612ac6575f80fd5b6020840193505b8284101561292c578351612ae081612578565b825260209384019390910190612acd565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610cb057610cb0612b05565b60208082526022908201527f554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d45604082015261139560f21b606082015260800190565b5f60208284031215612b7e575f80fd5b5051919050565b60208082526022908201527f4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e6040820152614c5960f01b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b5f82612be957612be9612bc7565b500690565b81810381811115610cb057610cb0612b05565b8082028115828204841417610cb057610cb0612b05565b5f82612c2657612c26612bc7565b500490565b5f82518060208501845e5f92019182525091905056fedb2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18a26469706673582212209bfbcb758a3624510a25f97aa3d92fc8a1033ce9c0ddd2d520646535e1e2afba64736f6c634300081a0033","sourceMap":"577:22802:88:-:0;;;1171:4:25;1128:48;;577:22802:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061039d575f3560e01c80638129fc1c116101de578063c691e6e411610108578063ec18c1861161009d578063f8d26aec1161006d578063f8d26aec14610beb578063f99f6e4c14610c16578063fc2788ad14610c2a578063fdafe9ca14610c60575f80fd5b8063ec18c18614610b65578063eda67fc414610b7a578063ee99205c14610bb4578063ef9ae15c14610bd2575f80fd5b8063d547741f116100d8578063d547741f14610ada578063e4566c7814610af9578063e4d991ee14610b0c578063e90d4c0614610b20575f80fd5b8063c691e6e414610a68578063cf6772ad14610a7d578063d2526fef14610a9c578063d440116d14610abb575f80fd5b8063949d7c2a1161017e578063ad3cb1cc1161014e578063ad3cb1cc146109d9578063ba26513e14610a16578063bb04bd2f14610a35578063c5de60a914610a54575f80fd5b8063949d7c2a1461095b578063a207fe2f1461097a578063a217fddf146109a5578063aa0d6fcd146109b8575f80fd5b806391807e4f116101b957806391807e4f146108e057806391d148541461091457806392a2ebf314610933578063943b79e214610947575f80fd5b80638129fc1c1461088257806381df17461461089657806385e6b8c2146108b5575f80fd5b806336568abe116102ca57806352d1902d1161025f5780636c713af81161022f5780636c713af8146108045780637aa81c2a146108185780637ac561c81461083757806380e460f014610862575f80fd5b806352d1902d14610732578063556d97c8146107465780635db916ab146107c5578063622e3616146107e5575f80fd5b8063491d04671161029a578063491d0467146106c25780634b47d955146106e15780634c17b024146107005780634f1ef2861461071f575f80fd5b806336568abe1461060157806337d7f58f146106205780633ba1800514610634578063410f314614610694575f80fd5b80630daf6181116103405780632bfd11d6116103105780632bfd11d61461051d5780632e55d0f61461058c5780632f2ff15d146105c35780633119edd4146105e2575f80fd5b80630daf6181146104a15780630e74b609146104c05780631de38fe1146104df578063248a9ca3146104fe575f80fd5b806303d3f7fd1161037b57806303d3f7fd1461042c57806303f02fc01461044f57806308c397931461046e57806308c7050f14610482575f80fd5b8063017304e1146103a157806301ffc9a7146103b7578063026583d7146103eb575b5f80fd5b3480156103ac575f80fd5b506103b5610c75565b005b3480156103c2575f80fd5b506103d66103d1366004612528565b610c80565b60405190151581526020015b60405180910390f35b3480156103f6575f80fd5b5061040a61040536600461254f565b610cb6565b60408051825181526020808401519082015291810151908201526060016103e2565b348015610437575f80fd5b5061044160015481565b6040519081526020016103e2565b34801561045a575f80fd5b506103b5610469366004612665565b610cef565b348015610479575f80fd5b50610441610e8d565b34801561048d575f80fd5b506103b561049c36600461272c565b610e9e565b3480156104ac575f80fd5b506104416104bb366004612746565b610f2b565b3480156104cb575f80fd5b506103b56104da36600461272c565b610fe4565b3480156104ea575f80fd5b506104416104f936600461275d565b61102d565b348015610509575f80fd5b50610441610518366004612746565b6110a6565b348015610528575f80fd5b5061040a610537366004612746565b60408051606080820183525f80835260208084018290529284018190526010548152600f8352838120948152938252928290208251938401835280548452600181015491840191909152600201549082015290565b348015610597575f80fd5b506004546105ab906001600160a01b031681565b6040516001600160a01b0390911681526020016103e2565b3480156105ce575f80fd5b506103b56105dd36600461275d565b6110c6565b3480156105ed575f80fd5b506103b56105fc36600461272c565b6110e8565b34801561060c575f80fd5b506103b561061b36600461275d565b6111b4565b34801561062b575f80fd5b506104416111ec565b34801561063f575f80fd5b5061067961064e36600461278b565b600f60209081525f928352604080842090915290825290208054600182015460029092015490919083565b604080519384526020840192909252908201526060016103e2565b34801561069f575f80fd5b506103d66106ae366004612746565b60096020525f908152604090205460ff1681565b3480156106cd575f80fd5b506104416106dc3660046127ab565b611257565b3480156106ec575f80fd5b506103b56106fb3660046127c6565b611269565b34801561070b575f80fd5b506103b561071a366004612746565b6112d6565b6103b561072d3660046127f7565b61136e565b34801561073d575f80fd5b50610441611389565b348015610751575f80fd5b5061040a61076036600461275d565b604080516060810182525f8082526020820181905291810191909152505f9182526006602090815260408084206001600160a01b0393909316845291815291819020815160608101835281548152600182015493810193909352600201549082015290565b3480156107d0575f80fd5b506104415f80516020612ca283398151915281565b3480156107f0575f80fd5b506103b56107ff36600461289c565b6113a4565b34801561080f575f80fd5b50610441611419565b348015610823575f80fd5b50610441610832366004612936565b611449565b348015610842575f80fd5b50610441610851366004612746565b600a6020525f908152604090205481565b34801561086d575f80fd5b506104415f80516020612c4283398151915281565b34801561088d575f80fd5b506103b56114d2565b3480156108a1575f80fd5b506103b56108b03660046127ab565b6115dc565b3480156108c0575f80fd5b506104416108cf366004612746565b60056020525f908152604090205481565b3480156108eb575f80fd5b506105ab6108fa366004612746565b60086020525f90815260409020546001600160a01b031681565b34801561091f575f80fd5b506103d661092e36600461275d565b61160a565b34801561093e575f80fd5b506103b5611640565b348015610952575f80fd5b506104416116f5565b348015610966575f80fd5b506103b56109753660046127ab565b611706565b348015610985575f80fd5b50610441610994366004612746565b600b6020525f908152604090205481565b3480156109b0575f80fd5b506104415f81565b3480156109c3575f80fd5b506109cc611743565b6040516103e291906129b8565b3480156109e4575f80fd5b50610a09604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103e291906129ca565b348015610a21575f80fd5b50610441610a3036600461275d565b6117af565b348015610a40575f80fd5b50610441610a4f3660046129ff565b61186a565b348015610a5f575f80fd5b5061044161187d565b348015610a73575f80fd5b5061044160035481565b348015610a88575f80fd5b506103b5610a973660046127c6565b6118a7565b348015610aa7575f80fd5b506103b5610ab6366004612a2b565b6118f4565b348015610ac6575f80fd5b50610441610ad53660046127ab565b61191f565b348015610ae5575f80fd5b506103b5610af436600461275d565b611931565b348015610b04575f80fd5b5060016103d6565b348015610b17575f80fd5b5061044161194d565b348015610b2b575f80fd5b50610679610b3a36600461275d565b600660209081525f928352604080842090915290825290208054600182015460029092015490919083565b348015610b70575f80fd5b5061044160105481565b348015610b85575f80fd5b50610679610b94366004612746565b600d6020525f908152604090208054600182015460029092015490919083565b348015610bbf575f80fd5b505f546105ab906001600160a01b031681565b348015610bdd575f80fd5b50600e546103d69060ff1681565b348015610bf6575f80fd5b50610441610c05366004612746565b600c6020525f908152604090205481565b348015610c21575f80fd5b506105ab61197d565b348015610c35575f80fd5b50610441610c4436600461278b565b600760209081525f928352604080842090915290825290205481565b348015610c6b575f80fd5b5061044160025481565b610c7e33611a2e565b565b5f6001600160e01b03198216637965db0b60e01b1480610cb057506301ffc9a760e01b6001600160e01b03198316145b92915050565b60408051606080820183525f808352602080840182905292840152825190810183528581529081018490529081018290525b9392505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610d335750825b90505f826001600160401b03166001148015610d4e5750303b155b905081158015610d5c575080155b15610d7a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610da457845460ff60401b1916600160401b1785555b610dac611ab4565b5f80546001600160a01b0319166001600160a01b038d1690811790915560018a905560028b9055604051631a6e609f60e31b815263d37304f890610df6908b908b90600401612a4a565b5f604051808303815f87803b158015610e0d575f80fd5b505af1158015610e1f573d5f803e3d5ffd5b50505050610e2c33611706565b610e35336115dc565b60038690558315610e8057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050505050505050565b5f610e996104bb611419565b905090565b610eb55f80516020612c428339815191523361160a565b610f1f5760405162461bcd60e51b815260206004820152603060248201527f464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d4960448201526f544d454e545f41444d494e5f4f4e4c5960801b60648201526084015b60405180910390fd5b610f28816110e8565b50565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa158015610f70573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610f979190810190612a62565b90505f805b8251811015610fdc57610fc885848381518110610fbb57610fbb612af1565b602002602001015161102d565b610fd29083612b19565b9150600101610f9c565b509392505050565b600e5460ff168061100757506110075f80516020612ca28339815191523361160a565b6110235760405162461bcd60e51b8152600401610f1690612b2c565b610f283382611ac6565b5f8054604051630ce52af560e01b8152306004820152602481018590526001600160a01b03848116604483015290911690630ce52af590606401602060405180830381865afa158015611082573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610ce89190612b6e565b5f9081525f80516020612c82833981519152602052604090206001015490565b6110cf826110a6565b6110d881611c2b565b6110e28383611c35565b50505050565b6110ff5f80516020612c428339815191523361160a565b61117f5760405162461bcd60e51b8152602060048201526044602482018190527f5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e908201527f545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f6064820152634f4e4c5960e01b608482015260a401610f16565b6010545f908152600f602090815260408083208451845282529182902083518155908301516001820155910151600290910155565b6001600160a01b03811633146111dd5760405163334bd91960e11b815260040160405180910390fd5b6111e78282611cd6565b505050565b5f805460405163d980b40d60e01b81523060048201526001600160a01b039091169063d980b40d906024015b602060405180830381865afa158015611233573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610e999190612b6e565b5f610cb0611263611419565b836117af565b6112735f3361160a565b61128f5760405162461bcd60e51b8152600401610f1690612b85565b5f5b81518110156112d2576112ca5f80516020612c428339815191528383815181106112bd576112bd612af1565b60200260200101516110c6565b600101611291565b5050565b6112ed5f80516020612c428339815191523361160a565b6113695760405162461bcd60e51b815260206004820152604160248201527f5345545f4c4153545f504f5354434f4e4649524d45445f5355504552424c4f4360448201527f4b5f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c6064820152605960f81b608482015260a401610f16565b600255565b611376611d4f565b61137f82611df3565b6112d28282611dfd565b5f611392611eb9565b505f80516020612c6283398151915290565b600e5460ff16806113c757506113c75f80516020612ca28339815191523361160a565b6113e35760405162461bcd60e51b8152600401610f1690612b2c565b5f5b81518110156112d2576114113383838151811061140457611404612af1565b6020026020010151611ac6565b6001016113e5565b5f80546040516322fceb7560e01b81523060048201526001600160a01b03909116906322fceb7590602401611218565b5f80546040516324f7ee1760e21b8152306004820152602481018690526001600160a01b0385811660448301528481166064830152909116906393dfb85c90608401602060405180830381865afa1580156114a6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114ca9190612b6e565b949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156115165750825b90505f826001600160401b031660011480156115315750303b155b90508115801561153f575080155b1561155d5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561158757845460ff60401b1916600160401b1785555b61158f611f02565b83156115d557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f80516020612c428339815191526115f381611c2b565b6112d25f80516020612ca2833981519152836110c6565b5f9182525f80516020612c82833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61164a5f3361160a565b6116a45760405162461bcd60e51b815260206004820152602560248201527f4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e6044820152645f4f4e4c5960d81b6064820152608401610f16565b5f8054604080516392a2ebf360e01b815290516001600160a01b03909216926392a2ebf39260048084019382900301818387803b1580156116e3575f80fd5b505af11580156110e2573d5f803e3d5ffd5b5f600154600254610e999190612b19565b6117105f3361160a565b61172c5760405162461bcd60e51b8152600401610f1690612b85565b610f285f80516020612c42833981519152826110c6565b5f54604051634234a47960e01b81523060048201526060916001600160a01b031690634234a479906024015f60405180830381865afa158015611788573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610e999190810190612a62565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa1580156117f4573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261181b9190810190612a62565b90505f805b82518110156118615761184d8684838151811061183f5761183f612af1565b602002602001015187611449565b6118579083612b19565b9150600101611820565b50949350505050565b5f610ce8611876611419565b8484611449565b5f804390505f6001600354836118939190612bdb565b61189d9084612bee565b610ce89190612bee565b5f80516020612c428339815191526118be81611c2b565b5f5b82518110156111e7576118ec5f80516020612ca28339815191528483815181106112bd576112bd612af1565b6001016118c0565b5f80516020612c4283398151915261190b81611c2b565b50600e805460ff1916911515919091179055565b5f610cb061192b611419565b8361102d565b61193a826110a6565b61194381611c2b565b6110e28383611cd6565b5f8054604051639b7cadc760e01b81523060048201526001600160a01b0390911690639b7cadc790602401611218565b5f8061198761187d565b5f8054604051634234a47960e01b81523060048201529240935090916001600160a01b0390911690634234a479906024015f60405180830381865afa1580156119d2573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119f99190810190612a62565b80519091505f90611a0a9084612bdb565b9050818181518110611a1e57611a1e612af1565b6020026020010151935050505090565b611a3661197d565b6001600160a01b0316816001600160a01b031614611a965760405162461bcd60e51b815260206004820152601c60248201527f4e6f744163636570746f72416e644163636570746f7249734c697665000000006044820152606401610f16565b611aad6002546001611aa89190612b19565b611f12565b611a965750565b611abc612090565b610f285f33611c35565b80515f9081526006602090815260408083206001600160a01b038616845290915290205415611b0857604051630ae09ad960e41b815260040160405180910390fd5b8051600154600254611b1a9190612b19565b1015611b3957604051630ae09ad960e41b815260040160405180910390fd5b80515f908152600560205260408120549003611b6857611b576111ec565b81515f908152600560205260409020555b80515f9081526006602090815260408083206001600160a01b0386168452825280832084518155918401516001830155830151600290910155611baa83611257565b82515f908152600760209081526040808320828701518452909152812080549293508392909190611bdc908490612b19565b9091555050604080830151602080850151835190815290810184905290917fa8445a6b8a16633ad62fbc0954848ec55c4d5323d90b9745dbda4121ec5ce12b91015b60405180910390a2505050565b610f2881336120d9565b5f5f80516020612c82833981519152611c4e848461160a565b611ccd575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611c833390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610cb0565b5f915050610cb0565b5f5f80516020612c82833981519152611cef848461160a565b15611ccd575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610cb0565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611dd557507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611dc95f80516020612c62833981519152546001600160a01b031690565b6001600160a01b031614155b15610c7e5760405163703e46dd60e11b815260040160405180910390fd5b5f6112d281611c2b565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611e57575060408051601f3d908101601f19168201909252611e5491810190612b6e565b60015b611e7f57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610f16565b5f80516020612c628339815191528114611eaf57604051632a87526960e21b815260048101829052602401610f16565b6111e78383612112565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610c7e5760405163703e46dd60e11b815260040160405180910390fd5b611f0a612090565b610c7e611ab4565b5f81815260056020819052604082205490829081611f31600187612bee565b81526020019081526020015f2054905080821015611f5a575f8481526005602052604090208190555b8091505b81611f67611419565b1015611f9257611f7633611257565b5f03611f8557505f9392505050565b611f8d612167565b611f5e565b611f9b33611257565b5f03611faa57505f9392505050565b5f6003611fb684610f2b565b611fc1906002612c01565b611fcb9190612c18565b90505f611fd6611743565b90505f5b8151811015612084575f828281518110611ff657611ff6612af1565b6020908102919091018101515f8a81526006835260408082206001600160a01b0384168352845280822081516060810183528154808252600183015482880190815260029093015482850152845260078652828420915184529452902054909250858111156120795761206982336121c4565b5060019998505050505050505050565b505050600101611fda565b505f9695505050505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610c7e57604051631afcd79f60e31b815260040160405180910390fd5b6120e3828261160a565b6112d25760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610f16565b61211b826122e1565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561215f576111e78282612344565b6112d26123b6565b5f805460408051632a21edc760e21b815290516001600160a01b039092169263a887b71c9260048084019382900301818387803b1580156121a6575f80fd5b505af11580156121b8573d5f803e3d5ffd5b50505050610c7e6123d5565b5f6121cd611419565b83515f9081526005602052604090205490915081146121ff57604051631f2d18b160e31b815260040160405180910390fd5b825161220d90600190612bee565b6002541461222e57604051631f2d18b160e31b815260040160405180910390fd5b6010545f908152600f602090815260408083208651845282528083208651808255878401805160018401558884018051600294850155928290559085526008845282852080546001600160a01b0319166001600160a01b03891617905587518552600a845282852043905587518552600b84529382902042905551925186518251918252928101929092527fc28fbeddd1d6ba9496d1b91564f9aa2bc4dffed78aae631bbc6ef67296ad3c3c9101611c1e565b806001600160a01b03163b5f0361231657604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610f16565b5f80516020612c6283398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516123609190612c2b565b5f60405180830381855af49150503d805f8114612398576040519150601f19603f3d011682016040523d82523d5f602084013e61239d565b606091505b50915091506123ad8583836124a3565b95945050505050565b3415610c7e5760405163b398979f60e01b815260040160405180910390fd5b5f8054604051634234a47960e01b81523060048201526001600160a01b0390911690634234a479906024015f60405180830381865afa15801561241a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526124419190810190612a62565b90505f81516001436124539190612bee565b61245e919040612bdb565b905081818151811061247257612472612af1565b602002602001015160045f6101000a8154816001600160a01b0302191690836001600160a01b031602179055505050565b6060826124b8576124b3826124ff565b610ce8565b81511580156124cf57506001600160a01b0384163b155b156124f857604051639996b31560e01b81526001600160a01b0385166004820152602401610f16565b5080610ce8565b80511561250f5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f60208284031215612538575f80fd5b81356001600160e01b031981168114610ce8575f80fd5b5f805f60608486031215612561575f80fd5b505081359360208301359350604090920135919050565b6001600160a01b0381168114610f28575f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b03811182821017156125c8576125c861258c565b604052919050565b5f6001600160401b038211156125e8576125e861258c565b5060051b60200190565b5f82601f830112612601575f80fd5b813561261461260f826125d0565b6125a0565b8082825260208201915060208360051b860101925085831115612635575f80fd5b602085015b8381101561265b57803561264d81612578565b83526020928301920161263a565b5095945050505050565b5f805f805f8060c0878903121561267a575f80fd5b863561268581612578565b955060208701359450604087013593506060870135925060808701356001600160401b038111156126b4575f80fd5b6126c089828a016125f2565b9699959850939692959460a09093013593505050565b5f606082840312156126e6575f80fd5b604051606081016001600160401b03811182821017156127085761270861258c565b60409081528335825260208085013590830152928301359281019290925250919050565b5f6060828403121561273c575f80fd5b610ce883836126d6565b5f60208284031215612756575f80fd5b5035919050565b5f806040838503121561276e575f80fd5b82359150602083013561278081612578565b809150509250929050565b5f806040838503121561279c575f80fd5b50508035926020909101359150565b5f602082840312156127bb575f80fd5b8135610ce881612578565b5f602082840312156127d6575f80fd5b81356001600160401b038111156127eb575f80fd5b6114ca848285016125f2565b5f8060408385031215612808575f80fd5b823561281381612578565b915060208301356001600160401b0381111561282d575f80fd5b8301601f8101851361283d575f80fd5b80356001600160401b038111156128565761285661258c565b612869601f8201601f19166020016125a0565b81815286602083850101111561287d575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f602082840312156128ac575f80fd5b81356001600160401b038111156128c1575f80fd5b8201601f810184136128d1575f80fd5b80356128df61260f826125d0565b80828252602082019150602060608402850101925086831115612900575f80fd5b6020840193505b8284101561292c5761291987856126d6565b8252602082019150606084019350612907565b9695505050505050565b5f805f60608486031215612948575f80fd5b83359250602084013561295a81612578565b9150604084013561296a81612578565b809150509250925092565b5f8151808452602084019350602083015f5b828110156129ae5781516001600160a01b0316865260209586019590910190600101612987565b5093949350505050565b602081525f610ce86020830184612975565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215612a10575f80fd5b8235612a1b81612578565b9150602083013561278081612578565b5f60208284031215612a3b575f80fd5b81358015158114610ce8575f80fd5b828152604060208201525f6114ca6040830184612975565b5f60208284031215612a72575f80fd5b81516001600160401b03811115612a87575f80fd5b8201601f81018413612a97575f80fd5b8051612aa561260f826125d0565b8082825260208201915060208360051b850101925086831115612ac6575f80fd5b6020840193505b8284101561292c578351612ae081612578565b825260209384019390910190612acd565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610cb057610cb0612b05565b60208082526022908201527f554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d45604082015261139560f21b606082015260800190565b5f60208284031215612b7e575f80fd5b5051919050565b60208082526022908201527f4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e6040820152614c5960f01b606082015260800190565b634e487b7160e01b5f52601260045260245ffd5b5f82612be957612be9612bc7565b500690565b81810381811115610cb057610cb0612b05565b8082028115828204841417610cb057610cb0612b05565b5f82612c2657612c26612bc7565b500490565b5f82518060208501845e5f92019182525091905056fedb2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18a26469706673582212209bfbcb758a3624510a25f97aa3d92fc8a1033ce9c0ddd2d520646535e1e2afba64736f6c634300081a0033","sourceMap":"577:22802:88:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11196:104;;;;;;;;;;;;;:::i;:::-;;3443:202:23;;;;;;;;;;-1:-1:-1;3443:202:23;;;;;:::i;:::-;;:::i;:::-;;;470:14:120;;463:22;445:41;;433:2;418:18;3443:202:23;;;;;;;;2202:242:88;;;;;;;;;;-1:-1:-1;2202:242:88;;;;;:::i;:::-;;:::i;:::-;;;;1210:13:120;;1192:32;;1280:4;1268:17;;;1262:24;1240:20;;;1233:54;1331:17;;;1325:24;1303:20;;;1296:54;1180:2;1165:18;2202:242:88;968:388:120;1302:41:89;;;;;;;;;;;;;;;;;;;1507:25:120;;;1495:2;1480:18;1302:41:89;1361:177:120;875:718:88;;;;;;;;;;-1:-1:-1;875:718:88;;;;;:::i;:::-;;:::i;6032:166::-;;;;;;;;;;;;;:::i;7675:308::-;;;;;;;;;;-1:-1:-1;7675:308:88;;;;;:::i;:::-;;:::i;5414:611::-;;;;;;;;;;-1:-1:-1;5414:611:88;;;;;:::i;:::-;;:::i;19334:335::-;;;;;;;;;;-1:-1:-1;19334:335:88;;;;;:::i;:::-;;:::i;4886:287::-;;;;;;;;;;-1:-1:-1;4886:287:88;;;;;:::i;:::-;;:::i;4759:191:23:-;;;;;;;;;;-1:-1:-1;4759:191:23;;;;;:::i;:::-;;:::i;7989:200:88:-;;;;;;;;;;-1:-1:-1;7989:200:88;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;8142:31:88;;8108:66;;:33;:66;;;;;:74;;;;;;;;;;8101:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7989:200;2235:30:89;;;;;;;;;;-1:-1:-1;2235:30:89;;;;-1:-1:-1;;;;;2235:30:89;;;;;;-1:-1:-1;;;;;6268:32:120;;;6250:51;;6238:2;6223:18;2235:30:89;6104:203:120;5246:136:23;;;;;;;;;;-1:-1:-1;5246:136:23;;;;;:::i;:::-;;:::i;6727:405:88:-;;;;;;;;;;-1:-1:-1;6727:405:88;;;;;:::i;:::-;;:::i;6348:245:23:-;;;;;;;;;;-1:-1:-1;6348:245:23;;;;;:::i;:::-;;:::i;2723:133:88:-;;;;;;;;;;;;;:::i;4693:118:89:-;;;;;;;;;;-1:-1:-1;4693:118:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7255:25:120;;;7311:2;7296:18;;7289:34;;;;7339:18;;;7332:34;7243:2;7228:18;4693:118:89;7053:319:120;3604:72:89;;;;;;;;;;-1:-1:-1;3604:72:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;4632:176:88;;;;;;;;;;-1:-1:-1;4632:176:88;;;;;:::i;:::-;;:::i;1842:326::-;;;;;;;;;;-1:-1:-1;1842:326:88;;;;;:::i;:::-;;:::i;7193:287::-;;;;;;;;;;-1:-1:-1;7193:287:88;;;;;:::i;:::-;;:::i;4158:214:25:-;;;;;;:::i;:::-;;:::i;3705:134::-;;;;;;;;;;;;;:::i;6442:209:88:-;;;;;;;;;;-1:-1:-1;6442:209:88;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;6615:19:88;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;6615:29:88;;;;;;;;;;;;;6608:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6442:209;796:72;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;796:72:88;;19675:430;;;;;;;;;;-1:-1:-1;19675:430:88;;;;;:::i;:::-;;:::i;2927:131::-;;;;;;;;;;;;;:::i;3324:311::-;;;;;;;;;;-1:-1:-1;3324:311:88;;;;;:::i;:::-;;:::i;3758:94:89:-;;;;;;;;;;-1:-1:-1;3758:94:89;;;;;:::i;:::-;;;;;;;;;;;;;;686:72:88;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;686:72:88;;528:89:91;;;;;;;;;;;;;:::i;18821:136:88:-;;;;;;;;;;-1:-1:-1;18821:136:88;;;;;:::i;:::-;;:::i;2839:87:89:-;;;;;;;;;;-1:-1:-1;2839:87:89;;;;;:::i;:::-;;;;;;;;;;;;;;3388:76;;;;;;;;;;-1:-1:-1;3388:76:89;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3388:76:89;;;3732:207:23;;;;;;;;;;-1:-1:-1;3732:207:23;;;;;:::i;:::-;;:::i;5179:229:88:-;;;;;;;;;;;;;:::i;2498:159::-;;;;;;;;;;;;;:::i;1599:237::-;;;;;;;;;;-1:-1:-1;1599:237:88;;;;;:::i;:::-;;:::i;4089:100:89:-;;;;;;;;;;-1:-1:-1;4089:100:89;;;;;:::i;:::-;;;;;;;;;;;;;;2317:49:23;;;;;;;;;;-1:-1:-1;2317:49:23;2362:4;2317:49;;8478:247:88;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1819:58:25:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:25;;;;;;;;;;;;:::i;4067:484:88:-;;;;;;;;;;-1:-1:-1;4067:484:88;;;;;:::i;:::-;;:::i;3735:198::-;;;;;;;;;;-1:-1:-1;3735:198:88;;;;;:::i;:::-;;:::i;13116:445::-;;;;;;;;;;;;;:::i;2157:27:89:-;;;;;;;;;;;;;;;;18963:227:88;;;;;;;;;;-1:-1:-1;18963:227:88;;;;;:::i;:::-;;:::i;19196:132::-;;;;;;;;;;-1:-1:-1;19196:132:88;;;;;:::i;:::-;;:::i;6256:180::-;;;;;;;;;;-1:-1:-1;6256:180:88;;;;;:::i;:::-;;:::i;5662:138:23:-;;;;;;;;;;-1:-1:-1;5662:138:23;;;;;:::i;:::-;;:::i;12764:260:88:-;;;;;;;;;;-1:-1:-1;12989:4:88;12764:260;;3091:139;;;;;;;;;;;;;:::i;3008:105:89:-;;;;;;;;;;-1:-1:-1;3008:105:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4817:46;;;;;;;;;;;;;;;;4461:89;;;;;;;;;;-1:-1:-1;4461:89:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;293:39;;;;;;;;;;-1:-1:-1;293:39:89;;;;-1:-1:-1;;;;;293:39:89;;;4598:34;;;;;;;;;;-1:-1:-1;4598:34:89;;;;;;;;4287:104;;;;;;;;;;-1:-1:-1;4287:104:89;;;;;:::i;:::-;;;;;;;;;;;;;;13661:647:88;;;;;;;;;;;;;:::i;3207:106:89:-;;;;;;;;;;-1:-1:-1;3207:106:89;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;1494:48;;;;;;;;;;;;;;;;11196:104:88;11247:46;11282:10;11247:34;:46::i;:::-;11196:104::o;3443:202:23:-;3528:4;-1:-1:-1;;;;;;3551:47:23;;-1:-1:-1;;;3551:47:23;;:87;;-1:-1:-1;;;;;;;;;;1133:40:31;;;3602:36:23;3544:94;3443:202;-1:-1:-1;;3443:202:23:o;2202:242:88:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;2388:49:88;;;;;;;;;;;;;;;;;;;;;;2202:242;;;;;;:::o;875:718::-;8870:21:24;4302:15;;-1:-1:-1;;;4302:15:24;;;;4301:16;;-1:-1:-1;;;;;4348:14:24;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:24;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:24;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:24;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:24;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:24;-1:-1:-1;;;5013:22:24;;;4979:67;1172:33:88::1;:31;:33::i;:::-;1215:15;:34:::0;;-1:-1:-1;;;;;;1215:34:88::1;-1:-1:-1::0;;;;;1215:34:88;::::1;::::0;;::::1;::::0;;;-1:-1:-1;1259:56:88;;;1325:33:::1;:70:::0;;;1405:59:::1;::::0;-1:-1:-1;;;1405:59:88;;:30:::1;::::0;:59:::1;::::0;1436:14;;1452:11;;1405:59:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1474:32;1495:10;1474:20;:32::i;:::-;1516;1537:10;1516:20;:32::i;:::-;1558:12;:28:::0;;;5066:101:24;;;;5100:23;;-1:-1:-1;;;;5100:23:24;;;5142:14;;-1:-1:-1;13364:50:120;;5142:14:24;;13352:2:120;13337:18;5142:14:24;;;;;;;5066:101;4092:1081;;;;;875:718:88;;;;;;:::o;6032:166::-;6123:7;6153:38;6171:19;:17;:19::i;6153:38::-;6146:45;;6032:166;:::o;7675:308::-;7794:37;-1:-1:-1;;;;;;;;;;;7820:10:88;7794:7;:37::i;:::-;7773:132;;;;-1:-1:-1;;;7773:132:88;;13627:2:120;7773:132:88;;;13609:21:120;13666:2;13646:18;;;13639:30;13705:34;13685:18;;;13678:62;-1:-1:-1;;;13756:18:120;;;13749:46;13812:19;;7773:132:88;;;;;;;;;7915:61;7955:20;7915:39;:61::i;:::-;7675:308;:::o;5414:611::-;5491:7;5693:15;;:76;;-1:-1:-1;;;5693:76:88;;5754:4;5693:76;;;6250:51:120;5491:7:88;;-1:-1:-1;;;;;5693:15:88;;:39;;6223:18:120;;5693:76:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5693:76:88;;;;;;;;;;;;:::i;:::-;5663:106;;5779:18;5816:9;5811:181;5835:10;:17;5831:1;:21;5811:181;;;5942:39;5960:5;5967:10;5978:1;5967:13;;;;;;;;:::i;:::-;;;;;;;5942:17;:39::i;:::-;5928:53;;;;:::i;:::-;;-1:-1:-1;5854:3:88;;5811:181;;;-1:-1:-1;6008:10:88;5414:611;-1:-1:-1;;;5414:611:88:o;19334:335::-;19458:22;;;;;:63;;;19484:37;-1:-1:-1;;;;;;;;;;;19510:10:88;19484:7;:37::i;:::-;19437:144;;;;-1:-1:-1;;;19437:144:88;;;;;;;:::i;:::-;19591:71;19629:10;19641:20;19591:37;:71::i;4886:287::-;4990:7;5028:15;;:138;;-1:-1:-1;;;5028:138:88;;5087:4;5028:138;;;15815:51:120;15882:18;;;15875:34;;;-1:-1:-1;;;;;15945:32:120;;;15925:18;;;15918:60;5028:15:88;;;;:33;;15788:18:120;;5028:138:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4759:191:23:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:23;;;;;:24;;;;4759:191::o;5246:136::-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;6727:405:88:-;6864:37;-1:-1:-1;;;;;;;;;;;6890:10:88;6864:7;:37::i;:::-;6843:152;;;;-1:-1:-1;;;6843:152:88;;16380:2:120;6843:152:88;;;16362:21:120;16419:2;16399:18;;;16392:30;;;16458:34;16438:18;;;16431:62;16529:34;16509:18;;;16502:62;-1:-1:-1;;;16580:19:120;;;16573:35;16625:19;;6843:152:88;16178:472:120;6843:152:88;7039:31;;7005:66;;;;:33;:66;;;;;;;;7072:27;;7005:95;;;;;;;;:118;;;;;;;;;;;;;;;;;;;;6727:405::o;6348:245:23:-;-1:-1:-1;;;;;6441:34:23;;966:10:28;6441:34:23;6437:102;;6498:30;;-1:-1:-1;;;6498:30:23;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;2723:133:88:-;2771:7;2797:15;;:52;;-1:-1:-1;;;2797:52:88;;2843:4;2797:52;;;6250:51:120;-1:-1:-1;;;;;2797:15:88;;;;:37;;6223:18:120;;2797:52:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4632:176::-;4728:7;4754:47;4771:19;:17;:19::i;:::-;4792:8;4754:16;:47::i;1842:326::-;1942:39;2362:4:23;1970:10:88;1942:7;:39::i;:::-;1921:120;;;;-1:-1:-1;;;1921:120:88;;;;;;;:::i;:::-;2056:9;2051:111;2075:8;:15;2071:1;:19;2051:111;;;2111:40;-1:-1:-1;;;;;;;;;;;2139:8:88;2148:1;2139:11;;;;;;;;:::i;:::-;;;;;;;2111:9;:40::i;:::-;2092:3;;2051:111;;;;1842:326;:::o;7193:287::-;7293:37;-1:-1:-1;;;;;;;;;;;7319:10:88;7293:7;:37::i;:::-;7272:149;;;;-1:-1:-1;;;7272:149:88;;17260:2:120;7272:149:88;;;17242:21:120;17299:2;17279:18;;;17272:30;17338:34;17318:18;;;17311:62;17409:34;17389:18;;;17382:62;-1:-1:-1;;;17460:19:120;;;17453:32;17502:19;;7272:149:88;17058:469:120;7272:149:88;7431:33;:42;7193:287::o;4158:214:25:-;2653:13;:11;:13::i;:::-;4273:36:::1;4291:17;4273;:36::i;:::-;4319:46;4341:17;4360:4;4319:21;:46::i;3705:134::-:0;3774:7;2924:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3705:134:25;:::o;19675:430:88:-;19807:22;;;;;:63;;;19833:37;-1:-1:-1;;;;;;;;;;;19859:10:88;19833:7;:37::i;:::-;19786:144;;;;-1:-1:-1;;;19786:144:88;;;;;;;:::i;:::-;19945:9;19940:159;19964:21;:28;19960:1;:32;19940:159;;;20013:75;20051:10;20063:21;20085:1;20063:24;;;;;;;;:::i;:::-;;;;;;;20013:37;:75::i;:::-;19994:3;;19940:159;;2927:131;2977:7;3003:15;;:48;;-1:-1:-1;;;3003:48:88;;3045:4;3003:48;;;6250:51:120;-1:-1:-1;;;;;3003:15:88;;;;:33;;6223:18:120;;3003:48:88;6104:203:120;3324:311:88;3445:7;3483:15;;:145;;-1:-1:-1;;;3483:145:88;;3533:4;3483:145;;;17763:51:120;17830:18;;;17823:34;;;-1:-1:-1;;;;;17893:32:120;;;17873:18;;;17866:60;17962:32;;;17942:18;;;17935:60;3483:15:88;;;;:24;;17735:19:120;;3483:145:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3464:164;3324:311;-1:-1:-1;;;;3324:311:88:o;528:89:91:-;8870:21:24;4302:15;;-1:-1:-1;;;4302:15:24;;;;4301:16;;-1:-1:-1;;;;;4348:14:24;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:24;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:24;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:24;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:24;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:24;-1:-1:-1;;;5013:22:24;;;4979:67;587:23:91::1;:21;:23::i;:::-;5070:14:24::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:24;;;5142:14;;-1:-1:-1;13364:50:120;;5142:14:24;;13352:2:120;13337:18;5142:14:24;;;;;;;5066:101;4092:1081;;;;;528:89:91:o;18821:136:88:-;-1:-1:-1;;;;;;;;;;;3191:16:23;3202:4;3191:10;:16::i;:::-;18913:37:88::1;-1:-1:-1::0;;;;;;;;;;;18941:8:88::1;18913:9;:37::i;3732:207:23:-:0;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:23;;;;;;;;-1:-1:-1;;;;;3901:31:23;;;;;;;;;;;;;;;3732:207::o;5179:229:88:-;5250:39;2362:4:23;5278:10:88;5250:7;:39::i;:::-;5229:123;;;;-1:-1:-1;;;5229:123:88;;18208:2:120;5229:123:88;;;18190:21:120;18247:2;18227:18;;;18220:30;18286:34;18266:18;;;18259:62;-1:-1:-1;;;18337:18:120;;;18330:35;18382:19;;5229:123:88;18006:401:120;5229:123:88;5362:15;;;:39;;;-1:-1:-1;;;5362:39:88;;;;-1:-1:-1;;;;;5362:15:88;;;;:37;;:39;;;;;;;;;;:15;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;2498:159;2562:7;2624:26;;2588:33;;:62;;;;:::i;1599:237::-;1684:39;2362:4:23;1712:10:88;1684:7;:39::i;:::-;1663:120;;;;-1:-1:-1;;;1663:120:88;;;;;;;:::i;:::-;1793:36;-1:-1:-1;;;;;;;;;;;1821:7:88;1793:9;:36::i;8478:247::-;8651:15;;:66;;-1:-1:-1;;;8651:66:88;;8711:4;8651:66;;;6250:51:120;8546:16:88;;-1:-1:-1;;;;;8651:15:88;;:51;;6223:18:120;;8651:66:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8651:66:88;;;;;;;;;;;;:::i;4067:484::-;4169:7;4218:15;;:76;;-1:-1:-1;;;4218:76:88;;4279:4;4218:76;;;6250:51:120;4169:7:88;;-1:-1:-1;;;;;4218:15:88;;:39;;6223:18:120;;4218:76:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4218:76:88;;;;;;;;;;;;:::i;:::-;4188:106;;4304:18;4341:9;4336:182;4360:10;:17;4356:1;:21;4336:182;;;4467:40;4476:5;4483:10;4494:1;4483:13;;;;;;;;:::i;:::-;;;;;;;4498:8;4467;:40::i;:::-;4453:54;;;;:::i;:::-;;-1:-1:-1;4379:3:88;;4336:182;;;-1:-1:-1;4534:10:88;4067:484;-1:-1:-1;;;;4067:484:88:o;3735:198::-;3850:7;3876:50;3885:19;:17;:19::i;:::-;3906:9;3917:8;3876;:50::i;13116:445::-;13185:7;13204:28;13235:12;13204:43;;13257:26;13347:1;13332:12;;13309:20;:35;;;;:::i;:::-;13286:58;;:20;:58;:::i;:::-;:62;;;;:::i;18963:227::-;-1:-1:-1;;;;;;;;;;;3191:16:23;3202:4;3191:10;:16::i;:::-;19075:9:88::1;19070:113;19094:9;:16;19090:1;:20;19070:113;;;19131:41;-1:-1:-1::0;;;;;;;;;;;19159:9:88::1;19169:1;19159:12;;;;;;;;:::i;19131:41::-;19112:3;;19070:113;;19196:132:::0;-1:-1:-1;;;;;;;;;;;3191:16:23;3202:4;3191:10;:16::i;:::-;-1:-1:-1;19289:22:88::1;:32:::0;;-1:-1:-1;;19289:32:88::1;::::0;::::1;;::::0;;;::::1;::::0;;19196:132::o;6256:180::-;6354:7;6380:49;6398:19;:17;:19::i;:::-;6419:9;6380:17;:49::i;5662:138:23:-;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;3091:139:88:-:0;3145:7;3171:15;;:52;;-1:-1:-1;;;3171:52:88;;3217:4;3171:52;;;6250:51:120;-1:-1:-1;;;;;3171:15:88;;;;:37;;6223:18:120;;3171:52:88;6104:203:120;13661:647:88;13712:7;13913:18;13944:38;:36;:38::i;:::-;14085:26;14114:15;;:66;;-1:-1:-1;;;14114:66:88;;14174:4;14114:66;;;6250:51:120;13934:49:88;;;-1:-1:-1;14085:26:88;;-1:-1:-1;;;;;14114:15:88;;;;:51;;6223:18:120;;14114:66:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14114:66:88;;;;;;;;;;;;:::i;:::-;14236:16;;14085:95;;-1:-1:-1;14190:21:88;;14214:38;;14222:10;14214:38;:::i;:::-;14190:62;;14269:9;14279:13;14269:24;;;;;;;;:::i;:::-;;;;;;;14262:31;;;;;13661:647;:::o;11899:859::-;12309:20;:18;:20::i;:::-;-1:-1:-1;;;;;12297:32:88;:8;-1:-1:-1;;;;;12297:32:88;;12293:76;;12331:38;;-1:-1:-1;;;12331:38:88;;18996:2:120;12331:38:88;;;18978:21:120;19035:2;19015:18;;;19008:30;19074;19054:18;;;19047:58;19122:18;;12331:38:88;18794:352:120;12293:76:88;12691:57;12710:33;;12746:1;12710:37;;;;:::i;:::-;12691:18;:57::i;:::-;12684:68;;11899:859;:::o;738:128:91:-;6931:20:24;:18;:20::i;:::-;817:42:91::1;2362:4:23;848:10:91;817;:42::i;8793:2397:88:-:0;9038:27;;9026:40;;;;:11;:40;;;;;;;;-1:-1:-1;;;;;9026:50:88;;;;;;;;;:57;:62;9022:113;;9109:26;;-1:-1:-1;;;9109:26:88;;;;;;;;;;;9022:113;9606:27;;9577:26;;9541:33;;:62;;9577:26;9541:62;:::i;:::-;:92;9537:131;;;9642:26;;-1:-1:-1;;;9642:26:88;;;;;;;;;;;9537:131;10033:27;;10003:58;;;;:29;:58;;;;;;:63;;9999:172;;10143:17;:15;:17::i;:::-;10112:27;;10082:58;;;;:29;:58;;;;;:78;9999:172;10239:27;;10227:40;;;;:11;:40;;;;;;;;-1:-1:-1;;;;;10227:50:88;;;;;;;;;:73;;;;;;;;;;;;;;;;;;;;10831:43;10268:8;10831:33;:43::i;:::-;10901:27;;10884:45;;;;:16;:45;;;;;;;;10930:31;;;;10884:78;;;;;;;:112;;10790:84;;-1:-1:-1;10790:84:88;;10884:78;;:45;:112;;10790:84;;10884:112;:::i;:::-;;;;-1:-1:-1;;11055:28:88;;;;;11097:31;;;;;11012:170;;19325:25:120;;;19366:18;;;19359:34;;;11055:28:88;;11012:170;;19298:18:120;11012:170:88;;;;;;;;8939:2251;8793:2397;;:::o;4148:103:23:-;4214:30;4225:4;966:10:28;4214::23;:30::i;7270:387::-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:23;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:23;;;;;;;;;:38;;-1:-1:-1;;7475:38:23;7509:4;7475:38;;;7559:12;966:10:28;;887:96;7559:12:23;-1:-1:-1;;;;;7532:40:23;7550:7;-1:-1:-1;;;;;7532:40:23;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7892:388;7970:4;-1:-1:-1;;;;;;;;;;;8059:22:23;8067:4;8073:7;8059;:22::i;:::-;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:23;;;;;;;;;;:39;;-1:-1:-1;;8097:39:23;;;8155:40;966:10:28;;8097:14:23;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;4599:312:25;4679:4;-1:-1:-1;;;;;4688:6:25;4671:23;;;:120;;;4785:6;-1:-1:-1;;;;;4749:42:25;:32;-1:-1:-1;;;;;;;;;;;2035:53:42;-1:-1:-1;;;;;2035:53:42;;1957:138;4749:32:25;-1:-1:-1;;;;;4749:42:25;;;4671:120;4654:251;;;4865:29;;-1:-1:-1;;;4865:29:25;;;;;;;;;;;991:117:91;2362:4:23;3191:16;2362:4;3191:10;:16::i;6052:538:25:-;6169:17;-1:-1:-1;;;;;6151:50:25;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6151:52:25;;;;;;;;-1:-1:-1;;6151:52:25;;;;;;;;;;;;:::i;:::-;;;6147:437;;6513:60;;-1:-1:-1;;;6513:60:25;;-1:-1:-1;;;;;6268:32:120;;6513:60:25;;;6250:51:120;6223:18;;6513:60:25;6104:203:120;6147:437:25;-1:-1:-1;;;;;;;;;;;6245:40:25;;6241:120;;6312:34;;-1:-1:-1;;;6312:34:25;;;;;1507:25:120;;;1480:18;;6312:34:25;1361:177:120;6241:120:25;6374:54;6404:17;6423:4;6374:29;:54::i;5028:213::-;5102:4;-1:-1:-1;;;;;5111:6:25;5094:23;;5090:145;;5195:29;;-1:-1:-1;;;5195:29:25;;;;;;;;;;;623:109:91;6931:20:24;:18;:20::i;:::-;692:33:91::1;:31;:33::i;14699:4115:88:-:0;14771:4;14813:47;;;:29;:47;;;;;;;;;14771:4;;;15035:18;15052:1;14843:16;15035:18;:::i;:::-;15005:49;;;;;;;;;;;;14971:83;;15086:23;15068:15;:41;15064:133;;;15124:47;;;;:29;:47;;;;;:73;;;15064:133;15229:23;15211:41;;15677:837;15706:15;15684:19;:17;:19::i;:::-;:37;15677:837;;;15874:45;15908:10;15874:33;:45::i;:::-;15923:1;15874:50;15870:68;;-1:-1:-1;15933:5:88;;14699:4115;-1:-1:-1;;;14699:4115:88:o;15870:68::-;16488:15;:13;:15::i;:::-;15677:837;;;16665:45;16699:10;16665:33;:45::i;:::-;16714:1;16665:50;16661:68;;-1:-1:-1;16724:5:88;;14699:4115;-1:-1:-1;;;14699:4115:88:o;16661:68::-;16990:21;17057:1;17019:34;17037:15;17019:17;:34::i;:::-;17015:38;;:1;:38;:::i;:::-;17014:44;;;;:::i;:::-;16990:68;;17068:26;17097:37;:35;:37::i;:::-;17068:66;;17401:9;17396:1389;17420:9;:16;17416:1;:20;17396:1389;;;17457:16;17476:9;17486:1;17476:12;;;;;;;;:::i;:::-;;;;;;;;;;;;17502:48;17553:29;;;:11;:29;;;;;;-1:-1:-1;;;;;17553:39:88;;;;;;;;;17502:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17694:45;;:16;:45;;;;;17740:31;;17694:78;;;;;;;17476:12;;-1:-1:-1;17790:38:88;;;17786:989;;;17848:66;17881:20;17903:10;17848:32;:66::i;:::-;-1:-1:-1;18756:4:88;;14699:4115;-1:-1:-1;;;;;;;;;14699:4115:88:o;17786:989::-;-1:-1:-1;;;17438:3:88;;17396:1389;;;-1:-1:-1;18802:5:88;;14699:4115;-1:-1:-1;;;;;;14699:4115:88:o;7084:141:24:-;8870:21;8560:40;-1:-1:-1;;;8560:40:24;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:24;;;;;;;;;;;4381:197:23;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:23;;-1:-1:-1;;;;;20083:32:120;;4514:47:23;;;20065:51:120;20132:18;;;20125:34;;;20038:18;;4514:47:23;19891:274:120;2779:335:42;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:42;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;2960:148::-;3079:18;:16;:18::i;22773:105:88:-;22817:15;;;:31;;;-1:-1:-1;;;22817:31:88;;;;-1:-1:-1;;;;;22817:15:88;;;;:29;;:31;;;;;;;;;;:15;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22858:13;:11;:13::i;20341:1992::-;20470:29;20502:19;:17;:19::i;:::-;21075:27;;21045:58;;;;:29;:58;;;;;;20470:51;;-1:-1:-1;21045:83:88;;21041:142;;21149:34;;-1:-1:-1;;;21149:34:88;;;;;;;;;;;21041:142;21333:27;;:31;;21363:1;;21333:31;:::i;:::-;21296:33;;:68;21292:127;;21385:34;;-1:-1:-1;;;21385:34:88;;;;;;;;;;;21292:127;21464:31;;21430:66;;;;:33;:66;;;;;;;;21497:27;;21430:95;;;;;;;:118;;;;;;;;;;;;;;;;;;;;;;;;21558:63;;;;21631:44;;;:15;:44;;;;;:55;;-1:-1:-1;;;;;;21631:55:88;-1:-1:-1;;;;;21631:55:88;;;;;21725:27;;21696:57;;:28;:57;;;;;21756:12;21696:72;;21810:27;;21778:60;;:31;:60;;;;;;21841:15;21778:78;;22202:28;22244:31;;22289:27;;22165:161;;19325:25:120;;;19366:18;;;19359:34;;;;22165:161:88;;19298:18:120;22165:161:88;19151:248:120;2186:281:42;2263:17;-1:-1:-1;;;;;2263:29:42;;2296:1;2263:34;2259:119;;2320:47;;-1:-1:-1;;;2320:47:42;;-1:-1:-1;;;;;6268:32:120;;2320:47:42;;;6250:51:120;6223:18;;2320:47:42;6104:203:120;2259:119:42;-1:-1:-1;;;;;;;;;;;2387:73:42;;-1:-1:-1;;;;;;2387:73:42;-1:-1:-1;;;;;2387:73:42;;;;;;;;;;2186:281::o;4106:253:55:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:55;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:55:o;6598:122:42:-;6648:9;:13;6644:70;;6684:19;;-1:-1:-1;;;6684:19:42;;;;;;;;;;;22998:379:88;23085:26;23114:15;;:66;;-1:-1:-1;;;23114:66:88;;23174:4;23114:66;;;6250:51:120;-1:-1:-1;;;;;23114:15:88;;;;:51;;6223:18:120;;23114:66:88;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23114:66:88;;;;;;;;;;;;:::i;:::-;23085:95;;23190:21;23251:9;:16;23245:1;23232:12;:14;;;;:::i;:::-;23214:53;;;23222:25;23214:53;:::i;:::-;23190:77;;23346:9;23356:13;23346:24;;;;;;;;:::i;:::-;;;;;;;23328:15;;:42;;;;;-1:-1:-1;;;;;23328:42:88;;;;;-1:-1:-1;;;;;23328:42:88;;;;;;23030:347;;22998:379::o;4625:582:55:-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:55;;;:23;5045:49;5041:119;;;5121:24;;-1:-1:-1;;;5121:24:55;;-1:-1:-1;;;;;6268:32:120;;5121:24:55;;;6250:51:120;6223:18;;5121:24:55;6104:203:120;5041:119:55;-1:-1:-1;5180:10:55;5173:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:55;;;;;;;;;;;14:286:120;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:120;;209:43;;199:71;;266:1;263;256:12;497:466;574:6;582;590;643:2;631:9;622:7;618:23;614:32;611:52;;;659:1;656;649:12;611:52;-1:-1:-1;;704:23:120;;;824:2;809:18;;796:32;;-1:-1:-1;927:2:120;912:18;;;899:32;;497:466;-1:-1:-1;497:466:120:o;1543:149::-;-1:-1:-1;;;;;1636:31:120;;1626:42;;1616:70;;1682:1;1679;1672:12;1697:127;1758:10;1753:3;1749:20;1746:1;1739:31;1789:4;1786:1;1779:15;1813:4;1810:1;1803:15;1829:275;1900:2;1894:9;1965:2;1946:13;;-1:-1:-1;;1942:27:120;1930:40;;-1:-1:-1;;;;;1985:34:120;;2021:22;;;1982:62;1979:88;;;2047:18;;:::i;:::-;2083:2;2076:22;1829:275;;-1:-1:-1;1829:275:120:o;2109:183::-;2169:4;-1:-1:-1;;;;;2194:6:120;2191:30;2188:56;;;2224:18;;:::i;:::-;-1:-1:-1;2269:1:120;2265:14;2281:4;2261:25;;2109:183::o;2297:762::-;2351:5;2404:3;2397:4;2389:6;2385:17;2381:27;2371:55;;2422:1;2419;2412:12;2371:55;2462:6;2449:20;2489:64;2505:47;2545:6;2505:47;:::i;:::-;2489:64;:::i;:::-;2577:3;2601:6;2596:3;2589:19;2633:4;2628:3;2624:14;2617:21;;2694:4;2684:6;2681:1;2677:14;2669:6;2665:27;2661:38;2647:52;;2722:3;2714:6;2711:15;2708:35;;;2739:1;2736;2729:12;2708:35;2775:4;2767:6;2763:17;2789:239;2805:6;2800:3;2797:15;2789:239;;;2887:3;2874:17;2904:49;2947:5;2904:49;:::i;:::-;2966:18;;3013:4;3004:14;;;;2822;2789:239;;;-1:-1:-1;3046:7:120;2297:762;-1:-1:-1;;;;;2297:762:120:o;3064:1010::-;3219:6;3227;3235;3243;3251;3259;3312:3;3300:9;3291:7;3287:23;3283:33;3280:53;;;3329:1;3326;3319:12;3280:53;3368:9;3355:23;3387:49;3430:5;3387:49;:::i;:::-;3455:5;-1:-1:-1;3533:2:120;3518:18;;3505:32;;-1:-1:-1;3636:2:120;3621:18;;3608:32;;-1:-1:-1;3739:2:120;3724:18;;3711:32;;-1:-1:-1;3820:3:120;3805:19;;3792:33;-1:-1:-1;;;;;3837:30:120;;3834:50;;;3880:1;3877;3870:12;3834:50;3903:61;3956:7;3947:6;3936:9;3932:22;3903:61;:::i;:::-;3064:1010;;;;-1:-1:-1;3064:1010:120;;;;;4037:3;4022:19;;;4009:33;;-1:-1:-1;;;3064:1010:120:o;4079:727::-;4146:5;4194:4;4182:9;4177:3;4173:19;4169:30;4166:50;;;4212:1;4209;4202:12;4166:50;4265:2;4259:9;4307:4;4295:17;;-1:-1:-1;;;;;4327:34:120;;4363:22;;;4324:62;4321:88;;;4389:18;;:::i;:::-;4425:2;4418:22;;;4509:23;;4541;;4637:2;4622:18;;;4609:32;4657:15;;;4650:32;4740:18;;;4727:32;4775:15;;;4768:32;;;;-1:-1:-1;4458:6:120;4079:727;-1:-1:-1;4079:727:120:o;4811:254::-;4909:6;4962:2;4950:9;4941:7;4937:23;4933:32;4930:52;;;4978:1;4975;4968:12;4930:52;5001:58;5051:7;5040:9;5001:58;:::i;5070:226::-;5129:6;5182:2;5170:9;5161:7;5157:23;5153:32;5150:52;;;5198:1;5195;5188:12;5150:52;-1:-1:-1;5243:23:120;;5070:226;-1:-1:-1;5070:226:120:o;5301:385::-;5369:6;5377;5430:2;5418:9;5409:7;5405:23;5401:32;5398:52;;;5446:1;5443;5436:12;5398:52;5491:23;;;-1:-1:-1;5590:2:120;5575:18;;5562:32;5603:51;5562:32;5603:51;:::i;:::-;5673:7;5663:17;;;5301:385;;;;;:::o;6702:346::-;6770:6;6778;6831:2;6819:9;6810:7;6806:23;6802:32;6799:52;;;6847:1;6844;6837:12;6799:52;-1:-1:-1;;6892:23:120;;;7012:2;6997:18;;;6984:32;;-1:-1:-1;6702:346:120:o;7377:265::-;7436:6;7489:2;7477:9;7468:7;7464:23;7460:32;7457:52;;;7505:1;7502;7495:12;7457:52;7544:9;7531:23;7563:49;7606:5;7563:49;:::i;7647:348::-;7731:6;7784:2;7772:9;7763:7;7759:23;7755:32;7752:52;;;7800:1;7797;7790:12;7752:52;7840:9;7827:23;-1:-1:-1;;;;;7865:6:120;7862:30;7859:50;;;7905:1;7902;7895:12;7859:50;7928:61;7981:7;7972:6;7961:9;7957:22;7928:61;:::i;8000:918::-;8077:6;8085;8138:2;8126:9;8117:7;8113:23;8109:32;8106:52;;;8154:1;8151;8144:12;8106:52;8193:9;8180:23;8212:49;8255:5;8212:49;:::i;:::-;8280:5;-1:-1:-1;8336:2:120;8321:18;;8308:32;-1:-1:-1;;;;;8352:30:120;;8349:50;;;8395:1;8392;8385:12;8349:50;8418:22;;8471:4;8463:13;;8459:27;-1:-1:-1;8449:55:120;;8500:1;8497;8490:12;8449:55;8540:2;8527:16;-1:-1:-1;;;;;8558:6:120;8555:30;8552:56;;;8588:18;;:::i;:::-;8630:57;8677:2;8654:17;;-1:-1:-1;;8650:31:120;8683:2;8646:40;8630:57;:::i;:::-;8710:6;8703:5;8696:21;8758:7;8753:2;8744:6;8740:2;8736:15;8732:24;8729:37;8726:57;;;8779:1;8776;8769:12;8726:57;8834:6;8829:2;8825;8821:11;8816:2;8809:5;8805:14;8792:49;8886:1;8881:2;8872:6;8865:5;8861:18;8857:27;8850:38;8907:5;8897:15;;;;;8000:918;;;;;:::o;8923:965::-;9046:6;9099:2;9087:9;9078:7;9074:23;9070:32;9067:52;;;9115:1;9112;9105:12;9067:52;9155:9;9142:23;-1:-1:-1;;;;;9180:6:120;9177:30;9174:50;;;9220:1;9217;9210:12;9174:50;9243:22;;9296:4;9288:13;;9284:27;-1:-1:-1;9274:55:120;;9325:1;9322;9315:12;9274:55;9365:2;9352:16;9388:64;9404:47;9444:6;9404:47;:::i;9388:64::-;9474:3;9498:6;9493:3;9486:19;9530:2;9525:3;9521:12;9514:19;;9588:2;9580:4;9572:6;9568:17;9564:2;9560:26;9556:35;9542:49;;9614:7;9606:6;9603:19;9600:39;;;9635:1;9632;9625:12;9600:39;9667:2;9663;9659:11;9648:22;;9679:179;9695:6;9690:3;9687:15;9679:179;;;9763:52;9807:7;9802:3;9763:52;:::i;:::-;9758:3;9751:65;9845:2;9840:3;9836:12;9829:19;;9721:4;9716:3;9712:14;9705:21;;9679:179;;;9877:5;8923:965;-1:-1:-1;;;;;;8923:965:120:o;9893:544::-;9970:6;9978;9986;10039:2;10027:9;10018:7;10014:23;10010:32;10007:52;;;10055:1;10052;10045:12;10007:52;10100:23;;;-1:-1:-1;10199:2:120;10184:18;;10171:32;10212:51;10171:32;10212:51;:::i;:::-;10282:7;-1:-1:-1;10341:2:120;10326:18;;10313:32;10354:51;10313:32;10354:51;:::i;:::-;10424:7;10414:17;;;9893:544;;;;;:::o;10442:446::-;10495:3;10533:5;10527:12;10560:6;10555:3;10548:19;10592:4;10587:3;10583:14;10576:21;;10631:4;10624:5;10620:16;10654:1;10664:199;10678:6;10675:1;10672:13;10664:199;;;10743:13;;-1:-1:-1;;;;;10739:39:120;10727:52;;10808:4;10799:14;;;;10836:17;;;;10775:1;10693:9;10664:199;;;-1:-1:-1;10879:3:120;;10442:446;-1:-1:-1;;;;10442:446:120:o;10893:261::-;11072:2;11061:9;11054:21;11035:4;11092:56;11144:2;11133:9;11129:18;11121:6;11092:56;:::i;11159:418::-;11308:2;11297:9;11290:21;11271:4;11340:6;11334:13;11383:6;11378:2;11367:9;11363:18;11356:34;11442:6;11437:2;11429:6;11425:15;11420:2;11409:9;11405:18;11399:50;11498:1;11493:2;11484:6;11473:9;11469:22;11465:31;11458:42;11568:2;11561;11557:7;11552:2;11544:6;11540:15;11536:29;11525:9;11521:45;11517:54;11509:62;;;11159:418;;;;:::o;11582:424::-;11650:6;11658;11711:2;11699:9;11690:7;11686:23;11682:32;11679:52;;;11727:1;11724;11717:12;11679:52;11766:9;11753:23;11785:49;11828:5;11785:49;:::i;:::-;11853:5;-1:-1:-1;11910:2:120;11895:18;;11882:32;11923:51;11882:32;11923:51;:::i;12011:273::-;12067:6;12120:2;12108:9;12099:7;12095:23;12091:32;12088:52;;;12136:1;12133;12126:12;12088:52;12175:9;12162:23;12228:5;12221:13;12214:21;12207:5;12204:32;12194:60;;12250:1;12247;12240:12;12874:332;13081:6;13070:9;13063:25;13124:2;13119;13108:9;13104:18;13097:30;13044:4;13144:56;13196:2;13185:9;13181:18;13173:6;13144:56;:::i;13842:969::-;13937:6;13990:2;13978:9;13969:7;13965:23;13961:32;13958:52;;;14006:1;14003;13996:12;13958:52;14039:9;14033:16;-1:-1:-1;;;;;14064:6:120;14061:30;14058:50;;;14104:1;14101;14094:12;14058:50;14127:22;;14180:4;14172:13;;14168:27;-1:-1:-1;14158:55:120;;14209:1;14206;14199:12;14158:55;14242:2;14236:9;14265:64;14281:47;14321:6;14281:47;:::i;14265:64::-;14351:3;14375:6;14370:3;14363:19;14407:2;14402:3;14398:12;14391:19;;14462:2;14452:6;14449:1;14445:14;14441:2;14437:23;14433:32;14419:46;;14488:7;14480:6;14477:19;14474:39;;;14509:1;14506;14499:12;14474:39;14541:2;14537;14533:11;14522:22;;14553:228;14569:6;14564:3;14561:15;14553:228;;;14642:3;14636:10;14659:49;14702:5;14659:49;:::i;:::-;14721:18;;14768:2;14586:12;;;;14759;;;;14553:228;;14816:127;14877:10;14872:3;14868:20;14865:1;14858:31;14908:4;14905:1;14898:15;14932:4;14929:1;14922:15;14948:127;15009:10;15004:3;15000:20;14997:1;14990:31;15040:4;15037:1;15030:15;15064:4;15061:1;15054:15;15080:125;15145:9;;;15166:10;;;15163:36;;;15179:18;;:::i;15210:398::-;15412:2;15394:21;;;15451:2;15431:18;;;15424:30;15490:34;15485:2;15470:18;;15463:62;-1:-1:-1;;;15556:2:120;15541:18;;15534:32;15598:3;15583:19;;15210:398::o;15989:184::-;16059:6;16112:2;16100:9;16091:7;16087:23;16083:32;16080:52;;;16128:1;16125;16118:12;16080:52;-1:-1:-1;16151:16:120;;15989:184;-1:-1:-1;15989:184:120:o;16655:398::-;16857:2;16839:21;;;16896:2;16876:18;;;16869:30;16935:34;16930:2;16915:18;;16908:62;-1:-1:-1;;;17001:2:120;16986:18;;16979:32;17043:3;17028:19;;16655:398::o;18412:127::-;18473:10;18468:3;18464:20;18461:1;18454:31;18504:4;18501:1;18494:15;18528:4;18525:1;18518:15;18544:112;18576:1;18602;18592:35;;18607:18;;:::i;:::-;-1:-1:-1;18641:9:120;;18544:112::o;18661:128::-;18728:9;;;18749:11;;;18746:37;;;18763:18;;:::i;19593:168::-;19666:9;;;19697;;19714:15;;;19708:22;;19694:37;19684:71;;19735:18;;:::i;19766:120::-;19806:1;19832;19822:35;;19837:18;;:::i;:::-;-1:-1:-1;19871:9:120;;19766:120::o;20170:301::-;20299:3;20337:6;20331:13;20383:6;20376:4;20368:6;20364:17;20359:3;20353:37;20445:1;20409:16;;20434:13;;;-1:-1:-1;20409:16:120;20170:301;-1:-1:-1;20170:301:120:o","linkReferences":{},"immutableReferences":{"39620":[{"start":7514,"length":32},{"start":7555,"length":32},{"start":7876,"length":32}]}},"methodIdentifiers":{"COMMITMENT_ADMIN()":"80e460f0","DEFAULT_ADMIN_ROLE()":"a217fddf","TRUSTED_ATTESTER()":"5db916ab","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","acceptGenesisCeremony()":"92a2ebf3","acceptorTerm()":"c691e6e4","batchGrantCommitmentAdmin(address[])":"4b47d955","batchGrantTrustedAttester(address[])":"cf6772ad","commitmentStakes(uint256,bytes32)":"fc2788ad","commitments(uint256,address)":"e90d4c06","computeTotalStake(uint256)":"0daf6181","computeTotalStakeForAcceptingEpoch()":"08c39793","createSuperBlockCommitment(uint256,bytes32,bytes32)":"026583d7","currentAcceptor()":"2e55d0f6","currentAcceptorIsLive()":"e4566c78","forceLatestCommitment((uint256,bytes32,bytes32))":"08c7050f","getAcceptingEpoch()":"6c713af8","getAttesterStake(uint256,address)":"ba26513e","getAttesterStakeForAcceptingEpoch(address)":"491d0467","getCurrentAcceptor()":"f99f6e4c","getCustodianStake(uint256,address)":"1de38fe1","getCustodianStakeForAcceptingEpoch(address)":"d440116d","getL1BlockStartOfCurrentAcceptorTerm()":"c5de60a9","getMaxTolerableSuperBlockHeight()":"943b79e2","getNextAcceptingEpoch()":"e4d991ee","getPostconfirmedCommitment(uint256)":"2bfd11d6","getPresentEpoch()":"37d7f58f","getRoleAdmin(bytes32)":"248a9ca3","getStake(uint256,address,address)":"7aa81c2a","getStakeForAcceptingEpoch(address,address)":"bb04bd2f","getStakedAttestersForAcceptingEpoch()":"aa0d6fcd","getValidatorCommitmentAtSuperBlockHeight(uint256,address)":"556d97c8","grantCommitmentAdmin(address)":"949d7c2a","grantRole(bytes32,address)":"2f2ff15d","grantTrustedAttester(address)":"81df1746","hasRole(bytes32,address)":"91d14854","initialize()":"8129fc1c","initialize(address,uint256,uint256,uint256,address[],uint256)":"03f02fc0","lastPostconfirmedSuperBlockHeight()":"fdafe9ca","leadingSuperBlockTolerance()":"03d3f7fd","openAttestationEnabled()":"ef9ae15c","postconfirmSuperBlocks()":"017304e1","postconfirmedAtL1BlockHeight(uint256)":"7ac561c8","postconfirmedAtL1BlockHeightByAcceptor(uint256)":"f8d26aec","postconfirmedAtL1BlockTimestamp(uint256)":"a207fe2f","postconfirmedBy(uint256)":"91807e4f","postconfirmedByAcceptor(uint256)":"410f3146","postconfirmedSuperBlocks(uint256)":"eda67fc4","postconfirmedSuperBlocksVersion()":"ec18c186","proxiableUUID()":"52d1902d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","setLastPostconfirmedSuperBlockHeight(uint256)":"4c17b024","setOpenAttestationEnabled(bool)":"d2526fef","setPostconfirmedCommitmentAtBlockHeight((uint256,bytes32,bytes32))":"3119edd4","stakingContract()":"ee99205c","submitBatchSuperBlockCommitment((uint256,bytes32,bytes32)[])":"622e3616","submitSuperBlockCommitment((uint256,bytes32,bytes32))":"0e74b609","superBlockHeightAssignedEpoch(uint256)":"85e6b8c2","supportsInterface(bytes4)":"01ffc9a7","upgradeToAndCall(address,bytes)":"4f1ef286","versionedPostconfirmedSuperBlocks(uint256,uint256)":"3ba18005"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AttesterAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnacceptableSuperBlockCommitment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateCommitment\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"attesterStake\",\"type\":\"uint256\"}],\"name\":\"SuperBlockCommitmentSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateCommitment\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"SuperBlockPostconfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COMMITMENT_ADMIN\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRUSTED_ATTESTER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptorTerm\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"}],\"name\":\"batchGrantCommitmentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"}],\"name\":\"batchGrantTrustedAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitement\",\"type\":\"bytes32\"}],\"name\":\"commitmentStakes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"commitments\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"computeTotalStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeTotalStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"name\":\"createSuperBlockCommitment\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentAcceptor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"currentAcceptorIsLive\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"forceLatestCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentAcceptor\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getL1BlockStartOfCurrentAcceptorTerm\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxTolerableSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"getPostconfirmedCommitment\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPresentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakedAttestersForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getValidatorCommitmentAtSuperBlockHeight\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantCommitmentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"grantTrustedAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IMovementStaking\",\"name\":\"_stakingContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_lastPostconfirmedSuperBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_leadingSuperBlockTolerance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_epochDuration\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_custodians\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_acceptorTerm\",\"type\":\"uint256\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPostconfirmedSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"leadingSuperBlockTolerance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"openAttestationEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmSuperBlocks\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockHeight\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockHeightByAcceptor\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockHeight\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedBy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedByAcceptor\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedSuperBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmedSuperBlocksVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"setLastPostconfirmedSuperBlockHeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOpenAttestationEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"setPostconfirmedCommitmentAtBlockHeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakingContract\",\"outputs\":[{\"internalType\":\"contract IMovementStaking\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.SuperBlockCommitment[]\",\"name\":\"superBlockCommitments\",\"type\":\"tuple[]\"}],\"name\":\"submitBatchSuperBlockCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"submitSuperBlockCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"superBlockHeightAssignedEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"versionedPostconfirmedSuperBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize()\":{\"details\":\"Initialize the contract\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"acceptorTerm()\":{\"notice\":\"Acceptor term time in seconds (determined by L1 blocks). The confimer remains the same for acceptorTerm period.\"},\"getAttesterStake(uint256,address)\":{\"notice\":\"Gets the stake for a given attester at a given epoch\"},\"getAttesterStakeForAcceptingEpoch(address)\":{\"notice\":\"Gets the stake for a given attester at the accepting epoch\"},\"getCurrentAcceptor()\":{\"notice\":\"Determines the current acceptor using L1 block hash as a source of randomness\"},\"getCustodianStake(uint256,address)\":{\"notice\":\"Gets the stake for a given custodian for a given epoch\"},\"getL1BlockStartOfCurrentAcceptorTerm()\":{\"notice\":\"Gets the L1 block height at which the current acceptor's term started\"},\"getStake(uint256,address,address)\":{\"notice\":\"Gets the stake for a given tuple (custodian, attester) at a given epoch\"},\"getStakeForAcceptingEpoch(address,address)\":{\"notice\":\"Gets the stake for a given tuple (custodian, attester) at the accepting epoch\"},\"getStakedAttestersForAcceptingEpoch()\":{\"notice\":\"Gets the attesters who have stake in the current accepting epoch\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/settlement/MCR.sol\":\"MCR\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194\",\"dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"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/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040\",\"dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt\"]},\"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/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02\",\"dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"]},\"src/settlement/MCR.sol\":{\"keccak256\":\"0xf52d69afcb85e946f6e2377ca488c249731f44cbe98d875d641adbf7e6ef0e18\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://8a74c297206ed8942a64397f67ee9511d1bbd344fc8eff27f2df523fda794b62\",\"dweb:/ipfs/QmNU91hnEWbGopF2ufw49G8qm3MoXck4e6LMYJQuhaHCxD\"]},\"src/settlement/MCRStorage.sol\":{\"keccak256\":\"0xcf70794dacadaceaf5126031e9d5d35cf02d3a113727b085e5e936d5852e6feb\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://76b8f02fa46689cc386b3bc76f9b1e393f61faed5786028c12ac28c0d0b54b9b\",\"dweb:/ipfs/QmWyqMrsFNYFYchDTyxoJvctc1QRPHes6sFdw39y1rASxo\"]},\"src/settlement/interfaces/IMCR.sol\":{\"keccak256\":\"0xcdad9c33e8f5dfb74d23c3fa94d50cb8d1ebc4012edb34d1d11e5f59afe02d70\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://27b7274db68ba31c7fccad0545cdb5803e9c5d78d11880607bfed5acd1a76c45\",\"dweb:/ipfs/QmaraqpoyZLaDYdgaRFji91Jaj1hmGjKV857jw1LjMYGP6\"]},\"src/settlement/settlement/BaseSettlement.sol\":{\"keccak256\":\"0xf3f6ea0ae8db122d1c6dade60057ea8fa03b8efc8108f03e48049bb9548d2c9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e340fdd89c1872461ec0f98195ef56aaf583ebf2897890ee74c1eefad8e8c86e\",\"dweb:/ipfs/QmWCcRibYEJZEvY1ugrw7jkumrHNxr8z3dMeP457PkbJED\"]},\"src/staking/MovementStaking.sol\":{\"keccak256\":\"0x0280962d01745f8bd126f4cd28a7abb2b3cc5d89e0320bba39ef1b32f3c83959\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://ec0b7c24bd18159a653f2f9d7990dd3db388542051e861614150be9e5832ce5b\",\"dweb:/ipfs/QmTDPHADiBHiD95aSagLiHZrRHZ35cNFokjMUT2ydPUydZ\"]},\"src/staking/MovementStakingStorage.sol\":{\"keccak256\":\"0x1272d2291cc72bdc4aa2adf265786c40dad3066ba6ab1708442a349590f1c822\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://e9ce2dac8f59becae906307ae5868fd5b1597413a79a7f977d0e70638cadf404\",\"dweb:/ipfs/QmSdj3ZEHhmCMaK1Cx8CvP2Nsfdnf5gr3TVqiR5iETaBtE\"]},\"src/staking/base/BaseStaking.sol\":{\"keccak256\":\"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46\",\"dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx\"]},\"src/staking/interfaces/IMovementStaking.sol\":{\"keccak256\":\"0x66bce33452b60845a2d47bd0e4c58dc8d1c690f2681b4c2d6de3a6db9cd09d34\",\"urls\":[\"bzz-raw://f6dac6c2395bc43a7e3a7637e63a2deafbb9cf815ad9d879919f6a7f31c47b44\",\"dweb:/ipfs/QmRQSBNe2xZXksDkVmRfsiz3a1Zp9NLD8kHYPnMW4ytzDM\"]},\"src/token/base/BaseToken.sol\":{\"keccak256\":\"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e\",\"dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd\"]},\"src/token/base/MintableToken.sol\":{\"keccak256\":\"0x67dcaae55138dda0f6fb9cce7d00b21b1dcf48144d0442073bec83aedbd73ca6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009d22618ed30e84b0839edbe7bd1a18afe7073a62477667bf96d765428385b7\",\"dweb:/ipfs/QmNzA9RjM6SxVJYWohq7JbLvyBrhzzjzQQwBfArBQqCNAQ\"]},\"src/token/base/WrappedToken.sol\":{\"keccak256\":\"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885\",\"dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4\"]},\"src/token/base/WrappedTokenStorage.sol\":{\"keccak256\":\"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08\",\"dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj\"]},\"src/token/custodian/CustodianToken.sol\":{\"keccak256\":\"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04\",\"dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"AttesterAlreadyCommitted"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[],"type":"error","name":"UnacceptableSuperBlockCommitment"},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"stateCommitment","type":"bytes32","indexed":false},{"internalType":"uint256","name":"attesterStake","type":"uint256","indexed":false}],"type":"event","name":"SuperBlockCommitmentSubmitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"stateCommitment","type":"bytes32","indexed":false},{"internalType":"uint256","name":"height","type":"uint256","indexed":false}],"type":"event","name":"SuperBlockPostconfirmed","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"COMMITMENT_ADMIN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TRUSTED_ATTESTER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptGenesisCeremony"},{"inputs":[],"stateMutability":"view","type":"function","name":"acceptorTerm","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"batchGrantCommitmentAdmin"},{"inputs":[{"internalType":"address[]","name":"attesters","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"batchGrantTrustedAttester"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"bytes32","name":"commitement","type":"bytes32"}],"stateMutability":"view","type":"function","name":"commitmentStakes","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"commitments","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}],"stateMutability":"view","type":"function","name":"computeTotalStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"computeTotalStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"createSuperBlockCommitment","outputs":[{"internalType":"struct MCRStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"currentAcceptor","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"pure","type":"function","name":"currentAcceptorIsLive","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct MCRStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"forceLatestCommitment"},{"inputs":[],"stateMutability":"view","type":"function","name":"getAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentAcceptor","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getL1BlockStartOfCurrentAcceptorTerm","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getMaxTolerableSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getNextAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"getPostconfirmedCommitment","outputs":[{"internalType":"struct MCRStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPresentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getStakedAttestersForAcceptingEpoch","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getValidatorCommitmentAtSuperBlockHeight","outputs":[{"internalType":"struct MCRStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantCommitmentAdmin"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantTrustedAttester"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"contract IMovementStaking","name":"_stakingContract","type":"address"},{"internalType":"uint256","name":"_lastPostconfirmedSuperBlockHeight","type":"uint256"},{"internalType":"uint256","name":"_leadingSuperBlockTolerance","type":"uint256"},{"internalType":"uint256","name":"_epochDuration","type":"uint256"},{"internalType":"address[]","name":"_custodians","type":"address[]"},{"internalType":"uint256","name":"_acceptorTerm","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"lastPostconfirmedSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"leadingSuperBlockTolerance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"openAttestationEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"postconfirmSuperBlocks"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockHeight","outputs":[{"internalType":"uint256","name":"L1BlockHeight","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockHeightByAcceptor","outputs":[{"internalType":"uint256","name":"L1BlockHeight","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockTimestamp","outputs":[{"internalType":"uint256","name":"L1BlockTimestamp","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedBy","outputs":[{"internalType":"address","name":"attester","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedByAcceptor","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedSuperBlocks","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"postconfirmedSuperBlocksVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setLastPostconfirmedSuperBlockHeight"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setOpenAttestationEnabled"},{"inputs":[{"internalType":"struct MCRStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"setPostconfirmedCommitmentAtBlockHeight"},{"inputs":[],"stateMutability":"view","type":"function","name":"stakingContract","outputs":[{"internalType":"contract IMovementStaking","name":"","type":"address"}]},{"inputs":[{"internalType":"struct MCRStorage.SuperBlockCommitment[]","name":"superBlockCommitments","type":"tuple[]","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"submitBatchSuperBlockCommitment"},{"inputs":[{"internalType":"struct MCRStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"submitSuperBlockCommitment"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"superBlockHeightAssignedEpoch","outputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}]},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"versionedPostconfirmedSuperBlocks","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize()":{"details":"Initialize the contract"},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"acceptorTerm()":{"notice":"Acceptor term time in seconds (determined by L1 blocks). The confimer remains the same for acceptorTerm period."},"getAttesterStake(uint256,address)":{"notice":"Gets the stake for a given attester at a given epoch"},"getAttesterStakeForAcceptingEpoch(address)":{"notice":"Gets the stake for a given attester at the accepting epoch"},"getCurrentAcceptor()":{"notice":"Determines the current acceptor using L1 block hash as a source of randomness"},"getCustodianStake(uint256,address)":{"notice":"Gets the stake for a given custodian for a given epoch"},"getL1BlockStartOfCurrentAcceptorTerm()":{"notice":"Gets the L1 block height at which the current acceptor's term started"},"getStake(uint256,address,address)":{"notice":"Gets the stake for a given tuple (custodian, attester) at a given epoch"},"getStakeForAcceptingEpoch(address,address)":{"notice":"Gets the stake for a given tuple (custodian, attester) at the accepting epoch"},"getStakedAttestersForAcceptingEpoch()":{"notice":"Gets the attesters who have stake in the current accepting epoch"}},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/settlement/MCR.sol":"MCR"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/forge-std/src/console.sol":{"keccak256":"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a","urls":["bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194","dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"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/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53","urls":["bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930","dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f","urls":["bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040","dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt"],"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/introspection/ERC165Upgradeable.sol":{"keccak256":"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8","urls":["bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45","dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c","urls":["bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba","dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c","urls":["bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9","dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65","urls":["bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a","dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"],"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/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386","urls":["bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0","dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"keccak256":"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236","urls":["bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02","dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa","urls":["bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1","dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA"],"license":"MIT"},"src/settlement/MCR.sol":{"keccak256":"0xf52d69afcb85e946f6e2377ca488c249731f44cbe98d875d641adbf7e6ef0e18","urls":["bzz-raw://8a74c297206ed8942a64397f67ee9511d1bbd344fc8eff27f2df523fda794b62","dweb:/ipfs/QmNU91hnEWbGopF2ufw49G8qm3MoXck4e6LMYJQuhaHCxD"],"license":"UNLICENSED"},"src/settlement/MCRStorage.sol":{"keccak256":"0xcf70794dacadaceaf5126031e9d5d35cf02d3a113727b085e5e936d5852e6feb","urls":["bzz-raw://76b8f02fa46689cc386b3bc76f9b1e393f61faed5786028c12ac28c0d0b54b9b","dweb:/ipfs/QmWyqMrsFNYFYchDTyxoJvctc1QRPHes6sFdw39y1rASxo"],"license":"UNLICENSED"},"src/settlement/interfaces/IMCR.sol":{"keccak256":"0xcdad9c33e8f5dfb74d23c3fa94d50cb8d1ebc4012edb34d1d11e5f59afe02d70","urls":["bzz-raw://27b7274db68ba31c7fccad0545cdb5803e9c5d78d11880607bfed5acd1a76c45","dweb:/ipfs/QmaraqpoyZLaDYdgaRFji91Jaj1hmGjKV857jw1LjMYGP6"],"license":"UNLICENSED"},"src/settlement/settlement/BaseSettlement.sol":{"keccak256":"0xf3f6ea0ae8db122d1c6dade60057ea8fa03b8efc8108f03e48049bb9548d2c9a","urls":["bzz-raw://e340fdd89c1872461ec0f98195ef56aaf583ebf2897890ee74c1eefad8e8c86e","dweb:/ipfs/QmWCcRibYEJZEvY1ugrw7jkumrHNxr8z3dMeP457PkbJED"],"license":"MIT"},"src/staking/MovementStaking.sol":{"keccak256":"0x0280962d01745f8bd126f4cd28a7abb2b3cc5d89e0320bba39ef1b32f3c83959","urls":["bzz-raw://ec0b7c24bd18159a653f2f9d7990dd3db388542051e861614150be9e5832ce5b","dweb:/ipfs/QmTDPHADiBHiD95aSagLiHZrRHZ35cNFokjMUT2ydPUydZ"],"license":"UNLICENSED"},"src/staking/MovementStakingStorage.sol":{"keccak256":"0x1272d2291cc72bdc4aa2adf265786c40dad3066ba6ab1708442a349590f1c822","urls":["bzz-raw://e9ce2dac8f59becae906307ae5868fd5b1597413a79a7f977d0e70638cadf404","dweb:/ipfs/QmSdj3ZEHhmCMaK1Cx8CvP2Nsfdnf5gr3TVqiR5iETaBtE"],"license":"UNLICENSED"},"src/staking/base/BaseStaking.sol":{"keccak256":"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393","urls":["bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46","dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx"],"license":"MIT"},"src/staking/interfaces/IMovementStaking.sol":{"keccak256":"0x66bce33452b60845a2d47bd0e4c58dc8d1c690f2681b4c2d6de3a6db9cd09d34","urls":["bzz-raw://f6dac6c2395bc43a7e3a7637e63a2deafbb9cf815ad9d879919f6a7f31c47b44","dweb:/ipfs/QmRQSBNe2xZXksDkVmRfsiz3a1Zp9NLD8kHYPnMW4ytzDM"],"license":null},"src/token/base/BaseToken.sol":{"keccak256":"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2","urls":["bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e","dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd"],"license":"MIT"},"src/token/base/MintableToken.sol":{"keccak256":"0x67dcaae55138dda0f6fb9cce7d00b21b1dcf48144d0442073bec83aedbd73ca6","urls":["bzz-raw://009d22618ed30e84b0839edbe7bd1a18afe7073a62477667bf96d765428385b7","dweb:/ipfs/QmNzA9RjM6SxVJYWohq7JbLvyBrhzzjzQQwBfArBQqCNAQ"],"license":"MIT"},"src/token/base/WrappedToken.sol":{"keccak256":"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45","urls":["bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885","dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4"],"license":"MIT"},"src/token/base/WrappedTokenStorage.sol":{"keccak256":"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e","urls":["bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08","dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj"],"license":"MIT"},"src/token/custodian/CustodianToken.sol":{"keccak256":"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350","urls":["bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04","dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":50962,"contract":"src/settlement/MCR.sol:MCR","label":"stakingContract","offset":0,"slot":"0","type":"t_contract(IMovementStaking)52990"},{"astId":50964,"contract":"src/settlement/MCR.sol:MCR","label":"leadingSuperBlockTolerance","offset":0,"slot":"1","type":"t_uint256"},{"astId":50966,"contract":"src/settlement/MCR.sol:MCR","label":"lastPostconfirmedSuperBlockHeight","offset":0,"slot":"2","type":"t_uint256"},{"astId":50969,"contract":"src/settlement/MCR.sol:MCR","label":"acceptorTerm","offset":0,"slot":"3","type":"t_uint256"},{"astId":50971,"contract":"src/settlement/MCR.sol:MCR","label":"currentAcceptor","offset":0,"slot":"4","type":"t_address"},{"astId":50983,"contract":"src/settlement/MCR.sol:MCR","label":"superBlockHeightAssignedEpoch","offset":0,"slot":"5","type":"t_mapping(t_uint256,t_uint256)"},{"astId":50990,"contract":"src/settlement/MCR.sol:MCR","label":"commitments","offset":0,"slot":"6","type":"t_mapping(t_uint256,t_mapping(t_address,t_struct(SuperBlockCommitment)50979_storage))"},{"astId":50996,"contract":"src/settlement/MCR.sol:MCR","label":"commitmentStakes","offset":0,"slot":"7","type":"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))"},{"astId":51000,"contract":"src/settlement/MCR.sol:MCR","label":"postconfirmedBy","offset":0,"slot":"8","type":"t_mapping(t_uint256,t_address)"},{"astId":51004,"contract":"src/settlement/MCR.sol:MCR","label":"postconfirmedByAcceptor","offset":0,"slot":"9","type":"t_mapping(t_uint256,t_bool)"},{"astId":51008,"contract":"src/settlement/MCR.sol:MCR","label":"postconfirmedAtL1BlockHeight","offset":0,"slot":"10","type":"t_mapping(t_uint256,t_uint256)"},{"astId":51012,"contract":"src/settlement/MCR.sol:MCR","label":"postconfirmedAtL1BlockTimestamp","offset":0,"slot":"11","type":"t_mapping(t_uint256,t_uint256)"},{"astId":51016,"contract":"src/settlement/MCR.sol:MCR","label":"postconfirmedAtL1BlockHeightByAcceptor","offset":0,"slot":"12","type":"t_mapping(t_uint256,t_uint256)"},{"astId":51021,"contract":"src/settlement/MCR.sol:MCR","label":"postconfirmedSuperBlocks","offset":0,"slot":"13","type":"t_mapping(t_uint256,t_struct(SuperBlockCommitment)50979_storage)"},{"astId":51023,"contract":"src/settlement/MCR.sol:MCR","label":"openAttestationEnabled","offset":0,"slot":"14","type":"t_bool"},{"astId":51030,"contract":"src/settlement/MCR.sol:MCR","label":"versionedPostconfirmedSuperBlocks","offset":0,"slot":"15","type":"t_mapping(t_uint256,t_mapping(t_uint256,t_struct(SuperBlockCommitment)50979_storage))"},{"astId":51032,"contract":"src/settlement/MCR.sol:MCR","label":"postconfirmedSuperBlocksVersion","offset":0,"slot":"16","type":"t_uint256"},{"astId":51036,"contract":"src/settlement/MCR.sol:MCR","label":"__gap","offset":0,"slot":"17","type":"t_array(t_uint256)47_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)47_storage":{"encoding":"inplace","label":"uint256[47]","numberOfBytes":"1504","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IMovementStaking)52990":{"encoding":"inplace","label":"contract IMovementStaking","numberOfBytes":"20"},"t_mapping(t_address,t_struct(SuperBlockCommitment)50979_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct MCRStorage.SuperBlockCommitment)","numberOfBytes":"32","value":"t_struct(SuperBlockCommitment)50979_storage"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint256,t_bool)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_uint256,t_mapping(t_address,t_struct(SuperBlockCommitment)50979_storage))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => struct MCRStorage.SuperBlockCommitment))","numberOfBytes":"32","value":"t_mapping(t_address,t_struct(SuperBlockCommitment)50979_storage)"},"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_uint256,t_mapping(t_uint256,t_struct(SuperBlockCommitment)50979_storage))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(uint256 => struct MCRStorage.SuperBlockCommitment))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_struct(SuperBlockCommitment)50979_storage)"},"t_mapping(t_uint256,t_struct(SuperBlockCommitment)50979_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct MCRStorage.SuperBlockCommitment)","numberOfBytes":"32","value":"t_struct(SuperBlockCommitment)50979_storage"},"t_mapping(t_uint256,t_uint256)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_struct(SuperBlockCommitment)50979_storage":{"encoding":"inplace","label":"struct MCRStorage.SuperBlockCommitment","numberOfBytes":"96","members":[{"astId":50974,"contract":"src/settlement/MCR.sol:MCR","label":"height","offset":0,"slot":"0","type":"t_uint256"},{"astId":50976,"contract":"src/settlement/MCR.sol:MCR","label":"commitment","offset":0,"slot":"1","type":"t_bytes32"},{"astId":50978,"contract":"src/settlement/MCR.sol:MCR","label":"blockId","offset":0,"slot":"2","type":"t_bytes32"}]},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/settlement/MCR.sol","id":50952,"exportedSymbols":{"BaseSettlement":[51115],"EnumerableSet":[46968],"IMCR":[51060],"IMovementStaking":[52990],"Initializable":[39600],"MCR":[50951],"MCRStorage":[51037],"MovementStaking":[52616],"ReentrancyGuard":[44373],"console":[24267]},"nodeType":"SourceUnit","src":"39:23341:88","nodes":[{"id":49804,"nodeType":"PragmaDirective","src":"39:24:88","nodes":[],"literals":["solidity","^","0.8",".13"]},{"id":49806,"nodeType":"ImportDirective","src":"65:86:88","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol","file":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":46969,"symbolAliases":[{"foreign":{"id":49805,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46968,"src":"73:13:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":49808,"nodeType":"ImportDirective","src":"152:96:88","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":39601,"symbolAliases":[{"foreign":{"id":49807,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39600,"src":"160:13:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":49809,"nodeType":"ImportDirective","src":"249:31:88","nodes":[],"absolutePath":"lib/forge-std/src/console.sol","file":"forge-std/console.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":24268,"symbolAliases":[],"unitAlias":""},{"id":49812,"nodeType":"ImportDirective","src":"281:81:88","nodes":[],"absolutePath":"src/staking/MovementStaking.sol","file":"../staking/MovementStaking.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":52617,"symbolAliases":[{"foreign":{"id":49810,"name":"MovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52616,"src":"289:15:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":49811,"name":"IMovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52990,"src":"306:16:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":49814,"nodeType":"ImportDirective","src":"363:44:88","nodes":[],"absolutePath":"src/settlement/MCRStorage.sol","file":"./MCRStorage.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":51038,"symbolAliases":[{"foreign":{"id":49813,"name":"MCRStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51037,"src":"371:10:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":49816,"nodeType":"ImportDirective","src":"408:63:88","nodes":[],"absolutePath":"src/settlement/settlement/BaseSettlement.sol","file":"./settlement/BaseSettlement.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":51116,"symbolAliases":[{"foreign":{"id":49815,"name":"BaseSettlement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51115,"src":"416:14:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":49818,"nodeType":"ImportDirective","src":"472:43:88","nodes":[],"absolutePath":"src/settlement/interfaces/IMCR.sol","file":"./interfaces/IMCR.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":51061,"symbolAliases":[{"foreign":{"id":49817,"name":"IMCR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51060,"src":"480:4:88","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":49819,"nodeType":"ImportDirective","src":"516:59:88","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","nameLocation":"-1:-1:-1","scope":50952,"sourceUnit":44374,"symbolAliases":[],"unitAlias":""},{"id":50951,"nodeType":"ContractDefinition","src":"577:22802:88","nodes":[{"id":49832,"nodeType":"VariableDeclaration","src":"686:72:88","nodes":[],"constant":true,"functionSelector":"80e460f0","mutability":"constant","name":"COMMITMENT_ADMIN","nameLocation":"710:16:88","scope":50951,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49828,"name":"bytes32","nodeType":"ElementaryTypeName","src":"686:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"434f4d4d49544d454e545f41444d494e","id":49830,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"739:18:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_db2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c","typeString":"literal_string \"COMMITMENT_ADMIN\""},"value":"COMMITMENT_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_db2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c","typeString":"literal_string \"COMMITMENT_ADMIN\""}],"id":49829,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"729:9:88","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":49831,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"729:29:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":49837,"nodeType":"VariableDeclaration","src":"796:72:88","nodes":[],"constant":true,"functionSelector":"5db916ab","mutability":"constant","name":"TRUSTED_ATTESTER","nameLocation":"820:16:88","scope":50951,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49833,"name":"bytes32","nodeType":"ElementaryTypeName","src":"796:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"545255535445445f4154544553544552","id":49835,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"849:18:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18","typeString":"literal_string \"TRUSTED_ATTESTER\""},"value":"TRUSTED_ATTESTER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18","typeString":"literal_string \"TRUSTED_ATTESTER\""}],"id":49834,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"839:9:88","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":49836,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"839:29:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":49893,"nodeType":"FunctionDefinition","src":"875:718:88","nodes":[],"body":{"id":49892,"nodeType":"Block","src":"1162:431:88","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":49856,"name":"__BaseSettlement_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51103,"src":"1172:31:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":49857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1172:33:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49858,"nodeType":"ExpressionStatement","src":"1172:33:88"},{"expression":{"id":49861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49859,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"1215:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49860,"name":"_stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49840,"src":"1233:16:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"src":"1215:34:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":49862,"nodeType":"ExpressionStatement","src":"1215:34:88"},{"expression":{"id":49865,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49863,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50964,"src":"1259:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49864,"name":"_leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49844,"src":"1288:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1259:56:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49866,"nodeType":"ExpressionStatement","src":"1259:56:88"},{"expression":{"id":49869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49867,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50966,"src":"1325:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49868,"name":"_lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49842,"src":"1361:34:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1325:70:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49870,"nodeType":"ExpressionStatement","src":"1325:70:88"},{"expression":{"arguments":[{"id":49874,"name":"_epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49846,"src":"1436:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":49875,"name":"_custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49849,"src":"1452:11:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"expression":{"id":49871,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"1405:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":49873,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1421:14:88","memberName":"registerDomain","nodeType":"MemberAccess","referencedDeclaration":52764,"src":"1405:30:88","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (uint256,address[] memory) external"}},"id":49876,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1405:59:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49877,"nodeType":"ExpressionStatement","src":"1405:59:88"},{"expression":{"arguments":[{"expression":{"id":49879,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1495:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":49880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1499:6:88","memberName":"sender","nodeType":"MemberAccess","src":"1495:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":49878,"name":"grantCommitmentAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49913,"src":"1474:20:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":49881,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1474:32:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49882,"nodeType":"ExpressionStatement","src":"1474:32:88"},{"expression":{"arguments":[{"expression":{"id":49884,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1537:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":49885,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1541:6:88","memberName":"sender","nodeType":"MemberAccess","src":"1537:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":49883,"name":"grantTrustedAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50704,"src":"1516:20:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":49886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1516:32:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49887,"nodeType":"ExpressionStatement","src":"1516:32:88"},{"expression":{"id":49890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":49888,"name":"acceptorTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50969,"src":"1558:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":49889,"name":"_acceptorTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49851,"src":"1573:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1558:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49891,"nodeType":"ExpressionStatement","src":"1558:28:88"}]},"functionSelector":"03f02fc0","implemented":true,"kind":"function","modifiers":[{"id":49854,"kind":"modifierInvocation","modifierName":{"id":49853,"name":"initializer","nameLocations":["1150:11:88"],"nodeType":"IdentifierPath","referencedDeclaration":39454,"src":"1150:11:88"},"nodeType":"ModifierInvocation","src":"1150:11:88"}],"name":"initialize","nameLocation":"884:10:88","parameters":{"id":49852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49840,"mutability":"mutable","name":"_stakingContract","nameLocation":"921:16:88","nodeType":"VariableDeclaration","scope":49893,"src":"904:33:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"},"typeName":{"id":49839,"nodeType":"UserDefinedTypeName","pathNode":{"id":49838,"name":"IMovementStaking","nameLocations":["904:16:88"],"nodeType":"IdentifierPath","referencedDeclaration":52990,"src":"904:16:88"},"referencedDeclaration":52990,"src":"904:16:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"visibility":"internal"},{"constant":false,"id":49842,"mutability":"mutable","name":"_lastPostconfirmedSuperBlockHeight","nameLocation":"955:34:88","nodeType":"VariableDeclaration","scope":49893,"src":"947:42:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49841,"name":"uint256","nodeType":"ElementaryTypeName","src":"947:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":49844,"mutability":"mutable","name":"_leadingSuperBlockTolerance","nameLocation":"1007:27:88","nodeType":"VariableDeclaration","scope":49893,"src":"999:35:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49843,"name":"uint256","nodeType":"ElementaryTypeName","src":"999:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":49846,"mutability":"mutable","name":"_epochDuration","nameLocation":"1052:14:88","nodeType":"VariableDeclaration","scope":49893,"src":"1044:22:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49845,"name":"uint256","nodeType":"ElementaryTypeName","src":"1044:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":49849,"mutability":"mutable","name":"_custodians","nameLocation":"1093:11:88","nodeType":"VariableDeclaration","scope":49893,"src":"1076:28:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":49847,"name":"address","nodeType":"ElementaryTypeName","src":"1076:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":49848,"nodeType":"ArrayTypeName","src":"1076:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":49851,"mutability":"mutable","name":"_acceptorTerm","nameLocation":"1122:13:88","nodeType":"VariableDeclaration","scope":49893,"src":"1114:21:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49850,"name":"uint256","nodeType":"ElementaryTypeName","src":"1114:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"894:248:88"},"returnParameters":{"id":49855,"nodeType":"ParameterList","parameters":[],"src":"1162:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":49913,"nodeType":"FunctionDefinition","src":"1599:237:88","nodes":[],"body":{"id":49912,"nodeType":"Block","src":"1653:183:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":49900,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39012,"src":"1692:18:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":49901,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1712:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":49902,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1716:6:88","memberName":"sender","nodeType":"MemberAccess","src":"1712:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":49899,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"1684:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":49903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1684:39:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e4c59","id":49904,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1737:36:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""},"value":"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""}],"id":49898,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1663:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":49905,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1663:120:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49906,"nodeType":"ExpressionStatement","src":"1663:120:88"},{"expression":{"arguments":[{"id":49908,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"1803:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":49909,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49895,"src":"1821:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":49907,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39174,"src":"1793:9:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":49910,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1793:36:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49911,"nodeType":"ExpressionStatement","src":"1793:36:88"}]},"functionSelector":"949d7c2a","implemented":true,"kind":"function","modifiers":[],"name":"grantCommitmentAdmin","nameLocation":"1608:20:88","parameters":{"id":49896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49895,"mutability":"mutable","name":"account","nameLocation":"1637:7:88","nodeType":"VariableDeclaration","scope":49913,"src":"1629:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":49894,"name":"address","nodeType":"ElementaryTypeName","src":"1629:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1628:17:88"},"returnParameters":{"id":49897,"nodeType":"ParameterList","parameters":[],"src":"1653:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":49949,"nodeType":"FunctionDefinition","src":"1842:326:88","nodes":[],"body":{"id":49948,"nodeType":"Block","src":"1911:257:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":49921,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39012,"src":"1950:18:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":49922,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1970:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":49923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1974:6:88","memberName":"sender","nodeType":"MemberAccess","src":"1970:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":49920,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"1942:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":49924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1942:39:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e4c59","id":49925,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1995:36:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""},"value":"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""}],"id":49919,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1921:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":49926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1921:120:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49927,"nodeType":"ExpressionStatement","src":"1921:120:88"},{"body":{"id":49946,"nodeType":"Block","src":"2097:65:88","statements":[{"expression":{"arguments":[{"id":49940,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"2121:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":49941,"name":"accounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49916,"src":"2139:8:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":49943,"indexExpression":{"id":49942,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49929,"src":"2148:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2139:11:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":49939,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39174,"src":"2111:9:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":49944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2111:40:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":49945,"nodeType":"ExpressionStatement","src":"2111:40:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49935,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49932,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49929,"src":"2071:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":49933,"name":"accounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49916,"src":"2075:8:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":49934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2084:6:88","memberName":"length","nodeType":"MemberAccess","src":"2075:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2071:19:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":49947,"initializationExpression":{"assignments":[49929],"declarations":[{"constant":false,"id":49929,"mutability":"mutable","name":"i","nameLocation":"2064:1:88","nodeType":"VariableDeclaration","scope":49947,"src":"2056:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49928,"name":"uint256","nodeType":"ElementaryTypeName","src":"2056:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":49931,"initialValue":{"hexValue":"30","id":49930,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2068:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2056:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":49937,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2092:3:88","subExpression":{"id":49936,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49929,"src":"2092:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":49938,"nodeType":"ExpressionStatement","src":"2092:3:88"},"nodeType":"ForStatement","src":"2051:111:88"}]},"functionSelector":"4b47d955","implemented":true,"kind":"function","modifiers":[],"name":"batchGrantCommitmentAdmin","nameLocation":"1851:25:88","parameters":{"id":49917,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49916,"mutability":"mutable","name":"accounts","nameLocation":"1894:8:88","nodeType":"VariableDeclaration","scope":49949,"src":"1877:25:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":49914,"name":"address","nodeType":"ElementaryTypeName","src":"1877:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":49915,"nodeType":"ArrayTypeName","src":"1877:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1876:27:88"},"returnParameters":{"id":49918,"nodeType":"ParameterList","parameters":[],"src":"1911:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":49968,"nodeType":"FunctionDefinition","src":"2202:242:88","nodes":[],"body":{"id":49967,"nodeType":"Block","src":"2371:73:88","nodes":[],"statements":[{"expression":{"arguments":[{"id":49962,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49951,"src":"2409:6:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":49963,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49953,"src":"2417:10:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":49964,"name":"blockId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49955,"src":"2429:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":49961,"name":"SuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50979,"src":"2388:20:88","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SuperBlockCommitment_$50979_storage_ptr_$","typeString":"type(struct MCRStorage.SuperBlockCommitment storage pointer)"}},"id":49965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2388:49:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"functionReturnParameters":49960,"id":49966,"nodeType":"Return","src":"2381:56:88"}]},"functionSelector":"026583d7","implemented":true,"kind":"function","modifiers":[],"name":"createSuperBlockCommitment","nameLocation":"2211:26:88","parameters":{"id":49956,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49951,"mutability":"mutable","name":"height","nameLocation":"2255:6:88","nodeType":"VariableDeclaration","scope":49968,"src":"2247:14:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49950,"name":"uint256","nodeType":"ElementaryTypeName","src":"2247:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":49953,"mutability":"mutable","name":"commitment","nameLocation":"2279:10:88","nodeType":"VariableDeclaration","scope":49968,"src":"2271:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49952,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2271:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":49955,"mutability":"mutable","name":"blockId","nameLocation":"2307:7:88","nodeType":"VariableDeclaration","scope":49968,"src":"2299:15:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":49954,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2299:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2237:83:88"},"returnParameters":{"id":49960,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49959,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49968,"src":"2342:27:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":49958,"nodeType":"UserDefinedTypeName","pathNode":{"id":49957,"name":"SuperBlockCommitment","nameLocations":["2342:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"2342:20:88"},"referencedDeclaration":50979,"src":"2342:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"2341:29:88"},"scope":50951,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":49978,"nodeType":"FunctionDefinition","src":"2498:159:88","nodes":[],"body":{"id":49977,"nodeType":"Block","src":"2571:86:88","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":49975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":49973,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50966,"src":"2588:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":49974,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50964,"src":"2624:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2588:62:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49972,"id":49976,"nodeType":"Return","src":"2581:69:88"}]},"functionSelector":"943b79e2","implemented":true,"kind":"function","modifiers":[],"name":"getMaxTolerableSuperBlockHeight","nameLocation":"2507:31:88","parameters":{"id":49969,"nodeType":"ParameterList","parameters":[],"src":"2538:2:88"},"returnParameters":{"id":49972,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49971,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49978,"src":"2562:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49970,"name":"uint256","nodeType":"ElementaryTypeName","src":"2562:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2561:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":49992,"nodeType":"FunctionDefinition","src":"2723:133:88","nodes":[],"body":{"id":49991,"nodeType":"Block","src":"2780:76:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":49987,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2843:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":49986,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2835:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":49985,"name":"address","nodeType":"ElementaryTypeName","src":"2835:7:88","typeDescriptions":{}}},"id":49988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2835:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":49983,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"2797:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":49984,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2813:21:88","memberName":"getEpochByL1BlockTime","nodeType":"MemberAccess","referencedDeclaration":52774,"src":"2797:37:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":49989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2797:52:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49982,"id":49990,"nodeType":"Return","src":"2790:59:88"}]},"functionSelector":"37d7f58f","implemented":true,"kind":"function","modifiers":[],"name":"getPresentEpoch","nameLocation":"2732:15:88","parameters":{"id":49979,"nodeType":"ParameterList","parameters":[],"src":"2747:2:88"},"returnParameters":{"id":49982,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49981,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":49992,"src":"2771:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49980,"name":"uint256","nodeType":"ElementaryTypeName","src":"2771:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2770:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50006,"nodeType":"FunctionDefinition","src":"2927:131:88","nodes":[],"body":{"id":50005,"nodeType":"Block","src":"2986:72:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50001,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3045:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50000,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3037:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":49999,"name":"address","nodeType":"ElementaryTypeName","src":"3037:7:88","typeDescriptions":{}}},"id":50002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3037:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":49997,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"3003:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":49998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3019:17:88","memberName":"getAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":52781,"src":"3003:33:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":50003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3003:48:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":49996,"id":50004,"nodeType":"Return","src":"2996:55:88"}]},"functionSelector":"6c713af8","implemented":true,"kind":"function","modifiers":[],"name":"getAcceptingEpoch","nameLocation":"2936:17:88","parameters":{"id":49993,"nodeType":"ParameterList","parameters":[],"src":"2953:2:88"},"returnParameters":{"id":49996,"nodeType":"ParameterList","parameters":[{"constant":false,"id":49995,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50006,"src":"2977:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":49994,"name":"uint256","nodeType":"ElementaryTypeName","src":"2977:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2976:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50020,"nodeType":"FunctionDefinition","src":"3091:139:88","nodes":[],"body":{"id":50019,"nodeType":"Block","src":"3154:76:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50015,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3217:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50014,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3209:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50013,"name":"address","nodeType":"ElementaryTypeName","src":"3209:7:88","typeDescriptions":{}}},"id":50016,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3209:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50011,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"3171:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50012,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3187:21:88","memberName":"getNextAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":52788,"src":"3171:37:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":50017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3171:52:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50010,"id":50018,"nodeType":"Return","src":"3164:59:88"}]},"functionSelector":"e4d991ee","implemented":true,"kind":"function","modifiers":[],"name":"getNextAcceptingEpoch","nameLocation":"3100:21:88","parameters":{"id":50007,"nodeType":"ParameterList","parameters":[],"src":"3121:2:88"},"returnParameters":{"id":50010,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50009,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50020,"src":"3145:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50008,"name":"uint256","nodeType":"ElementaryTypeName","src":"3145:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3144:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50044,"nodeType":"FunctionDefinition","src":"3324:311:88","nodes":[],"body":{"id":50043,"nodeType":"Block","src":"3454:181:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50036,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3533:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50035,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3525:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50034,"name":"address","nodeType":"ElementaryTypeName","src":"3525:7:88","typeDescriptions":{}}},"id":50037,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3525:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":50038,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50023,"src":"3556:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50039,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50025,"src":"3579:9:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":50040,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50027,"src":"3606:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50032,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"3483:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50033,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3499:8:88","memberName":"getStake","nodeType":"MemberAccess","referencedDeclaration":52808,"src":"3483:24:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view external returns (uint256)"}},"id":50041,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3483:145:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50031,"id":50042,"nodeType":"Return","src":"3464:164:88"}]},"documentation":{"id":50021,"nodeType":"StructuredDocumentation","src":"3236:83:88","text":"@notice Gets the stake for a given tuple (custodian, attester) at a given epoch"},"functionSelector":"7aa81c2a","implemented":true,"kind":"function","modifiers":[],"name":"getStake","nameLocation":"3333:8:88","parameters":{"id":50028,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50023,"mutability":"mutable","name":"epoch","nameLocation":"3359:5:88","nodeType":"VariableDeclaration","scope":50044,"src":"3351:13:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50022,"name":"uint256","nodeType":"ElementaryTypeName","src":"3351:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50025,"mutability":"mutable","name":"custodian","nameLocation":"3382:9:88","nodeType":"VariableDeclaration","scope":50044,"src":"3374:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50024,"name":"address","nodeType":"ElementaryTypeName","src":"3374:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":50027,"mutability":"mutable","name":"attester","nameLocation":"3409:8:88","nodeType":"VariableDeclaration","scope":50044,"src":"3401:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50026,"name":"address","nodeType":"ElementaryTypeName","src":"3401:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3341:82:88"},"returnParameters":{"id":50031,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50030,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50044,"src":"3445:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50029,"name":"uint256","nodeType":"ElementaryTypeName","src":"3445:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3444:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50062,"nodeType":"FunctionDefinition","src":"3735:198:88","nodes":[],"body":{"id":50061,"nodeType":"Block","src":"3859:74:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":50055,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50006,"src":"3885:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3885:19:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50057,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50047,"src":"3906:9:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":50058,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50049,"src":"3917:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50054,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50044,"src":"3876:8:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) view returns (uint256)"}},"id":50059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3876:50:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50053,"id":50060,"nodeType":"Return","src":"3869:57:88"}]},"documentation":{"id":50045,"nodeType":"StructuredDocumentation","src":"3641:89:88","text":"@notice Gets the stake for a given tuple (custodian, attester) at the accepting epoch"},"functionSelector":"bb04bd2f","implemented":true,"kind":"function","modifiers":[],"name":"getStakeForAcceptingEpoch","nameLocation":"3744:25:88","parameters":{"id":50050,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50047,"mutability":"mutable","name":"custodian","nameLocation":"3787:9:88","nodeType":"VariableDeclaration","scope":50062,"src":"3779:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50046,"name":"address","nodeType":"ElementaryTypeName","src":"3779:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":50049,"mutability":"mutable","name":"attester","nameLocation":"3814:8:88","nodeType":"VariableDeclaration","scope":50062,"src":"3806:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50048,"name":"address","nodeType":"ElementaryTypeName","src":"3806:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3769:59:88"},"returnParameters":{"id":50053,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50052,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50062,"src":"3850:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50051,"name":"uint256","nodeType":"ElementaryTypeName","src":"3850:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3849:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50115,"nodeType":"FunctionDefinition","src":"4067:484:88","nodes":[],"body":{"id":50114,"nodeType":"Block","src":"4178:373:88","nodes":[],"statements":[{"assignments":[50076],"declarations":[{"constant":false,"id":50076,"mutability":"mutable","name":"custodians","nameLocation":"4205:10:88","nodeType":"VariableDeclaration","scope":50114,"src":"4188:27:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":50074,"name":"address","nodeType":"ElementaryTypeName","src":"4188:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50075,"nodeType":"ArrayTypeName","src":"4188:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":50084,"initialValue":{"arguments":[{"arguments":[{"id":50081,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4279:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50080,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4271:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50079,"name":"address","nodeType":"ElementaryTypeName","src":"4271:7:88","typeDescriptions":{}}},"id":50082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4271:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50077,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"4218:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50078,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4234:23:88","memberName":"getRegisteredCustodians","nodeType":"MemberAccess","referencedDeclaration":52890,"src":"4218:39:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":50083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4218:76:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"4188:106:88"},{"assignments":[50086],"declarations":[{"constant":false,"id":50086,"mutability":"mutable","name":"totalStake","nameLocation":"4312:10:88","nodeType":"VariableDeclaration","scope":50114,"src":"4304:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50085,"name":"uint256","nodeType":"ElementaryTypeName","src":"4304:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50088,"initialValue":{"hexValue":"30","id":50087,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4325:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4304:22:88"},{"body":{"id":50110,"nodeType":"Block","src":"4384:134:88","statements":[{"expression":{"id":50108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50100,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50086,"src":"4453:10:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":50102,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50065,"src":"4476:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":50103,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50076,"src":"4483:10:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50105,"indexExpression":{"id":50104,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50090,"src":"4494:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4483:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":50106,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50067,"src":"4498:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50101,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50044,"src":"4467:8:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) view returns (uint256)"}},"id":50107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4467:40:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4453:54:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50109,"nodeType":"ExpressionStatement","src":"4453:54:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50093,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50090,"src":"4356:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":50094,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50076,"src":"4360:10:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50095,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4371:6:88","memberName":"length","nodeType":"MemberAccess","src":"4360:17:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4356:21:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50111,"initializationExpression":{"assignments":[50090],"declarations":[{"constant":false,"id":50090,"mutability":"mutable","name":"i","nameLocation":"4349:1:88","nodeType":"VariableDeclaration","scope":50111,"src":"4341:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50089,"name":"uint256","nodeType":"ElementaryTypeName","src":"4341:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50092,"initialValue":{"hexValue":"30","id":50091,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4353:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"4341:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":50098,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"4379:3:88","subExpression":{"id":50097,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50090,"src":"4379:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50099,"nodeType":"ExpressionStatement","src":"4379:3:88"},"nodeType":"ForStatement","src":"4336:182:88"},{"expression":{"id":50112,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50086,"src":"4534:10:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50071,"id":50113,"nodeType":"Return","src":"4527:17:88"}]},"documentation":{"id":50063,"nodeType":"StructuredDocumentation","src":"3939:64:88","text":"@notice Gets the stake for a given attester at a given epoch"},"functionSelector":"ba26513e","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStake","nameLocation":"4076:16:88","parameters":{"id":50068,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50065,"mutability":"mutable","name":"epoch","nameLocation":"4110:5:88","nodeType":"VariableDeclaration","scope":50115,"src":"4102:13:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50064,"name":"uint256","nodeType":"ElementaryTypeName","src":"4102:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50067,"mutability":"mutable","name":"attester","nameLocation":"4133:8:88","nodeType":"VariableDeclaration","scope":50115,"src":"4125:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50066,"name":"address","nodeType":"ElementaryTypeName","src":"4125:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4092:55:88"},"returnParameters":{"id":50071,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50070,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50115,"src":"4169:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50069,"name":"uint256","nodeType":"ElementaryTypeName","src":"4169:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4168:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50130,"nodeType":"FunctionDefinition","src":"4632:176:88","nodes":[],"body":{"id":50129,"nodeType":"Block","src":"4737:71:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":50124,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50006,"src":"4771:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4771:19:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50126,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50118,"src":"4792:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50123,"name":"getAttesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50115,"src":"4754:16:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":50127,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4754:47:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50122,"id":50128,"nodeType":"Return","src":"4747:54:88"}]},"documentation":{"id":50116,"nodeType":"StructuredDocumentation","src":"4557:70:88","text":"@notice Gets the stake for a given attester at the accepting epoch"},"functionSelector":"491d0467","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStakeForAcceptingEpoch","nameLocation":"4641:33:88","parameters":{"id":50119,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50118,"mutability":"mutable","name":"attester","nameLocation":"4692:8:88","nodeType":"VariableDeclaration","scope":50130,"src":"4684:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50117,"name":"address","nodeType":"ElementaryTypeName","src":"4684:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4674:32:88"},"returnParameters":{"id":50122,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50121,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50130,"src":"4728:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50120,"name":"uint256","nodeType":"ElementaryTypeName","src":"4728:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4727:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50151,"nodeType":"FunctionDefinition","src":"4886:287:88","nodes":[],"body":{"id":50150,"nodeType":"Block","src":"4999:174:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50144,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5087:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5079:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50142,"name":"address","nodeType":"ElementaryTypeName","src":"5079:7:88","typeDescriptions":{}}},"id":50145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5079:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":50146,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50133,"src":"5120:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50147,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50135,"src":"5143:9:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50140,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"5028:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5044:17:88","memberName":"getCustodianStake","nodeType":"MemberAccess","referencedDeclaration":52854,"src":"5028:33:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view external returns (uint256)"}},"id":50148,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5028:138:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50139,"id":50149,"nodeType":"Return","src":"5009:157:88"}]},"documentation":{"id":50131,"nodeType":"StructuredDocumentation","src":"4815:66:88","text":"@notice Gets the stake for a given custodian for a given epoch"},"functionSelector":"1de38fe1","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStake","nameLocation":"4895:17:88","parameters":{"id":50136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50133,"mutability":"mutable","name":"epoch","nameLocation":"4930:5:88","nodeType":"VariableDeclaration","scope":50151,"src":"4922:13:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50132,"name":"uint256","nodeType":"ElementaryTypeName","src":"4922:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50135,"mutability":"mutable","name":"custodian","nameLocation":"4953:9:88","nodeType":"VariableDeclaration","scope":50151,"src":"4945:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50134,"name":"address","nodeType":"ElementaryTypeName","src":"4945:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4912:56:88"},"returnParameters":{"id":50139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50151,"src":"4990:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50137,"name":"uint256","nodeType":"ElementaryTypeName","src":"4990:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4989:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50169,"nodeType":"FunctionDefinition","src":"5179:229:88","nodes":[],"body":{"id":50168,"nodeType":"Block","src":"5219:189:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50156,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39012,"src":"5258:18:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50157,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5278:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5282:6:88","memberName":"sender","nodeType":"MemberAccess","src":"5278:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50155,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"5250:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":50159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5250:39:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e5f4f4e4c59","id":50160,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5303:39:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_b077b31285a16307062fcb4fde0e57e8246ea6dc3cdd1c5dd5880d32a26fbf54","typeString":"literal_string \"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY\""},"value":"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b077b31285a16307062fcb4fde0e57e8246ea6dc3cdd1c5dd5880d32a26fbf54","typeString":"literal_string \"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY\""}],"id":50154,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"5229:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":50161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5229:123:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50162,"nodeType":"ExpressionStatement","src":"5229:123:88"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":50163,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"5362:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5378:21:88","memberName":"acceptGenesisCeremony","nodeType":"MemberAccess","referencedDeclaration":52767,"src":"5362:37:88","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":50166,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5362:39:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50167,"nodeType":"ExpressionStatement","src":"5362:39:88"}]},"functionSelector":"92a2ebf3","implemented":true,"kind":"function","modifiers":[],"name":"acceptGenesisCeremony","nameLocation":"5188:21:88","parameters":{"id":50152,"nodeType":"ParameterList","parameters":[],"src":"5209:2:88"},"returnParameters":{"id":50153,"nodeType":"ParameterList","parameters":[],"src":"5219:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50218,"nodeType":"FunctionDefinition","src":"5414:611:88","nodes":[],"body":{"id":50217,"nodeType":"Block","src":"5500:525:88","nodes":[],"statements":[{"assignments":[50180],"declarations":[{"constant":false,"id":50180,"mutability":"mutable","name":"custodians","nameLocation":"5680:10:88","nodeType":"VariableDeclaration","scope":50217,"src":"5663:27:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":50178,"name":"address","nodeType":"ElementaryTypeName","src":"5663:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50179,"nodeType":"ArrayTypeName","src":"5663:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":50188,"initialValue":{"arguments":[{"arguments":[{"id":50185,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5754:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50184,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5746:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50183,"name":"address","nodeType":"ElementaryTypeName","src":"5746:7:88","typeDescriptions":{}}},"id":50186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5746:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50181,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"5693:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5709:23:88","memberName":"getRegisteredCustodians","nodeType":"MemberAccess","referencedDeclaration":52890,"src":"5693:39:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":50187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5693:76:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5663:106:88"},{"assignments":[50190],"declarations":[{"constant":false,"id":50190,"mutability":"mutable","name":"totalStake","nameLocation":"5787:10:88","nodeType":"VariableDeclaration","scope":50217,"src":"5779:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50189,"name":"uint256","nodeType":"ElementaryTypeName","src":"5779:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50192,"initialValue":{"hexValue":"30","id":50191,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5800:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5779:22:88"},{"body":{"id":50213,"nodeType":"Block","src":"5859:133:88","statements":[{"expression":{"id":50211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50204,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50190,"src":"5928:10:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":50206,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50171,"src":"5960:5:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":50207,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50180,"src":"5967:10:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50209,"indexExpression":{"id":50208,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50194,"src":"5978:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5967:13:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50205,"name":"getCustodianStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50151,"src":"5942:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":50210,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5942:39:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5928:53:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50212,"nodeType":"ExpressionStatement","src":"5928:53:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50197,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50194,"src":"5831:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":50198,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50180,"src":"5835:10:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50199,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5846:6:88","memberName":"length","nodeType":"MemberAccess","src":"5835:17:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5831:21:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50214,"initializationExpression":{"assignments":[50194],"declarations":[{"constant":false,"id":50194,"mutability":"mutable","name":"i","nameLocation":"5824:1:88","nodeType":"VariableDeclaration","scope":50214,"src":"5816:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50193,"name":"uint256","nodeType":"ElementaryTypeName","src":"5816:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50196,"initialValue":{"hexValue":"30","id":50195,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5828:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5816:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":50202,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5854:3:88","subExpression":{"id":50201,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50194,"src":"5854:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50203,"nodeType":"ExpressionStatement","src":"5854:3:88"},"nodeType":"ForStatement","src":"5811:181:88"},{"expression":{"id":50215,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50190,"src":"6008:10:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50175,"id":50216,"nodeType":"Return","src":"6001:17:88"}]},"functionSelector":"0daf6181","implemented":true,"kind":"function","modifiers":[],"name":"computeTotalStake","nameLocation":"5423:17:88","parameters":{"id":50172,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50171,"mutability":"mutable","name":"epoch","nameLocation":"5458:5:88","nodeType":"VariableDeclaration","scope":50218,"src":"5450:13:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50170,"name":"uint256","nodeType":"ElementaryTypeName","src":"5450:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5440:29:88"},"returnParameters":{"id":50175,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50174,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50218,"src":"5491:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50173,"name":"uint256","nodeType":"ElementaryTypeName","src":"5491:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5490:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50229,"nodeType":"FunctionDefinition","src":"6032:166:88","nodes":[],"body":{"id":50228,"nodeType":"Block","src":"6136:62:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":50224,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50006,"src":"6171:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6171:19:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50223,"name":"computeTotalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50218,"src":"6153:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":50226,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6153:38:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50222,"id":50227,"nodeType":"Return","src":"6146:45:88"}]},"functionSelector":"08c39793","implemented":true,"kind":"function","modifiers":[],"name":"computeTotalStakeForAcceptingEpoch","nameLocation":"6041:34:88","parameters":{"id":50219,"nodeType":"ParameterList","parameters":[],"src":"6075:2:88"},"returnParameters":{"id":50222,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50221,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50229,"src":"6123:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50220,"name":"uint256","nodeType":"ElementaryTypeName","src":"6123:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6122:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50243,"nodeType":"FunctionDefinition","src":"6256:180:88","nodes":[],"body":{"id":50242,"nodeType":"Block","src":"6363:73:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":50237,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50006,"src":"6398:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6398:19:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":50239,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50231,"src":"6419:9:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50236,"name":"getCustodianStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50151,"src":"6380:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":50240,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6380:49:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50235,"id":50241,"nodeType":"Return","src":"6373:56:88"}]},"functionSelector":"d440116d","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStakeForAcceptingEpoch","nameLocation":"6265:34:88","parameters":{"id":50232,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50231,"mutability":"mutable","name":"custodian","nameLocation":"6317:9:88","nodeType":"VariableDeclaration","scope":50243,"src":"6309:17:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50230,"name":"address","nodeType":"ElementaryTypeName","src":"6309:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6299:33:88"},"returnParameters":{"id":50235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50234,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50243,"src":"6354:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50233,"name":"uint256","nodeType":"ElementaryTypeName","src":"6354:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6353:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50260,"nodeType":"FunctionDefinition","src":"6442:209:88","nodes":[],"body":{"id":50259,"nodeType":"Block","src":"6598:53:88","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":50253,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50990,"src":"6615:11:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct MCRStorage.SuperBlockCommitment storage ref))"}},"id":50255,"indexExpression":{"id":50254,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50245,"src":"6627:6:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6615:19:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$","typeString":"mapping(address => struct MCRStorage.SuperBlockCommitment storage ref)"}},"id":50257,"indexExpression":{"id":50256,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50247,"src":"6635:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6615:29:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":50252,"id":50258,"nodeType":"Return","src":"6608:36:88"}]},"functionSelector":"556d97c8","implemented":true,"kind":"function","modifiers":[],"name":"getValidatorCommitmentAtSuperBlockHeight","nameLocation":"6451:40:88","parameters":{"id":50248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50245,"mutability":"mutable","name":"height","nameLocation":"6509:6:88","nodeType":"VariableDeclaration","scope":50260,"src":"6501:14:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50244,"name":"uint256","nodeType":"ElementaryTypeName","src":"6501:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":50247,"mutability":"mutable","name":"attester","nameLocation":"6533:8:88","nodeType":"VariableDeclaration","scope":50260,"src":"6525:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50246,"name":"address","nodeType":"ElementaryTypeName","src":"6525:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6491:56:88"},"returnParameters":{"id":50252,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50251,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50260,"src":"6569:27:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50250,"nodeType":"UserDefinedTypeName","pathNode":{"id":50249,"name":"SuperBlockCommitment","nameLocations":["6569:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"6569:20:88"},"referencedDeclaration":50979,"src":"6569:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"6568:29:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50285,"nodeType":"FunctionDefinition","src":"6727:405:88","nodes":[],"body":{"id":50284,"nodeType":"Block","src":"6833:299:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50268,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"6872:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50269,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6890:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50270,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6894:6:88","memberName":"sender","nodeType":"MemberAccess","src":"6890:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50267,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"6864:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":50271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6864:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":50272,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6915:70:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_0977ec2248431def5ae1a15f4d76a33486566739fca9c42d9176f889e347a11f","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0977ec2248431def5ae1a15f4d76a33486566739fca9c42d9176f889e347a11f","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":50266,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6843:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":50273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6843:152:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50274,"nodeType":"ExpressionStatement","src":"6843:152:88"},{"expression":{"id":50282,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":50275,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51030,"src":"7005:33:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$50979_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct MCRStorage.SuperBlockCommitment storage ref))"}},"id":50279,"indexExpression":{"id":50276,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51032,"src":"7039:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7005:66:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$50979_storage_$","typeString":"mapping(uint256 => struct MCRStorage.SuperBlockCommitment storage ref)"}},"id":50280,"indexExpression":{"expression":{"id":50277,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50263,"src":"7072:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50278,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7093:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"7072:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7005:95:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50281,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50263,"src":"7103:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"src":"7005:118:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"id":50283,"nodeType":"ExpressionStatement","src":"7005:118:88"}]},"functionSelector":"3119edd4","implemented":true,"kind":"function","modifiers":[],"name":"setPostconfirmedCommitmentAtBlockHeight","nameLocation":"6736:39:88","parameters":{"id":50264,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50263,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"6804:20:88","nodeType":"VariableDeclaration","scope":50285,"src":"6776:48:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50262,"nodeType":"UserDefinedTypeName","pathNode":{"id":50261,"name":"SuperBlockCommitment","nameLocations":["6776:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"6776:20:88"},"referencedDeclaration":50979,"src":"6776:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"6775:50:88"},"returnParameters":{"id":50265,"nodeType":"ParameterList","parameters":[],"src":"6833:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50304,"nodeType":"FunctionDefinition","src":"7193:287:88","nodes":[],"body":{"id":50303,"nodeType":"Block","src":"7262:218:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50292,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"7301:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50293,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7319:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50294,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7323:6:88","memberName":"sender","nodeType":"MemberAccess","src":"7319:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50291,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"7293:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":50295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7293:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5345545f4c4153545f504f5354434f4e4649524d45445f5355504552424c4f434b5f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":50296,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7344:67:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_2303274c041dc20648e4a0774e71fb8a6ec57c7e42eff6ba4a7830cad65f94c8","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_SUPERBLOCK_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"SET_LAST_POSTCONFIRMED_SUPERBLOCK_HEIGHT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_2303274c041dc20648e4a0774e71fb8a6ec57c7e42eff6ba4a7830cad65f94c8","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_SUPERBLOCK_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":50290,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7272:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":50297,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7272:149:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50298,"nodeType":"ExpressionStatement","src":"7272:149:88"},{"expression":{"id":50301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50299,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50966,"src":"7431:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50300,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50287,"src":"7467:6:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7431:42:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50302,"nodeType":"ExpressionStatement","src":"7431:42:88"}]},"functionSelector":"4c17b024","implemented":true,"kind":"function","modifiers":[],"name":"setLastPostconfirmedSuperBlockHeight","nameLocation":"7202:36:88","parameters":{"id":50288,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50287,"mutability":"mutable","name":"height","nameLocation":"7247:6:88","nodeType":"VariableDeclaration","scope":50304,"src":"7239:14:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50286,"name":"uint256","nodeType":"ElementaryTypeName","src":"7239:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7238:16:88"},"returnParameters":{"id":50289,"nodeType":"ParameterList","parameters":[],"src":"7262:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50324,"nodeType":"FunctionDefinition","src":"7675:308:88","nodes":[],"body":{"id":50323,"nodeType":"Block","src":"7763:220:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50312,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"7802:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50313,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7820:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50314,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7824:6:88","memberName":"sender","nodeType":"MemberAccess","src":"7820:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50311,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"7794:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":50315,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7794:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":50316,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7845:50:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_769db6d293c786b13b107ddcfdc491f9fdfa9dc0a09944362f64328186fea1df","typeString":"literal_string \"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_769db6d293c786b13b107ddcfdc491f9fdfa9dc0a09944362f64328186fea1df","typeString":"literal_string \"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":50310,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7773:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":50317,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7773:132:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50318,"nodeType":"ExpressionStatement","src":"7773:132:88"},{"expression":{"arguments":[{"id":50320,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50307,"src":"7955:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}],"id":50319,"name":"setPostconfirmedCommitmentAtBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50285,"src":"7915:39:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SuperBlockCommitment_$50979_memory_ptr_$returns$__$","typeString":"function (struct MCRStorage.SuperBlockCommitment memory)"}},"id":50321,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7915:61:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50322,"nodeType":"ExpressionStatement","src":"7915:61:88"}]},"functionSelector":"08c7050f","implemented":true,"kind":"function","modifiers":[],"name":"forceLatestCommitment","nameLocation":"7684:21:88","parameters":{"id":50308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50307,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"7734:20:88","nodeType":"VariableDeclaration","scope":50324,"src":"7706:48:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50306,"nodeType":"UserDefinedTypeName","pathNode":{"id":50305,"name":"SuperBlockCommitment","nameLocations":["7706:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"7706:20:88"},"referencedDeclaration":50979,"src":"7706:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"7705:50:88"},"returnParameters":{"id":50309,"nodeType":"ParameterList","parameters":[],"src":"7763:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50339,"nodeType":"FunctionDefinition","src":"7989:200:88","nodes":[],"body":{"id":50338,"nodeType":"Block","src":"8091:98:88","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":50332,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51030,"src":"8108:33:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$50979_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct MCRStorage.SuperBlockCommitment storage ref))"}},"id":50334,"indexExpression":{"id":50333,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51032,"src":"8142:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8108:66:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$50979_storage_$","typeString":"mapping(uint256 => struct MCRStorage.SuperBlockCommitment storage ref)"}},"id":50336,"indexExpression":{"id":50335,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50326,"src":"8175:6:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8108:74:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":50331,"id":50337,"nodeType":"Return","src":"8101:81:88"}]},"functionSelector":"2bfd11d6","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmedCommitment","nameLocation":"7998:26:88","parameters":{"id":50327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50326,"mutability":"mutable","name":"height","nameLocation":"8033:6:88","nodeType":"VariableDeclaration","scope":50339,"src":"8025:14:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50325,"name":"uint256","nodeType":"ElementaryTypeName","src":"8025:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8024:16:88"},"returnParameters":{"id":50331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50330,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50339,"src":"8062:27:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50329,"nodeType":"UserDefinedTypeName","pathNode":{"id":50328,"name":"SuperBlockCommitment","nameLocations":["8062:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"8062:20:88"},"referencedDeclaration":50979,"src":"8062:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"8061:29:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50355,"nodeType":"FunctionDefinition","src":"8478:247:88","nodes":[],"body":{"id":50354,"nodeType":"Block","src":"8564:161:88","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":50350,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8711:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50349,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8703:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50348,"name":"address","nodeType":"ElementaryTypeName","src":"8703:7:88","typeDescriptions":{}}},"id":50351,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8703:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50346,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"8651:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50347,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8667:35:88","memberName":"getStakedAttestersForAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":52982,"src":"8651:51:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":50352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8651:66:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":50345,"id":50353,"nodeType":"Return","src":"8644:73:88"}]},"documentation":{"id":50340,"nodeType":"StructuredDocumentation","src":"8397:76:88","text":"@notice Gets the attesters who have stake in the current accepting epoch"},"functionSelector":"aa0d6fcd","implemented":true,"kind":"function","modifiers":[],"name":"getStakedAttestersForAcceptingEpoch","nameLocation":"8487:35:88","parameters":{"id":50341,"nodeType":"ParameterList","parameters":[],"src":"8522:2:88"},"returnParameters":{"id":50345,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50344,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50355,"src":"8546:16:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":50342,"name":"address","nodeType":"ElementaryTypeName","src":"8546:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50343,"nodeType":"ArrayTypeName","src":"8546:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"8545:18:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50437,"nodeType":"FunctionDefinition","src":"8793:2397:88","nodes":[],"body":{"id":50436,"nodeType":"Block","src":"8939:2251:88","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50372,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":50364,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50990,"src":"9026:11:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct MCRStorage.SuperBlockCommitment storage ref))"}},"id":50367,"indexExpression":{"expression":{"id":50365,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"9038:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50366,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9059:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"9038:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9026:40:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$","typeString":"mapping(address => struct MCRStorage.SuperBlockCommitment storage ref)"}},"id":50369,"indexExpression":{"id":50368,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50358,"src":"9067:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9026:50:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"id":50370,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9077:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"9026:57:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":50371,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9087:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9026:62:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50376,"nodeType":"IfStatement","src":"9022:113:88","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":50373,"name":"AttesterAlreadyCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51059,"src":"9109:24:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":50374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9109:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":50375,"nodeType":"RevertStatement","src":"9102:33:88"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50377,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50966,"src":"9541:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":50378,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50964,"src":"9577:26:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9541:62:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":50380,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"9606:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50381,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9627:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"9606:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9541:92:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50386,"nodeType":"IfStatement","src":"9537:131:88","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":50383,"name":"AttesterAlreadyCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51059,"src":"9642:24:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":50384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9642:26:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":50385,"nodeType":"RevertStatement","src":"9635:33:88"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50392,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":50387,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50983,"src":"10003:29:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50390,"indexExpression":{"expression":{"id":50388,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"10033:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50389,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10054:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"10033:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10003:58:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":50391,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10065:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10003:63:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50402,"nodeType":"IfStatement","src":"9999:172:88","trueBody":{"id":50401,"nodeType":"Block","src":"10068:103:88","statements":[{"expression":{"id":50399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":50393,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50983,"src":"10082:29:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50396,"indexExpression":{"expression":{"id":50394,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"10112:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50395,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10133:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"10112:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10082:58:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":50397,"name":"getPresentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49992,"src":"10143:15:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50398,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10143:17:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10082:78:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50400,"nodeType":"ExpressionStatement","src":"10082:78:88"}]}},{"expression":{"id":50410,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":50403,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50990,"src":"10227:11:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct MCRStorage.SuperBlockCommitment storage ref))"}},"id":50407,"indexExpression":{"expression":{"id":50404,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"10239:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50405,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10260:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"10239:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10227:40:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$","typeString":"mapping(address => struct MCRStorage.SuperBlockCommitment storage ref)"}},"id":50408,"indexExpression":{"id":50406,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50358,"src":"10268:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10227:50:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50409,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"10280:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"src":"10227:73:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"id":50411,"nodeType":"ExpressionStatement","src":"10227:73:88"},{"assignments":[50413],"declarations":[{"constant":false,"id":50413,"mutability":"mutable","name":"attesterStakeForAcceptingEpoch","nameLocation":"10798:30:88","nodeType":"VariableDeclaration","scope":50436,"src":"10790:38:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50412,"name":"uint256","nodeType":"ElementaryTypeName","src":"10790:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50417,"initialValue":{"arguments":[{"id":50415,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50358,"src":"10865:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":50414,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50130,"src":"10831:33:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":50416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10831:43:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10790:84:88"},{"expression":{"id":50426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":50418,"name":"commitmentStakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50996,"src":"10884:16:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":50423,"indexExpression":{"expression":{"id":50419,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"10901:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50420,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10922:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"10901:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10884:45:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":50424,"indexExpression":{"expression":{"id":50421,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"10930:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50422,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"10951:10:88","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":50976,"src":"10930:31:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"10884:78:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":50425,"name":"attesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50413,"src":"10966:30:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10884:112:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50427,"nodeType":"ExpressionStatement","src":"10884:112:88"},{"eventCall":{"arguments":[{"expression":{"id":50429,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"11055:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50430,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11076:7:88","memberName":"blockId","nodeType":"MemberAccess","referencedDeclaration":50978,"src":"11055:28:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50431,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50361,"src":"11097:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50432,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11118:10:88","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":50976,"src":"11097:31:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":50433,"name":"attesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50413,"src":"11142:30:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50428,"name":"SuperBlockCommitmentSubmitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51055,"src":"11012:29:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,uint256)"}},"id":50434,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11012:170:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50435,"nodeType":"EmitStatement","src":"11007:175:88"}]},"documentation":{"id":50356,"nodeType":"StructuredDocumentation","src":"8731:57:88","text":"@dev submits a superBlock commitment for an attester."},"implemented":true,"kind":"function","modifiers":[],"name":"submitSuperBlockCommitment","nameLocation":"8802:37:88","parameters":{"id":50362,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50358,"mutability":"mutable","name":"attester","nameLocation":"8857:8:88","nodeType":"VariableDeclaration","scope":50437,"src":"8849:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50357,"name":"address","nodeType":"ElementaryTypeName","src":"8849:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":50361,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"8903:20:88","nodeType":"VariableDeclaration","scope":50437,"src":"8875:48:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50360,"nodeType":"UserDefinedTypeName","pathNode":{"id":50359,"name":"SuperBlockCommitment","nameLocations":["8875:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"8875:20:88"},"referencedDeclaration":50979,"src":"8875:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"8839:90:88"},"returnParameters":{"id":50363,"nodeType":"ParameterList","parameters":[],"src":"8939:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":50446,"nodeType":"FunctionDefinition","src":"11196:104:88","nodes":[],"body":{"id":50445,"nodeType":"Block","src":"11237:63:88","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":50441,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11282:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11286:6:88","memberName":"sender","nodeType":"MemberAccess","src":"11282:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":50440,"name":"postconfirmSuperBlocksWithAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50473,"src":"11247:34:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":50443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11247:46:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50444,"nodeType":"ExpressionStatement","src":"11247:46:88"}]},"functionSelector":"017304e1","implemented":true,"kind":"function","modifiers":[],"name":"postconfirmSuperBlocks","nameLocation":"11205:22:88","parameters":{"id":50438,"nodeType":"ParameterList","parameters":[],"src":"11227:2:88"},"returnParameters":{"id":50439,"nodeType":"ParameterList","parameters":[],"src":"11237:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50473,"nodeType":"FunctionDefinition","src":"11899:859:88","nodes":[],"body":{"id":50472,"nodeType":"Block","src":"11970:788:88","nodes":[],"statements":[{"condition":{"arguments":[],"expression":{"argumentTypes":[],"id":50452,"name":"currentAcceptorIsLive","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50481,"src":"12254:21:88","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_bool_$","typeString":"function () pure returns (bool)"}},"id":50453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12254:23:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50464,"nodeType":"IfStatement","src":"12250:130:88","trueBody":{"id":50463,"nodeType":"Block","src":"12279:101:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":50457,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50454,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50449,"src":"12297:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":50455,"name":"getCurrentAcceptor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50555,"src":"12309:18:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":50456,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12309:20:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"12297:32:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50462,"nodeType":"IfStatement","src":"12293:76:88","trueBody":{"expression":{"arguments":[{"hexValue":"4e6f744163636570746f72416e644163636570746f7249734c697665","id":50459,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12338:30:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_9a38bba0f70fe3cb1ae4184f9594c1ead93c44a0599854fb0b4317f29be4fe41","typeString":"literal_string \"NotAcceptorAndAcceptorIsLive\""},"value":"NotAcceptorAndAcceptorIsLive"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_9a38bba0f70fe3cb1ae4184f9594c1ead93c44a0599854fb0b4317f29be4fe41","typeString":"literal_string \"NotAcceptorAndAcceptorIsLive\""}],"id":50458,"name":"revert","nodeType":"Identifier","overloadedDeclarations":[-19,-19],"referencedDeclaration":-19,"src":"12331:6:88","typeDescriptions":{"typeIdentifier":"t_function_revert_pure$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory) pure"}},"id":50460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12331:38:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50461,"nodeType":"ExpressionStatement","src":"12331:38:88"}}]}},{"body":{"id":50470,"nodeType":"Block","src":"12750:2:88","statements":[]},"condition":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50466,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50966,"src":"12710:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":50467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12746:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12710:37:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50465,"name":"attemptPostconfirm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50690,"src":"12691:18:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) returns (bool)"}},"id":50469,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12691:57:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50471,"nodeType":"WhileStatement","src":"12684:68:88"}]},"documentation":{"id":50447,"nodeType":"StructuredDocumentation","src":"11693:101:88","text":"@notice If the current acceptor is not live, we should accept postconfirmations from any attester"},"implemented":true,"kind":"function","modifiers":[],"name":"postconfirmSuperBlocksWithAttester","nameLocation":"11908:34:88","parameters":{"id":50450,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50449,"mutability":"mutable","name":"attester","nameLocation":"11951:8:88","nodeType":"VariableDeclaration","scope":50473,"src":"11943:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50448,"name":"address","nodeType":"ElementaryTypeName","src":"11943:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11942:18:88"},"returnParameters":{"id":50451,"nodeType":"ParameterList","parameters":[],"src":"11970:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":50481,"nodeType":"FunctionDefinition","src":"12764:260:88","nodes":[],"body":{"id":50480,"nodeType":"Block","src":"12824:200:88","nodes":[],"statements":[{"expression":{"hexValue":"74727565","id":50478,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12989:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":50477,"id":50479,"nodeType":"Return","src":"12982:11:88"}]},"functionSelector":"e4566c78","implemented":true,"kind":"function","modifiers":[],"name":"currentAcceptorIsLive","nameLocation":"12773:21:88","parameters":{"id":50474,"nodeType":"ParameterList","parameters":[],"src":"12794:2:88"},"returnParameters":{"id":50477,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50476,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50481,"src":"12818:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50475,"name":"bool","nodeType":"ElementaryTypeName","src":"12818:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12817:6:88"},"scope":50951,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":50514,"nodeType":"FunctionDefinition","src":"13116:445:88","nodes":[],"body":{"id":50513,"nodeType":"Block","src":"13194:367:88","nodes":[],"statements":[{"assignments":[50488],"declarations":[{"constant":false,"id":50488,"mutability":"mutable","name":"currentL1BlockHeight","nameLocation":"13212:20:88","nodeType":"VariableDeclaration","scope":50513,"src":"13204:28:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50487,"name":"uint256","nodeType":"ElementaryTypeName","src":"13204:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50491,"initialValue":{"expression":{"id":50489,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"13235:5:88","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":50490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13241:6:88","memberName":"number","nodeType":"MemberAccess","src":"13235:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13204:43:88"},{"assignments":[50493],"declarations":[{"constant":false,"id":50493,"mutability":"mutable","name":"startL1BlockHeight","nameLocation":"13265:18:88","nodeType":"VariableDeclaration","scope":50513,"src":"13257:26:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50492,"name":"uint256","nodeType":"ElementaryTypeName","src":"13257:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50501,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50494,"name":"currentL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50488,"src":"13286:20:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50497,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50495,"name":"currentL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50488,"src":"13309:20:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":50496,"name":"acceptorTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50969,"src":"13332:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13309:35:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13286:58:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":50499,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13347:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13286:62:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13257:91:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50502,"name":"startL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50493,"src":"13422:18:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"hexValue":"30","id":50503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13443:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13422:22:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50510,"nodeType":"IfStatement","src":"13418:102:88","trueBody":{"id":50509,"nodeType":"Block","src":"13446:74:88","statements":[{"expression":{"id":50507,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50505,"name":"startL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50493,"src":"13487:18:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"30","id":50506,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13508:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13487:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50508,"nodeType":"ExpressionStatement","src":"13487:22:88"}]}},{"expression":{"id":50511,"name":"startL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50493,"src":"13536:18:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":50486,"id":50512,"nodeType":"Return","src":"13529:25:88"}]},"documentation":{"id":50482,"nodeType":"StructuredDocumentation","src":"13030:81:88","text":"@notice Gets the L1 block height at which the current acceptor's term started"},"functionSelector":"c5de60a9","implemented":true,"kind":"function","modifiers":[],"name":"getL1BlockStartOfCurrentAcceptorTerm","nameLocation":"13125:36:88","parameters":{"id":50483,"nodeType":"ParameterList","parameters":[],"src":"13161:2:88"},"returnParameters":{"id":50486,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50485,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50514,"src":"13185:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50484,"name":"uint256","nodeType":"ElementaryTypeName","src":"13185:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13184:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50555,"nodeType":"FunctionDefinition","src":"13661:647:88","nodes":[],"body":{"id":50554,"nodeType":"Block","src":"13721:587:88","nodes":[],"statements":[{"assignments":[50521],"declarations":[{"constant":false,"id":50521,"mutability":"mutable","name":"randomness","nameLocation":"13921:10:88","nodeType":"VariableDeclaration","scope":50554,"src":"13913:18:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":50520,"name":"bytes32","nodeType":"ElementaryTypeName","src":"13913:7:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"id":50526,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":50523,"name":"getL1BlockStartOfCurrentAcceptorTerm","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50514,"src":"13944:36:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50524,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13944:38:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50522,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"13934:9:88","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":50525,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13934:49:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"VariableDeclarationStatement","src":"13913:70:88"},{"assignments":[50531],"declarations":[{"constant":false,"id":50531,"mutability":"mutable","name":"attesters","nameLocation":"14102:9:88","nodeType":"VariableDeclaration","scope":50554,"src":"14085:26:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":50529,"name":"address","nodeType":"ElementaryTypeName","src":"14085:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50530,"nodeType":"ArrayTypeName","src":"14085:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":50539,"initialValue":{"arguments":[{"arguments":[{"id":50536,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"14174:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50535,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14166:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50534,"name":"address","nodeType":"ElementaryTypeName","src":"14166:7:88","typeDescriptions":{}}},"id":50537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14166:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50532,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"14114:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14130:35:88","memberName":"getStakedAttestersForAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":52982,"src":"14114:51:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":50538,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14114:66:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"14085:95:88"},{"assignments":[50541],"declarations":[{"constant":false,"id":50541,"mutability":"mutable","name":"acceptorIndex","nameLocation":"14198:13:88","nodeType":"VariableDeclaration","scope":50554,"src":"14190:21:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50540,"name":"uint256","nodeType":"ElementaryTypeName","src":"14190:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50549,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50548,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":50544,"name":"randomness","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50521,"src":"14222:10:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":50543,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"14214:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":50542,"name":"uint256","nodeType":"ElementaryTypeName","src":"14214:7:88","typeDescriptions":{}}},"id":50545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14214:19:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"expression":{"id":50546,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50531,"src":"14236:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50547,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14246:6:88","memberName":"length","nodeType":"MemberAccess","src":"14236:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14214:38:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14190:62:88"},{"expression":{"baseExpression":{"id":50550,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50531,"src":"14269:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50552,"indexExpression":{"id":50551,"name":"acceptorIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50541,"src":"14279:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14269:24:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":50519,"id":50553,"nodeType":"Return","src":"14262:31:88"}]},"documentation":{"id":50515,"nodeType":"StructuredDocumentation","src":"13567:89:88","text":"@notice Determines the current acceptor using L1 block hash as a source of randomness"},"functionSelector":"f99f6e4c","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentAcceptor","nameLocation":"13670:18:88","parameters":{"id":50516,"nodeType":"ParameterList","parameters":[],"src":"13688:2:88"},"returnParameters":{"id":50519,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50518,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50555,"src":"13712:7:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50517,"name":"address","nodeType":"ElementaryTypeName","src":"13712:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13711:9:88"},"scope":50951,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":50690,"nodeType":"FunctionDefinition","src":"14699:4115:88","nodes":[],"body":{"id":50689,"nodeType":"Block","src":"14777:4037:88","nodes":[],"statements":[{"assignments":[50563],"declarations":[{"constant":false,"id":50563,"mutability":"mutable","name":"superBlockEpoch","nameLocation":"14795:15:88","nodeType":"VariableDeclaration","scope":50689,"src":"14787:23:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50562,"name":"uint256","nodeType":"ElementaryTypeName","src":"14787:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50567,"initialValue":{"baseExpression":{"id":50564,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50983,"src":"14813:29:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50566,"indexExpression":{"id":50565,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50557,"src":"14843:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14813:47:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14787:73:88"},{"assignments":[50569],"declarations":[{"constant":false,"id":50569,"mutability":"mutable","name":"previousSuperBlockEpoch","nameLocation":"14979:23:88","nodeType":"VariableDeclaration","scope":50689,"src":"14971:31:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50568,"name":"uint256","nodeType":"ElementaryTypeName","src":"14971:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50575,"initialValue":{"baseExpression":{"id":50570,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50983,"src":"15005:29:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50574,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50571,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50557,"src":"15035:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":50572,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15052:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15035:18:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15005:49:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14971:83:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50578,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50576,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50563,"src":"15068:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":50577,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50569,"src":"15086:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15068:41:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50585,"nodeType":"IfStatement","src":"15064:133:88","trueBody":{"expression":{"id":50583,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":50579,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50983,"src":"15124:29:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50581,"indexExpression":{"id":50580,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50557,"src":"15154:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"15124:47:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50582,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50569,"src":"15174:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15124:73:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50584,"nodeType":"ExpressionStatement","src":"15124:73:88"}},{"expression":{"id":50588,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50586,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50563,"src":"15211:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50587,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50569,"src":"15229:23:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15211:41:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50589,"nodeType":"ExpressionStatement","src":"15211:41:88"},{"body":{"id":50606,"nodeType":"Block","src":"15723:791:88","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50599,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":50595,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15908:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15912:6:88","memberName":"sender","nodeType":"MemberAccess","src":"15908:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":50594,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50130,"src":"15874:33:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":50597,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15874:45:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":50598,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15923:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"15874:50:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50602,"nodeType":"IfStatement","src":"15870:68:88","trueBody":{"expression":{"hexValue":"66616c7365","id":50600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"15933:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":50561,"id":50601,"nodeType":"Return","src":"15926:12:88"}},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":50603,"name":"rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50912,"src":"16488:13:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":50604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16488:15:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50605,"nodeType":"ExpressionStatement","src":"16488:15:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":50590,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50006,"src":"15684:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15684:19:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":50592,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50563,"src":"15706:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15684:37:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50607,"nodeType":"WhileStatement","src":"15677:837:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"expression":{"id":50609,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16699:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16703:6:88","memberName":"sender","nodeType":"MemberAccess","src":"16699:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":50608,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50130,"src":"16665:33:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":50611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16665:45:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":50612,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16714:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16665:50:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50616,"nodeType":"IfStatement","src":"16661:68:88","trueBody":{"expression":{"hexValue":"66616c7365","id":50614,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"16724:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":50561,"id":50615,"nodeType":"Return","src":"16717:12:88"}},{"assignments":[50618],"declarations":[{"constant":false,"id":50618,"mutability":"mutable","name":"supermajority","nameLocation":"16998:13:88","nodeType":"VariableDeclaration","scope":50689,"src":"16990:21:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50617,"name":"uint256","nodeType":"ElementaryTypeName","src":"16990:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50627,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50626,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":50619,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17015:1:88","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":50621,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50563,"src":"17037:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50620,"name":"computeTotalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50218,"src":"17019:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":50622,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17019:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17015:38:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":50624,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"17014:40:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":50625,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17057:1:88","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"17014:44:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16990:68:88"},{"assignments":[50632],"declarations":[{"constant":false,"id":50632,"mutability":"mutable","name":"attesters","nameLocation":"17085:9:88","nodeType":"VariableDeclaration","scope":50689,"src":"17068:26:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":50630,"name":"address","nodeType":"ElementaryTypeName","src":"17068:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50631,"nodeType":"ArrayTypeName","src":"17068:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":50635,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":50633,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50355,"src":"17097:35:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":50634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17097:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"17068:66:88"},{"body":{"id":50685,"nodeType":"Block","src":"17443:1342:88","statements":[{"assignments":[50648],"declarations":[{"constant":false,"id":50648,"mutability":"mutable","name":"attester","nameLocation":"17465:8:88","nodeType":"VariableDeclaration","scope":50685,"src":"17457:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50647,"name":"address","nodeType":"ElementaryTypeName","src":"17457:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":50652,"initialValue":{"baseExpression":{"id":50649,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50632,"src":"17476:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50651,"indexExpression":{"id":50650,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50637,"src":"17486:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17476:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"17457:31:88"},{"assignments":[50655],"declarations":[{"constant":false,"id":50655,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"17530:20:88","nodeType":"VariableDeclaration","scope":50685,"src":"17502:48:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50654,"nodeType":"UserDefinedTypeName","pathNode":{"id":50653,"name":"SuperBlockCommitment","nameLocations":["17502:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"17502:20:88"},"referencedDeclaration":50979,"src":"17502:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"id":50661,"initialValue":{"baseExpression":{"baseExpression":{"id":50656,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50990,"src":"17553:11:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct MCRStorage.SuperBlockCommitment storage ref))"}},"id":50658,"indexExpression":{"id":50657,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50557,"src":"17565:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17553:29:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$50979_storage_$","typeString":"mapping(address => struct MCRStorage.SuperBlockCommitment storage ref)"}},"id":50660,"indexExpression":{"id":50659,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50648,"src":"17583:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17553:39:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"nodeType":"VariableDeclarationStatement","src":"17502:90:88"},{"assignments":[50663],"declarations":[{"constant":false,"id":50663,"mutability":"mutable","name":"totalStakeOnCommitment","nameLocation":"17669:22:88","nodeType":"VariableDeclaration","scope":50685,"src":"17661:30:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50662,"name":"uint256","nodeType":"ElementaryTypeName","src":"17661:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50671,"initialValue":{"baseExpression":{"baseExpression":{"id":50664,"name":"commitmentStakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50996,"src":"17694:16:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":50667,"indexExpression":{"expression":{"id":50665,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50655,"src":"17711:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50666,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17732:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"17711:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17694:45:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":50670,"indexExpression":{"expression":{"id":50668,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50655,"src":"17740:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50669,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17761:10:88","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":50976,"src":"17740:31:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17694:78:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17661:111:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50672,"name":"totalStakeOnCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50663,"src":"17790:22:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":50673,"name":"supermajority","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50618,"src":"17815:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17790:38:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50684,"nodeType":"IfStatement","src":"17786:989:88","trueBody":{"id":50683,"nodeType":"Block","src":"17830:945:88","statements":[{"expression":{"arguments":[{"id":50676,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50655,"src":"17881:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},{"expression":{"id":50677,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17903:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17907:6:88","memberName":"sender","nodeType":"MemberAccess","src":"17903:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50675,"name":"_postconfirmSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50892,"src":"17848:32:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SuperBlockCommitment_$50979_memory_ptr_$_t_address_$returns$__$","typeString":"function (struct MCRStorage.SuperBlockCommitment memory,address)"}},"id":50679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17848:66:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50680,"nodeType":"ExpressionStatement","src":"17848:66:88"},{"expression":{"hexValue":"74727565","id":50681,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18756:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":50561,"id":50682,"nodeType":"Return","src":"18749:11:88"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50643,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50640,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50637,"src":"17416:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":50641,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50632,"src":"17420:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17430:6:88","memberName":"length","nodeType":"MemberAccess","src":"17420:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17416:20:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50686,"initializationExpression":{"assignments":[50637],"declarations":[{"constant":false,"id":50637,"mutability":"mutable","name":"i","nameLocation":"17409:1:88","nodeType":"VariableDeclaration","scope":50686,"src":"17401:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50636,"name":"uint256","nodeType":"ElementaryTypeName","src":"17401:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50639,"initialValue":{"hexValue":"30","id":50638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17413:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"17401:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":50645,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"17438:3:88","subExpression":{"id":50644,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50637,"src":"17438:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50646,"nodeType":"ExpressionStatement","src":"17438:3:88"},"nodeType":"ForStatement","src":"17396:1389:88"},{"expression":{"hexValue":"66616c7365","id":50687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"18802:5:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":50561,"id":50688,"nodeType":"Return","src":"18795:12:88"}]},"implemented":true,"kind":"function","modifiers":[],"name":"attemptPostconfirm","nameLocation":"14708:18:88","parameters":{"id":50558,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50557,"mutability":"mutable","name":"superBlockHeight","nameLocation":"14735:16:88","nodeType":"VariableDeclaration","scope":50690,"src":"14727:24:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50556,"name":"uint256","nodeType":"ElementaryTypeName","src":"14727:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"14726:26:88"},"returnParameters":{"id":50561,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50560,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":50690,"src":"14771:4:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50559,"name":"bool","nodeType":"ElementaryTypeName","src":"14771:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"14770:6:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":50704,"nodeType":"FunctionDefinition","src":"18821:136:88","nodes":[],"body":{"id":50703,"nodeType":"Block","src":"18903:54:88","nodes":[],"statements":[{"expression":{"arguments":[{"id":50699,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49837,"src":"18923:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":50700,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50692,"src":"18941:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50698,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39174,"src":"18913:9:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":50701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18913:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50702,"nodeType":"ExpressionStatement","src":"18913:37:88"}]},"functionSelector":"81df1746","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":50695,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"18885:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":50696,"kind":"modifierInvocation","modifierName":{"id":50694,"name":"onlyRole","nameLocations":["18876:8:88"],"nodeType":"IdentifierPath","referencedDeclaration":39041,"src":"18876:8:88"},"nodeType":"ModifierInvocation","src":"18876:26:88"}],"name":"grantTrustedAttester","nameLocation":"18830:20:88","parameters":{"id":50693,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50692,"mutability":"mutable","name":"attester","nameLocation":"18859:8:88","nodeType":"VariableDeclaration","scope":50704,"src":"18851:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50691,"name":"address","nodeType":"ElementaryTypeName","src":"18851:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18850:18:88"},"returnParameters":{"id":50697,"nodeType":"ParameterList","parameters":[],"src":"18903:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50734,"nodeType":"FunctionDefinition","src":"18963:227:88","nodes":[],"body":{"id":50733,"nodeType":"Block","src":"19060:130:88","nodes":[],"statements":[{"body":{"id":50731,"nodeType":"Block","src":"19117:66:88","statements":[{"expression":{"arguments":[{"id":50725,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49837,"src":"19141:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":50726,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50707,"src":"19159:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50728,"indexExpression":{"id":50727,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50714,"src":"19169:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19159:12:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50724,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39174,"src":"19131:9:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":50729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19131:41:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50730,"nodeType":"ExpressionStatement","src":"19131:41:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50720,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50717,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50714,"src":"19090:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":50718,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50707,"src":"19094:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19104:6:88","memberName":"length","nodeType":"MemberAccess","src":"19094:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19090:20:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50732,"initializationExpression":{"assignments":[50714],"declarations":[{"constant":false,"id":50714,"mutability":"mutable","name":"i","nameLocation":"19083:1:88","nodeType":"VariableDeclaration","scope":50732,"src":"19075:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50713,"name":"uint256","nodeType":"ElementaryTypeName","src":"19075:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50716,"initialValue":{"hexValue":"30","id":50715,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19087:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"19075:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":50722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19112:3:88","subExpression":{"id":50721,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50714,"src":"19112:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50723,"nodeType":"ExpressionStatement","src":"19112:3:88"},"nodeType":"ForStatement","src":"19070:113:88"}]},"functionSelector":"cf6772ad","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":50710,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"19042:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":50711,"kind":"modifierInvocation","modifierName":{"id":50709,"name":"onlyRole","nameLocations":["19033:8:88"],"nodeType":"IdentifierPath","referencedDeclaration":39041,"src":"19033:8:88"},"nodeType":"ModifierInvocation","src":"19033:26:88"}],"name":"batchGrantTrustedAttester","nameLocation":"18972:25:88","parameters":{"id":50708,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50707,"mutability":"mutable","name":"attesters","nameLocation":"19015:9:88","nodeType":"VariableDeclaration","scope":50734,"src":"18998:26:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":50705,"name":"address","nodeType":"ElementaryTypeName","src":"18998:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50706,"nodeType":"ArrayTypeName","src":"18998:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"18997:28:88"},"returnParameters":{"id":50712,"nodeType":"ParameterList","parameters":[],"src":"19060:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50747,"nodeType":"FunctionDefinition","src":"19196:132:88","nodes":[],"body":{"id":50746,"nodeType":"Block","src":"19279:49:88","nodes":[],"statements":[{"expression":{"id":50744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50742,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51023,"src":"19289:22:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50743,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50736,"src":"19314:7:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19289:32:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50745,"nodeType":"ExpressionStatement","src":"19289:32:88"}]},"functionSelector":"d2526fef","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":50739,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49832,"src":"19261:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":50740,"kind":"modifierInvocation","modifierName":{"id":50738,"name":"onlyRole","nameLocations":["19252:8:88"],"nodeType":"IdentifierPath","referencedDeclaration":39041,"src":"19252:8:88"},"nodeType":"ModifierInvocation","src":"19252:26:88"}],"name":"setOpenAttestationEnabled","nameLocation":"19205:25:88","parameters":{"id":50737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50736,"mutability":"mutable","name":"enabled","nameLocation":"19236:7:88","nodeType":"VariableDeclaration","scope":50747,"src":"19231:12:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":50735,"name":"bool","nodeType":"ElementaryTypeName","src":"19231:4:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"19230:14:88"},"returnParameters":{"id":50741,"nodeType":"ParameterList","parameters":[],"src":"19279:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50771,"nodeType":"FunctionDefinition","src":"19334:335:88","nodes":[],"body":{"id":50770,"nodeType":"Block","src":"19427:242:88","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":50760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50754,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51023,"src":"19458:22:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":50756,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49837,"src":"19492:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50757,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19510:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19514:6:88","memberName":"sender","nodeType":"MemberAccess","src":"19510:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50755,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"19484:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":50759,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19484:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19458:63:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d454e54","id":50761,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19535:36:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""},"value":"UNAUTHORIZED_SUPERBLOCK_COMMITMENT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""}],"id":50753,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19437:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":50762,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19437:144:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50763,"nodeType":"ExpressionStatement","src":"19437:144:88"},{"expression":{"arguments":[{"expression":{"id":50765,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19629:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19633:6:88","memberName":"sender","nodeType":"MemberAccess","src":"19629:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":50767,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50750,"src":"19641:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}],"id":50764,"name":"submitSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50437,"src":"19591:37:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_SuperBlockCommitment_$50979_memory_ptr_$returns$__$","typeString":"function (address,struct MCRStorage.SuperBlockCommitment memory)"}},"id":50768,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19591:71:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50769,"nodeType":"ExpressionStatement","src":"19591:71:88"}]},"functionSelector":"0e74b609","implemented":true,"kind":"function","modifiers":[],"name":"submitSuperBlockCommitment","nameLocation":"19343:26:88","parameters":{"id":50751,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50750,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"19398:20:88","nodeType":"VariableDeclaration","scope":50771,"src":"19370:48:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50749,"nodeType":"UserDefinedTypeName","pathNode":{"id":50748,"name":"SuperBlockCommitment","nameLocations":["19370:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"19370:20:88"},"referencedDeclaration":50979,"src":"19370:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"19369:50:88"},"returnParameters":{"id":50752,"nodeType":"ParameterList","parameters":[],"src":"19427:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50811,"nodeType":"FunctionDefinition","src":"19675:430:88","nodes":[],"body":{"id":50810,"nodeType":"Block","src":"19776:329:88","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":50785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50779,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51023,"src":"19807:22:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":50781,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49837,"src":"19841:16:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50782,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19859:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19863:6:88","memberName":"sender","nodeType":"MemberAccess","src":"19859:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":50780,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39100,"src":"19833:7:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":50784,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19833:37:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"19807:63:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d454e54","id":50786,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19884:36:88","typeDescriptions":{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""},"value":"UNAUTHORIZED_SUPERBLOCK_COMMITMENT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""}],"id":50778,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19786:7:88","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":50787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19786:144:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50788,"nodeType":"ExpressionStatement","src":"19786:144:88"},{"body":{"id":50808,"nodeType":"Block","src":"19999:100:88","statements":[{"expression":{"arguments":[{"expression":{"id":50801,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20051:3:88","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":50802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20055:6:88","memberName":"sender","nodeType":"MemberAccess","src":"20051:10:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":50803,"name":"superBlockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50775,"src":"20063:21:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$50979_memory_ptr_$dyn_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory[] memory"}},"id":50805,"indexExpression":{"id":50804,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50790,"src":"20085:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20063:24:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}],"id":50800,"name":"submitSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50437,"src":"20013:37:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_SuperBlockCommitment_$50979_memory_ptr_$returns$__$","typeString":"function (address,struct MCRStorage.SuperBlockCommitment memory)"}},"id":50806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20013:75:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50807,"nodeType":"ExpressionStatement","src":"20013:75:88"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50793,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50790,"src":"19960:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":50794,"name":"superBlockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50775,"src":"19964:21:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$50979_memory_ptr_$dyn_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory[] memory"}},"id":50795,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19986:6:88","memberName":"length","nodeType":"MemberAccess","src":"19964:28:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19960:32:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50809,"initializationExpression":{"assignments":[50790],"declarations":[{"constant":false,"id":50790,"mutability":"mutable","name":"i","nameLocation":"19953:1:88","nodeType":"VariableDeclaration","scope":50809,"src":"19945:9:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50789,"name":"uint256","nodeType":"ElementaryTypeName","src":"19945:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50792,"initialValue":{"hexValue":"30","id":50791,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19957:1:88","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"19945:13:88"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":50798,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19994:3:88","subExpression":{"id":50797,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50790,"src":"19994:1:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50799,"nodeType":"ExpressionStatement","src":"19994:3:88"},"nodeType":"ForStatement","src":"19940:159:88"}]},"functionSelector":"622e3616","implemented":true,"kind":"function","modifiers":[],"name":"submitBatchSuperBlockCommitment","nameLocation":"19684:31:88","parameters":{"id":50776,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50775,"mutability":"mutable","name":"superBlockCommitments","nameLocation":"19746:21:88","nodeType":"VariableDeclaration","scope":50811,"src":"19716:51:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$50979_memory_ptr_$dyn_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment[]"},"typeName":{"baseType":{"id":50773,"nodeType":"UserDefinedTypeName","pathNode":{"id":50772,"name":"SuperBlockCommitment","nameLocations":["19716:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"19716:20:88"},"referencedDeclaration":50979,"src":"19716:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"id":50774,"nodeType":"ArrayTypeName","src":"19716:22:88","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$50979_storage_$dyn_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment[]"}},"visibility":"internal"}],"src":"19715:53:88"},"returnParameters":{"id":50777,"nodeType":"ParameterList","parameters":[],"src":"19776:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":50892,"nodeType":"FunctionDefinition","src":"20341:1992:88","nodes":[],"body":{"id":50891,"nodeType":"Block","src":"20460:1873:88","nodes":[],"statements":[{"assignments":[50821],"declarations":[{"constant":false,"id":50821,"mutability":"mutable","name":"currentAcceptingEpoch","nameLocation":"20478:21:88","nodeType":"VariableDeclaration","scope":50891,"src":"20470:29:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50820,"name":"uint256","nodeType":"ElementaryTypeName","src":"20470:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50824,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":50822,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50006,"src":"20502:17:88","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":50823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20502:19:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20470:51:88"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":50825,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50983,"src":"21045:29:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50828,"indexExpression":{"expression":{"id":50826,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21075:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50827,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21096:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"21075:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21045:58:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":50829,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50821,"src":"21107:21:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21045:83:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50834,"nodeType":"IfStatement","src":"21041:142:88","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":50831,"name":"UnacceptableSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51057,"src":"21149:32:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":50832,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21149:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":50833,"nodeType":"RevertStatement","src":"21142:41:88"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50840,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":50835,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50966,"src":"21296:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50839,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":50836,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21333:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50837,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21354:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"21333:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":50838,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21363:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"21333:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21296:68:88","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":50844,"nodeType":"IfStatement","src":"21292:127:88","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":50841,"name":"UnacceptableSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51057,"src":"21385:32:88","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":50842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21385:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":50843,"nodeType":"RevertStatement","src":"21378:41:88"}},{"expression":{"id":50852,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":50845,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51030,"src":"21430:33:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$50979_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct MCRStorage.SuperBlockCommitment storage ref))"}},"id":50849,"indexExpression":{"id":50846,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51032,"src":"21464:31:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21430:66:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$50979_storage_$","typeString":"mapping(uint256 => struct MCRStorage.SuperBlockCommitment storage ref)"}},"id":50850,"indexExpression":{"expression":{"id":50847,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21497:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50848,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21518:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"21497:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21430:95:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50851,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21528:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"src":"21430:118:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage","typeString":"struct MCRStorage.SuperBlockCommitment storage ref"}},"id":50853,"nodeType":"ExpressionStatement","src":"21430:118:88"},{"expression":{"id":50857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50854,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50966,"src":"21558:33:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":50855,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21594:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50856,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21615:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"21594:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21558:63:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50858,"nodeType":"ExpressionStatement","src":"21558:63:88"},{"expression":{"id":50864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":50859,"name":"postconfirmedBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51000,"src":"21631:15:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":50862,"indexExpression":{"expression":{"id":50860,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21647:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50861,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21668:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"21647:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21631:44:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":50863,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50817,"src":"21678:8:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21631:55:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50865,"nodeType":"ExpressionStatement","src":"21631:55:88"},{"expression":{"id":50872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":50866,"name":"postconfirmedAtL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51008,"src":"21696:28:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50869,"indexExpression":{"expression":{"id":50867,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21725:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50868,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21746:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"21725:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21696:57:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":50870,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"21756:5:88","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":50871,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21762:6:88","memberName":"number","nodeType":"MemberAccess","src":"21756:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21696:72:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50873,"nodeType":"ExpressionStatement","src":"21696:72:88"},{"expression":{"id":50880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":50874,"name":"postconfirmedAtL1BlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51012,"src":"21778:31:88","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":50877,"indexExpression":{"expression":{"id":50875,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"21810:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50876,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21831:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"21810:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21778:60:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":50878,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"21841:5:88","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":50879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21847:9:88","memberName":"timestamp","nodeType":"MemberAccess","src":"21841:15:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21778:78:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":50881,"nodeType":"ExpressionStatement","src":"21778:78:88"},{"eventCall":{"arguments":[{"expression":{"id":50883,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"22202:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50884,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22223:7:88","memberName":"blockId","nodeType":"MemberAccess","referencedDeclaration":50978,"src":"22202:28:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50885,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"22244:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50886,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22265:10:88","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":50976,"src":"22244:31:88","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":50887,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50815,"src":"22289:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment memory"}},"id":50888,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22310:6:88","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":50974,"src":"22289:27:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50882,"name":"SuperBlockPostconfirmed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":51047,"src":"22165:23:88","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,uint256)"}},"id":50889,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22165:161:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50890,"nodeType":"EmitStatement","src":"22160:166:88"}]},"documentation":{"id":50812,"nodeType":"StructuredDocumentation","src":"20111:173:88","text":"@dev Accepts a superBlock commitment.\n @dev This function and attemptPostconfirm() could call each other recursively, so we must ensure it's safe from re-entrancy"},"implemented":true,"kind":"function","modifiers":[],"name":"_postconfirmSuperBlockCommitment","nameLocation":"20350:32:88","parameters":{"id":50818,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50815,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"20411:20:88","nodeType":"VariableDeclaration","scope":50892,"src":"20383:48:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50814,"nodeType":"UserDefinedTypeName","pathNode":{"id":50813,"name":"SuperBlockCommitment","nameLocations":["20383:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"20383:20:88"},"referencedDeclaration":50979,"src":"20383:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"},{"constant":false,"id":50817,"mutability":"mutable","name":"attester","nameLocation":"20441:8:88","nodeType":"VariableDeclaration","scope":50892,"src":"20433:16:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":50816,"name":"address","nodeType":"ElementaryTypeName","src":"20433:7:88","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"20382:68:88"},"returnParameters":{"id":50819,"nodeType":"ParameterList","parameters":[],"src":"20460:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":50899,"nodeType":"FunctionDefinition","src":"22355:170:88","nodes":[],"body":{"id":50898,"nodeType":"Block","src":"22437:88:88","nodes":[],"statements":[]},"implemented":true,"kind":"function","modifiers":[],"name":"slashMinority","nameLocation":"22364:13:88","parameters":{"id":50896,"nodeType":"ParameterList","parameters":[{"constant":false,"id":50895,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"22406:20:88","nodeType":"VariableDeclaration","scope":50899,"src":"22378:48:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_memory_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"},"typeName":{"id":50894,"nodeType":"UserDefinedTypeName","pathNode":{"id":50893,"name":"SuperBlockCommitment","nameLocations":["22378:20:88"],"nodeType":"IdentifierPath","referencedDeclaration":50979,"src":"22378:20:88"},"referencedDeclaration":50979,"src":"22378:20:88","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$50979_storage_ptr","typeString":"struct MCRStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"22377:50:88"},"returnParameters":{"id":50897,"nodeType":"ParameterList","parameters":[],"src":"22437:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":50912,"nodeType":"FunctionDefinition","src":"22773:105:88","nodes":[],"body":{"id":50911,"nodeType":"Block","src":"22807:71:88","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":50903,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"22817:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22833:13:88","memberName":"rollOverEpoch","nodeType":"MemberAccess","referencedDeclaration":52901,"src":"22817:29:88","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":50906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22817:31:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50907,"nodeType":"ExpressionStatement","src":"22817:31:88"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":50908,"name":"setAcceptor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50950,"src":"22858:11:88","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":50909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22858:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":50910,"nodeType":"ExpressionStatement","src":"22858:13:88"}]},"documentation":{"id":50900,"nodeType":"StructuredDocumentation","src":"22531:237:88","text":" @dev nonReentrant because there is no need to reenter this function. It should be called iteratively. Marked on the internal method to simplify risks from complex calling patterns. This also calls an external contract."},"implemented":true,"kind":"function","modifiers":[],"name":"rollOverEpoch","nameLocation":"22782:13:88","parameters":{"id":50901,"nodeType":"ParameterList","parameters":[],"src":"22795:2:88"},"returnParameters":{"id":50902,"nodeType":"ParameterList","parameters":[],"src":"22807:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":50950,"nodeType":"FunctionDefinition","src":"22998:379:88","nodes":[],"body":{"id":50949,"nodeType":"Block","src":"23030:347:88","nodes":[],"statements":[{"assignments":[50919],"declarations":[{"constant":false,"id":50919,"mutability":"mutable","name":"attesters","nameLocation":"23102:9:88","nodeType":"VariableDeclaration","scope":50949,"src":"23085:26:88","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":50917,"name":"address","nodeType":"ElementaryTypeName","src":"23085:7:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50918,"nodeType":"ArrayTypeName","src":"23085:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":50927,"initialValue":{"arguments":[{"arguments":[{"id":50924,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"23174:4:88","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$50951","typeString":"contract MCR"}],"id":50923,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23166:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":50922,"name":"address","nodeType":"ElementaryTypeName","src":"23166:7:88","typeDescriptions":{}}},"id":50925,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23166:13:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":50920,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50962,"src":"23114:15:88","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$52990","typeString":"contract IMovementStaking"}},"id":50921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23130:35:88","memberName":"getStakedAttestersForAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":52982,"src":"23114:51:88","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":50926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23114:66:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"23085:95:88"},{"assignments":[50929],"declarations":[{"constant":false,"id":50929,"mutability":"mutable","name":"acceptorIndex","nameLocation":"23198:13:88","nodeType":"VariableDeclaration","scope":50949,"src":"23190:21:88","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":50928,"name":"uint256","nodeType":"ElementaryTypeName","src":"23190:7:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":50942,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":50936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":50933,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"23232:5:88","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":50934,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23238:6:88","memberName":"number","nodeType":"MemberAccess","src":"23232:12:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":50935,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23245:1:88","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"23232:14:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":50932,"name":"blockhash","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-5,"src":"23222:9:88","typeDescriptions":{"typeIdentifier":"t_function_blockhash_view$_t_uint256_$returns$_t_bytes32_$","typeString":"function (uint256) view returns (bytes32)"}},"id":50937,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23222:25:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":50931,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23214:7:88","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":50930,"name":"uint256","nodeType":"ElementaryTypeName","src":"23214:7:88","typeDescriptions":{}}},"id":50938,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23214:34:88","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"expression":{"id":50939,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50919,"src":"23251:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50940,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23261:6:88","memberName":"length","nodeType":"MemberAccess","src":"23251:16:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23214:53:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23190:77:88"},{"expression":{"id":50947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":50943,"name":"currentAcceptor","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50971,"src":"23328:15:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":50944,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50919,"src":"23346:9:88","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":50946,"indexExpression":{"id":50945,"name":"acceptorIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50929,"src":"23356:13:88","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23346:24:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23328:42:88","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":50948,"nodeType":"ExpressionStatement","src":"23328:42:88"}]},"implemented":true,"kind":"function","modifiers":[],"name":"setAcceptor","nameLocation":"23007:11:88","parameters":{"id":50913,"nodeType":"ParameterList","parameters":[],"src":"23018:2:88"},"returnParameters":{"id":50914,"nodeType":"ParameterList","parameters":[],"src":"23030:0:88"},"scope":50951,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":49820,"name":"Initializable","nameLocations":["593:13:88"],"nodeType":"IdentifierPath","referencedDeclaration":39600,"src":"593:13:88"},"id":49821,"nodeType":"InheritanceSpecifier","src":"593:13:88"},{"baseName":{"id":49822,"name":"BaseSettlement","nameLocations":["608:14:88"],"nodeType":"IdentifierPath","referencedDeclaration":51115,"src":"608:14:88"},"id":49823,"nodeType":"InheritanceSpecifier","src":"608:14:88"},{"baseName":{"id":49824,"name":"MCRStorage","nameLocations":["624:10:88"],"nodeType":"IdentifierPath","referencedDeclaration":51037,"src":"624:10:88"},"id":49825,"nodeType":"InheritanceSpecifier","src":"624:10:88"},{"baseName":{"id":49826,"name":"IMCR","nameLocations":["636:4:88"],"nodeType":"IdentifierPath","referencedDeclaration":51060,"src":"636:4:88"},"id":49827,"nodeType":"InheritanceSpecifier","src":"636:4:88"}],"canonicalName":"MCR","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[50951,51060,51037,51115,39782,42716,39346,41109,45196,41488,40614,39600],"name":"MCR","nameLocation":"586:3:88","scope":50952,"usedErrors":[39363,39366,39627,39632,41415,41418,42926,42939,44034,44037,51057,51059],"usedEvents":[39371,41427,41436,41445,42905,51047,51055]}],"license":"UNLICENSED"},"id":88} \ No newline at end of file +{"abi":[{"type":"function","name":"COMMITMENT_ADMIN","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"TRUSTED_ATTESTER","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"acceptGenesisCeremony","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"acceptedBlocks","inputs":[{"name":"blockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"acceptedBlocksVersion","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchGrantCommitmentAdmin","inputs":[{"name":"accounts","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"batchGrantTrustedAttester","inputs":[{"name":"attesters","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"blockHeightEpochAssignments","inputs":[{"name":"blockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epoch","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"commitmentStakes","inputs":[{"name":"blockHeight","type":"uint256","internalType":"uint256"},{"name":"commitement","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"commitments","inputs":[{"name":"blockHeight","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"computeAllCurrentEpochStake","inputs":[{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"computeAllStakeAtEpoch","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"computeAllTotalStakeForCurrentEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"computeAllTotalStakeForEpoch","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"createBlockCommitment","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct MCRStorage.BlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"pure"},{"type":"function","name":"forceLatestCommitment","inputs":[{"name":"blockCommitment","type":"tuple","internalType":"struct MCRStorage.BlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getAcceptedCommitmentAtBlockHeight","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct MCRStorage.BlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"getAttesters","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpochStake","inputs":[{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochByBlockTime","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getMaxTolerableBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStakeAtEpoch","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStakeForCurrentEpoch","inputs":[{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStakeForEpoch","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getValidatorCommitmentAtBlockHeight","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct MCRStorage.BlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"grantCommitmentAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantTrustedAttester","inputs":[{"name":"attester","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"_stakingContract","type":"address","internalType":"contract IMovementStaking"},{"name":"_lastAcceptedBlockHeight","type":"uint256","internalType":"uint256"},{"name":"_leadingBlockTolerance","type":"uint256","internalType":"uint256"},{"name":"_epochDuration","type":"uint256","internalType":"uint256"},{"name":"_custodians","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"lastAcceptedBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"leadingBlockTolerance","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"openAttestationEnabled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAcceptedCommitmentAtBlockHeight","inputs":[{"name":"blockCommitment","type":"tuple","internalType":"struct MCRStorage.BlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setLastAcceptedBlockHeight","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOpenAttestationEnabled","inputs":[{"name":"enabled","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakingContract","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IMovementStaking"}],"stateMutability":"view"},{"type":"function","name":"submitBatchBlockCommitment","inputs":[{"name":"blockCommitments","type":"tuple[]","internalType":"struct MCRStorage.BlockCommitment[]","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitBlockCommitment","inputs":[{"name":"blockCommitment","type":"tuple","internalType":"struct MCRStorage.BlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"versionedAcceptedBlocks","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"blockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"event","name":"BlockAccepted","inputs":[{"name":"blockHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"stateCommitment","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"height","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"BlockCommitmentSubmitted","inputs":[{"name":"blockHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"stateCommitment","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"attesterStake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AttesterAlreadyCommitted","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"UnacceptableBlockCommitment","inputs":[]}],"bytecode":{"object":"0x60a0604052306080523480156012575f80fd5b5060805161292f6100395f395f81816119cc015281816119f50152611b38015261292f5ff3fe6080604052600436106102d9575f3560e01c806381df174611610189578063d547741f116100d8578063ee96da0511610092578063efe97d051161006d578063efe97d05146109ee578063f34d002a14610a02578063f89fe60b14610a21578063fc2788ad14610a40575f80fd5b8063ee96da0514610953578063ee99205c1461099f578063ef9ae15c146109d5575f80fd5b8063d547741f14610808578063e1b2b22214610827578063e1ffa44c14610846578063e8124097146108b5578063e90d4c06146108fa578063ee377d901461093f575f80fd5b8063ad3cb1cc11610143578063bc90afbb1161011e578063bc90afbb1461078c578063c6e1b9db146107ab578063cf6772ad146107ca578063d2526fef146107e9575f80fd5b8063ad3cb1cc1461071c578063b274a93514610759578063b97dd9e214610778575f80fd5b806381df17461461067957806391d148541461069857806392a2ebf3146106b7578063949d7c2a146106cb578063a217fddf146106ea578063a3df415f146106fd575f80fd5b80634ed7e4351161024557806360fea5dd116101ff578063747e7295116101da578063747e72951461061c57806374e8e5641461063157806380e460f0146106455780638129fc1c14610665575f80fd5b806360fea5dd146105c95780636542384f146105e85780636b588ac714610607575f80fd5b80634ed7e435146105235780634f1ef2861461054457806352d1902d1461055757806353cd9e3c1461056b5780635a912c831461058a5780635db916ab146105a9575f80fd5b80631faea1ed116102965780631faea1ed1461045d57806320e0e4451461047c578063248a9ca3146104a75780632f2ff15d146104c657806336568abe146104e55780634b47d95514610504575f80fd5b806301ffc9a7146102dd57806308c7050f146103115780630a0b81cc146103325780631c4e4e27146103d15780631cfa2516146104265780631dfcce8c14610449575b5f80fd5b3480156102e8575f80fd5b506102fc6102f736600461219e565b610a76565b60405190151581526020015b60405180910390f35b34801561031c575f80fd5b5061033061032b36600461225f565b610aac565b005b34801561033d575f80fd5b506103af61034c36600461228d565b60408051606080820183525f8083526020808401829052928401819052948552600482528285206001600160a01b039490941685529281529281902081519283018252805483526001810154938301939093526002909201549181019190915290565b6040805182518152602080840151908201529181015190820152606001610308565b3480156103dc575f80fd5b5061040b6103eb3660046122bb565b60066020525f908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610308565b348015610431575f80fd5b5061043b60015481565b604051908152602001610308565b348015610454575f80fd5b5061043b610bbc565b348015610468575f80fd5b5061043b6104773660046122d2565b610bcd565b348015610487575f80fd5b5061043b6104963660046122bb565b60036020525f908152604090205481565b3480156104b2575f80fd5b5061043b6104c13660046122bb565b610c58565b3480156104d1575f80fd5b506103306104e036600461228d565b610c78565b3480156104f0575f80fd5b506103306104ff36600461228d565b610c9a565b34801561050f575f80fd5b5061033061051e3660046123a6565b610cd2565b34801561052e575f80fd5b50610537610d3f565b6040516103089190612422565b610330610552366004612434565b610dab565b348015610562575f80fd5b5061043b610dc6565b348015610576575f80fd5b5061033061058536600461225f565b610de1565b348015610595575f80fd5b506103306105a43660046122bb565b610e9f565b3480156105b4575f80fd5b5061043b5f805160206128da83398151915281565b3480156105d4575f80fd5b5061043b6105e33660046124d9565b610f2d565b3480156105f3575f80fd5b5061043b6106023660046122bb565b610f3f565b348015610612575f80fd5b5061043b60025481565b348015610627575f80fd5b5061043b60095481565b34801561063c575f80fd5b5061043b610ff8565b348015610650575f80fd5b5061043b5f8051602061287a83398151915281565b348015610670575f80fd5b50610330611009565b348015610684575f80fd5b506103306106933660046124d9565b611113565b3480156106a3575f80fd5b506102fc6106b236600461228d565b611141565b3480156106c2575f80fd5b50610330611177565b3480156106d6575f80fd5b506103306106e53660046124d9565b61122c565b3480156106f5575f80fd5b5061043b5f81565b348015610708575f80fd5b506103306107173660046124f4565b6112ea565b348015610727575f80fd5b5061074c604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103089190612589565b348015610764575f80fd5b5061043b6107733660046124d9565b611482565b348015610783575f80fd5b5061043b611494565b348015610797575f80fd5b5061043b6107a636600461259b565b6114ff565b3480156107b6575f80fd5b5061043b6107c536600461228d565b611512565b3480156107d5575f80fd5b506103306107e43660046123a6565b61158b565b3480156107f4575f80fd5b506103306108033660046125c7565b6115d8565b348015610813575f80fd5b5061033061082236600461228d565b611603565b348015610832575f80fd5b506103306108413660046125e6565b61161f565b348015610851575f80fd5b506103af6108603660046122bb565b60408051606080820183525f8083526020808401829052928401819052600954815260088352838120948152938252928290208251938401835280548452600181015491840191909152600201549082015290565b3480156108c0575f80fd5b5061040b6108cf366004612680565b600860209081525f928352604080842090915290825290208054600182015460029092015490919083565b348015610905575f80fd5b5061040b61091436600461228d565b600460209081525f928352604080842090915290825290208054600182015460029092015490919083565b34801561094a575f80fd5b5061043b6116c4565b34801561095e575f80fd5b506103af61096d3660046126a0565b60408051606080820183525f808352602080840182905292840152825190810183529485528401929092529082015290565b3480156109aa575f80fd5b505f546109bd906001600160a01b031681565b6040516001600160a01b039091168152602001610308565b3480156109e0575f80fd5b506007546102fc9060ff1681565b3480156109f9575f80fd5b5061043b6116f4565b348015610a0d575f80fd5b5061043b610a1c36600461228d565b611724565b348015610a2c575f80fd5b50610330610a3b36600461225f565b6117df565b348015610a4b575f80fd5b5061043b610a5a366004612680565b600560209081525f928352604080842090915290825290205481565b5f6001600160e01b03198216637965db0b60e01b1480610aa657506301ffc9a760e01b6001600160e01b03198316145b92915050565b610aeb6040518060400160405280602081526020017f666f7263654c6174657374436f6d6d69746d656e742063616c6c65642062793a81525033611858565b610b025f8051602061287a83398151915233611141565b610b6c5760405162461bcd60e51b815260206004820152603060248201527f464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d4960448201526f544d454e545f41444d494e5f4f4e4c5960801b60648201526084015b60405180910390fd5b600160095f828254610b7e91906126dd565b90915550506009545f908152600860209081526040808320845184528252918290208351808255918401516001820155919092015160029182015555565b5f610bc8610602611494565b905090565b5f80546040516311b2104b60e31b8152306004820152602481018690526001600160a01b038581166044830152848116606483015290911690638d90825890608401602060405180830381865afa158015610c2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4e91906126f0565b90505b9392505050565b5f9081525f805160206128ba833981519152602052604090206001015490565b610c8182610c58565b610c8a8161189d565b610c9483836118a7565b50505050565b6001600160a01b0381163314610cc35760405163334bd91960e11b815260040160405180910390fd5b610ccd8282611948565b505050565b610cdc5f33611141565b610cf85760405162461bcd60e51b8152600401610b6390612707565b5f5b8151811015610d3b57610d335f8051602061287a833981519152838381518110610d2657610d26612749565b6020026020010151610c78565b600101610cfa565b5050565b5f54604051632924b73b60e01b81523060048201526060916001600160a01b031690632924b73b906024015f60405180830381865afa158015610d84573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bc8919081019061275d565b610db36119c1565b610dbc82611a67565b610d3b8282611a71565b5f610dcf611b2d565b505f8051602061289a83398151915290565b610df85f8051602061287a83398151915233611141565b610e6a5760405162461bcd60e51b815260206004820152603f60248201527f5345545f4c4153545f41434345505445445f434f4d4d49544d454e545f41545f60448201527f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59006064820152608401610b63565b6009545f9081526008602090815260408083208451845282529182902083518155908301516001820155910151600290910155565b610eb65f8051602061287a83398151915233611141565b610f285760405162461bcd60e51b815260206004820152603760248201527f5345545f4c4153545f41434345505445445f424c4f434b5f4845494748545f4960448201527f535f434f4d4d49544d454e545f41444d494e5f4f4e4c590000000000000000006064820152608401610b63565b600255565b5f610aa6610f39611494565b83611724565b5f8054604051636ae501ef60e11b815230600482015282916001600160a01b03169063d5ca03de906024015f60405180830381865afa158015610f84573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fab919081019061275d565b90505f805b8251811015610ff057610fdc85848381518110610fcf57610fcf612749565b6020026020010151611512565b610fe690836126dd565b9150600101610fb0565b509392505050565b5f600154600254610bc891906126dd565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f8115801561104d5750825b90505f826001600160401b031660011480156110685750303b155b905081158015611076575080155b156110945760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156110be57845460ff60401b1916600160401b1785555b6110c6611b76565b831561110c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f8051602061287a83398151915261112a8161189d565b610d3b5f805160206128da83398151915283610c78565b5f9182525f805160206128ba833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6111815f33611141565b6111db5760405162461bcd60e51b815260206004820152602560248201527f4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e6044820152645f4f4e4c5960d81b6064820152608401610b63565b5f8054604080516392a2ebf360e01b815290516001600160a01b03909216926392a2ebf39260048084019382900301818387803b15801561121a575f80fd5b505af1158015610c94573d5f803e3d5ffd5b61126b6040518060400160405280601f81526020017f6772616e74436f6d6d69746d656e7441646d696e2063616c6c65642062793a0081525033611858565b6112755f33611141565b6112915760405162461bcd60e51b8152600401610b6390612707565b6112a85f8051602061287a83398151915282610c78565b6112e76040518060400160405280602081526020017f436f6d6d69746d656e7441646d696e20726f6c65206772616e74656420746f3a81525082611858565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f8115801561132e5750825b90505f826001600160401b031660011480156113495750303b155b905081158015611357575080155b156113755760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561139f57845460ff60401b1916600160401b1785555b6113a7611b82565b5f80546001600160a01b0319166001600160a01b038c16908117909155600189905560028a9055604051631a6e609f60e31b815263d37304f8906113f1908a908a906004016127ec565b5f604051808303815f87803b158015611408575f80fd5b505af115801561141a573d5f803e3d5ffd5b505050506114273361122c565b61143033611113565b831561147657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b5f610aa661148e611494565b83611512565b5f8054604051634d3223a560e01b81523060048201526001600160a01b0390911690634d3223a5906024015b602060405180830381865afa1580156114db573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc891906126f0565b5f610c5161150b611494565b8484610bcd565b5f8054604051635cdf315560e01b8152306004820152602481018590526001600160a01b03848116604483015290911690635cdf315590606401602060405180830381865afa158015611567573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c5191906126f0565b5f8051602061287a8339815191526115a28161189d565b5f5b8251811015610ccd576115d05f805160206128da833981519152848381518110610d2657610d26612749565b6001016115a4565b5f8051602061287a8339815191526115ef8161189d565b506007805460ff1916911515919091179055565b61160c82610c58565b6116158161189d565b610c948383611948565b60075460ff168061164257506116425f805160206128da83398151915233611141565b61168e5760405162461bcd60e51b815260206004820152601d60248201527f554e415554484f52495a45445f424c4f434b5f434f4d4d49544d454e540000006044820152606401610b63565b5f5b8151811015610d3b576116bc338383815181106116af576116af612749565b6020026020010151611b94565b600101611690565b5f8054604051631868e3ff60e31b81523060048201526001600160a01b039091169063c3471ff8906024016114c0565b5f805460405163010913cb60e71b81523060048201526001600160a01b0390911690638489e580906024016114c0565b5f8054604051636ae501ef60e11b815230600482015282916001600160a01b03169063d5ca03de906024015f60405180830381865afa158015611769573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611790919081019061275d565b90505f805b82518110156117d6576117c2868483815181106117b4576117b4612749565b602002602001015187610bcd565b6117cc90836126dd565b9150600101611795565b50949350505050565b60075460ff168061180257506118025f805160206128da83398151915233611141565b61184e5760405162461bcd60e51b815260206004820152601d60248201527f554e415554484f52495a45445f424c4f434b5f434f4d4d49544d454e540000006044820152606401610b63565b6112e73382611b94565b610d3b828260405160240161186e929190612804565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b179052611d14565b6112e78133611d1d565b5f5f805160206128ba8339815191526118c08484611141565b61193f575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556118f53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610aa6565b5f915050610aa6565b5f5f805160206128ba8339815191526119618484611141565b1561193f575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610aa6565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a4757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a3b5f8051602061289a833981519152546001600160a01b031690565b6001600160a01b031614155b15611a655760405163703e46dd60e11b815260040160405180910390fd5b565b5f610d3b8161189d565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611acb575060408051601f3d908101601f19168201909252611ac8918101906126f0565b60015b611af357604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610b63565b5f8051602061289a8339815191528114611b2357604051632a87526960e21b815260048101829052602401610b63565b610ccd8383611d56565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a655760405163703e46dd60e11b815260040160405180910390fd5b611b7e611dab565b611a655b611b8a611dab565b6112e75f336118a7565b80515f9081526004602090815260408083206001600160a01b038616845290915290205415611bd657604051630ae09ad960e41b815260040160405180910390fd5b8051600154600254611be891906126dd565b1015611c0757604051630ae09ad960e41b815260040160405180910390fd5b80515f908152600360205260408120549003611c3657611c256116c4565b81515f908152600360205260409020555b80515f9081526004602090815260408083206001600160a01b0386168452825280832084518155918401516001830155830151600290910155611c7883610f2d565b82515f908152600560209081526040808320828701518452909152812080549293508392909190611caa9084906126dd565b9091555050604080830151602080850151835190815290810184905290917f4c9b7866113ce81c9ece48d2a0f4bb9d89d87f997a851cf3c448ee02f54559fd910160405180910390a25b611d0b6002546001611d0691906126dd565b611df4565b611cf457505050565b6112e781611f02565b611d278282611141565b610d3b5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610b63565b611d5f82611f22565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611da357610ccd8282611f85565b610d3b611ff7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16611a6557604051631afcd79f60e31b815260040160405180910390fd5b5f818152600360205260408120545b80611e0c611494565b1015611e1f57611e1a612016565b611e03565b5f6003611e2b83610f3f565b611e3690600261282d565b611e409190612844565b90505f611e4b610d3f565b90505f5b8151811015611ef7575f828281518110611e6b57611e6b612749565b6020908102919091018101515f8981526004835260408082206001600160a01b038416835284528082208151606081018352815480825260018301548288019081526002909301548285015284526005865282842091518452945290205490925085811115611eec57611edd82612055565b50600198975050505050505050565b505050600101611e4f565b505f95945050505050565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b806001600160a01b03163b5f03611f5757604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610b63565b5f8051602061289a83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b031684604051611fa19190612863565b5f60405180830381855af49150503d805f8114611fd9576040519150601f19603f3d011682016040523d82523d5f602084013e611fde565b606091505b5091509150611fee858383612119565b95945050505050565b3415611a655760405163b398979f60e01b815260040160405180910390fd5b5f805460408051632a21edc760e21b815290516001600160a01b039092169263a887b71c9260048084019382900301818387803b15801561121a575f80fd5b5f61205e611494565b82515f9081526003602052604090205490915081146120905760405163071cab8b60e21b815260040160405180910390fd5b6009545f908152600860209081526040808320855184528252918290208451808255858301516001830181905586850151600293840181905592829055845190815292830152917f5b0d1f14085ff88796df21c2944d34c115838925a7bee30850fcacaaf902a379910160405180910390a28061210b6116c4565b1115610d3b57610d3b612016565b60608261212e5761212982612175565b610c51565b815115801561214557506001600160a01b0384163b155b1561216e57604051639996b31560e01b81526001600160a01b0385166004820152602401610b63565b5080610c51565b8051156121855780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f602082840312156121ae575f80fd5b81356001600160e01b031981168114610c51575f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715612201576122016121c5565b604052919050565b5f60608284031215612219575f80fd5b604051606081016001600160401b038111828210171561223b5761223b6121c5565b60409081528335825260208085013590830152928301359281019290925250919050565b5f6060828403121561226f575f80fd5b610c518383612209565b6001600160a01b03811681146112e7575f80fd5b5f806040838503121561229e575f80fd5b8235915060208301356122b081612279565b809150509250929050565b5f602082840312156122cb575f80fd5b5035919050565b5f805f606084860312156122e4575f80fd5b8335925060208401356122f681612279565b9150604084013561230681612279565b809150509250925092565b5f6001600160401b03821115612329576123296121c5565b5060051b60200190565b5f82601f830112612342575f80fd5b813561235561235082612311565b6121d9565b8082825260208201915060208360051b860101925085831115612376575f80fd5b602085015b8381101561239c57803561238e81612279565b83526020928301920161237b565b5095945050505050565b5f602082840312156123b6575f80fd5b81356001600160401b038111156123cb575f80fd5b6123d784828501612333565b949350505050565b5f8151808452602084019350602083015f5b828110156124185781516001600160a01b03168652602095860195909101906001016123f1565b5093949350505050565b602081525f610c5160208301846123df565b5f8060408385031215612445575f80fd5b823561245081612279565b915060208301356001600160401b0381111561246a575f80fd5b8301601f8101851361247a575f80fd5b80356001600160401b03811115612493576124936121c5565b6124a6601f8201601f19166020016121d9565b8181528660208385010111156124ba575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f602082840312156124e9575f80fd5b8135610c5181612279565b5f805f805f60a08688031215612508575f80fd5b853561251381612279565b945060208601359350604086013592506060860135915060808601356001600160401b03811115612542575f80fd5b61254e88828901612333565b9150509295509295909350565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c51602083018461255b565b5f80604083850312156125ac575f80fd5b82356125b781612279565b915060208301356122b081612279565b5f602082840312156125d7575f80fd5b81358015158114610c51575f80fd5b5f602082840312156125f6575f80fd5b81356001600160401b0381111561260b575f80fd5b8201601f8101841361261b575f80fd5b803561262961235082612311565b8082825260208201915060206060840285010192508683111561264a575f80fd5b6020840193505b82841015612676576126638785612209565b8252602082019150606084019350612651565b9695505050505050565b5f8060408385031215612691575f80fd5b50508035926020909101359150565b5f805f606084860312156126b2575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610aa657610aa66126c9565b5f60208284031215612700575f80fd5b5051919050565b60208082526022908201527f4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e6040820152614c5960f01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561276d575f80fd5b81516001600160401b03811115612782575f80fd5b8201601f81018413612792575f80fd5b80516127a061235082612311565b8082825260208201915060208360051b8501019250868311156127c1575f80fd5b6020840193505b828410156126765783516127db81612279565b8252602093840193909101906127c8565b828152604060208201525f610c4e60408301846123df565b604081525f612816604083018561255b565b905060018060a01b03831660208301529392505050565b8082028115828204841417610aa657610aa66126c9565b5f8261285e57634e487b7160e01b5f52601260045260245ffd5b500490565b5f82518060208501845e5f92019182525091905056fedb2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18a2646970667358221220f7bd4675c906140cf1d4d5a8d5ee54afb9ecd0d0a418a71c12c80642c9707c7164736f6c634300081a0033","sourceMap":"577:14714:105:-:0;;;1171:4:26;1128:48;;577:14714:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106102d9575f3560e01c806381df174611610189578063d547741f116100d8578063ee96da0511610092578063efe97d051161006d578063efe97d05146109ee578063f34d002a14610a02578063f89fe60b14610a21578063fc2788ad14610a40575f80fd5b8063ee96da0514610953578063ee99205c1461099f578063ef9ae15c146109d5575f80fd5b8063d547741f14610808578063e1b2b22214610827578063e1ffa44c14610846578063e8124097146108b5578063e90d4c06146108fa578063ee377d901461093f575f80fd5b8063ad3cb1cc11610143578063bc90afbb1161011e578063bc90afbb1461078c578063c6e1b9db146107ab578063cf6772ad146107ca578063d2526fef146107e9575f80fd5b8063ad3cb1cc1461071c578063b274a93514610759578063b97dd9e214610778575f80fd5b806381df17461461067957806391d148541461069857806392a2ebf3146106b7578063949d7c2a146106cb578063a217fddf146106ea578063a3df415f146106fd575f80fd5b80634ed7e4351161024557806360fea5dd116101ff578063747e7295116101da578063747e72951461061c57806374e8e5641461063157806380e460f0146106455780638129fc1c14610665575f80fd5b806360fea5dd146105c95780636542384f146105e85780636b588ac714610607575f80fd5b80634ed7e435146105235780634f1ef2861461054457806352d1902d1461055757806353cd9e3c1461056b5780635a912c831461058a5780635db916ab146105a9575f80fd5b80631faea1ed116102965780631faea1ed1461045d57806320e0e4451461047c578063248a9ca3146104a75780632f2ff15d146104c657806336568abe146104e55780634b47d95514610504575f80fd5b806301ffc9a7146102dd57806308c7050f146103115780630a0b81cc146103325780631c4e4e27146103d15780631cfa2516146104265780631dfcce8c14610449575b5f80fd5b3480156102e8575f80fd5b506102fc6102f736600461219e565b610a76565b60405190151581526020015b60405180910390f35b34801561031c575f80fd5b5061033061032b36600461225f565b610aac565b005b34801561033d575f80fd5b506103af61034c36600461228d565b60408051606080820183525f8083526020808401829052928401819052948552600482528285206001600160a01b039490941685529281529281902081519283018252805483526001810154938301939093526002909201549181019190915290565b6040805182518152602080840151908201529181015190820152606001610308565b3480156103dc575f80fd5b5061040b6103eb3660046122bb565b60066020525f908152604090208054600182015460029092015490919083565b60408051938452602084019290925290820152606001610308565b348015610431575f80fd5b5061043b60015481565b604051908152602001610308565b348015610454575f80fd5b5061043b610bbc565b348015610468575f80fd5b5061043b6104773660046122d2565b610bcd565b348015610487575f80fd5b5061043b6104963660046122bb565b60036020525f908152604090205481565b3480156104b2575f80fd5b5061043b6104c13660046122bb565b610c58565b3480156104d1575f80fd5b506103306104e036600461228d565b610c78565b3480156104f0575f80fd5b506103306104ff36600461228d565b610c9a565b34801561050f575f80fd5b5061033061051e3660046123a6565b610cd2565b34801561052e575f80fd5b50610537610d3f565b6040516103089190612422565b610330610552366004612434565b610dab565b348015610562575f80fd5b5061043b610dc6565b348015610576575f80fd5b5061033061058536600461225f565b610de1565b348015610595575f80fd5b506103306105a43660046122bb565b610e9f565b3480156105b4575f80fd5b5061043b5f805160206128da83398151915281565b3480156105d4575f80fd5b5061043b6105e33660046124d9565b610f2d565b3480156105f3575f80fd5b5061043b6106023660046122bb565b610f3f565b348015610612575f80fd5b5061043b60025481565b348015610627575f80fd5b5061043b60095481565b34801561063c575f80fd5b5061043b610ff8565b348015610650575f80fd5b5061043b5f8051602061287a83398151915281565b348015610670575f80fd5b50610330611009565b348015610684575f80fd5b506103306106933660046124d9565b611113565b3480156106a3575f80fd5b506102fc6106b236600461228d565b611141565b3480156106c2575f80fd5b50610330611177565b3480156106d6575f80fd5b506103306106e53660046124d9565b61122c565b3480156106f5575f80fd5b5061043b5f81565b348015610708575f80fd5b506103306107173660046124f4565b6112ea565b348015610727575f80fd5b5061074c604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516103089190612589565b348015610764575f80fd5b5061043b6107733660046124d9565b611482565b348015610783575f80fd5b5061043b611494565b348015610797575f80fd5b5061043b6107a636600461259b565b6114ff565b3480156107b6575f80fd5b5061043b6107c536600461228d565b611512565b3480156107d5575f80fd5b506103306107e43660046123a6565b61158b565b3480156107f4575f80fd5b506103306108033660046125c7565b6115d8565b348015610813575f80fd5b5061033061082236600461228d565b611603565b348015610832575f80fd5b506103306108413660046125e6565b61161f565b348015610851575f80fd5b506103af6108603660046122bb565b60408051606080820183525f8083526020808401829052928401819052600954815260088352838120948152938252928290208251938401835280548452600181015491840191909152600201549082015290565b3480156108c0575f80fd5b5061040b6108cf366004612680565b600860209081525f928352604080842090915290825290208054600182015460029092015490919083565b348015610905575f80fd5b5061040b61091436600461228d565b600460209081525f928352604080842090915290825290208054600182015460029092015490919083565b34801561094a575f80fd5b5061043b6116c4565b34801561095e575f80fd5b506103af61096d3660046126a0565b60408051606080820183525f808352602080840182905292840152825190810183529485528401929092529082015290565b3480156109aa575f80fd5b505f546109bd906001600160a01b031681565b6040516001600160a01b039091168152602001610308565b3480156109e0575f80fd5b506007546102fc9060ff1681565b3480156109f9575f80fd5b5061043b6116f4565b348015610a0d575f80fd5b5061043b610a1c36600461228d565b611724565b348015610a2c575f80fd5b50610330610a3b36600461225f565b6117df565b348015610a4b575f80fd5b5061043b610a5a366004612680565b600560209081525f928352604080842090915290825290205481565b5f6001600160e01b03198216637965db0b60e01b1480610aa657506301ffc9a760e01b6001600160e01b03198316145b92915050565b610aeb6040518060400160405280602081526020017f666f7263654c6174657374436f6d6d69746d656e742063616c6c65642062793a81525033611858565b610b025f8051602061287a83398151915233611141565b610b6c5760405162461bcd60e51b815260206004820152603060248201527f464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d4960448201526f544d454e545f41444d494e5f4f4e4c5960801b60648201526084015b60405180910390fd5b600160095f828254610b7e91906126dd565b90915550506009545f908152600860209081526040808320845184528252918290208351808255918401516001820155919092015160029182015555565b5f610bc8610602611494565b905090565b5f80546040516311b2104b60e31b8152306004820152602481018690526001600160a01b038581166044830152848116606483015290911690638d90825890608401602060405180830381865afa158015610c2a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c4e91906126f0565b90505b9392505050565b5f9081525f805160206128ba833981519152602052604090206001015490565b610c8182610c58565b610c8a8161189d565b610c9483836118a7565b50505050565b6001600160a01b0381163314610cc35760405163334bd91960e11b815260040160405180910390fd5b610ccd8282611948565b505050565b610cdc5f33611141565b610cf85760405162461bcd60e51b8152600401610b6390612707565b5f5b8151811015610d3b57610d335f8051602061287a833981519152838381518110610d2657610d26612749565b6020026020010151610c78565b600101610cfa565b5050565b5f54604051632924b73b60e01b81523060048201526060916001600160a01b031690632924b73b906024015f60405180830381865afa158015610d84573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610bc8919081019061275d565b610db36119c1565b610dbc82611a67565b610d3b8282611a71565b5f610dcf611b2d565b505f8051602061289a83398151915290565b610df85f8051602061287a83398151915233611141565b610e6a5760405162461bcd60e51b815260206004820152603f60248201527f5345545f4c4153545f41434345505445445f434f4d4d49544d454e545f41545f60448201527f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59006064820152608401610b63565b6009545f9081526008602090815260408083208451845282529182902083518155908301516001820155910151600290910155565b610eb65f8051602061287a83398151915233611141565b610f285760405162461bcd60e51b815260206004820152603760248201527f5345545f4c4153545f41434345505445445f424c4f434b5f4845494748545f4960448201527f535f434f4d4d49544d454e545f41444d494e5f4f4e4c590000000000000000006064820152608401610b63565b600255565b5f610aa6610f39611494565b83611724565b5f8054604051636ae501ef60e11b815230600482015282916001600160a01b03169063d5ca03de906024015f60405180830381865afa158015610f84573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052610fab919081019061275d565b90505f805b8251811015610ff057610fdc85848381518110610fcf57610fcf612749565b6020026020010151611512565b610fe690836126dd565b9150600101610fb0565b509392505050565b5f600154600254610bc891906126dd565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f8115801561104d5750825b90505f826001600160401b031660011480156110685750303b155b905081158015611076575080155b156110945760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156110be57845460ff60401b1916600160401b1785555b6110c6611b76565b831561110c57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f8051602061287a83398151915261112a8161189d565b610d3b5f805160206128da83398151915283610c78565b5f9182525f805160206128ba833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b6111815f33611141565b6111db5760405162461bcd60e51b815260206004820152602560248201527f4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e6044820152645f4f4e4c5960d81b6064820152608401610b63565b5f8054604080516392a2ebf360e01b815290516001600160a01b03909216926392a2ebf39260048084019382900301818387803b15801561121a575f80fd5b505af1158015610c94573d5f803e3d5ffd5b61126b6040518060400160405280601f81526020017f6772616e74436f6d6d69746d656e7441646d696e2063616c6c65642062793a0081525033611858565b6112755f33611141565b6112915760405162461bcd60e51b8152600401610b6390612707565b6112a85f8051602061287a83398151915282610c78565b6112e76040518060400160405280602081526020017f436f6d6d69746d656e7441646d696e20726f6c65206772616e74656420746f3a81525082611858565b50565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f8115801561132e5750825b90505f826001600160401b031660011480156113495750303b155b905081158015611357575080155b156113755760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561139f57845460ff60401b1916600160401b1785555b6113a7611b82565b5f80546001600160a01b0319166001600160a01b038c16908117909155600189905560028a9055604051631a6e609f60e31b815263d37304f8906113f1908a908a906004016127ec565b5f604051808303815f87803b158015611408575f80fd5b505af115801561141a573d5f803e3d5ffd5b505050506114273361122c565b61143033611113565b831561147657845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050505050565b5f610aa661148e611494565b83611512565b5f8054604051634d3223a560e01b81523060048201526001600160a01b0390911690634d3223a5906024015b602060405180830381865afa1580156114db573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610bc891906126f0565b5f610c5161150b611494565b8484610bcd565b5f8054604051635cdf315560e01b8152306004820152602481018590526001600160a01b03848116604483015290911690635cdf315590606401602060405180830381865afa158015611567573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610c5191906126f0565b5f8051602061287a8339815191526115a28161189d565b5f5b8251811015610ccd576115d05f805160206128da833981519152848381518110610d2657610d26612749565b6001016115a4565b5f8051602061287a8339815191526115ef8161189d565b506007805460ff1916911515919091179055565b61160c82610c58565b6116158161189d565b610c948383611948565b60075460ff168061164257506116425f805160206128da83398151915233611141565b61168e5760405162461bcd60e51b815260206004820152601d60248201527f554e415554484f52495a45445f424c4f434b5f434f4d4d49544d454e540000006044820152606401610b63565b5f5b8151811015610d3b576116bc338383815181106116af576116af612749565b6020026020010151611b94565b600101611690565b5f8054604051631868e3ff60e31b81523060048201526001600160a01b039091169063c3471ff8906024016114c0565b5f805460405163010913cb60e71b81523060048201526001600160a01b0390911690638489e580906024016114c0565b5f8054604051636ae501ef60e11b815230600482015282916001600160a01b03169063d5ca03de906024015f60405180830381865afa158015611769573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f19168201604052611790919081019061275d565b90505f805b82518110156117d6576117c2868483815181106117b4576117b4612749565b602002602001015187610bcd565b6117cc90836126dd565b9150600101611795565b50949350505050565b60075460ff168061180257506118025f805160206128da83398151915233611141565b61184e5760405162461bcd60e51b815260206004820152601d60248201527f554e415554484f52495a45445f424c4f434b5f434f4d4d49544d454e540000006044820152606401610b63565b6112e73382611b94565b610d3b828260405160240161186e929190612804565b60408051601f198184030181529190526020810180516001600160e01b031663319af33360e01b179052611d14565b6112e78133611d1d565b5f5f805160206128ba8339815191526118c08484611141565b61193f575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556118f53390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610aa6565b5f915050610aa6565b5f5f805160206128ba8339815191526119618484611141565b1561193f575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610aa6565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a4757507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a3b5f8051602061289a833981519152546001600160a01b031690565b6001600160a01b031614155b15611a655760405163703e46dd60e11b815260040160405180910390fd5b565b5f610d3b8161189d565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611acb575060408051601f3d908101601f19168201909252611ac8918101906126f0565b60015b611af357604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610b63565b5f8051602061289a8339815191528114611b2357604051632a87526960e21b815260048101829052602401610b63565b610ccd8383611d56565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614611a655760405163703e46dd60e11b815260040160405180910390fd5b611b7e611dab565b611a655b611b8a611dab565b6112e75f336118a7565b80515f9081526004602090815260408083206001600160a01b038616845290915290205415611bd657604051630ae09ad960e41b815260040160405180910390fd5b8051600154600254611be891906126dd565b1015611c0757604051630ae09ad960e41b815260040160405180910390fd5b80515f908152600360205260408120549003611c3657611c256116c4565b81515f908152600360205260409020555b80515f9081526004602090815260408083206001600160a01b0386168452825280832084518155918401516001830155830151600290910155611c7883610f2d565b82515f908152600560209081526040808320828701518452909152812080549293508392909190611caa9084906126dd565b9091555050604080830151602080850151835190815290810184905290917f4c9b7866113ce81c9ece48d2a0f4bb9d89d87f997a851cf3c448ee02f54559fd910160405180910390a25b611d0b6002546001611d0691906126dd565b611df4565b611cf457505050565b6112e781611f02565b611d278282611141565b610d3b5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610b63565b611d5f82611f22565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611da357610ccd8282611f85565b610d3b611ff7565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16611a6557604051631afcd79f60e31b815260040160405180910390fd5b5f818152600360205260408120545b80611e0c611494565b1015611e1f57611e1a612016565b611e03565b5f6003611e2b83610f3f565b611e3690600261282d565b611e409190612844565b90505f611e4b610d3f565b90505f5b8151811015611ef7575f828281518110611e6b57611e6b612749565b6020908102919091018101515f8981526004835260408082206001600160a01b038416835284528082208151606081018352815480825260018301548288019081526002909301548285015284526005865282842091518452945290205490925085811115611eec57611edd82612055565b50600198975050505050505050565b505050600101611e4f565b505f95945050505050565b80516a636f6e736f6c652e6c6f67602083015f808483855afa5050505050565b806001600160a01b03163b5f03611f5757604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610b63565b5f8051602061289a83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b031684604051611fa19190612863565b5f60405180830381855af49150503d805f8114611fd9576040519150601f19603f3d011682016040523d82523d5f602084013e611fde565b606091505b5091509150611fee858383612119565b95945050505050565b3415611a655760405163b398979f60e01b815260040160405180910390fd5b5f805460408051632a21edc760e21b815290516001600160a01b039092169263a887b71c9260048084019382900301818387803b15801561121a575f80fd5b5f61205e611494565b82515f9081526003602052604090205490915081146120905760405163071cab8b60e21b815260040160405180910390fd5b6009545f908152600860209081526040808320855184528252918290208451808255858301516001830181905586850151600293840181905592829055845190815292830152917f5b0d1f14085ff88796df21c2944d34c115838925a7bee30850fcacaaf902a379910160405180910390a28061210b6116c4565b1115610d3b57610d3b612016565b60608261212e5761212982612175565b610c51565b815115801561214557506001600160a01b0384163b155b1561216e57604051639996b31560e01b81526001600160a01b0385166004820152602401610b63565b5080610c51565b8051156121855780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f602082840312156121ae575f80fd5b81356001600160e01b031981168114610c51575f80fd5b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715612201576122016121c5565b604052919050565b5f60608284031215612219575f80fd5b604051606081016001600160401b038111828210171561223b5761223b6121c5565b60409081528335825260208085013590830152928301359281019290925250919050565b5f6060828403121561226f575f80fd5b610c518383612209565b6001600160a01b03811681146112e7575f80fd5b5f806040838503121561229e575f80fd5b8235915060208301356122b081612279565b809150509250929050565b5f602082840312156122cb575f80fd5b5035919050565b5f805f606084860312156122e4575f80fd5b8335925060208401356122f681612279565b9150604084013561230681612279565b809150509250925092565b5f6001600160401b03821115612329576123296121c5565b5060051b60200190565b5f82601f830112612342575f80fd5b813561235561235082612311565b6121d9565b8082825260208201915060208360051b860101925085831115612376575f80fd5b602085015b8381101561239c57803561238e81612279565b83526020928301920161237b565b5095945050505050565b5f602082840312156123b6575f80fd5b81356001600160401b038111156123cb575f80fd5b6123d784828501612333565b949350505050565b5f8151808452602084019350602083015f5b828110156124185781516001600160a01b03168652602095860195909101906001016123f1565b5093949350505050565b602081525f610c5160208301846123df565b5f8060408385031215612445575f80fd5b823561245081612279565b915060208301356001600160401b0381111561246a575f80fd5b8301601f8101851361247a575f80fd5b80356001600160401b03811115612493576124936121c5565b6124a6601f8201601f19166020016121d9565b8181528660208385010111156124ba575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f602082840312156124e9575f80fd5b8135610c5181612279565b5f805f805f60a08688031215612508575f80fd5b853561251381612279565b945060208601359350604086013592506060860135915060808601356001600160401b03811115612542575f80fd5b61254e88828901612333565b9150509295509295909350565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f610c51602083018461255b565b5f80604083850312156125ac575f80fd5b82356125b781612279565b915060208301356122b081612279565b5f602082840312156125d7575f80fd5b81358015158114610c51575f80fd5b5f602082840312156125f6575f80fd5b81356001600160401b0381111561260b575f80fd5b8201601f8101841361261b575f80fd5b803561262961235082612311565b8082825260208201915060206060840285010192508683111561264a575f80fd5b6020840193505b82841015612676576126638785612209565b8252602082019150606084019350612651565b9695505050505050565b5f8060408385031215612691575f80fd5b50508035926020909101359150565b5f805f606084860312156126b2575f80fd5b505081359360208301359350604090920135919050565b634e487b7160e01b5f52601160045260245ffd5b80820180821115610aa657610aa66126c9565b5f60208284031215612700575f80fd5b5051919050565b60208082526022908201527f4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e6040820152614c5960f01b606082015260800190565b634e487b7160e01b5f52603260045260245ffd5b5f6020828403121561276d575f80fd5b81516001600160401b03811115612782575f80fd5b8201601f81018413612792575f80fd5b80516127a061235082612311565b8082825260208201915060208360051b8501019250868311156127c1575f80fd5b6020840193505b828410156126765783516127db81612279565b8252602093840193909101906127c8565b828152604060208201525f610c4e60408301846123df565b604081525f612816604083018561255b565b905060018060a01b03831660208301529392505050565b8082028115828204841417610aa657610aa66126c9565b5f8261285e57634e487b7160e01b5f52601260045260245ffd5b500490565b5f82518060208501845e5f92019182525091905056fedb2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18a2646970667358221220f7bd4675c906140cf1d4d5a8d5ee54afb9ecd0d0a418a71c12c80642c9707c7164736f6c634300081a0033","sourceMap":"577:14714:105:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:24;;;;;;;;;;-1:-1:-1;3443:202:24;;;;;:::i;:::-;;:::i;:::-;;;470:14:138;;463:22;445:41;;433:2;418:18;3443:202:24;;;;;;;;7166:586:105;;;;;;;;;;-1:-1:-1;7166:586:105;;;;;:::i;:::-;;:::i;:::-;;6049:199;;;;;;;;;;-1:-1:-1;6049:199:105;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;6212:19:105;;;:11;:19;;;;;-1:-1:-1;;;;;6212:29:105;;;;;;;;;;;;;6205:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6049:199;;;;;2625:13:138;;2607:32;;2695:4;2683:17;;;2677:24;2655:20;;;2648:54;2746:17;;;2740:24;2718:20;;;2711:54;2595:2;2580:18;6049:199:105;2393:378:138;2060:69:106;;;;;;;;;;-1:-1:-1;2060:69:106;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3209:25:138;;;3265:2;3250:18;;3243:34;;;;3293:18;;;3286:34;3197:2;3182:18;2060:69:106;3007:319:138;1080:36:106;;;;;;;;;;;;;;;;;;;3477:25:138;;;3465:2;3450:18;1080:36:106;3331:177:138;5867:176:105;;;;;;;;;;;;;:::i;3280:325::-;;;;;;;;;;-1:-1:-1;3280:325:105;;;;;:::i;:::-;;:::i;1563:80:106:-;;;;;;;;;;-1:-1:-1;1563:80:106;;;;;:::i;:::-;;;;;;;;;;;;;;4759:191:24;;;;;;;;;;-1:-1:-1;4759:191:24;;;;;:::i;:::-;;:::i;5246:136::-;;;;;;;;;;-1:-1:-1;5246:136:24;;;;;:::i;:::-;;:::i;6348:245::-;;;;;;;;;;-1:-1:-1;6348:245:24;;;;;:::i;:::-;;:::i;1885:326:105:-;;;;;;;;;;-1:-1:-1;1885:326:105;;;;;:::i;:::-;;:::i;7947:138::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;4158:214:26:-;;;;;;:::i;:::-;;:::i;3705:134::-;;;;;;;;;;;;;:::i;6313:355:105:-;;;;;;;;;;-1:-1:-1;6313:355:105;;;;;:::i;:::-;;:::i;6719:257::-;;;;;;;;;;-1:-1:-1;6719:257:105;;;;;:::i;:::-;;:::i;819:72::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;819:72:105;;4406:174;;;;;;;;;;-1:-1:-1;4406:174:105;;;;;:::i;:::-;;:::i;5158:471::-;;;;;;;;;;-1:-1:-1;5158:471:105;;;;;:::i;:::-;;:::i;1252:38:106:-;;;;;;;;;;;;;;;;2366:36;;;;;;;;;;;;;;;;2521:139:105;;;;;;;;;;;;;:::i;694:72::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;694:72:105;;528:89:108;;;;;;;;;;;;;:::i;12187:136:105:-;;;;;;;;;;-1:-1:-1;12187:136:105;;;;;:::i;:::-;;:::i;3732:207:24:-;;;;;;;;;;-1:-1:-1;3732:207:24;;;;;:::i;:::-;;:::i;4923:229:105:-;;;;;;;;;;;;;:::i;1507:372::-;;;;;;;;;;-1:-1:-1;1507:372:105;;;;;:::i;:::-;;:::i;2317:49:24:-;;;;;;;;;;-1:-1:-1;2317:49:24;2362:4;2317:49;;898:603:105;;;;;;;;;;-1:-1:-1;898:603:105;;;;;:::i;:::-;;:::i;1819:58:26:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:26;;;;;;;;;;;;:::i;5685:176:105:-;;;;;;;;;;-1:-1:-1;5685:176:105;;;;;:::i;:::-;;:::i;2933:127::-;;;;;;;;;;;;;:::i;4202:198::-;;;;;;;;;;-1:-1:-1;4202:198:105;;;;;:::i;:::-;;:::i;4632:285::-;;;;;;;;;;-1:-1:-1;4632:285:105;;;;;:::i;:::-;;:::i;12329:227::-;;;;;;;;;;-1:-1:-1;12329:227:105;;;;;:::i;:::-;;:::i;12562:132::-;;;;;;;;;;-1:-1:-1;12562:132:105;;;;;:::i;:::-;;:::i;5662:138:24:-;;;;;;;;;;-1:-1:-1;5662:138:24;;;;;:::i;:::-;;:::i;13011:395:105:-;;;;;;;;;;-1:-1:-1;13011:395:105;;;;;:::i;:::-;;:::i;7758:183::-;;;;;;;;;;-1:-1:-1;7758:183:105;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;7904:21:105;;7880:46;;:23;:46;;;;;:54;;;;;;;;;;7873:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7758:183;2262:98:106;;;;;;;;;;-1:-1:-1;2262:98:106;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1720:95;;;;;;;;;;-1:-1:-1;1720:95:106;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2724:135:105;;;;;;;;;;;;;:::i;2245:227::-;;;;;;;;;;-1:-1:-1;2245:227:105;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;2421:44:105;;;;;;;;;;;;;;;;;;;;;2245:227;293:39:106;;;;;;;;;;-1:-1:-1;293:39:106;;;;-1:-1:-1;;;;;293:39:106;;;;;;-1:-1:-1;;;;;12013:32:138;;;11995:51;;11983:2;11968:18;293:39:106;11823:229:138;2177:34:106;;;;;;;;;;-1:-1:-1;2177:34:106;;;;;;;;3093:121:105;;;;;;;;;;;;;:::i;3637:495::-;;;;;;;;;;-1:-1:-1;3637:495:105;;;;;:::i;:::-;;:::i;12700:305::-;;;;;;;;;;-1:-1:-1;12700:305:105;;;;;:::i;:::-;;:::i;1904:101:106:-;;;;;;;;;;-1:-1:-1;1904:101:106;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:24;3528:4;-1:-1:-1;;;;;;3551:47:24;;-1:-1:-1;;;3551:47:24;;:87;;-1:-1:-1;;;;;;;;;;1133:40:32;;;3602:36:24;3544:94;3443:202;-1:-1:-1;;3443:202:24:o;7166:586:105:-;7254:59;;;;;;;;;;;;;;;;;;7302:10;7254:11;:59::i;:::-;7344:37;-1:-1:-1;;;;;;;;;;;7370:10:105;7344:7;:37::i;:::-;7323:132;;;;-1:-1:-1;;;7323:132:105;;12610:2:138;7323:132:105;;;12592:21:138;12649:2;12629:18;;;12622:30;12688:34;12668:18;;;12661:62;-1:-1:-1;;;12739:18:138;;;12732:46;12795:19;;7323:132:105;;;;;;;;;7587:1;7562:21;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;7622:21:105;;7598:46;;;;:23;:46;;;;;;;;7645:22;;7598:70;;;;;;;;:88;;;;;;;;;;;;;;;;;;;;;;;7696:48;7166:586::o;5867:176::-;5959:7;5989:47;6018:17;:15;:17::i;5989:47::-;5982:54;;5867:176;:::o;3280:325::-;3408:7;3446:15;;:152;;-1:-1:-1;;;3446:152:105;;3503:4;3446:152;;;13318:51:138;13385:18;;;13378:34;;;-1:-1:-1;;;;;13448:32:138;;;13428:18;;;13421:60;13517:32;;;13497:18;;;13490:60;3446:15:105;;;;:31;;13290:19:138;;3446:152:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3427:171;;3280:325;;;;;;:::o;4759:191:24:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:24;;;;;:24;;;;4759:191::o;5246:136::-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;6348:245::-;-1:-1:-1;;;;;6441:34:24;;966:10:29;6441:34:24;6437:102;;6498:30;;-1:-1:-1;;;6498:30:24;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;1885:326:105:-;1985:39;2362:4:24;2013:10:105;1985:7;:39::i;:::-;1964:120;;;;-1:-1:-1;;;1964:120:105;;;;;;;:::i;:::-;2099:9;2094:111;2118:8;:15;2114:1;:19;2094:111;;;2154:40;-1:-1:-1;;;;;;;;;;;2182:8:105;2191:1;2182:11;;;;;;;;:::i;:::-;;;;;;;2154:9;:40::i;:::-;2135:3;;2094:111;;;;1885:326;:::o;7947:138::-;8027:15;;:51;;-1:-1:-1;;;8027:51:105;;8072:4;8027:51;;;11995::138;7992:16:105;;-1:-1:-1;;;;;8027:15:105;;:36;;11968:18:138;;8027:51:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8027:51:105;;;;;;;;;;;;:::i;4158:214:26:-;2653:13;:11;:13::i;:::-;4273:36:::1;4291:17;4273;:36::i;:::-;4319:46;4341:17;4360:4;4319:21;:46::i;3705:134::-:0;3774:7;2924:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3705:134:26;:::o;6313:355:105:-;6435:37;-1:-1:-1;;;;;;;;;;;6461:10:105;6435:7;:37::i;:::-;6414:147;;;;-1:-1:-1;;;6414:147:105;;15651:2:138;6414:147:105;;;15633:21:138;15690:2;15670:18;;;15663:30;15729:34;15709:18;;;15702:62;15800:33;15780:18;;;15773:61;15851:19;;6414:147:105;15449:427:138;6414:147:105;6595:21;;6571:46;;;;:23;:46;;;;;;;;6618:22;;6571:70;;;;;;;;:88;;;;;;;;;;;;;;;;;;;;6313:355::o;6719:257::-;6809:37;-1:-1:-1;;;;;;;;;;;6835:10:105;6809:7;:37::i;:::-;6788:139;;;;-1:-1:-1;;;6788:139:105;;16083:2:138;6788:139:105;;;16065:21:138;16122:2;16102:18;;;16095:30;16161:34;16141:18;;;16134:62;16232:25;16212:18;;;16205:53;16275:19;;6788:139:105;15881:419:138;6788:139:105;6937:23;:32;6719:257::o;4406:174::-;4496:7;4522:51;4545:17;:15;:17::i;:::-;4564:8;4522:22;:51::i;5158:471::-;5246:7;5295:15;;:74;;-1:-1:-1;;;5295:74:105;;5354:4;5295:74;;;11995:51:138;5246:7:105;;-1:-1:-1;;;;;5295:15:105;;:37;;11968:18:138;;5295:74:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5295:74:105;;;;;;;;;;;;:::i;:::-;5265:104;;5379:18;5416:9;5411:185;5435:10;:17;5431:1;:21;5411:185;;;5542:43;5564:5;5571:10;5582:1;5571:13;;;;;;;;:::i;:::-;;;;;;;5542:21;:43::i;:::-;5528:57;;;;:::i;:::-;;-1:-1:-1;5454:3:105;;5411:185;;;-1:-1:-1;5612:10:105;5158:471;-1:-1:-1;;;5158:471:105:o;2521:139::-;2580:7;2632:21;;2606:23;;:47;;;;:::i;528:89:108:-;8870:21:25;4302:15;;-1:-1:-1;;;4302:15:25;;;;4301:16;;-1:-1:-1;;;;;4348:14:25;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:25;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:25;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:25;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:25;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:25;-1:-1:-1;;;5013:22:25;;;4979:67;587:23:108::1;:21;:23::i;:::-;5070:14:25::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:25;;;5142:14;;-1:-1:-1;16458:50:138;;5142:14:25;;16446:2:138;16431:18;5142:14:25;;;;;;;5066:101;4092:1081;;;;;528:89:108:o;12187:136:105:-;-1:-1:-1;;;;;;;;;;;3191:16:24;3202:4;3191:10;:16::i;:::-;12279:37:105::1;-1:-1:-1::0;;;;;;;;;;;12307:8:105::1;12279:9;:37::i;3732:207:24:-:0;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:24;;;;;;;;-1:-1:-1;;;;;3901:31:24;;;;;;;;;;;;;;;3732:207::o;4923:229:105:-;4994:39;2362:4:24;5022:10:105;4994:7;:39::i;:::-;4973:123;;;;-1:-1:-1;;;4973:123:105;;16721:2:138;4973:123:105;;;16703:21:138;16760:2;16740:18;;;16733:30;16799:34;16779:18;;;16772:62;-1:-1:-1;;;16850:18:138;;;16843:35;16895:19;;4973:123:105;16519:401:138;4973:123:105;5106:15;;;:39;;;-1:-1:-1;;;5106:39:105;;;;-1:-1:-1;;;;;5106:15:105;;;;:37;;:39;;;;;;;;;;:15;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;1507:372;1571:58;;;;;;;;;;;;;;;;;;1618:10;1571:11;:58::i;:::-;1660:39;2362:4:24;1688:10:105;1660:7;:39::i;:::-;1639:120;;;;-1:-1:-1;;;1639:120:105;;;;;;;:::i;:::-;1769:36;-1:-1:-1;;;;;;;;;;;1797:7:105;1769:9;:36::i;:::-;1815:56;;;;;;;;;;;;;;;;;;1863:7;1815:11;:56::i;:::-;1507:372;:::o;898:603::-;8870:21:25;4302:15;;-1:-1:-1;;;4302:15:25;;;;4301:16;;-1:-1:-1;;;;;4348:14:25;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:25;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:25;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:25;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:25;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:25;-1:-1:-1;;;5013:22:25;;;4979:67;1148:33:105::1;:31;:33::i;:::-;1191:15;:34:::0;;-1:-1:-1;;;;;;1191:34:105::1;-1:-1:-1::0;;;;;1191:34:105;::::1;::::0;;::::1;::::0;;;-1:-1:-1;1235:46:105;;;1291:23:::1;:50:::0;;;1351:59:::1;::::0;-1:-1:-1;;;1351:59:105;;:30:::1;::::0;:59:::1;::::0;1382:14;;1398:11;;1351:59:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1420:32;1441:10;1420:20;:32::i;:::-;1462;1483:10;1462:20;:32::i;:::-;5070:14:25::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:25;;;5142:14;;-1:-1:-1;16458:50:138;;5142:14:25;;16446:2:138;16431:18;5142:14:25;;;;;;;5066:101;4092:1081;;;;;898:603:105;;;;;:::o;5685:176::-;5777:7;5803:51;5825:17;:15;:17::i;:::-;5844:9;5803:21;:51::i;2933:127::-;2981:7;3007:15;;:46;;-1:-1:-1;;;3007:46:105;;3047:4;3007:46;;;11995:51:138;-1:-1:-1;;;;;3007:15:105;;;;:31;;11968:18:138;;3007:46:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4202:198::-;4312:7;4338:55;4354:17;:15;:17::i;:::-;4373:9;4384:8;4338:15;:55::i;4632:285::-;4740:7;4778:15;;:132;;-1:-1:-1;;;4778:132:105;;4841:4;4778:132;;;17464:51:138;17531:18;;;17524:34;;;-1:-1:-1;;;;;17594:32:138;;;17574:18;;;17567:60;4778:15:105;;;;:37;;17437:18:138;;4778:132:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;12329:227::-;-1:-1:-1;;;;;;;;;;;3191:16:24;3202:4;3191:10;:16::i;:::-;12441:9:105::1;12436:113;12460:9;:16;12456:1;:20;12436:113;;;12497:41;-1:-1:-1::0;;;;;;;;;;;12525:9:105::1;12535:1;12525:12;;;;;;;;:::i;12497:41::-;12478:3;;12436:113;;12562:132:::0;-1:-1:-1;;;;;;;;;;;3191:16:24;3202:4;3191:10;:16::i;:::-;-1:-1:-1;12655:22:105::1;:32:::0;;-1:-1:-1;;12655:32:105::1;::::0;::::1;;::::0;;;::::1;::::0;;12562:132::o;5662:138:24:-;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;13011:395:105:-:0;13128:22;;;;;:63;;;13154:37;-1:-1:-1;;;;;;;;;;;13180:10:105;13154:7;:37::i;:::-;13107:139;;;;-1:-1:-1;;;13107:139:105;;17840:2:138;13107:139:105;;;17822:21:138;17879:2;17859:18;;;17852:30;17918:31;17898:18;;;17891:59;17967:18;;13107:139:105;17638:353:138;13107:139:105;13261:9;13256:144;13280:16;:23;13276:1;:27;13256:144;;;13324:65;13357:10;13369:16;13386:1;13369:19;;;;;;;;:::i;:::-;;;;;;;13324:32;:65::i;:::-;13305:3;;13256:144;;2724:135;2776:7;2802:15;;:50;;-1:-1:-1;;;2802:50:105;;2846:4;2802:50;;;11995:51:138;-1:-1:-1;;;;;2802:15:105;;;;:35;;11968:18:138;;2802:50:105;11823:229:138;3093:121:105;3138:7;3164:15;;:43;;-1:-1:-1;;;3164:43:105;;3201:4;3164:43;;;11995:51:138;-1:-1:-1;;;;;3164:15:105;;;;:28;;11968:18:138;;3164:43:105;11823:229:138;3637:495:105;3745:7;3794:15;;:74;;-1:-1:-1;;;3794:74:105;;3853:4;3794:74;;;11995:51:138;3745:7:105;;-1:-1:-1;;;;;3794:15:105;;:37;;11968:18:138;;3794:74:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3794:74:105;;;;;;;;;;;;:::i;:::-;3764:104;;3878:18;3915:9;3910:189;3934:10;:17;3930:1;:21;3910:189;;;4041:47;4057:5;4064:10;4075:1;4064:13;;;;;;;;:::i;:::-;;;;;;;4079:8;4041:15;:47::i;:::-;4027:61;;;;:::i;:::-;;-1:-1:-1;3953:3:105;;3910:189;;;-1:-1:-1;4115:10:105;3637:495;-1:-1:-1;;;;3637:495:105:o;12700:305::-;12809:22;;;;;:63;;;12835:37;-1:-1:-1;;;;;;;;;;;12861:10:105;12835:7;:37::i;:::-;12788:139;;;;-1:-1:-1;;;12788:139:105;;17840:2:138;12788:139:105;;;17822:21:138;17879:2;17859:18;;;17852:30;17918:31;17898:18;;;17891:59;17967:18;;12788:139:105;17638:353:138;12788:139:105;12937:61;12970:10;12982:15;12937:32;:61::i;7621:145:15:-;7688:71;7751:2;7755;7704:54;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;7704:54:15;;;;;;;;;;;;;;-1:-1:-1;;;;;7704:54:15;-1:-1:-1;;;7704:54:15;;;7688:15;:71::i;4148:103:24:-;4214:30;4225:4;966:10:29;4214::24;:30::i;7270:387::-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:24;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:24;;;;;;;;;:38;;-1:-1:-1;;7475:38:24;7509:4;7475:38;;;7559:12;966:10:29;;887:96;7559:12:24;-1:-1:-1;;;;;7532:40:24;7550:7;-1:-1:-1;;;;;7532:40:24;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7892:388;7970:4;-1:-1:-1;;;;;;;;;;;8059:22:24;8067:4;8073:7;8059;:22::i;:::-;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:24;;;;;;;;;;:39;;-1:-1:-1;;8097:39:24;;;8155:40;966:10:29;;8097:14:24;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;4599:312:26;4679:4;-1:-1:-1;;;;;4688:6:26;4671:23;;;:120;;;4785:6;-1:-1:-1;;;;;4749:42:26;:32;-1:-1:-1;;;;;;;;;;;2035:53:43;-1:-1:-1;;;;;2035:53:43;;1957:138;4749:32:26;-1:-1:-1;;;;;4749:42:26;;;4671:120;4654:251;;;4865:29;;-1:-1:-1;;;4865:29:26;;;;;;;;;;;4654:251;4599:312::o;991:117:108:-;2362:4:24;3191:16;2362:4;3191:10;:16::i;6052:538:26:-;6169:17;-1:-1:-1;;;;;6151:50:26;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6151:52:26;;;;;;;;-1:-1:-1;;6151:52:26;;;;;;;;;;;;:::i;:::-;;;6147:437;;6513:60;;-1:-1:-1;;;6513:60:26;;-1:-1:-1;;;;;12013:32:138;;6513:60:26;;;11995:51:138;11968:18;;6513:60:26;11823:229:138;6147:437:26;-1:-1:-1;;;;;;;;;;;6245:40:26;;6241:120;;6312:34;;-1:-1:-1;;;6312:34:26;;;;;3477:25:138;;;3450:18;;6312:34:26;3331:177:138;6241:120:26;6374:54;6404:17;6423:4;6374:29;:54::i;5028:213::-;5102:4;-1:-1:-1;;;;;5111:6:26;5094:23;;5090:145;;5195:29;;-1:-1:-1;;;5195:29:26;;;;;;;;;;;623:109:108;6931:20:25;:18;:20::i;:::-;692:33:108::1;738:128:::0;6931:20:25;:18;:20::i;:::-;817:42:108::1;2362:4:24;848:10:108;817;:42::i;8163:2197:105:-:0;8388:22;;8376:35;;;;:11;:35;;;;;;;;-1:-1:-1;;;;;8376:45:105;;;;;;;;;:52;:57;8372:108;;8454:26;;-1:-1:-1;;;8454:26:105;;;;;;;;;;;8372:108;8916:22;;8880:21;;8854:23;;:47;;8880:21;8854:47;:::i;:::-;:84;8837:145;;;8956:26;;-1:-1:-1;;;8956:26:105;;;;;;;;;;;8837:145;9112:22;;9084:51;;;;:27;:51;;;;;;:56;;9080:291;;9339:21;:19;:21::i;:::-;9300:22;;9255:81;;;;:27;:81;;;;;:105;9080:291;9439:22;;9427:35;;;;:11;:35;;;;;;;;-1:-1:-1;;;;;9427:45:105;;;;;;;;;:63;;;;;;;;;;;;;;;;;;;;9583:37;9463:8;9583:27;:37::i;:::-;9647:22;;9630:40;;;;:16;:40;;;;;;;;9684:26;;;;9630:90;;;;;;;:114;;9552:68;;-1:-1:-1;9552:68:105;;9630:90;;:40;:114;;9552:68;;9630:114;:::i;:::-;;;;-1:-1:-1;;9798:23:105;;;;;9835:26;;;;;9760:145;;18681:25:138;;;18722:18;;;18715:34;;;9798:23:105;;9760:145;;18654:18:138;9760:145:105;;;;;;;10297:57;10304:46;10322:23;;10348:1;10322:27;;;;:::i;:::-;10304:17;:46::i;:::-;10297:57;;8294:2066;8163:2197;;:::o;408:133:15:-;479:55;526:7;505:19;479:55::i;4381:197:24:-;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:24;;-1:-1:-1;;;;;18952:32:138;;4514:47:24;;;18934:51:138;19001:18;;;18994:34;;;18907:18;;4514:47:24;18760:274:138;2779:335:43;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:43;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;2960:148::-;3079:18;:16;:18::i;7084:141:25:-;8870:21;8560:40;-1:-1:-1;;;8560:40:25;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:25;;;;;;;;;;;10382:1799:105;10448:4;10539:40;;;:27;:40;;;;;;10908:79;10935:10;10915:17;:15;:17::i;:::-;:30;10908:79;;;10961:15;:13;:15::i;:::-;10908:79;;;11158:21;11243:1;11187:40;11216:10;11187:28;:40::i;:::-;11183:44;;:1;:44;:::i;:::-;11182:62;;;;:::i;:::-;11158:86;;11254:26;11283:14;:12;:14::i;:::-;11254:43;;11354:9;11349:803;11373:9;:16;11369:1;:20;11349:803;;;11410:16;11429:9;11439:1;11429:12;;;;;;;;:::i;:::-;;;;;;;;;;;;11525:38;11566:24;;;:11;:24;;;;;;-1:-1:-1;;;;;11566:64:105;;;;;;;;;11525:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11733:70;;:16;:70;;;;;11804:26;;11733:98;;;;;;;11429:12;;-1:-1:-1;11850:38:105;;;11846:296;;;11999:39;12022:15;11999:22;:39::i;:::-;-1:-1:-1;12123:4:105;;10382:1799;-1:-1:-1;;;;;;;;10382:1799:105:o;11846:296::-;-1:-1:-1;;;11391:3:105;;11349:803;;;-1:-1:-1;12169:5:105;;10382:1799;-1:-1:-1;;;;;10382:1799:105:o;547:380:15:-;645:14;;131:42;818:2;805:16;;621:21;;645:14;805:16;131:42;854:5;843:68;834:77;;771:150;;547:380;:::o;2186:281:43:-;2263:17;-1:-1:-1;;;;;2263:29:43;;2296:1;2263:34;2259:119;;2320:47;;-1:-1:-1;;;2320:47:43;;-1:-1:-1;;;;;12013:32:138;;2320:47:43;;;11995:51:138;11968:18;;2320:47:43;11823:229:138;2259:119:43;-1:-1:-1;;;;;;;;;;;2387:73:43;;-1:-1:-1;;;;;;2387:73:43;-1:-1:-1;;;;;2387:73:43;;;;;;;;;;2186:281::o;4106:253:56:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:56;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:56:o;6598:122:43:-;6648:9;:13;6644:70;;6684:19;;-1:-1:-1;;;6684:19:43;;;;;;;;;;;15207:82:105;15251:15;;;:31;;;-1:-1:-1;;;15251:31:105;;;;-1:-1:-1;;;;;15251:15:105;;;;:29;;:31;;;;;;;;;;:15;;:31;;;;;;;;;;13593:1184;13698:20;13721:17;:15;:17::i;:::-;13949:22;;13921:51;;;;:27;:51;;;;;;13698:40;;-1:-1:-1;13921:67:105;;13917:121;;14009:29;;-1:-1:-1;;;14009:29:105;;;;;;;;;;;13917:121;14114:21;;14090:46;;;;:23;:46;;;;;;;;14137:22;;14090:70;;;;;;;;:88;;;;;;;;;;;;;;;;;;;;;;;;;;14231:48;;;;14453:136;;18681:25:138;;;18722:18;;;18715:34;14090:88:105;14453:136;;18654:18:138;14453:136:105;;;;;;;14717:12;14693:21;:19;:21::i;:::-;:36;14689:82;;;14745:15;:13;:15::i;4625:582:56:-;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:56;;;:23;5045:49;5041:119;;;5121:24;;-1:-1:-1;;;5121:24:56;;-1:-1:-1;;;;;12013:32:138;;5121:24:56;;;11995:51:138;11968:18;;5121:24:56;11823:229:138;5041:119:56;-1:-1:-1;5180:10:56;5173:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:56;;;;;;;;;;;14:286:138;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:138;;209:43;;199:71;;266:1;263;256:12;497:127;558:10;553:3;549:20;546:1;539:31;589:4;586:1;579:15;613:4;610:1;603:15;629:275;700:2;694:9;765:2;746:13;;-1:-1:-1;;742:27:138;730:40;;-1:-1:-1;;;;;785:34:138;;821:22;;;782:62;779:88;;;847:18;;:::i;:::-;883:2;876:22;629:275;;-1:-1:-1;629:275:138:o;909:722::-;971:5;1019:4;1007:9;1002:3;998:19;994:30;991:50;;;1037:1;1034;1027:12;991:50;1090:2;1084:9;1132:4;1120:17;;-1:-1:-1;;;;;1152:34:138;;1188:22;;;1149:62;1146:88;;;1214:18;;:::i;:::-;1250:2;1243:22;;;1334:23;;1366;;1462:2;1447:18;;;1434:32;1482:15;;;1475:32;1565:18;;;1552:32;1600:15;;;1593:32;;;;-1:-1:-1;1283:6:138;909:722;-1:-1:-1;909:722:138:o;1636:244::-;1729:6;1782:2;1770:9;1761:7;1757:23;1753:32;1750:52;;;1798:1;1795;1788:12;1750:52;1821:53;1866:7;1855:9;1821:53;:::i;1885:131::-;-1:-1:-1;;;;;1960:31:138;;1950:42;;1940:70;;2006:1;2003;1996:12;2021:367;2089:6;2097;2150:2;2138:9;2129:7;2125:23;2121:32;2118:52;;;2166:1;2163;2156:12;2118:52;2211:23;;;-1:-1:-1;2310:2:138;2295:18;;2282:32;2323:33;2282:32;2323:33;:::i;:::-;2375:7;2365:17;;;2021:367;;;;;:::o;2776:226::-;2835:6;2888:2;2876:9;2867:7;2863:23;2859:32;2856:52;;;2904:1;2901;2894:12;2856:52;-1:-1:-1;2949:23:138;;2776:226;-1:-1:-1;2776:226:138:o;3513:508::-;3590:6;3598;3606;3659:2;3647:9;3638:7;3634:23;3630:32;3627:52;;;3675:1;3672;3665:12;3627:52;3720:23;;;-1:-1:-1;3819:2:138;3804:18;;3791:32;3832:33;3791:32;3832:33;:::i;:::-;3884:7;-1:-1:-1;3943:2:138;3928:18;;3915:32;3956:33;3915:32;3956:33;:::i;:::-;4008:7;3998:17;;;3513:508;;;;;:::o;4811:183::-;4871:4;-1:-1:-1;;;;;4896:6:138;4893:30;4890:56;;;4926:18;;:::i;:::-;-1:-1:-1;4971:1:138;4967:14;4983:4;4963:25;;4811:183::o;4999:744::-;5053:5;5106:3;5099:4;5091:6;5087:17;5083:27;5073:55;;5124:1;5121;5114:12;5073:55;5164:6;5151:20;5191:64;5207:47;5247:6;5207:47;:::i;:::-;5191:64;:::i;:::-;5279:3;5303:6;5298:3;5291:19;5335:4;5330:3;5326:14;5319:21;;5396:4;5386:6;5383:1;5379:14;5371:6;5367:27;5363:38;5349:52;;5424:3;5416:6;5413:15;5410:35;;;5441:1;5438;5431:12;5410:35;5477:4;5469:6;5465:17;5491:221;5507:6;5502:3;5499:15;5491:221;;;5589:3;5576:17;5606:31;5631:5;5606:31;:::i;:::-;5650:18;;5697:4;5688:14;;;;5524;5491:221;;;-1:-1:-1;5730:7:138;4999:744;-1:-1:-1;;;;;4999:744:138:o;5748:348::-;5832:6;5885:2;5873:9;5864:7;5860:23;5856:32;5853:52;;;5901:1;5898;5891:12;5853:52;5941:9;5928:23;-1:-1:-1;;;;;5966:6:138;5963:30;5960:50;;;6006:1;6003;5996:12;5960:50;6029:61;6082:7;6073:6;6062:9;6058:22;6029:61;:::i;:::-;6019:71;5748:348;-1:-1:-1;;;;5748:348:138:o;6101:446::-;6154:3;6192:5;6186:12;6219:6;6214:3;6207:19;6251:4;6246:3;6242:14;6235:21;;6290:4;6283:5;6279:16;6313:1;6323:199;6337:6;6334:1;6331:13;6323:199;;;6402:13;;-1:-1:-1;;;;;6398:39:138;6386:52;;6467:4;6458:14;;;;6495:17;;;;6434:1;6352:9;6323:199;;;-1:-1:-1;6538:3:138;;6101:446;-1:-1:-1;;;;6101:446:138:o;6552:261::-;6731:2;6720:9;6713:21;6694:4;6751:56;6803:2;6792:9;6788:18;6780:6;6751:56;:::i;6818:900::-;6895:6;6903;6956:2;6944:9;6935:7;6931:23;6927:32;6924:52;;;6972:1;6969;6962:12;6924:52;7011:9;6998:23;7030:31;7055:5;7030:31;:::i;:::-;7080:5;-1:-1:-1;7136:2:138;7121:18;;7108:32;-1:-1:-1;;;;;7152:30:138;;7149:50;;;7195:1;7192;7185:12;7149:50;7218:22;;7271:4;7263:13;;7259:27;-1:-1:-1;7249:55:138;;7300:1;7297;7290:12;7249:55;7340:2;7327:16;-1:-1:-1;;;;;7358:6:138;7355:30;7352:56;;;7388:18;;:::i;:::-;7430:57;7477:2;7454:17;;-1:-1:-1;;7450:31:138;7483:2;7446:40;7430:57;:::i;:::-;7510:6;7503:5;7496:21;7558:7;7553:2;7544:6;7540:2;7536:15;7532:24;7529:37;7526:57;;;7579:1;7576;7569:12;7526:57;7634:6;7629:2;7625;7621:11;7616:2;7609:5;7605:14;7592:49;7686:1;7681:2;7672:6;7665:5;7661:18;7657:27;7650:38;7707:5;7697:15;;;;;6818:900;;;;;:::o;7723:247::-;7782:6;7835:2;7823:9;7814:7;7810:23;7806:32;7803:52;;;7851:1;7848;7841:12;7803:52;7890:9;7877:23;7909:31;7934:5;7909:31;:::i;7975:871::-;8121:6;8129;8137;8145;8153;8206:3;8194:9;8185:7;8181:23;8177:33;8174:53;;;8223:1;8220;8213:12;8174:53;8262:9;8249:23;8281:31;8306:5;8281:31;:::i;:::-;8331:5;-1:-1:-1;8409:2:138;8394:18;;8381:32;;-1:-1:-1;8512:2:138;8497:18;;8484:32;;-1:-1:-1;8615:2:138;8600:18;;8587:32;;-1:-1:-1;8696:3:138;8681:19;;8668:33;-1:-1:-1;;;;;8713:30:138;;8710:50;;;8756:1;8753;8746:12;8710:50;8779:61;8832:7;8823:6;8812:9;8808:22;8779:61;:::i;:::-;8769:71;;;7975:871;;;;;;;;:::o;8851:289::-;8893:3;8931:5;8925:12;8958:6;8953:3;8946:19;9014:6;9007:4;9000:5;8996:16;8989:4;8984:3;8980:14;8974:47;9066:1;9059:4;9050:6;9045:3;9041:16;9037:27;9030:38;9129:4;9122:2;9118:7;9113:2;9105:6;9101:15;9097:29;9092:3;9088:39;9084:50;9077:57;;;8851:289;;;;:::o;9145:220::-;9294:2;9283:9;9276:21;9257:4;9314:45;9355:2;9344:9;9340:18;9332:6;9314:45;:::i;9370:388::-;9438:6;9446;9499:2;9487:9;9478:7;9474:23;9470:32;9467:52;;;9515:1;9512;9505:12;9467:52;9554:9;9541:23;9573:31;9598:5;9573:31;:::i;:::-;9623:5;-1:-1:-1;9680:2:138;9665:18;;9652:32;9693:33;9652:32;9693:33;:::i;9763:273::-;9819:6;9872:2;9860:9;9851:7;9847:23;9843:32;9840:52;;;9888:1;9885;9878:12;9840:52;9927:9;9914:23;9980:5;9973:13;9966:21;9959:5;9956:32;9946:60;;10002:1;9999;9992:12;10041:955;10159:6;10212:2;10200:9;10191:7;10187:23;10183:32;10180:52;;;10228:1;10225;10218:12;10180:52;10268:9;10255:23;-1:-1:-1;;;;;10293:6:138;10290:30;10287:50;;;10333:1;10330;10323:12;10287:50;10356:22;;10409:4;10401:13;;10397:27;-1:-1:-1;10387:55:138;;10438:1;10435;10428:12;10387:55;10478:2;10465:16;10501:64;10517:47;10557:6;10517:47;:::i;10501:64::-;10587:3;10611:6;10606:3;10599:19;10643:2;10638:3;10634:12;10627:19;;10701:2;10693:4;10685:6;10681:17;10677:2;10673:26;10669:35;10655:49;;10727:7;10719:6;10716:19;10713:39;;;10748:1;10745;10738:12;10713:39;10780:2;10776;10772:11;10761:22;;10792:174;10808:6;10803:3;10800:15;10792:174;;;10876:47;10915:7;10910:3;10876:47;:::i;:::-;10871:3;10864:60;10953:2;10948:3;10944:12;10937:19;;10834:4;10829:3;10825:14;10818:21;;10792:174;;;10985:5;10041:955;-1:-1:-1;;;;;;10041:955:138:o;11001:346::-;11069:6;11077;11130:2;11118:9;11109:7;11105:23;11101:32;11098:52;;;11146:1;11143;11136:12;11098:52;-1:-1:-1;;11191:23:138;;;11311:2;11296:18;;;11283:32;;-1:-1:-1;11001:346:138:o;11352:466::-;11429:6;11437;11445;11498:2;11486:9;11477:7;11473:23;11469:32;11466:52;;;11514:1;11511;11504:12;11466:52;-1:-1:-1;;11559:23:138;;;11679:2;11664:18;;11651:32;;-1:-1:-1;11782:2:138;11767:18;;;11754:32;;11352:466;-1:-1:-1;11352:466:138:o;12825:127::-;12886:10;12881:3;12877:20;12874:1;12867:31;12917:4;12914:1;12907:15;12941:4;12938:1;12931:15;12957:125;13022:9;;;13043:10;;;13040:36;;;13056:18;;:::i;13561:184::-;13631:6;13684:2;13672:9;13663:7;13659:23;13655:32;13652:52;;;13700:1;13697;13690:12;13652:52;-1:-1:-1;13723:16:138;;13561:184;-1:-1:-1;13561:184:138:o;13750:398::-;13952:2;13934:21;;;13991:2;13971:18;;;13964:30;14030:34;14025:2;14010:18;;14003:62;-1:-1:-1;;;14096:2:138;14081:18;;14074:32;14138:3;14123:19;;13750:398::o;14153:127::-;14214:10;14209:3;14205:20;14202:1;14195:31;14245:4;14242:1;14235:15;14269:4;14266:1;14259:15;14493:951;14588:6;14641:2;14629:9;14620:7;14616:23;14612:32;14609:52;;;14657:1;14654;14647:12;14609:52;14690:9;14684:16;-1:-1:-1;;;;;14715:6:138;14712:30;14709:50;;;14755:1;14752;14745:12;14709:50;14778:22;;14831:4;14823:13;;14819:27;-1:-1:-1;14809:55:138;;14860:1;14857;14850:12;14809:55;14893:2;14887:9;14916:64;14932:47;14972:6;14932:47;:::i;14916:64::-;15002:3;15026:6;15021:3;15014:19;15058:2;15053:3;15049:12;15042:19;;15113:2;15103:6;15100:1;15096:14;15092:2;15088:23;15084:32;15070:46;;15139:7;15131:6;15128:19;15125:39;;;15160:1;15157;15150:12;15125:39;15192:2;15188;15184:11;15173:22;;15204:210;15220:6;15215:3;15212:15;15204:210;;;15293:3;15287:10;15310:31;15335:5;15310:31;:::i;:::-;15354:18;;15401:2;15237:12;;;;15392;;;;15204:210;;16925:332;17132:6;17121:9;17114:25;17175:2;17170;17159:9;17155:18;17148:30;17095:4;17195:56;17247:2;17236:9;17232:18;17224:6;17195:56;:::i;17996:317::-;18173:2;18162:9;18155:21;18136:4;18193:45;18234:2;18223:9;18219:18;18211:6;18193:45;:::i;:::-;18185:53;;18303:1;18299;18294:3;18290:11;18286:19;18278:6;18274:32;18269:2;18258:9;18254:18;18247:60;17996:317;;;;;:::o;19039:168::-;19112:9;;;19143;;19160:15;;;19154:22;;19140:37;19130:71;;19181:18;;:::i;19212:217::-;19252:1;19278;19268:132;;19322:10;19317:3;19313:20;19310:1;19303:31;19357:4;19354:1;19347:15;19385:4;19382:1;19375:15;19268:132;-1:-1:-1;19414:9:138;;19212:217::o;19434:301::-;19563:3;19601:6;19595:13;19647:6;19640:4;19632:6;19628:17;19623:3;19617:37;19709:1;19673:16;;19698:13;;;-1:-1:-1;19673:16:138;19434:301;-1:-1:-1;19434:301:138:o","linkReferences":{},"immutableReferences":{"39659":[{"start":6604,"length":32},{"start":6645,"length":32},{"start":6968,"length":32}]}},"methodIdentifiers":{"COMMITMENT_ADMIN()":"80e460f0","DEFAULT_ADMIN_ROLE()":"a217fddf","TRUSTED_ATTESTER()":"5db916ab","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","acceptGenesisCeremony()":"92a2ebf3","acceptedBlocks(uint256)":"1c4e4e27","acceptedBlocksVersion()":"747e7295","batchGrantCommitmentAdmin(address[])":"4b47d955","batchGrantTrustedAttester(address[])":"cf6772ad","blockHeightEpochAssignments(uint256)":"20e0e445","commitmentStakes(uint256,bytes32)":"fc2788ad","commitments(uint256,address)":"e90d4c06","computeAllCurrentEpochStake(address)":"60fea5dd","computeAllStakeAtEpoch(uint256,address)":"f34d002a","computeAllTotalStakeForCurrentEpoch()":"1dfcce8c","computeAllTotalStakeForEpoch(uint256)":"6542384f","createBlockCommitment(uint256,bytes32,bytes32)":"ee96da05","forceLatestCommitment((uint256,bytes32,bytes32))":"08c7050f","getAcceptedCommitmentAtBlockHeight(uint256)":"e1ffa44c","getAttesters()":"4ed7e435","getCurrentEpoch()":"b97dd9e2","getCurrentEpochStake(address,address)":"bc90afbb","getEpochByBlockTime()":"ee377d90","getMaxTolerableBlockHeight()":"74e8e564","getNextEpoch()":"efe97d05","getRoleAdmin(bytes32)":"248a9ca3","getStakeAtEpoch(uint256,address,address)":"1faea1ed","getTotalStakeForCurrentEpoch(address)":"b274a935","getTotalStakeForEpoch(uint256,address)":"c6e1b9db","getValidatorCommitmentAtBlockHeight(uint256,address)":"0a0b81cc","grantCommitmentAdmin(address)":"949d7c2a","grantRole(bytes32,address)":"2f2ff15d","grantTrustedAttester(address)":"81df1746","hasRole(bytes32,address)":"91d14854","initialize()":"8129fc1c","initialize(address,uint256,uint256,uint256,address[])":"a3df415f","lastAcceptedBlockHeight()":"6b588ac7","leadingBlockTolerance()":"1cfa2516","openAttestationEnabled()":"ef9ae15c","proxiableUUID()":"52d1902d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","setAcceptedCommitmentAtBlockHeight((uint256,bytes32,bytes32))":"53cd9e3c","setLastAcceptedBlockHeight(uint256)":"5a912c83","setOpenAttestationEnabled(bool)":"d2526fef","stakingContract()":"ee99205c","submitBatchBlockCommitment((uint256,bytes32,bytes32)[])":"e1b2b222","submitBlockCommitment((uint256,bytes32,bytes32))":"f89fe60b","supportsInterface(bytes4)":"01ffc9a7","upgradeToAndCall(address,bytes)":"4f1ef286","versionedAcceptedBlocks(uint256,uint256)":"e8124097"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AttesterAlreadyCommitted\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnacceptableBlockCommitment\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateCommitment\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"BlockAccepted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateCommitment\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"attesterStake\",\"type\":\"uint256\"}],\"name\":\"BlockCommitmentSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COMMITMENT_ADMIN\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRUSTED_ATTESTER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"}],\"name\":\"acceptedBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptedBlocksVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"}],\"name\":\"batchGrantCommitmentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"}],\"name\":\"batchGrantTrustedAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"}],\"name\":\"blockHeightEpochAssignments\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitement\",\"type\":\"bytes32\"}],\"name\":\"commitmentStakes\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"commitments\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"computeAllCurrentEpochStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"computeAllStakeAtEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"computeAllTotalStakeForCurrentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"computeAllTotalStakeForEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"name\":\"createBlockCommitment\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.BlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.BlockCommitment\",\"name\":\"blockCommitment\",\"type\":\"tuple\"}],\"name\":\"forceLatestCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"getAcceptedCommitmentAtBlockHeight\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.BlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAttesters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getCurrentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getCurrentEpochStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochByBlockTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxTolerableBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStakeAtEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getTotalStakeForCurrentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getTotalStakeForEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getValidatorCommitmentAtBlockHeight\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.BlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantCommitmentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"grantTrustedAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IMovementStaking\",\"name\":\"_stakingContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_lastAcceptedBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_leadingBlockTolerance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_epochDuration\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_custodians\",\"type\":\"address[]\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastAcceptedBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"leadingBlockTolerance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"openAttestationEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.BlockCommitment\",\"name\":\"blockCommitment\",\"type\":\"tuple\"}],\"name\":\"setAcceptedCommitmentAtBlockHeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"setLastAcceptedBlockHeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOpenAttestationEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakingContract\",\"outputs\":[{\"internalType\":\"contract IMovementStaking\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.BlockCommitment[]\",\"name\":\"blockCommitments\",\"type\":\"tuple[]\"}],\"name\":\"submitBatchBlockCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct MCRStorage.BlockCommitment\",\"name\":\"blockCommitment\",\"type\":\"tuple\"}],\"name\":\"submitBlockCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"blockHeight\",\"type\":\"uint256\"}],\"name\":\"versionedAcceptedBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize()\":{\"details\":\"Initialize the contract\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"stateVariables\":{\"COMMITMENT_ADMIN\":{\"details\":\"The role for commitment admin \"},\"TRUSTED_ATTESTER\":{\"details\":\"The role for trusted attester \"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/settlement/MCR.sol\":\"MCR\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194\",\"dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"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/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040\",\"dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt\"]},\"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/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02\",\"dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"]},\"src/settlement/MCR.sol\":{\"keccak256\":\"0xe8601b4143c17e7338cee38e1e6cab6d6751ef32799bb39414c01b4ef877deb5\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fbf14da0a4f769729fe9a9bc7d9a3a0be879387a78eb0a267246cc4e70e5f450\",\"dweb:/ipfs/QmQMMEZbhi4BTt3bncx4hciAiquAXUA7hrFzx79sT6UwqB\"]},\"src/settlement/MCRStorage.sol\":{\"keccak256\":\"0x2664753eee2ef587d7df00e9cb6384dc98aaebe6513f5dab4ef9d4533d023411\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://d3081e87aa2b206f44cce5c09f1d8319596d28fa3dbe1273b5f9d9316515b2d0\",\"dweb:/ipfs/Qme7SrX5f35q2GqjLiRxyYV1LwHxcjNiwE1b5MUwHNo8Zf\"]},\"src/settlement/interfaces/IMCR.sol\":{\"keccak256\":\"0xf92b9e52398d7517b384bb03c25bd6d5c9262c3a28d7419c6d3e821423756dd0\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://2a2c101cea61373fef0b4fb9df734abe359ff14317826b1d7822b5811a9f05cc\",\"dweb:/ipfs/QmdWDg4yM74CiPwBJmips5w5G16wczMEhwjsjkEk33DNPB\"]},\"src/settlement/settlement/BaseSettlement.sol\":{\"keccak256\":\"0xf3f6ea0ae8db122d1c6dade60057ea8fa03b8efc8108f03e48049bb9548d2c9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e340fdd89c1872461ec0f98195ef56aaf583ebf2897890ee74c1eefad8e8c86e\",\"dweb:/ipfs/QmWCcRibYEJZEvY1ugrw7jkumrHNxr8z3dMeP457PkbJED\"]},\"src/staking/MovementStaking.sol\":{\"keccak256\":\"0xa71627f087feb5ef56bb499624a1034769670f11acdc2160a59df9a9b8694bd3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://20de6db00ce5e3a8b4638f5c25b6fefce15f1fc356221625245d00250056347c\",\"dweb:/ipfs/QmdEodpmEbBMxLeFSB63we5fMkGzdktpwifMU7GJ6Ffwrx\"]},\"src/staking/MovementStakingStorage.sol\":{\"keccak256\":\"0x9ca2df17c7dec2b75cc96453c60ef64a570ae1adf429d1a92e879127616af4af\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0d53c127b022fd35429ea183b0f1882bb03a62ed4e7e8e79f7058421fe49a947\",\"dweb:/ipfs/QmUMhEebucKiE2MedG9B18vcJMozwQ8yQFwV364Lnrjjej\"]},\"src/staking/base/BaseStaking.sol\":{\"keccak256\":\"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46\",\"dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx\"]},\"src/staking/interfaces/IMovementStaking.sol\":{\"keccak256\":\"0x7f4fcc5c5b4a9c21775085061449a7dd6ee98ed46975c8891ccccc2670cc4587\",\"urls\":[\"bzz-raw://46a2d0689394f90426c85b4d260dc00396c4f065d6cddcd01aff8e95742ebbf5\",\"dweb:/ipfs/QmVZihDFeiz6kpo2bS6TBePkARXJPhdvwELZjYjMnnztAQ\"]},\"src/token/base/BaseToken.sol\":{\"keccak256\":\"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e\",\"dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd\"]},\"src/token/base/MintableToken.sol\":{\"keccak256\":\"0x67dcaae55138dda0f6fb9cce7d00b21b1dcf48144d0442073bec83aedbd73ca6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009d22618ed30e84b0839edbe7bd1a18afe7073a62477667bf96d765428385b7\",\"dweb:/ipfs/QmNzA9RjM6SxVJYWohq7JbLvyBrhzzjzQQwBfArBQqCNAQ\"]},\"src/token/base/WrappedToken.sol\":{\"keccak256\":\"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885\",\"dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4\"]},\"src/token/base/WrappedTokenStorage.sol\":{\"keccak256\":\"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08\",\"dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj\"]},\"src/token/custodian/CustodianToken.sol\":{\"keccak256\":\"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04\",\"dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"AttesterAlreadyCommitted"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[],"type":"error","name":"UnacceptableBlockCommitment"},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"stateCommitment","type":"bytes32","indexed":false},{"internalType":"uint256","name":"height","type":"uint256","indexed":false}],"type":"event","name":"BlockAccepted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"stateCommitment","type":"bytes32","indexed":false},{"internalType":"uint256","name":"attesterStake","type":"uint256","indexed":false}],"type":"event","name":"BlockCommitmentSubmitted","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"COMMITMENT_ADMIN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TRUSTED_ATTESTER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptGenesisCeremony"},{"inputs":[{"internalType":"uint256","name":"blockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"acceptedBlocks","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"acceptedBlocksVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"batchGrantCommitmentAdmin"},{"inputs":[{"internalType":"address[]","name":"attesters","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"batchGrantTrustedAttester"},{"inputs":[{"internalType":"uint256","name":"blockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"blockHeightEpochAssignments","outputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"blockHeight","type":"uint256"},{"internalType":"bytes32","name":"commitement","type":"bytes32"}],"stateMutability":"view","type":"function","name":"commitmentStakes","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"blockHeight","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"commitments","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"computeAllCurrentEpochStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"computeAllStakeAtEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"computeAllTotalStakeForCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}],"stateMutability":"view","type":"function","name":"computeAllTotalStakeForEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"createBlockCommitment","outputs":[{"internalType":"struct MCRStorage.BlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"struct MCRStorage.BlockCommitment","name":"blockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"forceLatestCommitment"},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"getAcceptedCommitmentAtBlockHeight","outputs":[{"internalType":"struct MCRStorage.BlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getAttesters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getCurrentEpochStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getEpochByBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getMaxTolerableBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getNextEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStakeAtEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getTotalStakeForCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getTotalStakeForEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getValidatorCommitmentAtBlockHeight","outputs":[{"internalType":"struct MCRStorage.BlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantCommitmentAdmin"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantTrustedAttester"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"contract IMovementStaking","name":"_stakingContract","type":"address"},{"internalType":"uint256","name":"_lastAcceptedBlockHeight","type":"uint256"},{"internalType":"uint256","name":"_leadingBlockTolerance","type":"uint256"},{"internalType":"uint256","name":"_epochDuration","type":"uint256"},{"internalType":"address[]","name":"_custodians","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"lastAcceptedBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"leadingBlockTolerance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"openAttestationEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"struct MCRStorage.BlockCommitment","name":"blockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"setAcceptedCommitmentAtBlockHeight"},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setLastAcceptedBlockHeight"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setOpenAttestationEnabled"},{"inputs":[],"stateMutability":"view","type":"function","name":"stakingContract","outputs":[{"internalType":"contract IMovementStaking","name":"","type":"address"}]},{"inputs":[{"internalType":"struct MCRStorage.BlockCommitment[]","name":"blockCommitments","type":"tuple[]","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"submitBatchBlockCommitment"},{"inputs":[{"internalType":"struct MCRStorage.BlockCommitment","name":"blockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"submitBlockCommitment"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"blockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"versionedAcceptedBlocks","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize()":{"details":"Initialize the contract"},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/settlement/MCR.sol":"MCR"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/forge-std/src/console.sol":{"keccak256":"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a","urls":["bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194","dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"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/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53","urls":["bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930","dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f","urls":["bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040","dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt"],"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/introspection/ERC165Upgradeable.sol":{"keccak256":"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8","urls":["bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45","dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c","urls":["bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba","dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c","urls":["bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9","dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65","urls":["bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a","dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"],"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/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386","urls":["bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0","dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"keccak256":"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236","urls":["bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02","dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa","urls":["bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1","dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA"],"license":"MIT"},"src/settlement/MCR.sol":{"keccak256":"0xe8601b4143c17e7338cee38e1e6cab6d6751ef32799bb39414c01b4ef877deb5","urls":["bzz-raw://fbf14da0a4f769729fe9a9bc7d9a3a0be879387a78eb0a267246cc4e70e5f450","dweb:/ipfs/QmQMMEZbhi4BTt3bncx4hciAiquAXUA7hrFzx79sT6UwqB"],"license":"UNLICENSED"},"src/settlement/MCRStorage.sol":{"keccak256":"0x2664753eee2ef587d7df00e9cb6384dc98aaebe6513f5dab4ef9d4533d023411","urls":["bzz-raw://d3081e87aa2b206f44cce5c09f1d8319596d28fa3dbe1273b5f9d9316515b2d0","dweb:/ipfs/Qme7SrX5f35q2GqjLiRxyYV1LwHxcjNiwE1b5MUwHNo8Zf"],"license":"UNLICENSED"},"src/settlement/interfaces/IMCR.sol":{"keccak256":"0xf92b9e52398d7517b384bb03c25bd6d5c9262c3a28d7419c6d3e821423756dd0","urls":["bzz-raw://2a2c101cea61373fef0b4fb9df734abe359ff14317826b1d7822b5811a9f05cc","dweb:/ipfs/QmdWDg4yM74CiPwBJmips5w5G16wczMEhwjsjkEk33DNPB"],"license":"UNLICENSED"},"src/settlement/settlement/BaseSettlement.sol":{"keccak256":"0xf3f6ea0ae8db122d1c6dade60057ea8fa03b8efc8108f03e48049bb9548d2c9a","urls":["bzz-raw://e340fdd89c1872461ec0f98195ef56aaf583ebf2897890ee74c1eefad8e8c86e","dweb:/ipfs/QmWCcRibYEJZEvY1ugrw7jkumrHNxr8z3dMeP457PkbJED"],"license":"MIT"},"src/staking/MovementStaking.sol":{"keccak256":"0xa71627f087feb5ef56bb499624a1034769670f11acdc2160a59df9a9b8694bd3","urls":["bzz-raw://20de6db00ce5e3a8b4638f5c25b6fefce15f1fc356221625245d00250056347c","dweb:/ipfs/QmdEodpmEbBMxLeFSB63we5fMkGzdktpwifMU7GJ6Ffwrx"],"license":"UNLICENSED"},"src/staking/MovementStakingStorage.sol":{"keccak256":"0x9ca2df17c7dec2b75cc96453c60ef64a570ae1adf429d1a92e879127616af4af","urls":["bzz-raw://0d53c127b022fd35429ea183b0f1882bb03a62ed4e7e8e79f7058421fe49a947","dweb:/ipfs/QmUMhEebucKiE2MedG9B18vcJMozwQ8yQFwV364Lnrjjej"],"license":"UNLICENSED"},"src/staking/base/BaseStaking.sol":{"keccak256":"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393","urls":["bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46","dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx"],"license":"MIT"},"src/staking/interfaces/IMovementStaking.sol":{"keccak256":"0x7f4fcc5c5b4a9c21775085061449a7dd6ee98ed46975c8891ccccc2670cc4587","urls":["bzz-raw://46a2d0689394f90426c85b4d260dc00396c4f065d6cddcd01aff8e95742ebbf5","dweb:/ipfs/QmVZihDFeiz6kpo2bS6TBePkARXJPhdvwELZjYjMnnztAQ"],"license":null},"src/token/base/BaseToken.sol":{"keccak256":"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2","urls":["bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e","dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd"],"license":"MIT"},"src/token/base/MintableToken.sol":{"keccak256":"0x67dcaae55138dda0f6fb9cce7d00b21b1dcf48144d0442073bec83aedbd73ca6","urls":["bzz-raw://009d22618ed30e84b0839edbe7bd1a18afe7073a62477667bf96d765428385b7","dweb:/ipfs/QmNzA9RjM6SxVJYWohq7JbLvyBrhzzjzQQwBfArBQqCNAQ"],"license":"MIT"},"src/token/base/WrappedToken.sol":{"keccak256":"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45","urls":["bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885","dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4"],"license":"MIT"},"src/token/base/WrappedTokenStorage.sol":{"keccak256":"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e","urls":["bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08","dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj"],"license":"MIT"},"src/token/custodian/CustodianToken.sol":{"keccak256":"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350","urls":["bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04","dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":55129,"contract":"src/settlement/MCR.sol:MCR","label":"stakingContract","offset":0,"slot":"0","type":"t_contract(IMovementStaking)56904"},{"astId":55131,"contract":"src/settlement/MCR.sol:MCR","label":"leadingBlockTolerance","offset":0,"slot":"1","type":"t_uint256"},{"astId":55133,"contract":"src/settlement/MCR.sol:MCR","label":"lastAcceptedBlockHeight","offset":0,"slot":"2","type":"t_uint256"},{"astId":55144,"contract":"src/settlement/MCR.sol:MCR","label":"blockHeightEpochAssignments","offset":0,"slot":"3","type":"t_mapping(t_uint256,t_uint256)"},{"astId":55151,"contract":"src/settlement/MCR.sol:MCR","label":"commitments","offset":0,"slot":"4","type":"t_mapping(t_uint256,t_mapping(t_address,t_struct(BlockCommitment)55140_storage))"},{"astId":55157,"contract":"src/settlement/MCR.sol:MCR","label":"commitmentStakes","offset":0,"slot":"5","type":"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))"},{"astId":55162,"contract":"src/settlement/MCR.sol:MCR","label":"acceptedBlocks","offset":0,"slot":"6","type":"t_mapping(t_uint256,t_struct(BlockCommitment)55140_storage)"},{"astId":55164,"contract":"src/settlement/MCR.sol:MCR","label":"openAttestationEnabled","offset":0,"slot":"7","type":"t_bool"},{"astId":55171,"contract":"src/settlement/MCR.sol:MCR","label":"versionedAcceptedBlocks","offset":0,"slot":"8","type":"t_mapping(t_uint256,t_mapping(t_uint256,t_struct(BlockCommitment)55140_storage))"},{"astId":55173,"contract":"src/settlement/MCR.sol:MCR","label":"acceptedBlocksVersion","offset":0,"slot":"9","type":"t_uint256"},{"astId":55177,"contract":"src/settlement/MCR.sol:MCR","label":"__gap","offset":0,"slot":"10","type":"t_array(t_uint256)47_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)47_storage":{"encoding":"inplace","label":"uint256[47]","numberOfBytes":"1504","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IMovementStaking)56904":{"encoding":"inplace","label":"contract IMovementStaking","numberOfBytes":"20"},"t_mapping(t_address,t_struct(BlockCommitment)55140_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct MCRStorage.BlockCommitment)","numberOfBytes":"32","value":"t_struct(BlockCommitment)55140_storage"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_mapping(t_address,t_struct(BlockCommitment)55140_storage))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => struct MCRStorage.BlockCommitment))","numberOfBytes":"32","value":"t_mapping(t_address,t_struct(BlockCommitment)55140_storage)"},"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_uint256,t_mapping(t_uint256,t_struct(BlockCommitment)55140_storage))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(uint256 => struct MCRStorage.BlockCommitment))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_struct(BlockCommitment)55140_storage)"},"t_mapping(t_uint256,t_struct(BlockCommitment)55140_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct MCRStorage.BlockCommitment)","numberOfBytes":"32","value":"t_struct(BlockCommitment)55140_storage"},"t_mapping(t_uint256,t_uint256)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_struct(BlockCommitment)55140_storage":{"encoding":"inplace","label":"struct MCRStorage.BlockCommitment","numberOfBytes":"96","members":[{"astId":55135,"contract":"src/settlement/MCR.sol:MCR","label":"height","offset":0,"slot":"0","type":"t_uint256"},{"astId":55137,"contract":"src/settlement/MCR.sol:MCR","label":"commitment","offset":0,"slot":"1","type":"t_bytes32"},{"astId":55139,"contract":"src/settlement/MCR.sol:MCR","label":"blockId","offset":0,"slot":"2","type":"t_bytes32"}]},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/settlement/MCR.sol","id":55119,"exportedSymbols":{"BaseSettlement":[55256],"EnumerableSet":[47007],"IMCR":[55201],"IMovementStaking":[56904],"Initializable":[39639],"MCR":[55118],"MCRStorage":[55178],"MovementStaking":[56550],"ReentrancyGuard":[44412],"console":[24306]},"nodeType":"SourceUnit","src":"39:15253:105","nodes":[{"id":54160,"nodeType":"PragmaDirective","src":"39:24:105","nodes":[],"literals":["solidity","^","0.8",".13"]},{"id":54162,"nodeType":"ImportDirective","src":"65:86:105","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol","file":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","nameLocation":"-1:-1:-1","scope":55119,"sourceUnit":47008,"symbolAliases":[{"foreign":{"id":54161,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47007,"src":"73:13:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54164,"nodeType":"ImportDirective","src":"152:96:105","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":55119,"sourceUnit":39640,"symbolAliases":[{"foreign":{"id":54163,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39639,"src":"160:13:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54165,"nodeType":"ImportDirective","src":"249:31:105","nodes":[],"absolutePath":"lib/forge-std/src/console.sol","file":"forge-std/console.sol","nameLocation":"-1:-1:-1","scope":55119,"sourceUnit":24307,"symbolAliases":[],"unitAlias":""},{"id":54168,"nodeType":"ImportDirective","src":"281:81:105","nodes":[],"absolutePath":"src/staking/MovementStaking.sol","file":"../staking/MovementStaking.sol","nameLocation":"-1:-1:-1","scope":55119,"sourceUnit":56551,"symbolAliases":[{"foreign":{"id":54166,"name":"MovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56550,"src":"289:15:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":54167,"name":"IMovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56904,"src":"306:16:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54170,"nodeType":"ImportDirective","src":"363:44:105","nodes":[],"absolutePath":"src/settlement/MCRStorage.sol","file":"./MCRStorage.sol","nameLocation":"-1:-1:-1","scope":55119,"sourceUnit":55179,"symbolAliases":[{"foreign":{"id":54169,"name":"MCRStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55178,"src":"371:10:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54172,"nodeType":"ImportDirective","src":"408:63:105","nodes":[],"absolutePath":"src/settlement/settlement/BaseSettlement.sol","file":"./settlement/BaseSettlement.sol","nameLocation":"-1:-1:-1","scope":55119,"sourceUnit":55257,"symbolAliases":[{"foreign":{"id":54171,"name":"BaseSettlement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55256,"src":"416:14:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54174,"nodeType":"ImportDirective","src":"472:43:105","nodes":[],"absolutePath":"src/settlement/interfaces/IMCR.sol","file":"./interfaces/IMCR.sol","nameLocation":"-1:-1:-1","scope":55119,"sourceUnit":55202,"symbolAliases":[{"foreign":{"id":54173,"name":"IMCR","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55201,"src":"480:4:105","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54175,"nodeType":"ImportDirective","src":"516:59:105","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","nameLocation":"-1:-1:-1","scope":55119,"sourceUnit":44413,"symbolAliases":[],"unitAlias":""},{"id":55118,"nodeType":"ContractDefinition","src":"577:14714:105","nodes":[{"id":54189,"nodeType":"VariableDeclaration","src":"694:72:105","nodes":[],"constant":true,"documentation":{"id":54184,"nodeType":"StructuredDocumentation","src":"648:41:105","text":"@dev The role for commitment admin "},"functionSelector":"80e460f0","mutability":"constant","name":"COMMITMENT_ADMIN","nameLocation":"718:16:105","scope":55118,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54185,"name":"bytes32","nodeType":"ElementaryTypeName","src":"694:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"434f4d4d49544d454e545f41444d494e","id":54187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"747:18:105","typeDescriptions":{"typeIdentifier":"t_stringliteral_db2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c","typeString":"literal_string \"COMMITMENT_ADMIN\""},"value":"COMMITMENT_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_db2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c","typeString":"literal_string \"COMMITMENT_ADMIN\""}],"id":54186,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"737:9:105","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54188,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"737:29:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":54195,"nodeType":"VariableDeclaration","src":"819:72:105","nodes":[],"constant":true,"documentation":{"id":54190,"nodeType":"StructuredDocumentation","src":"773:41:105","text":"@dev The role for trusted attester "},"functionSelector":"5db916ab","mutability":"constant","name":"TRUSTED_ATTESTER","nameLocation":"843:16:105","scope":55118,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54191,"name":"bytes32","nodeType":"ElementaryTypeName","src":"819:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"545255535445445f4154544553544552","id":54193,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"872:18:105","typeDescriptions":{"typeIdentifier":"t_stringliteral_981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18","typeString":"literal_string \"TRUSTED_ATTESTER\""},"value":"TRUSTED_ATTESTER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18","typeString":"literal_string \"TRUSTED_ATTESTER\""}],"id":54192,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"862:9:105","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":54194,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"862:29:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":54245,"nodeType":"FunctionDefinition","src":"898:603:105","nodes":[],"body":{"id":54244,"nodeType":"Block","src":"1138:363:105","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":54212,"name":"__BaseSettlement_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55244,"src":"1148:31:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1148:33:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54214,"nodeType":"ExpressionStatement","src":"1148:33:105"},{"expression":{"id":54217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54215,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55129,"src":"1191:15:105","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54216,"name":"_stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54198,"src":"1209:16:105","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"}},"src":"1191:34:105","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"}},"id":54218,"nodeType":"ExpressionStatement","src":"1191:34:105"},{"expression":{"id":54221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54219,"name":"leadingBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55131,"src":"1235:21:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54220,"name":"_leadingBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54202,"src":"1259:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1235:46:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54222,"nodeType":"ExpressionStatement","src":"1235:46:105"},{"expression":{"id":54225,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54223,"name":"lastAcceptedBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55133,"src":"1291:23:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54224,"name":"_lastAcceptedBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54200,"src":"1317:24:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1291:50:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54226,"nodeType":"ExpressionStatement","src":"1291:50:105"},{"expression":{"arguments":[{"id":54230,"name":"_epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54204,"src":"1382:14:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":54231,"name":"_custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54207,"src":"1398:11:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"expression":{"id":54227,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55129,"src":"1351:15:105","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"}},"id":54229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1367:14:105","memberName":"registerDomain","nodeType":"MemberAccess","referencedDeclaration":56693,"src":"1351:30:105","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (uint256,address[] memory) external"}},"id":54232,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1351:59:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54233,"nodeType":"ExpressionStatement","src":"1351:59:105"},{"expression":{"arguments":[{"expression":{"id":54235,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1441:3:105","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54236,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1445:6:105","memberName":"sender","nodeType":"MemberAccess","src":"1441:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54234,"name":"grantCommitmentAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54280,"src":"1420:20:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":54237,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1420:32:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54238,"nodeType":"ExpressionStatement","src":"1420:32:105"},{"expression":{"arguments":[{"expression":{"id":54240,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1483:3:105","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54241,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1487:6:105","memberName":"sender","nodeType":"MemberAccess","src":"1483:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54239,"name":"grantTrustedAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54934,"src":"1462:20:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":54242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1462:32:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54243,"nodeType":"ExpressionStatement","src":"1462:32:105"}]},"functionSelector":"a3df415f","implemented":true,"kind":"function","modifiers":[{"id":54210,"kind":"modifierInvocation","modifierName":{"id":54209,"name":"initializer","nameLocations":["1126:11:105"],"nodeType":"IdentifierPath","referencedDeclaration":39493,"src":"1126:11:105"},"nodeType":"ModifierInvocation","src":"1126:11:105"}],"name":"initialize","nameLocation":"907:10:105","parameters":{"id":54208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54198,"mutability":"mutable","name":"_stakingContract","nameLocation":"944:16:105","nodeType":"VariableDeclaration","scope":54245,"src":"927:33:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"},"typeName":{"id":54197,"nodeType":"UserDefinedTypeName","pathNode":{"id":54196,"name":"IMovementStaking","nameLocations":["927:16:105"],"nodeType":"IdentifierPath","referencedDeclaration":56904,"src":"927:16:105"},"referencedDeclaration":56904,"src":"927:16:105","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"}},"visibility":"internal"},{"constant":false,"id":54200,"mutability":"mutable","name":"_lastAcceptedBlockHeight","nameLocation":"978:24:105","nodeType":"VariableDeclaration","scope":54245,"src":"970:32:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54199,"name":"uint256","nodeType":"ElementaryTypeName","src":"970:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54202,"mutability":"mutable","name":"_leadingBlockTolerance","nameLocation":"1020:22:105","nodeType":"VariableDeclaration","scope":54245,"src":"1012:30:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54201,"name":"uint256","nodeType":"ElementaryTypeName","src":"1012:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54204,"mutability":"mutable","name":"_epochDuration","nameLocation":"1060:14:105","nodeType":"VariableDeclaration","scope":54245,"src":"1052:22:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54203,"name":"uint256","nodeType":"ElementaryTypeName","src":"1052:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54207,"mutability":"mutable","name":"_custodians","nameLocation":"1101:11:105","nodeType":"VariableDeclaration","scope":54245,"src":"1084:28:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54205,"name":"address","nodeType":"ElementaryTypeName","src":"1084:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54206,"nodeType":"ArrayTypeName","src":"1084:9:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"917:201:105"},"returnParameters":{"id":54211,"nodeType":"ParameterList","parameters":[],"src":"1138:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54280,"nodeType":"FunctionDefinition","src":"1507:372:105","nodes":[],"body":{"id":54279,"nodeType":"Block","src":"1561:318:105","nodes":[],"statements":[{"expression":{"arguments":[{"hexValue":"6772616e74436f6d6d69746d656e7441646d696e2063616c6c65642062793a","id":54253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1583:33:105","typeDescriptions":{"typeIdentifier":"t_stringliteral_ae7e22d26b9b1fdb586cb09459474c6b49b521d7905bf5005772d8818fba9722","typeString":"literal_string \"grantCommitmentAdmin called by:\""},"value":"grantCommitmentAdmin called by:"},{"expression":{"id":54254,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1618:3:105","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54255,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1622:6:105","memberName":"sender","nodeType":"MemberAccess","src":"1618:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_ae7e22d26b9b1fdb586cb09459474c6b49b521d7905bf5005772d8818fba9722","typeString":"literal_string \"grantCommitmentAdmin called by:\""},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":54250,"name":"console","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24306,"src":"1571:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_console_$24306_$","typeString":"type(library console)"}},"id":54252,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1579:3:105","memberName":"log","nodeType":"MemberAccess","referencedDeclaration":17001,"src":"1571:11:105","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (string memory,address) pure"}},"id":54256,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1571:58:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54257,"nodeType":"ExpressionStatement","src":"1571:58:105"},{"expression":{"arguments":[{"arguments":[{"id":54260,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"1668:18:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54261,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1688:3:105","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54262,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1692:6:105","memberName":"sender","nodeType":"MemberAccess","src":"1688:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54259,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39139,"src":"1660:7:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":54263,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1660:39:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e4c59","id":54264,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1713:36:105","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""},"value":"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""}],"id":54258,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1639:7:105","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1639:120:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54266,"nodeType":"ExpressionStatement","src":"1639:120:105"},{"expression":{"arguments":[{"id":54268,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54189,"src":"1779:16:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54269,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54247,"src":"1797:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54267,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39213,"src":"1769:9:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":54270,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1769:36:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54271,"nodeType":"ExpressionStatement","src":"1769:36:105"},{"expression":{"arguments":[{"hexValue":"436f6d6d69746d656e7441646d696e20726f6c65206772616e74656420746f3a","id":54275,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1827:34:105","typeDescriptions":{"typeIdentifier":"t_stringliteral_b259a0a1dd742be4ea3b57db2892b7e6dee6f41d9e3a0bca2480431e42462396","typeString":"literal_string \"CommitmentAdmin role granted to:\""},"value":"CommitmentAdmin role granted to:"},{"id":54276,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54247,"src":"1863:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_b259a0a1dd742be4ea3b57db2892b7e6dee6f41d9e3a0bca2480431e42462396","typeString":"literal_string \"CommitmentAdmin role granted to:\""},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":54272,"name":"console","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24306,"src":"1815:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_console_$24306_$","typeString":"type(library console)"}},"id":54274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1823:3:105","memberName":"log","nodeType":"MemberAccess","referencedDeclaration":17001,"src":"1815:11:105","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (string memory,address) pure"}},"id":54277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1815:56:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54278,"nodeType":"ExpressionStatement","src":"1815:56:105"}]},"functionSelector":"949d7c2a","implemented":true,"kind":"function","modifiers":[],"name":"grantCommitmentAdmin","nameLocation":"1516:20:105","parameters":{"id":54248,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54247,"mutability":"mutable","name":"account","nameLocation":"1545:7:105","nodeType":"VariableDeclaration","scope":54280,"src":"1537:15:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54246,"name":"address","nodeType":"ElementaryTypeName","src":"1537:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1536:17:105"},"returnParameters":{"id":54249,"nodeType":"ParameterList","parameters":[],"src":"1561:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54316,"nodeType":"FunctionDefinition","src":"1885:326:105","nodes":[],"body":{"id":54315,"nodeType":"Block","src":"1954:257:105","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":54288,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"1993:18:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54289,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2013:3:105","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2017:6:105","memberName":"sender","nodeType":"MemberAccess","src":"2013:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54287,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39139,"src":"1985:7:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":54291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1985:39:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e4c59","id":54292,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2038:36:105","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""},"value":"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""}],"id":54286,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1964:7:105","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54293,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1964:120:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54294,"nodeType":"ExpressionStatement","src":"1964:120:105"},{"body":{"id":54313,"nodeType":"Block","src":"2140:65:105","statements":[{"expression":{"arguments":[{"id":54307,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54189,"src":"2164:16:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":54308,"name":"accounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54283,"src":"2182:8:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":54310,"indexExpression":{"id":54309,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54296,"src":"2191:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2182:11:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54306,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39213,"src":"2154:9:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":54311,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2154:40:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54312,"nodeType":"ExpressionStatement","src":"2154:40:105"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54302,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54299,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54296,"src":"2114:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":54300,"name":"accounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54283,"src":"2118:8:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":54301,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2127:6:105","memberName":"length","nodeType":"MemberAccess","src":"2118:15:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2114:19:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54314,"initializationExpression":{"assignments":[54296],"declarations":[{"constant":false,"id":54296,"mutability":"mutable","name":"i","nameLocation":"2107:1:105","nodeType":"VariableDeclaration","scope":54314,"src":"2099:9:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54295,"name":"uint256","nodeType":"ElementaryTypeName","src":"2099:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54298,"initialValue":{"hexValue":"30","id":54297,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2111:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2099:13:105"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":54304,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2135:3:105","subExpression":{"id":54303,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54296,"src":"2135:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54305,"nodeType":"ExpressionStatement","src":"2135:3:105"},"nodeType":"ForStatement","src":"2094:111:105"}]},"functionSelector":"4b47d955","implemented":true,"kind":"function","modifiers":[],"name":"batchGrantCommitmentAdmin","nameLocation":"1894:25:105","parameters":{"id":54284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54283,"mutability":"mutable","name":"accounts","nameLocation":"1937:8:105","nodeType":"VariableDeclaration","scope":54316,"src":"1920:25:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54281,"name":"address","nodeType":"ElementaryTypeName","src":"1920:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54282,"nodeType":"ArrayTypeName","src":"1920:9:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1919:27:105"},"returnParameters":{"id":54285,"nodeType":"ParameterList","parameters":[],"src":"1954:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54335,"nodeType":"FunctionDefinition","src":"2245:227:105","nodes":[],"body":{"id":54334,"nodeType":"Block","src":"2404:68:105","nodes":[],"statements":[{"expression":{"arguments":[{"id":54329,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54318,"src":"2437:6:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":54330,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54320,"src":"2445:10:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54331,"name":"blockId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54322,"src":"2457:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":54328,"name":"BlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55140,"src":"2421:15:105","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_BlockCommitment_$55140_storage_ptr_$","typeString":"type(struct MCRStorage.BlockCommitment storage pointer)"}},"id":54332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2421:44:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"functionReturnParameters":54327,"id":54333,"nodeType":"Return","src":"2414:51:105"}]},"functionSelector":"ee96da05","implemented":true,"kind":"function","modifiers":[],"name":"createBlockCommitment","nameLocation":"2254:21:105","parameters":{"id":54323,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54318,"mutability":"mutable","name":"height","nameLocation":"2293:6:105","nodeType":"VariableDeclaration","scope":54335,"src":"2285:14:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54317,"name":"uint256","nodeType":"ElementaryTypeName","src":"2285:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54320,"mutability":"mutable","name":"commitment","nameLocation":"2317:10:105","nodeType":"VariableDeclaration","scope":54335,"src":"2309:18:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54319,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2309:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":54322,"mutability":"mutable","name":"blockId","nameLocation":"2345:7:105","nodeType":"VariableDeclaration","scope":54335,"src":"2337:15:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":54321,"name":"bytes32","nodeType":"ElementaryTypeName","src":"2337:7:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"2275:83:105"},"returnParameters":{"id":54327,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54326,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54335,"src":"2380:22:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment"},"typeName":{"id":54325,"nodeType":"UserDefinedTypeName","pathNode":{"id":54324,"name":"BlockCommitment","nameLocations":["2380:15:105"],"nodeType":"IdentifierPath","referencedDeclaration":55140,"src":"2380:15:105"},"referencedDeclaration":55140,"src":"2380:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage_ptr","typeString":"struct MCRStorage.BlockCommitment"}},"visibility":"internal"}],"src":"2379:24:105"},"scope":55118,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":54345,"nodeType":"FunctionDefinition","src":"2521:139:105","nodes":[],"body":{"id":54344,"nodeType":"Block","src":"2589:71:105","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54342,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54340,"name":"lastAcceptedBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55133,"src":"2606:23:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":54341,"name":"leadingBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55131,"src":"2632:21:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2606:47:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54339,"id":54343,"nodeType":"Return","src":"2599:54:105"}]},"functionSelector":"74e8e564","implemented":true,"kind":"function","modifiers":[],"name":"getMaxTolerableBlockHeight","nameLocation":"2530:26:105","parameters":{"id":54336,"nodeType":"ParameterList","parameters":[],"src":"2556:2:105"},"returnParameters":{"id":54339,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54338,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54345,"src":"2580:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54337,"name":"uint256","nodeType":"ElementaryTypeName","src":"2580:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2579:9:105"},"scope":55118,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54359,"nodeType":"FunctionDefinition","src":"2724:135:105","nodes":[],"body":{"id":54358,"nodeType":"Block","src":"2785:74:105","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":54354,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"2846:4:105","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}],"id":54353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"2838:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54352,"name":"address","nodeType":"ElementaryTypeName","src":"2838:7:105","typeDescriptions":{}}},"id":54355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2838:13:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":54350,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55129,"src":"2802:15:105","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"}},"id":54351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2818:19:105","memberName":"getEpochByBlockTime","nodeType":"MemberAccess","referencedDeclaration":56703,"src":"2802:35:105","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":54356,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2802:50:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54349,"id":54357,"nodeType":"Return","src":"2795:57:105"}]},"functionSelector":"ee377d90","implemented":true,"kind":"function","modifiers":[],"name":"getEpochByBlockTime","nameLocation":"2733:19:105","parameters":{"id":54346,"nodeType":"ParameterList","parameters":[],"src":"2752:2:105"},"returnParameters":{"id":54349,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54348,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54359,"src":"2776:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54347,"name":"uint256","nodeType":"ElementaryTypeName","src":"2776:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2775:9:105"},"scope":55118,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54373,"nodeType":"FunctionDefinition","src":"2933:127:105","nodes":[],"body":{"id":54372,"nodeType":"Block","src":"2990:70:105","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":54368,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3047:4:105","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}],"id":54367,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3039:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54366,"name":"address","nodeType":"ElementaryTypeName","src":"3039:7:105","typeDescriptions":{}}},"id":54369,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3039:13:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":54364,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55129,"src":"3007:15:105","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"}},"id":54365,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3023:15:105","memberName":"getCurrentEpoch","nodeType":"MemberAccess","referencedDeclaration":56710,"src":"3007:31:105","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":54370,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3007:46:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54363,"id":54371,"nodeType":"Return","src":"3000:53:105"}]},"functionSelector":"b97dd9e2","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentEpoch","nameLocation":"2942:15:105","parameters":{"id":54360,"nodeType":"ParameterList","parameters":[],"src":"2957:2:105"},"returnParameters":{"id":54363,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54362,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54373,"src":"2981:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54361,"name":"uint256","nodeType":"ElementaryTypeName","src":"2981:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"2980:9:105"},"scope":55118,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54387,"nodeType":"FunctionDefinition","src":"3093:121:105","nodes":[],"body":{"id":54386,"nodeType":"Block","src":"3147:67:105","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":54382,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3201:4:105","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}],"id":54381,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3193:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54380,"name":"address","nodeType":"ElementaryTypeName","src":"3193:7:105","typeDescriptions":{}}},"id":54383,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3193:13:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":54378,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55129,"src":"3164:15:105","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"}},"id":54379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3180:12:105","memberName":"getNextEpoch","nodeType":"MemberAccess","referencedDeclaration":56717,"src":"3164:28:105","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":54384,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3164:43:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54377,"id":54385,"nodeType":"Return","src":"3157:50:105"}]},"functionSelector":"efe97d05","implemented":true,"kind":"function","modifiers":[],"name":"getNextEpoch","nameLocation":"3102:12:105","parameters":{"id":54374,"nodeType":"ParameterList","parameters":[],"src":"3114:2:105"},"returnParameters":{"id":54377,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54376,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54387,"src":"3138:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54375,"name":"uint256","nodeType":"ElementaryTypeName","src":"3138:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3137:9:105"},"scope":55118,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54410,"nodeType":"FunctionDefinition","src":"3280:325:105","nodes":[],"body":{"id":54409,"nodeType":"Block","src":"3417:188:105","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":54402,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3503:4:105","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}],"id":54401,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3495:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54400,"name":"address","nodeType":"ElementaryTypeName","src":"3495:7:105","typeDescriptions":{}}},"id":54403,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3495:13:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54404,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54389,"src":"3526:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":54405,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54391,"src":"3549:9:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54406,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54393,"src":"3576:8:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":54398,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55129,"src":"3446:15:105","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"}},"id":54399,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3462:15:105","memberName":"getStakeAtEpoch","nodeType":"MemberAccess","referencedDeclaration":56737,"src":"3446:31:105","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view external returns (uint256)"}},"id":54407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3446:152:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54397,"id":54408,"nodeType":"Return","src":"3427:171:105"}]},"functionSelector":"1faea1ed","implemented":true,"kind":"function","modifiers":[],"name":"getStakeAtEpoch","nameLocation":"3289:15:105","parameters":{"id":54394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54389,"mutability":"mutable","name":"epoch","nameLocation":"3322:5:105","nodeType":"VariableDeclaration","scope":54410,"src":"3314:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54388,"name":"uint256","nodeType":"ElementaryTypeName","src":"3314:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54391,"mutability":"mutable","name":"custodian","nameLocation":"3345:9:105","nodeType":"VariableDeclaration","scope":54410,"src":"3337:17:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54390,"name":"address","nodeType":"ElementaryTypeName","src":"3337:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54393,"mutability":"mutable","name":"attester","nameLocation":"3372:8:105","nodeType":"VariableDeclaration","scope":54410,"src":"3364:16:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54392,"name":"address","nodeType":"ElementaryTypeName","src":"3364:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3304:82:105"},"returnParameters":{"id":54397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54396,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54410,"src":"3408:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54395,"name":"uint256","nodeType":"ElementaryTypeName","src":"3408:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3407:9:105"},"scope":55118,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54462,"nodeType":"FunctionDefinition","src":"3637:495:105","nodes":[],"body":{"id":54461,"nodeType":"Block","src":"3754:378:105","nodes":[],"statements":[{"assignments":[54423],"declarations":[{"constant":false,"id":54423,"mutability":"mutable","name":"custodians","nameLocation":"3781:10:105","nodeType":"VariableDeclaration","scope":54461,"src":"3764:27:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54421,"name":"address","nodeType":"ElementaryTypeName","src":"3764:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54422,"nodeType":"ArrayTypeName","src":"3764:9:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":54431,"initialValue":{"arguments":[{"arguments":[{"id":54428,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"3853:4:105","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}],"id":54427,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"3845:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54426,"name":"address","nodeType":"ElementaryTypeName","src":"3845:7:105","typeDescriptions":{}}},"id":54429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3845:13:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":54424,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55129,"src":"3794:15:105","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"}},"id":54425,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3810:21:105","memberName":"getCustodiansByDomain","nodeType":"MemberAccess","referencedDeclaration":56819,"src":"3794:37:105","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":54430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3794:74:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3764:104:105"},{"assignments":[54433],"declarations":[{"constant":false,"id":54433,"mutability":"mutable","name":"totalStake","nameLocation":"3886:10:105","nodeType":"VariableDeclaration","scope":54461,"src":"3878:18:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54432,"name":"uint256","nodeType":"ElementaryTypeName","src":"3878:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54435,"initialValue":{"hexValue":"30","id":54434,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3899:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3878:22:105"},{"body":{"id":54457,"nodeType":"Block","src":"3958:141:105","statements":[{"expression":{"id":54455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54447,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54433,"src":"4027:10:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":54449,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54412,"src":"4057:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":54450,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54423,"src":"4064:10:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":54452,"indexExpression":{"id":54451,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54437,"src":"4075:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4064:13:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54453,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54414,"src":"4079:8:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54448,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54410,"src":"4041:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) view returns (uint256)"}},"id":54454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4041:47:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4027:61:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54456,"nodeType":"ExpressionStatement","src":"4027:61:105"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54443,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54440,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54437,"src":"3930:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":54441,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54423,"src":"3934:10:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":54442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3945:6:105","memberName":"length","nodeType":"MemberAccess","src":"3934:17:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3930:21:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54458,"initializationExpression":{"assignments":[54437],"declarations":[{"constant":false,"id":54437,"mutability":"mutable","name":"i","nameLocation":"3923:1:105","nodeType":"VariableDeclaration","scope":54458,"src":"3915:9:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54436,"name":"uint256","nodeType":"ElementaryTypeName","src":"3915:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54439,"initialValue":{"hexValue":"30","id":54438,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3927:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3915:13:105"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":54445,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3953:3:105","subExpression":{"id":54444,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54437,"src":"3953:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54446,"nodeType":"ExpressionStatement","src":"3953:3:105"},"nodeType":"ForStatement","src":"3910:189:105"},{"expression":{"id":54459,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54433,"src":"4115:10:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54418,"id":54460,"nodeType":"Return","src":"4108:17:105"}]},"functionSelector":"f34d002a","implemented":true,"kind":"function","modifiers":[],"name":"computeAllStakeAtEpoch","nameLocation":"3646:22:105","parameters":{"id":54415,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54412,"mutability":"mutable","name":"epoch","nameLocation":"3686:5:105","nodeType":"VariableDeclaration","scope":54462,"src":"3678:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54411,"name":"uint256","nodeType":"ElementaryTypeName","src":"3678:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54414,"mutability":"mutable","name":"attester","nameLocation":"3709:8:105","nodeType":"VariableDeclaration","scope":54462,"src":"3701:16:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54413,"name":"address","nodeType":"ElementaryTypeName","src":"3701:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"3668:55:105"},"returnParameters":{"id":54418,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54417,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54462,"src":"3745:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54416,"name":"uint256","nodeType":"ElementaryTypeName","src":"3745:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3744:9:105"},"scope":55118,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54479,"nodeType":"FunctionDefinition","src":"4202:198:105","nodes":[],"body":{"id":54478,"nodeType":"Block","src":"4321:79:105","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54472,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54373,"src":"4354:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":54473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4354:17:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":54474,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54464,"src":"4373:9:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54475,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54466,"src":"4384:8:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54471,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54410,"src":"4338:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) view returns (uint256)"}},"id":54476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4338:55:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54470,"id":54477,"nodeType":"Return","src":"4331:62:105"}]},"functionSelector":"bc90afbb","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentEpochStake","nameLocation":"4211:20:105","parameters":{"id":54467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54464,"mutability":"mutable","name":"custodian","nameLocation":"4249:9:105","nodeType":"VariableDeclaration","scope":54479,"src":"4241:17:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54463,"name":"address","nodeType":"ElementaryTypeName","src":"4241:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54466,"mutability":"mutable","name":"attester","nameLocation":"4276:8:105","nodeType":"VariableDeclaration","scope":54479,"src":"4268:16:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54465,"name":"address","nodeType":"ElementaryTypeName","src":"4268:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4231:59:105"},"returnParameters":{"id":54470,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54469,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54479,"src":"4312:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54468,"name":"uint256","nodeType":"ElementaryTypeName","src":"4312:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4311:9:105"},"scope":55118,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54493,"nodeType":"FunctionDefinition","src":"4406:174:105","nodes":[],"body":{"id":54492,"nodeType":"Block","src":"4505:75:105","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54487,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54373,"src":"4545:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":54488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4545:17:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":54489,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54481,"src":"4564:8:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54486,"name":"computeAllStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54462,"src":"4522:22:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":54490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4522:51:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54485,"id":54491,"nodeType":"Return","src":"4515:58:105"}]},"functionSelector":"60fea5dd","implemented":true,"kind":"function","modifiers":[],"name":"computeAllCurrentEpochStake","nameLocation":"4415:27:105","parameters":{"id":54482,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54481,"mutability":"mutable","name":"attester","nameLocation":"4460:8:105","nodeType":"VariableDeclaration","scope":54493,"src":"4452:16:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54480,"name":"address","nodeType":"ElementaryTypeName","src":"4452:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4442:32:105"},"returnParameters":{"id":54485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54484,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54493,"src":"4496:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54483,"name":"uint256","nodeType":"ElementaryTypeName","src":"4496:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4495:9:105"},"scope":55118,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54513,"nodeType":"FunctionDefinition","src":"4632:285:105","nodes":[],"body":{"id":54512,"nodeType":"Block","src":"4749:168:105","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":54506,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4841:4:105","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}],"id":54505,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4833:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54504,"name":"address","nodeType":"ElementaryTypeName","src":"4833:7:105","typeDescriptions":{}}},"id":54507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4833:13:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54508,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54495,"src":"4864:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":54509,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54497,"src":"4887:9:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":54502,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55129,"src":"4778:15:105","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"}},"id":54503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4794:21:105","memberName":"getTotalStakeForEpoch","nodeType":"MemberAccess","referencedDeclaration":56783,"src":"4778:37:105","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view external returns (uint256)"}},"id":54510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4778:132:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54501,"id":54511,"nodeType":"Return","src":"4759:151:105"}]},"functionSelector":"c6e1b9db","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStakeForEpoch","nameLocation":"4641:21:105","parameters":{"id":54498,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54495,"mutability":"mutable","name":"epoch","nameLocation":"4680:5:105","nodeType":"VariableDeclaration","scope":54513,"src":"4672:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54494,"name":"uint256","nodeType":"ElementaryTypeName","src":"4672:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54497,"mutability":"mutable","name":"custodian","nameLocation":"4703:9:105","nodeType":"VariableDeclaration","scope":54513,"src":"4695:17:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54496,"name":"address","nodeType":"ElementaryTypeName","src":"4695:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4662:56:105"},"returnParameters":{"id":54501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54500,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54513,"src":"4740:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54499,"name":"uint256","nodeType":"ElementaryTypeName","src":"4740:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4739:9:105"},"scope":55118,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54531,"nodeType":"FunctionDefinition","src":"4923:229:105","nodes":[],"body":{"id":54530,"nodeType":"Block","src":"4963:189:105","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":54518,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"5002:18:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54519,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"5022:3:105","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54520,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5026:6:105","memberName":"sender","nodeType":"MemberAccess","src":"5022:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54517,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39139,"src":"4994:7:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":54521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4994:39:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e5f4f4e4c59","id":54522,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"5047:39:105","typeDescriptions":{"typeIdentifier":"t_stringliteral_b077b31285a16307062fcb4fde0e57e8246ea6dc3cdd1c5dd5880d32a26fbf54","typeString":"literal_string \"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY\""},"value":"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b077b31285a16307062fcb4fde0e57e8246ea6dc3cdd1c5dd5880d32a26fbf54","typeString":"literal_string \"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY\""}],"id":54516,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4973:7:105","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4973:123:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54524,"nodeType":"ExpressionStatement","src":"4973:123:105"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":54525,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55129,"src":"5106:15:105","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"}},"id":54527,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5122:21:105","memberName":"acceptGenesisCeremony","nodeType":"MemberAccess","referencedDeclaration":56696,"src":"5106:37:105","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":54528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5106:39:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54529,"nodeType":"ExpressionStatement","src":"5106:39:105"}]},"functionSelector":"92a2ebf3","implemented":true,"kind":"function","modifiers":[],"name":"acceptGenesisCeremony","nameLocation":"4932:21:105","parameters":{"id":54514,"nodeType":"ParameterList","parameters":[],"src":"4953:2:105"},"returnParameters":{"id":54515,"nodeType":"ParameterList","parameters":[],"src":"4963:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54580,"nodeType":"FunctionDefinition","src":"5158:471:105","nodes":[],"body":{"id":54579,"nodeType":"Block","src":"5255:374:105","nodes":[],"statements":[{"assignments":[54542],"declarations":[{"constant":false,"id":54542,"mutability":"mutable","name":"custodians","nameLocation":"5282:10:105","nodeType":"VariableDeclaration","scope":54579,"src":"5265:27:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54540,"name":"address","nodeType":"ElementaryTypeName","src":"5265:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54541,"nodeType":"ArrayTypeName","src":"5265:9:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":54550,"initialValue":{"arguments":[{"arguments":[{"id":54547,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5354:4:105","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}],"id":54546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5346:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54545,"name":"address","nodeType":"ElementaryTypeName","src":"5346:7:105","typeDescriptions":{}}},"id":54548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5346:13:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":54543,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55129,"src":"5295:15:105","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"}},"id":54544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5311:21:105","memberName":"getCustodiansByDomain","nodeType":"MemberAccess","referencedDeclaration":56819,"src":"5295:37:105","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":54549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5295:74:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"5265:104:105"},{"assignments":[54552],"declarations":[{"constant":false,"id":54552,"mutability":"mutable","name":"totalStake","nameLocation":"5387:10:105","nodeType":"VariableDeclaration","scope":54579,"src":"5379:18:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54551,"name":"uint256","nodeType":"ElementaryTypeName","src":"5379:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54554,"initialValue":{"hexValue":"30","id":54553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5400:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5379:22:105"},{"body":{"id":54575,"nodeType":"Block","src":"5459:137:105","statements":[{"expression":{"id":54573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54566,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54552,"src":"5528:10:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":54568,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54533,"src":"5564:5:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":54569,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54542,"src":"5571:10:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":54571,"indexExpression":{"id":54570,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54556,"src":"5582:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5571:13:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54567,"name":"getTotalStakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54513,"src":"5542:21:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":54572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5542:43:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5528:57:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54574,"nodeType":"ExpressionStatement","src":"5528:57:105"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54562,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54559,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54556,"src":"5431:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":54560,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54542,"src":"5435:10:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":54561,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5446:6:105","memberName":"length","nodeType":"MemberAccess","src":"5435:17:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5431:21:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54576,"initializationExpression":{"assignments":[54556],"declarations":[{"constant":false,"id":54556,"mutability":"mutable","name":"i","nameLocation":"5424:1:105","nodeType":"VariableDeclaration","scope":54576,"src":"5416:9:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54555,"name":"uint256","nodeType":"ElementaryTypeName","src":"5416:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54558,"initialValue":{"hexValue":"30","id":54557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5428:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5416:13:105"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":54564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5454:3:105","subExpression":{"id":54563,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54556,"src":"5454:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54565,"nodeType":"ExpressionStatement","src":"5454:3:105"},"nodeType":"ForStatement","src":"5411:185:105"},{"expression":{"id":54577,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54552,"src":"5612:10:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54537,"id":54578,"nodeType":"Return","src":"5605:17:105"}]},"functionSelector":"6542384f","implemented":true,"kind":"function","modifiers":[],"name":"computeAllTotalStakeForEpoch","nameLocation":"5167:28:105","parameters":{"id":54534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54533,"mutability":"mutable","name":"epoch","nameLocation":"5213:5:105","nodeType":"VariableDeclaration","scope":54580,"src":"5205:13:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54532,"name":"uint256","nodeType":"ElementaryTypeName","src":"5205:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5195:29:105"},"returnParameters":{"id":54537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54536,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54580,"src":"5246:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54535,"name":"uint256","nodeType":"ElementaryTypeName","src":"5246:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5245:9:105"},"scope":55118,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54594,"nodeType":"FunctionDefinition","src":"5685:176:105","nodes":[],"body":{"id":54593,"nodeType":"Block","src":"5786:75:105","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54588,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54373,"src":"5825:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":54589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5825:17:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":54590,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54582,"src":"5844:9:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54587,"name":"getTotalStakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54513,"src":"5803:21:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":54591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5803:51:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54586,"id":54592,"nodeType":"Return","src":"5796:58:105"}]},"functionSelector":"b274a935","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStakeForCurrentEpoch","nameLocation":"5694:28:105","parameters":{"id":54583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54582,"mutability":"mutable","name":"custodian","nameLocation":"5740:9:105","nodeType":"VariableDeclaration","scope":54594,"src":"5732:17:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54581,"name":"address","nodeType":"ElementaryTypeName","src":"5732:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5722:33:105"},"returnParameters":{"id":54586,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54585,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54594,"src":"5777:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54584,"name":"uint256","nodeType":"ElementaryTypeName","src":"5777:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5776:9:105"},"scope":55118,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54605,"nodeType":"FunctionDefinition","src":"5867:176:105","nodes":[],"body":{"id":54604,"nodeType":"Block","src":"5972:71:105","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":54600,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54373,"src":"6018:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":54601,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6018:17:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54599,"name":"computeAllTotalStakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54580,"src":"5989:28:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":54602,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5989:47:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":54598,"id":54603,"nodeType":"Return","src":"5982:54:105"}]},"functionSelector":"1dfcce8c","implemented":true,"kind":"function","modifiers":[],"name":"computeAllTotalStakeForCurrentEpoch","nameLocation":"5876:35:105","parameters":{"id":54595,"nodeType":"ParameterList","parameters":[],"src":"5911:2:105"},"returnParameters":{"id":54598,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54597,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54605,"src":"5959:7:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54596,"name":"uint256","nodeType":"ElementaryTypeName","src":"5959:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5958:9:105"},"scope":55118,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54622,"nodeType":"FunctionDefinition","src":"6049:199:105","nodes":[],"body":{"id":54621,"nodeType":"Block","src":"6195:53:105","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":54615,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55151,"src":"6212:11:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_BlockCommitment_$55140_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct MCRStorage.BlockCommitment storage ref))"}},"id":54617,"indexExpression":{"id":54616,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54607,"src":"6224:6:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6212:19:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_BlockCommitment_$55140_storage_$","typeString":"mapping(address => struct MCRStorage.BlockCommitment storage ref)"}},"id":54619,"indexExpression":{"id":54618,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54609,"src":"6232:8:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6212:29:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage","typeString":"struct MCRStorage.BlockCommitment storage ref"}},"functionReturnParameters":54614,"id":54620,"nodeType":"Return","src":"6205:36:105"}]},"functionSelector":"0a0b81cc","implemented":true,"kind":"function","modifiers":[],"name":"getValidatorCommitmentAtBlockHeight","nameLocation":"6058:35:105","parameters":{"id":54610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54607,"mutability":"mutable","name":"height","nameLocation":"6111:6:105","nodeType":"VariableDeclaration","scope":54622,"src":"6103:14:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54606,"name":"uint256","nodeType":"ElementaryTypeName","src":"6103:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54609,"mutability":"mutable","name":"attester","nameLocation":"6135:8:105","nodeType":"VariableDeclaration","scope":54622,"src":"6127:16:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54608,"name":"address","nodeType":"ElementaryTypeName","src":"6127:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6093:56:105"},"returnParameters":{"id":54614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54613,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54622,"src":"6171:22:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment"},"typeName":{"id":54612,"nodeType":"UserDefinedTypeName","pathNode":{"id":54611,"name":"BlockCommitment","nameLocations":["6171:15:105"],"nodeType":"IdentifierPath","referencedDeclaration":55140,"src":"6171:15:105"},"referencedDeclaration":55140,"src":"6171:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage_ptr","typeString":"struct MCRStorage.BlockCommitment"}},"visibility":"internal"}],"src":"6170:24:105"},"scope":55118,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54647,"nodeType":"FunctionDefinition","src":"6313:355:105","nodes":[],"body":{"id":54646,"nodeType":"Block","src":"6404:264:105","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":54630,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54189,"src":"6443:16:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54631,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6461:3:105","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6465:6:105","memberName":"sender","nodeType":"MemberAccess","src":"6461:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54629,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39139,"src":"6435:7:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":54633,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6435:37:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5345545f4c4153545f41434345505445445f434f4d4d49544d454e545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":54634,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6486:65:105","typeDescriptions":{"typeIdentifier":"t_stringliteral_eb712219b94520b4470c018f6c762304434da9ee15c77ce6b40fd64ba5f797ad","typeString":"literal_string \"SET_LAST_ACCEPTED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"SET_LAST_ACCEPTED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_eb712219b94520b4470c018f6c762304434da9ee15c77ce6b40fd64ba5f797ad","typeString":"literal_string \"SET_LAST_ACCEPTED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":54628,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6414:7:105","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54635,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6414:147:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54636,"nodeType":"ExpressionStatement","src":"6414:147:105"},{"expression":{"id":54644,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":54637,"name":"versionedAcceptedBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55171,"src":"6571:23:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_BlockCommitment_$55140_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct MCRStorage.BlockCommitment storage ref))"}},"id":54641,"indexExpression":{"id":54638,"name":"acceptedBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"6595:21:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6571:46:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_BlockCommitment_$55140_storage_$","typeString":"mapping(uint256 => struct MCRStorage.BlockCommitment storage ref)"}},"id":54642,"indexExpression":{"expression":{"id":54639,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54625,"src":"6618:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":54640,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"6634:6:105","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":55135,"src":"6618:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6571:70:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage","typeString":"struct MCRStorage.BlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54643,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54625,"src":"6644:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"src":"6571:88:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage","typeString":"struct MCRStorage.BlockCommitment storage ref"}},"id":54645,"nodeType":"ExpressionStatement","src":"6571:88:105"}]},"functionSelector":"53cd9e3c","implemented":true,"kind":"function","modifiers":[],"name":"setAcceptedCommitmentAtBlockHeight","nameLocation":"6322:34:105","parameters":{"id":54626,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54625,"mutability":"mutable","name":"blockCommitment","nameLocation":"6380:15:105","nodeType":"VariableDeclaration","scope":54647,"src":"6357:38:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment"},"typeName":{"id":54624,"nodeType":"UserDefinedTypeName","pathNode":{"id":54623,"name":"BlockCommitment","nameLocations":["6357:15:105"],"nodeType":"IdentifierPath","referencedDeclaration":55140,"src":"6357:15:105"},"referencedDeclaration":55140,"src":"6357:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage_ptr","typeString":"struct MCRStorage.BlockCommitment"}},"visibility":"internal"}],"src":"6356:40:105"},"returnParameters":{"id":54627,"nodeType":"ParameterList","parameters":[],"src":"6404:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54666,"nodeType":"FunctionDefinition","src":"6719:257:105","nodes":[],"body":{"id":54665,"nodeType":"Block","src":"6778:198:105","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":54654,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54189,"src":"6817:16:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54655,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"6835:3:105","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6839:6:105","memberName":"sender","nodeType":"MemberAccess","src":"6835:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54653,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39139,"src":"6809:7:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":54657,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6809:37:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5345545f4c4153545f41434345505445445f424c4f434b5f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":54658,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"6860:57:105","typeDescriptions":{"typeIdentifier":"t_stringliteral_d2dac7dca18283c0beccebe91d8cbd37ac458eb7392d0f631caf887f9c53dad9","typeString":"literal_string \"SET_LAST_ACCEPTED_BLOCK_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"SET_LAST_ACCEPTED_BLOCK_HEIGHT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_d2dac7dca18283c0beccebe91d8cbd37ac458eb7392d0f631caf887f9c53dad9","typeString":"literal_string \"SET_LAST_ACCEPTED_BLOCK_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":54652,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"6788:7:105","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6788:139:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54660,"nodeType":"ExpressionStatement","src":"6788:139:105"},{"expression":{"id":54663,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54661,"name":"lastAcceptedBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55133,"src":"6937:23:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54662,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54649,"src":"6963:6:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6937:32:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54664,"nodeType":"ExpressionStatement","src":"6937:32:105"}]},"functionSelector":"5a912c83","implemented":true,"kind":"function","modifiers":[],"name":"setLastAcceptedBlockHeight","nameLocation":"6728:26:105","parameters":{"id":54650,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54649,"mutability":"mutable","name":"height","nameLocation":"6763:6:105","nodeType":"VariableDeclaration","scope":54666,"src":"6755:14:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54648,"name":"uint256","nodeType":"ElementaryTypeName","src":"6755:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6754:16:105"},"returnParameters":{"id":54651,"nodeType":"ParameterList","parameters":[],"src":"6778:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54708,"nodeType":"FunctionDefinition","src":"7166:586:105","nodes":[],"body":{"id":54707,"nodeType":"Block","src":"7244:508:105","nodes":[],"statements":[{"expression":{"arguments":[{"hexValue":"666f7263654c6174657374436f6d6d69746d656e742063616c6c65642062793a","id":54675,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7266:34:105","typeDescriptions":{"typeIdentifier":"t_stringliteral_6bf3a4b27c9865f6edf916446439f0fcb863605c9ad30161c8f975a092ee91c9","typeString":"literal_string \"forceLatestCommitment called by:\""},"value":"forceLatestCommitment called by:"},{"expression":{"id":54676,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7302:3:105","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7306:6:105","memberName":"sender","nodeType":"MemberAccess","src":"7302:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_6bf3a4b27c9865f6edf916446439f0fcb863605c9ad30161c8f975a092ee91c9","typeString":"literal_string \"forceLatestCommitment called by:\""},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":54672,"name":"console","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":24306,"src":"7254:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_console_$24306_$","typeString":"type(library console)"}},"id":54674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7262:3:105","memberName":"log","nodeType":"MemberAccess","referencedDeclaration":17001,"src":"7254:11:105","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_string_memory_ptr_$_t_address_$returns$__$","typeString":"function (string memory,address) pure"}},"id":54678,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7254:59:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54679,"nodeType":"ExpressionStatement","src":"7254:59:105"},{"expression":{"arguments":[{"arguments":[{"id":54682,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54189,"src":"7352:16:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54683,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7370:3:105","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7374:6:105","memberName":"sender","nodeType":"MemberAccess","src":"7370:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54681,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39139,"src":"7344:7:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":54685,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7344:37:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":54686,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"7395:50:105","typeDescriptions":{"typeIdentifier":"t_stringliteral_769db6d293c786b13b107ddcfdc491f9fdfa9dc0a09944362f64328186fea1df","typeString":"literal_string \"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_769db6d293c786b13b107ddcfdc491f9fdfa9dc0a09944362f64328186fea1df","typeString":"literal_string \"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":54680,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"7323:7:105","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7323:132:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54688,"nodeType":"ExpressionStatement","src":"7323:132:105"},{"expression":{"id":54691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54689,"name":"acceptedBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"7562:21:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":54690,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"7587:1:105","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"7562:26:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54692,"nodeType":"ExpressionStatement","src":"7562:26:105"},{"expression":{"id":54700,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":54693,"name":"versionedAcceptedBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55171,"src":"7598:23:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_BlockCommitment_$55140_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct MCRStorage.BlockCommitment storage ref))"}},"id":54697,"indexExpression":{"id":54694,"name":"acceptedBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"7622:21:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7598:46:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_BlockCommitment_$55140_storage_$","typeString":"mapping(uint256 => struct MCRStorage.BlockCommitment storage ref)"}},"id":54698,"indexExpression":{"expression":{"id":54695,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54669,"src":"7645:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":54696,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7661:6:105","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":55135,"src":"7645:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7598:70:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage","typeString":"struct MCRStorage.BlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54699,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54669,"src":"7671:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"src":"7598:88:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage","typeString":"struct MCRStorage.BlockCommitment storage ref"}},"id":54701,"nodeType":"ExpressionStatement","src":"7598:88:105"},{"expression":{"id":54705,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54702,"name":"lastAcceptedBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55133,"src":"7696:23:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":54703,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54669,"src":"7722:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":54704,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7738:6:105","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":55135,"src":"7722:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7696:48:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54706,"nodeType":"ExpressionStatement","src":"7696:48:105"}]},"functionSelector":"08c7050f","implemented":true,"kind":"function","modifiers":[],"name":"forceLatestCommitment","nameLocation":"7175:21:105","parameters":{"id":54670,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54669,"mutability":"mutable","name":"blockCommitment","nameLocation":"7220:15:105","nodeType":"VariableDeclaration","scope":54708,"src":"7197:38:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment"},"typeName":{"id":54668,"nodeType":"UserDefinedTypeName","pathNode":{"id":54667,"name":"BlockCommitment","nameLocations":["7197:15:105"],"nodeType":"IdentifierPath","referencedDeclaration":55140,"src":"7197:15:105"},"referencedDeclaration":55140,"src":"7197:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage_ptr","typeString":"struct MCRStorage.BlockCommitment"}},"visibility":"internal"}],"src":"7196:40:105"},"returnParameters":{"id":54671,"nodeType":"ParameterList","parameters":[],"src":"7244:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54723,"nodeType":"FunctionDefinition","src":"7758:183:105","nodes":[],"body":{"id":54722,"nodeType":"Block","src":"7863:78:105","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":54716,"name":"versionedAcceptedBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55171,"src":"7880:23:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_BlockCommitment_$55140_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct MCRStorage.BlockCommitment storage ref))"}},"id":54718,"indexExpression":{"id":54717,"name":"acceptedBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"7904:21:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7880:46:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_BlockCommitment_$55140_storage_$","typeString":"mapping(uint256 => struct MCRStorage.BlockCommitment storage ref)"}},"id":54720,"indexExpression":{"id":54719,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54710,"src":"7927:6:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7880:54:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage","typeString":"struct MCRStorage.BlockCommitment storage ref"}},"functionReturnParameters":54715,"id":54721,"nodeType":"Return","src":"7873:61:105"}]},"functionSelector":"e1ffa44c","implemented":true,"kind":"function","modifiers":[],"name":"getAcceptedCommitmentAtBlockHeight","nameLocation":"7767:34:105","parameters":{"id":54711,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54710,"mutability":"mutable","name":"height","nameLocation":"7810:6:105","nodeType":"VariableDeclaration","scope":54723,"src":"7802:14:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54709,"name":"uint256","nodeType":"ElementaryTypeName","src":"7802:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7801:16:105"},"returnParameters":{"id":54715,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54714,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54723,"src":"7839:22:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment"},"typeName":{"id":54713,"nodeType":"UserDefinedTypeName","pathNode":{"id":54712,"name":"BlockCommitment","nameLocations":["7839:15:105"],"nodeType":"IdentifierPath","referencedDeclaration":55140,"src":"7839:15:105"},"referencedDeclaration":55140,"src":"7839:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage_ptr","typeString":"struct MCRStorage.BlockCommitment"}},"visibility":"internal"}],"src":"7838:24:105"},"scope":55118,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54738,"nodeType":"FunctionDefinition","src":"7947:138:105","nodes":[],"body":{"id":54737,"nodeType":"Block","src":"8010:75:105","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":54733,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8072:4:105","typeDescriptions":{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MCR_$55118","typeString":"contract MCR"}],"id":54732,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8064:7:105","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":54731,"name":"address","nodeType":"ElementaryTypeName","src":"8064:7:105","typeDescriptions":{}}},"id":54734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8064:13:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":54729,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55129,"src":"8027:15:105","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"}},"id":54730,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8043:20:105","memberName":"getAttestersByDomain","nodeType":"MemberAccess","referencedDeclaration":56827,"src":"8027:36:105","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":54735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8027:51:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":54728,"id":54736,"nodeType":"Return","src":"8020:58:105"}]},"functionSelector":"4ed7e435","implemented":true,"kind":"function","modifiers":[],"name":"getAttesters","nameLocation":"7956:12:105","parameters":{"id":54724,"nodeType":"ParameterList","parameters":[],"src":"7968:2:105"},"returnParameters":{"id":54728,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54727,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54738,"src":"7992:16:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54725,"name":"address","nodeType":"ElementaryTypeName","src":"7992:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54726,"nodeType":"ArrayTypeName","src":"7992:9:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"7991:18:105"},"scope":55118,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":54827,"nodeType":"FunctionDefinition","src":"8163:2197:105","nodes":[],"body":{"id":54826,"nodeType":"Block","src":"8294:2066:105","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54755,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":54747,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55151,"src":"8376:11:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_BlockCommitment_$55140_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct MCRStorage.BlockCommitment storage ref))"}},"id":54750,"indexExpression":{"expression":{"id":54748,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54744,"src":"8388:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":54749,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8404:6:105","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":55135,"src":"8388:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8376:35:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_BlockCommitment_$55140_storage_$","typeString":"mapping(address => struct MCRStorage.BlockCommitment storage ref)"}},"id":54752,"indexExpression":{"id":54751,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54741,"src":"8412:8:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8376:45:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage","typeString":"struct MCRStorage.BlockCommitment storage ref"}},"id":54753,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8422:6:105","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":55135,"src":"8376:52:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":54754,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8432:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8376:57:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54759,"nodeType":"IfStatement","src":"8372:108:105","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":54756,"name":"AttesterAlreadyCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55200,"src":"8454:24:105","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":54757,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8454:26:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":54758,"nodeType":"RevertStatement","src":"8447:33:105"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54760,"name":"lastAcceptedBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55133,"src":"8854:23:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":54761,"name":"leadingBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55131,"src":"8880:21:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8854:47:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":54763,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54744,"src":"8916:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":54764,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"8932:6:105","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":55135,"src":"8916:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8854:84:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54769,"nodeType":"IfStatement","src":"8837:145:105","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":54766,"name":"AttesterAlreadyCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55200,"src":"8956:24:105","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":54767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8956:26:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":54768,"nodeType":"RevertStatement","src":"8949:33:105"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":54770,"name":"blockHeightEpochAssignments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55144,"src":"9084:27:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":54773,"indexExpression":{"expression":{"id":54771,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54744,"src":"9112:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":54772,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9128:6:105","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":55135,"src":"9112:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9084:51:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":54774,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9139:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9084:56:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54785,"nodeType":"IfStatement","src":"9080:291:105","trueBody":{"id":54784,"nodeType":"Block","src":"9142:229:105","statements":[{"expression":{"id":54782,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":54776,"name":"blockHeightEpochAssignments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55144,"src":"9255:27:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":54779,"indexExpression":{"expression":{"id":54777,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54744,"src":"9300:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":54778,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9316:6:105","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":55135,"src":"9300:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9255:81:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":54780,"name":"getEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54359,"src":"9339:19:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":54781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9339:21:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9255:105:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54783,"nodeType":"ExpressionStatement","src":"9255:105:105"}]}},{"expression":{"id":54793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":54786,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55151,"src":"9427:11:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_BlockCommitment_$55140_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct MCRStorage.BlockCommitment storage ref))"}},"id":54790,"indexExpression":{"expression":{"id":54787,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54744,"src":"9439:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":54788,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9455:6:105","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":55135,"src":"9439:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9427:35:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_BlockCommitment_$55140_storage_$","typeString":"mapping(address => struct MCRStorage.BlockCommitment storage ref)"}},"id":54791,"indexExpression":{"id":54789,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54741,"src":"9463:8:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9427:45:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage","typeString":"struct MCRStorage.BlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54792,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54744,"src":"9475:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"src":"9427:63:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage","typeString":"struct MCRStorage.BlockCommitment storage ref"}},"id":54794,"nodeType":"ExpressionStatement","src":"9427:63:105"},{"assignments":[54796],"declarations":[{"constant":false,"id":54796,"mutability":"mutable","name":"allCurrentEpochStake","nameLocation":"9560:20:105","nodeType":"VariableDeclaration","scope":54826,"src":"9552:28:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54795,"name":"uint256","nodeType":"ElementaryTypeName","src":"9552:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54800,"initialValue":{"arguments":[{"id":54798,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54741,"src":"9611:8:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":54797,"name":"computeAllCurrentEpochStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54493,"src":"9583:27:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":54799,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9583:37:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9552:68:105"},{"expression":{"id":54809,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":54801,"name":"commitmentStakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55157,"src":"9630:16:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":54806,"indexExpression":{"expression":{"id":54802,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54744,"src":"9647:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":54803,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9663:6:105","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":55135,"src":"9647:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9630:40:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":54807,"indexExpression":{"expression":{"id":54804,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54744,"src":"9684:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":54805,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9700:10:105","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":55137,"src":"9684:26:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"9630:90:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":54808,"name":"allCurrentEpochStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54796,"src":"9724:20:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9630:114:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54810,"nodeType":"ExpressionStatement","src":"9630:114:105"},{"eventCall":{"arguments":[{"expression":{"id":54812,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54744,"src":"9798:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":54813,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9814:7:105","memberName":"blockId","nodeType":"MemberAccess","referencedDeclaration":55139,"src":"9798:23:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54814,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54744,"src":"9835:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":54815,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9851:10:105","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":55137,"src":"9835:26:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54816,"name":"allCurrentEpochStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54796,"src":"9875:20:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54811,"name":"BlockCommitmentSubmitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55196,"src":"9760:24:105","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,uint256)"}},"id":54817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9760:145:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54818,"nodeType":"EmitStatement","src":"9755:150:105"},{"body":{"id":54824,"nodeType":"Block","src":"10352:2:105","statements":[]},"condition":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54822,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54820,"name":"lastAcceptedBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55133,"src":"10322:23:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":54821,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10348:1:105","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10322:27:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54819,"name":"tickOnBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54920,"src":"10304:17:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) returns (bool)"}},"id":54823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10304:46:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54825,"nodeType":"WhileStatement","src":"10297:57:105"}]},"documentation":{"id":54739,"nodeType":"StructuredDocumentation","src":"8091:67:105","text":" @dev submits a block commitment for an attester."},"implemented":true,"kind":"function","modifiers":[],"name":"submitBlockCommitmentForAttester","nameLocation":"8172:32:105","parameters":{"id":54745,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54741,"mutability":"mutable","name":"attester","nameLocation":"8222:8:105","nodeType":"VariableDeclaration","scope":54827,"src":"8214:16:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54740,"name":"address","nodeType":"ElementaryTypeName","src":"8214:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":54744,"mutability":"mutable","name":"blockCommitment","nameLocation":"8263:15:105","nodeType":"VariableDeclaration","scope":54827,"src":"8240:38:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment"},"typeName":{"id":54743,"nodeType":"UserDefinedTypeName","pathNode":{"id":54742,"name":"BlockCommitment","nameLocations":["8240:15:105"],"nodeType":"IdentifierPath","referencedDeclaration":55140,"src":"8240:15:105"},"referencedDeclaration":55140,"src":"8240:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage_ptr","typeString":"struct MCRStorage.BlockCommitment"}},"visibility":"internal"}],"src":"8204:80:105"},"returnParameters":{"id":54746,"nodeType":"ParameterList","parameters":[],"src":"8294:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":54920,"nodeType":"FunctionDefinition","src":"10382:1799:105","nodes":[],"body":{"id":54919,"nodeType":"Block","src":"10454:1727:105","nodes":[],"statements":[{"assignments":[54835],"declarations":[{"constant":false,"id":54835,"mutability":"mutable","name":"blockEpoch","nameLocation":"10526:10:105","nodeType":"VariableDeclaration","scope":54919,"src":"10518:18:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54834,"name":"uint256","nodeType":"ElementaryTypeName","src":"10518:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54839,"initialValue":{"baseExpression":{"id":54836,"name":"blockHeightEpochAssignments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55144,"src":"10539:27:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":54838,"indexExpression":{"id":54837,"name":"blockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54829,"src":"10567:11:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10539:40:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10518:61:105"},{"body":{"id":54847,"nodeType":"Block","src":"10947:40:105","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":54844,"name":"rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55117,"src":"10961:13:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54845,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10961:15:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54846,"nodeType":"ExpressionStatement","src":"10961:15:105"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54843,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":54840,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54373,"src":"10915:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":54841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10915:17:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":54842,"name":"blockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54835,"src":"10935:10:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10915:30:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54848,"nodeType":"WhileStatement","src":"10908:79:105"},{"assignments":[54850],"declarations":[{"constant":false,"id":54850,"mutability":"mutable","name":"supermajority","nameLocation":"11166:13:105","nodeType":"VariableDeclaration","scope":54919,"src":"11158:21:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54849,"name":"uint256","nodeType":"ElementaryTypeName","src":"11158:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54859,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54858,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":54851,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11183:1:105","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":54853,"name":"blockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54835,"src":"11216:10:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54852,"name":"computeAllTotalStakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54580,"src":"11187:28:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":54854,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11187:40:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11183:44:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":54856,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"11182:46:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":54857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11243:1:105","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"11182:62:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11158:86:105"},{"assignments":[54864],"declarations":[{"constant":false,"id":54864,"mutability":"mutable","name":"attesters","nameLocation":"11271:9:105","nodeType":"VariableDeclaration","scope":54919,"src":"11254:26:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54862,"name":"address","nodeType":"ElementaryTypeName","src":"11254:7:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54863,"nodeType":"ArrayTypeName","src":"11254:9:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":54867,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":54865,"name":"getAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54738,"src":"11283:12:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":54866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11283:14:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"11254:43:105"},{"body":{"id":54915,"nodeType":"Block","src":"11396:756:105","statements":[{"assignments":[54880],"declarations":[{"constant":false,"id":54880,"mutability":"mutable","name":"attester","nameLocation":"11418:8:105","nodeType":"VariableDeclaration","scope":54915,"src":"11410:16:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54879,"name":"address","nodeType":"ElementaryTypeName","src":"11410:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54884,"initialValue":{"baseExpression":{"id":54881,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54864,"src":"11429:9:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":54883,"indexExpression":{"id":54882,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54869,"src":"11439:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11429:12:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"11410:31:105"},{"assignments":[54887],"declarations":[{"constant":false,"id":54887,"mutability":"mutable","name":"blockCommitment","nameLocation":"11548:15:105","nodeType":"VariableDeclaration","scope":54915,"src":"11525:38:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment"},"typeName":{"id":54886,"nodeType":"UserDefinedTypeName","pathNode":{"id":54885,"name":"BlockCommitment","nameLocations":["11525:15:105"],"nodeType":"IdentifierPath","referencedDeclaration":55140,"src":"11525:15:105"},"referencedDeclaration":55140,"src":"11525:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage_ptr","typeString":"struct MCRStorage.BlockCommitment"}},"visibility":"internal"}],"id":54893,"initialValue":{"baseExpression":{"baseExpression":{"id":54888,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55151,"src":"11566:11:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_BlockCommitment_$55140_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct MCRStorage.BlockCommitment storage ref))"}},"id":54890,"indexExpression":{"id":54889,"name":"blockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54829,"src":"11578:11:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11566:24:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_BlockCommitment_$55140_storage_$","typeString":"mapping(address => struct MCRStorage.BlockCommitment storage ref)"}},"id":54892,"indexExpression":{"id":54891,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54880,"src":"11608:8:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11566:64:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage","typeString":"struct MCRStorage.BlockCommitment storage ref"}},"nodeType":"VariableDeclarationStatement","src":"11525:105:105"},{"assignments":[54895],"declarations":[{"constant":false,"id":54895,"mutability":"mutable","name":"totalStakeOnCommitment","nameLocation":"11708:22:105","nodeType":"VariableDeclaration","scope":54915,"src":"11700:30:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54894,"name":"uint256","nodeType":"ElementaryTypeName","src":"11700:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54903,"initialValue":{"baseExpression":{"baseExpression":{"id":54896,"name":"commitmentStakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55157,"src":"11733:16:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":54899,"indexExpression":{"expression":{"id":54897,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54887,"src":"11767:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":54898,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11783:6:105","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":55135,"src":"11767:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11733:70:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":54902,"indexExpression":{"expression":{"id":54900,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54887,"src":"11804:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":54901,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11820:10:105","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":55137,"src":"11804:26:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11733:98:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11700:131:105"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54906,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54904,"name":"totalStakeOnCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54895,"src":"11850:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":54905,"name":"supermajority","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54850,"src":"11875:13:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11850:38:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54914,"nodeType":"IfStatement","src":"11846:296:105","trueBody":{"id":54913,"nodeType":"Block","src":"11890:252:105","statements":[{"expression":{"arguments":[{"id":54908,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54887,"src":"12022:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}],"id":54907,"name":"_acceptBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55100,"src":"11999:22:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_BlockCommitment_$55140_memory_ptr_$returns$__$","typeString":"function (struct MCRStorage.BlockCommitment memory)"}},"id":54909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11999:39:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54910,"nodeType":"ExpressionStatement","src":"11999:39:105"},{"expression":{"hexValue":"74727565","id":54911,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12123:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":54833,"id":54912,"nodeType":"Return","src":"12116:11:105"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54872,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54869,"src":"11369:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":54873,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54864,"src":"11373:9:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":54874,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11383:6:105","memberName":"length","nodeType":"MemberAccess","src":"11373:16:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11369:20:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54916,"initializationExpression":{"assignments":[54869],"declarations":[{"constant":false,"id":54869,"mutability":"mutable","name":"i","nameLocation":"11362:1:105","nodeType":"VariableDeclaration","scope":54916,"src":"11354:9:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54868,"name":"uint256","nodeType":"ElementaryTypeName","src":"11354:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54871,"initialValue":{"hexValue":"30","id":54870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11366:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11354:13:105"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":54877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11391:3:105","subExpression":{"id":54876,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54869,"src":"11391:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54878,"nodeType":"ExpressionStatement","src":"11391:3:105"},"nodeType":"ForStatement","src":"11349:803:105"},{"expression":{"hexValue":"66616c7365","id":54917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"12169:5:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":54833,"id":54918,"nodeType":"Return","src":"12162:12:105"}]},"implemented":true,"kind":"function","modifiers":[],"name":"tickOnBlockHeight","nameLocation":"10391:17:105","parameters":{"id":54830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54829,"mutability":"mutable","name":"blockHeight","nameLocation":"10417:11:105","nodeType":"VariableDeclaration","scope":54920,"src":"10409:19:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54828,"name":"uint256","nodeType":"ElementaryTypeName","src":"10409:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10408:21:105"},"returnParameters":{"id":54833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54832,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":54920,"src":"10448:4:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":54831,"name":"bool","nodeType":"ElementaryTypeName","src":"10448:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"10447:6:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":54934,"nodeType":"FunctionDefinition","src":"12187:136:105","nodes":[],"body":{"id":54933,"nodeType":"Block","src":"12269:54:105","nodes":[],"statements":[{"expression":{"arguments":[{"id":54929,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54195,"src":"12289:16:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":54930,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54922,"src":"12307:8:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54928,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39213,"src":"12279:9:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":54931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12279:37:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54932,"nodeType":"ExpressionStatement","src":"12279:37:105"}]},"functionSelector":"81df1746","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":54925,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54189,"src":"12251:16:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":54926,"kind":"modifierInvocation","modifierName":{"id":54924,"name":"onlyRole","nameLocations":["12242:8:105"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"12242:8:105"},"nodeType":"ModifierInvocation","src":"12242:26:105"}],"name":"grantTrustedAttester","nameLocation":"12196:20:105","parameters":{"id":54923,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54922,"mutability":"mutable","name":"attester","nameLocation":"12225:8:105","nodeType":"VariableDeclaration","scope":54934,"src":"12217:16:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54921,"name":"address","nodeType":"ElementaryTypeName","src":"12217:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"12216:18:105"},"returnParameters":{"id":54927,"nodeType":"ParameterList","parameters":[],"src":"12269:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54964,"nodeType":"FunctionDefinition","src":"12329:227:105","nodes":[],"body":{"id":54963,"nodeType":"Block","src":"12426:130:105","nodes":[],"statements":[{"body":{"id":54961,"nodeType":"Block","src":"12483:66:105","statements":[{"expression":{"arguments":[{"id":54955,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54195,"src":"12507:16:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":54956,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54937,"src":"12525:9:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":54958,"indexExpression":{"id":54957,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54944,"src":"12535:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12525:12:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54954,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39213,"src":"12497:9:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":54959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12497:41:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54960,"nodeType":"ExpressionStatement","src":"12497:41:105"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54950,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54947,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54944,"src":"12456:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":54948,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54937,"src":"12460:9:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":54949,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12470:6:105","memberName":"length","nodeType":"MemberAccess","src":"12460:16:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12456:20:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54962,"initializationExpression":{"assignments":[54944],"declarations":[{"constant":false,"id":54944,"mutability":"mutable","name":"i","nameLocation":"12449:1:105","nodeType":"VariableDeclaration","scope":54962,"src":"12441:9:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54943,"name":"uint256","nodeType":"ElementaryTypeName","src":"12441:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54946,"initialValue":{"hexValue":"30","id":54945,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12453:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12441:13:105"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":54952,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12478:3:105","subExpression":{"id":54951,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54944,"src":"12478:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54953,"nodeType":"ExpressionStatement","src":"12478:3:105"},"nodeType":"ForStatement","src":"12436:113:105"}]},"functionSelector":"cf6772ad","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":54940,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54189,"src":"12408:16:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":54941,"kind":"modifierInvocation","modifierName":{"id":54939,"name":"onlyRole","nameLocations":["12399:8:105"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"12399:8:105"},"nodeType":"ModifierInvocation","src":"12399:26:105"}],"name":"batchGrantTrustedAttester","nameLocation":"12338:25:105","parameters":{"id":54938,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54937,"mutability":"mutable","name":"attesters","nameLocation":"12381:9:105","nodeType":"VariableDeclaration","scope":54964,"src":"12364:26:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54935,"name":"address","nodeType":"ElementaryTypeName","src":"12364:7:105","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54936,"nodeType":"ArrayTypeName","src":"12364:9:105","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"12363:28:105"},"returnParameters":{"id":54942,"nodeType":"ParameterList","parameters":[],"src":"12426:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54977,"nodeType":"FunctionDefinition","src":"12562:132:105","nodes":[],"body":{"id":54976,"nodeType":"Block","src":"12645:49:105","nodes":[],"statements":[{"expression":{"id":54974,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54972,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55164,"src":"12655:22:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54973,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54966,"src":"12680:7:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12655:32:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54975,"nodeType":"ExpressionStatement","src":"12655:32:105"}]},"functionSelector":"d2526fef","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":54969,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54189,"src":"12627:16:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":54970,"kind":"modifierInvocation","modifierName":{"id":54968,"name":"onlyRole","nameLocations":["12618:8:105"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"12618:8:105"},"nodeType":"ModifierInvocation","src":"12618:26:105"}],"name":"setOpenAttestationEnabled","nameLocation":"12571:25:105","parameters":{"id":54967,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54966,"mutability":"mutable","name":"enabled","nameLocation":"12602:7:105","nodeType":"VariableDeclaration","scope":54977,"src":"12597:12:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":54965,"name":"bool","nodeType":"ElementaryTypeName","src":"12597:4:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"12596:14:105"},"returnParameters":{"id":54971,"nodeType":"ParameterList","parameters":[],"src":"12645:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":55001,"nodeType":"FunctionDefinition","src":"12700:305:105","nodes":[],"body":{"id":55000,"nodeType":"Block","src":"12778:227:105","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":54990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54984,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55164,"src":"12809:22:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":54986,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54195,"src":"12843:16:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":54987,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12861:3:105","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12865:6:105","memberName":"sender","nodeType":"MemberAccess","src":"12861:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":54985,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39139,"src":"12835:7:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":54989,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12835:37:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"12809:63:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a45445f424c4f434b5f434f4d4d49544d454e54","id":54991,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"12886:31:105","typeDescriptions":{"typeIdentifier":"t_stringliteral_8464081c60f016e7c752cfd9164491a5ff4ec2e6582c10eabdcf0b44da1ab8fe","typeString":"literal_string \"UNAUTHORIZED_BLOCK_COMMITMENT\""},"value":"UNAUTHORIZED_BLOCK_COMMITMENT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8464081c60f016e7c752cfd9164491a5ff4ec2e6582c10eabdcf0b44da1ab8fe","typeString":"literal_string \"UNAUTHORIZED_BLOCK_COMMITMENT\""}],"id":54983,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"12788:7:105","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":54992,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12788:139:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54993,"nodeType":"ExpressionStatement","src":"12788:139:105"},{"expression":{"arguments":[{"expression":{"id":54995,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12970:3:105","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54996,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12974:6:105","memberName":"sender","nodeType":"MemberAccess","src":"12970:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":54997,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54980,"src":"12982:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}],"id":54994,"name":"submitBlockCommitmentForAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54827,"src":"12937:32:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_BlockCommitment_$55140_memory_ptr_$returns$__$","typeString":"function (address,struct MCRStorage.BlockCommitment memory)"}},"id":54998,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12937:61:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54999,"nodeType":"ExpressionStatement","src":"12937:61:105"}]},"functionSelector":"f89fe60b","implemented":true,"kind":"function","modifiers":[],"name":"submitBlockCommitment","nameLocation":"12709:21:105","parameters":{"id":54981,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54980,"mutability":"mutable","name":"blockCommitment","nameLocation":"12754:15:105","nodeType":"VariableDeclaration","scope":55001,"src":"12731:38:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment"},"typeName":{"id":54979,"nodeType":"UserDefinedTypeName","pathNode":{"id":54978,"name":"BlockCommitment","nameLocations":["12731:15:105"],"nodeType":"IdentifierPath","referencedDeclaration":55140,"src":"12731:15:105"},"referencedDeclaration":55140,"src":"12731:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage_ptr","typeString":"struct MCRStorage.BlockCommitment"}},"visibility":"internal"}],"src":"12730:40:105"},"returnParameters":{"id":54982,"nodeType":"ParameterList","parameters":[],"src":"12778:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":55041,"nodeType":"FunctionDefinition","src":"13011:395:105","nodes":[],"body":{"id":55040,"nodeType":"Block","src":"13097:309:105","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":55015,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55009,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55164,"src":"13128:22:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":55011,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54195,"src":"13162:16:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55012,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13180:3:105","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55013,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13184:6:105","memberName":"sender","nodeType":"MemberAccess","src":"13180:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55010,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39139,"src":"13154:7:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":55014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13154:37:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"13128:63:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a45445f424c4f434b5f434f4d4d49544d454e54","id":55016,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"13205:31:105","typeDescriptions":{"typeIdentifier":"t_stringliteral_8464081c60f016e7c752cfd9164491a5ff4ec2e6582c10eabdcf0b44da1ab8fe","typeString":"literal_string \"UNAUTHORIZED_BLOCK_COMMITMENT\""},"value":"UNAUTHORIZED_BLOCK_COMMITMENT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_8464081c60f016e7c752cfd9164491a5ff4ec2e6582c10eabdcf0b44da1ab8fe","typeString":"literal_string \"UNAUTHORIZED_BLOCK_COMMITMENT\""}],"id":55008,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"13107:7:105","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":55017,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13107:139:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55018,"nodeType":"ExpressionStatement","src":"13107:139:105"},{"body":{"id":55038,"nodeType":"Block","src":"13310:90:105","statements":[{"expression":{"arguments":[{"expression":{"id":55031,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13357:3:105","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13361:6:105","memberName":"sender","nodeType":"MemberAccess","src":"13357:10:105","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":55033,"name":"blockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55005,"src":"13369:16:105","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$55140_memory_ptr_$dyn_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory[] memory"}},"id":55035,"indexExpression":{"id":55034,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55020,"src":"13386:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13369:19:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}],"id":55030,"name":"submitBlockCommitmentForAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54827,"src":"13324:32:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_BlockCommitment_$55140_memory_ptr_$returns$__$","typeString":"function (address,struct MCRStorage.BlockCommitment memory)"}},"id":55036,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13324:65:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55037,"nodeType":"ExpressionStatement","src":"13324:65:105"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55026,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55023,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55020,"src":"13276:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55024,"name":"blockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55005,"src":"13280:16:105","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$55140_memory_ptr_$dyn_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory[] memory"}},"id":55025,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13297:6:105","memberName":"length","nodeType":"MemberAccess","src":"13280:23:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13276:27:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55039,"initializationExpression":{"assignments":[55020],"declarations":[{"constant":false,"id":55020,"mutability":"mutable","name":"i","nameLocation":"13269:1:105","nodeType":"VariableDeclaration","scope":55039,"src":"13261:9:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55019,"name":"uint256","nodeType":"ElementaryTypeName","src":"13261:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55022,"initialValue":{"hexValue":"30","id":55021,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13273:1:105","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13261:13:105"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55028,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13305:3:105","subExpression":{"id":55027,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55020,"src":"13305:1:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55029,"nodeType":"ExpressionStatement","src":"13305:3:105"},"nodeType":"ForStatement","src":"13256:144:105"}]},"functionSelector":"e1b2b222","implemented":true,"kind":"function","modifiers":[],"name":"submitBatchBlockCommitment","nameLocation":"13020:26:105","parameters":{"id":55006,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55005,"mutability":"mutable","name":"blockCommitments","nameLocation":"13072:16:105","nodeType":"VariableDeclaration","scope":55041,"src":"13047:41:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$55140_memory_ptr_$dyn_memory_ptr","typeString":"struct MCRStorage.BlockCommitment[]"},"typeName":{"baseType":{"id":55003,"nodeType":"UserDefinedTypeName","pathNode":{"id":55002,"name":"BlockCommitment","nameLocations":["13047:15:105"],"nodeType":"IdentifierPath","referencedDeclaration":55140,"src":"13047:15:105"},"referencedDeclaration":55140,"src":"13047:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage_ptr","typeString":"struct MCRStorage.BlockCommitment"}},"id":55004,"nodeType":"ArrayTypeName","src":"13047:17:105","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_BlockCommitment_$55140_storage_$dyn_storage_ptr","typeString":"struct MCRStorage.BlockCommitment[]"}},"visibility":"internal"}],"src":"13046:43:105"},"returnParameters":{"id":55007,"nodeType":"ParameterList","parameters":[],"src":"13097:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":55100,"nodeType":"FunctionDefinition","src":"13593:1184:105","nodes":[],"body":{"id":55099,"nodeType":"Block","src":"13688:1089:105","nodes":[],"statements":[{"assignments":[55049],"declarations":[{"constant":false,"id":55049,"mutability":"mutable","name":"currentEpoch","nameLocation":"13706:12:105","nodeType":"VariableDeclaration","scope":55099,"src":"13698:20:105","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55048,"name":"uint256","nodeType":"ElementaryTypeName","src":"13698:7:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55052,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":55050,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54373,"src":"13721:15:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":55051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13721:17:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13698:40:105"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55058,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":55053,"name":"blockHeightEpochAssignments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55144,"src":"13921:27:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":55056,"indexExpression":{"expression":{"id":55054,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55045,"src":"13949:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":55055,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13965:6:105","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":55135,"src":"13949:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13921:51:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":55057,"name":"currentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55049,"src":"13976:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13921:67:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55062,"nodeType":"IfStatement","src":"13917:121:105","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":55059,"name":"UnacceptableBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55198,"src":"14009:27:105","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":55060,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14009:29:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":55061,"nodeType":"RevertStatement","src":"14002:36:105"}},{"expression":{"id":55070,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":55063,"name":"versionedAcceptedBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55171,"src":"14090:23:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_BlockCommitment_$55140_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct MCRStorage.BlockCommitment storage ref))"}},"id":55067,"indexExpression":{"id":55064,"name":"acceptedBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"14114:21:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14090:46:105","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_BlockCommitment_$55140_storage_$","typeString":"mapping(uint256 => struct MCRStorage.BlockCommitment storage ref)"}},"id":55068,"indexExpression":{"expression":{"id":55065,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55045,"src":"14137:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":55066,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14153:6:105","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":55135,"src":"14137:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"14090:70:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage","typeString":"struct MCRStorage.BlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55069,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55045,"src":"14163:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"src":"14090:88:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage","typeString":"struct MCRStorage.BlockCommitment storage ref"}},"id":55071,"nodeType":"ExpressionStatement","src":"14090:88:105"},{"expression":{"id":55075,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55072,"name":"lastAcceptedBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55133,"src":"14231:23:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":55073,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55045,"src":"14257:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":55074,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14273:6:105","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":55135,"src":"14257:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14231:48:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55076,"nodeType":"ExpressionStatement","src":"14231:48:105"},{"expression":{"arguments":[{"id":55078,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55045,"src":"14380:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}],"id":55077,"name":"slashMinority","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55107,"src":"14366:13:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_BlockCommitment_$55140_memory_ptr_$returns$__$","typeString":"function (struct MCRStorage.BlockCommitment memory)"}},"id":55079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14366:30:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55080,"nodeType":"ExpressionStatement","src":"14366:30:105"},{"eventCall":{"arguments":[{"expression":{"id":55082,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55045,"src":"14480:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":55083,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14496:7:105","memberName":"blockId","nodeType":"MemberAccess","referencedDeclaration":55139,"src":"14480:23:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55084,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55045,"src":"14517:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":55085,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14533:10:105","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":55137,"src":"14517:26:105","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":55086,"name":"blockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55045,"src":"14557:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment memory"}},"id":55087,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"14573:6:105","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":55135,"src":"14557:22:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55081,"name":"BlockAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55188,"src":"14453:13:105","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,uint256)"}},"id":55088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14453:136:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55089,"nodeType":"EmitStatement","src":"14448:141:105"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55093,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":55090,"name":"getEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54359,"src":"14693:19:105","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":55091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14693:21:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":55092,"name":"currentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55049,"src":"14717:12:105","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14693:36:105","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55098,"nodeType":"IfStatement","src":"14689:82:105","trueBody":{"id":55097,"nodeType":"Block","src":"14731:40:105","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":55094,"name":"rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55117,"src":"14745:13:105","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":55095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14745:15:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55096,"nodeType":"ExpressionStatement","src":"14745:15:105"}]}}]},"documentation":{"id":55042,"nodeType":"StructuredDocumentation","src":"13412:176:105","text":" @dev Accepts a block commitment.\n @dev Under the current implementation this shares in recursion with the tickOnBlockHeight, so it should be reentrant."},"implemented":true,"kind":"function","modifiers":[],"name":"_acceptBlockCommitment","nameLocation":"13602:22:105","parameters":{"id":55046,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55045,"mutability":"mutable","name":"blockCommitment","nameLocation":"13657:15:105","nodeType":"VariableDeclaration","scope":55100,"src":"13634:38:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment"},"typeName":{"id":55044,"nodeType":"UserDefinedTypeName","pathNode":{"id":55043,"name":"BlockCommitment","nameLocations":["13634:15:105"],"nodeType":"IdentifierPath","referencedDeclaration":55140,"src":"13634:15:105"},"referencedDeclaration":55140,"src":"13634:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage_ptr","typeString":"struct MCRStorage.BlockCommitment"}},"visibility":"internal"}],"src":"13624:54:105"},"returnParameters":{"id":55047,"nodeType":"ParameterList","parameters":[],"src":"13688:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55107,"nodeType":"FunctionDefinition","src":"14799:160:105","nodes":[],"body":{"id":55106,"nodeType":"Block","src":"14871:88:105","nodes":[],"statements":[]},"implemented":true,"kind":"function","modifiers":[],"name":"slashMinority","nameLocation":"14808:13:105","parameters":{"id":55104,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55103,"mutability":"mutable","name":"blockCommitment","nameLocation":"14845:15:105","nodeType":"VariableDeclaration","scope":55107,"src":"14822:38:105","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_memory_ptr","typeString":"struct MCRStorage.BlockCommitment"},"typeName":{"id":55102,"nodeType":"UserDefinedTypeName","pathNode":{"id":55101,"name":"BlockCommitment","nameLocations":["14822:15:105"],"nodeType":"IdentifierPath","referencedDeclaration":55140,"src":"14822:15:105"},"referencedDeclaration":55140,"src":"14822:15:105","typeDescriptions":{"typeIdentifier":"t_struct$_BlockCommitment_$55140_storage_ptr","typeString":"struct MCRStorage.BlockCommitment"}},"visibility":"internal"}],"src":"14821:40:105"},"returnParameters":{"id":55105,"nodeType":"ParameterList","parameters":[],"src":"14871:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55117,"nodeType":"FunctionDefinition","src":"15207:82:105","nodes":[],"body":{"id":55116,"nodeType":"Block","src":"15241:48:105","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":55111,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55129,"src":"15251:15:105","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$56904","typeString":"contract IMovementStaking"}},"id":55113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15267:13:105","memberName":"rollOverEpoch","nodeType":"MemberAccess","referencedDeclaration":56830,"src":"15251:29:105","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":55114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15251:31:105","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55115,"nodeType":"ExpressionStatement","src":"15251:31:105"}]},"documentation":{"id":55108,"nodeType":"StructuredDocumentation","src":"14965:237:105","text":" @dev nonReentrant because there is no need to reenter this function. It should be called iteratively. Marked on the internal method to simplify risks from complex calling patterns. This also calls an external contract."},"implemented":true,"kind":"function","modifiers":[],"name":"rollOverEpoch","nameLocation":"15216:13:105","parameters":{"id":55109,"nodeType":"ParameterList","parameters":[],"src":"15229:2:105"},"returnParameters":{"id":55110,"nodeType":"ParameterList","parameters":[],"src":"15241:0:105"},"scope":55118,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"}],"abstract":false,"baseContracts":[{"baseName":{"id":54176,"name":"Initializable","nameLocations":["593:13:105"],"nodeType":"IdentifierPath","referencedDeclaration":39639,"src":"593:13:105"},"id":54177,"nodeType":"InheritanceSpecifier","src":"593:13:105"},{"baseName":{"id":54178,"name":"BaseSettlement","nameLocations":["608:14:105"],"nodeType":"IdentifierPath","referencedDeclaration":55256,"src":"608:14:105"},"id":54179,"nodeType":"InheritanceSpecifier","src":"608:14:105"},{"baseName":{"id":54180,"name":"MCRStorage","nameLocations":["624:10:105"],"nodeType":"IdentifierPath","referencedDeclaration":55178,"src":"624:10:105"},"id":54181,"nodeType":"InheritanceSpecifier","src":"624:10:105"},{"baseName":{"id":54182,"name":"IMCR","nameLocations":["636:4:105"],"nodeType":"IdentifierPath","referencedDeclaration":55201,"src":"636:4:105"},"id":54183,"nodeType":"InheritanceSpecifier","src":"636:4:105"}],"canonicalName":"MCR","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"internalFunctionIDs":{"16235":1},"linearizedBaseContracts":[55118,55201,55178,55256,39821,42755,39385,41148,45235,41527,40653,39639],"name":"MCR","nameLocation":"586:3:105","scope":55119,"usedErrors":[39402,39405,39666,39671,41454,41457,42965,42978,44073,44076,55198,55200],"usedEvents":[39410,41466,41475,41484,42944,55188,55196]}],"license":"UNLICENSED"},"id":105} \ No newline at end of file diff --git a/protocol/mcr/cli/client/abis/MOVEToken.json b/protocol/mcr/cli/client/abis/MOVEToken.json index f20116a0..8435c339 100644 --- a/protocol/mcr/cli/client/abis/MOVEToken.json +++ b/protocol/mcr/cli/client/abis/MOVEToken.json @@ -1,2983 +1 @@ -{ - "abi": [ - { - "type": "constructor", - "inputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "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": "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": "getRoleAdmin", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "grantRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "hasRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initialize", - "inputs": [ - { - "name": "_owner", - "type": "address", - "internalType": "address" - }, - { - "name": "_custody", - "type": "address", - "internalType": "address" - } - ], - "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": "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": "renounceRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "callerConfirmation", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "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": "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": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "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": "AccessControlBadConfirmation", - "inputs": [] - }, - { - "type": "error", - "name": "AccessControlUnauthorizedAccount", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - }, - { - "name": "neededRole", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "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": [] - } - ], - "bytecode": { - "object": "0x6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61181a806100d65f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063485cc955116100b457806395d89b411161007957806395d89b4114610283578063a217fddf1461028b578063a9059cbb14610292578063d505accf146102a5578063d547741f146102b8578063dd62ed3e146102cb575f80fd5b8063485cc9551461021c57806370a082311461022f5780637ecebe001461024257806384b0196e1461025557806391d1485414610270575f80fd5b8063248a9ca3116100fa578063248a9ca3146101ca5780632f2ff15d146101dd578063313ce567146101f25780633644e5151461020157806336568abe14610209575f80fd5b806301ffc9a71461013657806306fdde031461015e578063095ea7b31461017357806318160ddd1461018657806323b872dd146101b7575b5f80fd5b610149610144366004611286565b6102de565b60405190151581526020015b60405180910390f35b610166610314565b60405161015591906112e2565b61014961018136600461130f565b6103b9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610155565b6101496101c5366004611337565b6103d0565b6101a96101d8366004611371565b6103f3565b6101f06101eb366004611388565b610413565b005b60405160088152602001610155565b6101a9610435565b6101f0610217366004611388565b610443565b6101f061022a3660046113b2565b61047b565b6101a961023d3660046113da565b610661565b6101a96102503660046113da565b610691565b61025d61069b565b60405161015597969594939291906113f3565b61014961027e366004611388565b610749565b61016661077f565b6101a95f81565b6101496102a036600461130f565b6107bd565b6101f06102b3366004611489565b6107ca565b6101f06102c6366004611388565b61091f565b6101a96102d93660046113b2565b61093b565b5f6001600160e01b03198216637965db0b60e01b148061030e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5f805160206117858339815191525b9050806003018054610337906114f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610363906114f6565b80156103ae5780601f10610385576101008083540402835291602001916103ae565b820191905f5260205f20905b81548152906001019060200180831161039157829003601f168201915b505050505091505090565b5f336103c6818585610984565b5060019392505050565b5f336103dd858285610991565b6103e88585856109ee565b506001949350505050565b5f9081525f805160206117c5833981519152602052604090206001015490565b61041c826103f3565b61042581610a4b565b61042f8383610a58565b50505050565b5f61043e610af9565b905090565b6001600160a01b038116331461046c5760405163334bd91960e11b815260040160405180910390fd5b6104768282610b02565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156104c05750825b90505f8267ffffffffffffffff1660011480156104dc5750303b155b9050811580156104ea575080155b156105085760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053257845460ff60401b1916600160401b1785555b6001600160a01b0387161580159061055257506001600160a01b03861615155b61055a575f80fd5b6105a060405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060048152602001634d4f564560e01b815250610b7b565b6105e360405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060018152602001603160f81b815250610b91565b6105ed5f88610a58565b50610612866105fe6008600a611625565b61060d906402540be400611633565b610bf0565b831561065857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f805f805160206117858339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b5f61030e82610c24565b5f60608082808083815f805160206117a583398151915280549091501580156106c657506001810154155b61070f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610717610c4c565b61071f610c8a565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f9182525f805160206117c5833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061178583398151915291610337906114f6565b5f336103c68185856109ee565b834211156107ee5760405163313c898160e11b815260048101859052602401610706565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108588c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6108b282610ca0565b90505f6108c182878787610ccc565b9050896001600160a01b0316816001600160a01b031614610908576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610706565b6109138a8a8a610984565b50505050505050505050565b610928826103f3565b61093181610a4b565b61042f8383610b02565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104768383836001610cf8565b5f61099c848461093b565b90505f19811461042f57818110156109e057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610706565b61042f84848484035f610cf8565b6001600160a01b038316610a1757604051634b637e8f60e11b81525f6004820152602401610706565b6001600160a01b038216610a405760405163ec442f0560e01b81525f6004820152602401610706565b610476838383610ddc565b610a558133610f15565b50565b5f5f805160206117c5833981519152610a718484610749565b610af0575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610aa63390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061030e565b5f91505061030e565b5f61043e610f4e565b5f5f805160206117c5833981519152610b1b8484610749565b15610af0575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061030e565b610b83610fc1565b610b8d828261100c565b5050565b610b99610fc1565b5f805160206117a58339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610bd284826116a2565b5060038101610be183826116a2565b505f8082556001909101555050565b6001600160a01b038216610c195760405163ec442f0560e01b81525f6004820152602401610706565b610b8d5f8383610ddc565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610672565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206117a583398151915291610337906114f6565b60605f5f805160206117a5833981519152610326565b5f61030e610cac610af9565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80610cdc8888888861105c565b925092509250610cec8282611124565b50909695505050505050565b5f805160206117858339815191526001600160a01b038516610d2f5760405163e602df0560e01b81525f6004820152602401610706565b6001600160a01b038416610d5857604051634a1406b160e11b81525f6004820152602401610706565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610dd557836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610dcc91815260200190565b60405180910390a35b5050505050565b5f805160206117858339815191526001600160a01b038416610e165781816002015f828254610e0b919061175d565b90915550610e869050565b6001600160a01b0384165f9081526020829052604090205482811015610e685760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610706565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610ea4576002810180548390039055610ec2565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f0791815260200190565b60405180910390a350505050565b610f1f8282610749565b610b8d5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610706565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f786111dc565b610f80611244565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661100a57604051631afcd79f60e31b815260040160405180910390fd5b565b611014610fc1565b5f805160206117858339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361104d84826116a2565b506004810161042f83826116a2565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561109557505f9150600390508261111a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156110e6573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661111157505f92506001915082905061111a565b92505f91508190505b9450945094915050565b5f82600381111561113757611137611770565b03611140575050565b600182600381111561115457611154611770565b036111725760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561118657611186611770565b036111a75760405163fce698f760e01b815260048101829052602401610706565b60038260038111156111bb576111bb611770565b03610b8d576040516335e2f38360e21b815260048101829052602401610706565b5f5f805160206117a5833981519152816111f4610c4c565b80519091501561120c57805160209091012092915050565b8154801561121b579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f805160206117a58339815191528161125c610c8a565b80519091501561127457805160209091012092915050565b6001820154801561121b579392505050565b5f60208284031215611296575f80fd5b81356001600160e01b0319811681146112ad575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112ad60208301846112b4565b80356001600160a01b038116811461130a575f80fd5b919050565b5f8060408385031215611320575f80fd5b611329836112f4565b946020939093013593505050565b5f805f60608486031215611349575f80fd5b611352846112f4565b9250611360602085016112f4565b929592945050506040919091013590565b5f60208284031215611381575f80fd5b5035919050565b5f8060408385031215611399575f80fd5b823591506113a9602084016112f4565b90509250929050565b5f80604083850312156113c3575f80fd5b6113cc836112f4565b91506113a9602084016112f4565b5f602082840312156113ea575f80fd5b6112ad826112f4565b60ff60f81b8816815260e060208201525f61141160e08301896112b4565b828103604084015261142381896112b4565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561147857835183526020938401939092019160010161145a565b50909b9a5050505050505050505050565b5f805f805f805f60e0888a03121561149f575f80fd5b6114a8886112f4565b96506114b6602089016112f4565b95506040880135945060608801359350608088013560ff811681146114d9575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c9082168061150a57607f821691505b60208210810361152857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561157d578085048111156115615761156161152e565b600184161561156f57908102905b60019390931c928002611546565b935093915050565b5f826115935750600161030e565b8161159f57505f61030e565b81600181146115b557600281146115bf576115db565b600191505061030e565b60ff8411156115d0576115d061152e565b50506001821b61030e565b5060208310610133831016604e8410600b84101617156115fe575081810a61030e565b61160a5f198484611542565b805f190482111561161d5761161d61152e565b029392505050565b5f6112ad60ff841683611585565b808202811582820484141761030e5761030e61152e565b634e487b7160e01b5f52604160045260245ffd5b601f82111561047657805f5260205f20601f840160051c810160208510156116835750805b601f840160051c820191505b81811015610dd5575f815560010161168f565b815167ffffffffffffffff8111156116bc576116bc61164a565b6116d0816116ca84546114f6565b8461165e565b6020601f821160018114611702575f83156116eb5750848201515b5f19600385901b1c1916600184901b178455610dd5565b5f84815260208120601f198516915b828110156117315787850151825560209485019460019092019101611711565b508482101561174e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561030e5761030e61152e565b634e487b7160e01b5f52602160045260245ffdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212200c213e57e697f2dee37f51b79647b3593da8c247917d58e21e2647bf25597abc64736f6c634300081a0033", - "sourceMap": "299:1259:112:-:0;;;447:39;;;;;;;;;-1:-1:-1;462:22:112;:20;:22::i;:::-;299:1259;;7711:422:25;8870:21;7900:15;;;;;;;7896:76;;;7938:23;;-1:-1:-1;;;7938:23:25;;;;;;;;;;;7896:76;7985:14;;-1:-1:-1;;;;;7985:14:25;;;:34;7981:146;;8035:33;;-1:-1:-1;;;;;;8035:33:25;-1:-1:-1;;;;;8035:33:25;;;;;8087:29;;158:50:137;;;8087:29:25;;146:2:137;131:18;8087:29:25;;;;;;;7981:146;7760:373;7711:422::o;14:200:137:-;299:1259:112;;;;;;", - "linkReferences": {} - }, - "deployedBytecode": { - "object": "0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063485cc955116100b457806395d89b411161007957806395d89b4114610283578063a217fddf1461028b578063a9059cbb14610292578063d505accf146102a5578063d547741f146102b8578063dd62ed3e146102cb575f80fd5b8063485cc9551461021c57806370a082311461022f5780637ecebe001461024257806384b0196e1461025557806391d1485414610270575f80fd5b8063248a9ca3116100fa578063248a9ca3146101ca5780632f2ff15d146101dd578063313ce567146101f25780633644e5151461020157806336568abe14610209575f80fd5b806301ffc9a71461013657806306fdde031461015e578063095ea7b31461017357806318160ddd1461018657806323b872dd146101b7575b5f80fd5b610149610144366004611286565b6102de565b60405190151581526020015b60405180910390f35b610166610314565b60405161015591906112e2565b61014961018136600461130f565b6103b9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610155565b6101496101c5366004611337565b6103d0565b6101a96101d8366004611371565b6103f3565b6101f06101eb366004611388565b610413565b005b60405160088152602001610155565b6101a9610435565b6101f0610217366004611388565b610443565b6101f061022a3660046113b2565b61047b565b6101a961023d3660046113da565b610661565b6101a96102503660046113da565b610691565b61025d61069b565b60405161015597969594939291906113f3565b61014961027e366004611388565b610749565b61016661077f565b6101a95f81565b6101496102a036600461130f565b6107bd565b6101f06102b3366004611489565b6107ca565b6101f06102c6366004611388565b61091f565b6101a96102d93660046113b2565b61093b565b5f6001600160e01b03198216637965db0b60e01b148061030e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5f805160206117858339815191525b9050806003018054610337906114f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610363906114f6565b80156103ae5780601f10610385576101008083540402835291602001916103ae565b820191905f5260205f20905b81548152906001019060200180831161039157829003601f168201915b505050505091505090565b5f336103c6818585610984565b5060019392505050565b5f336103dd858285610991565b6103e88585856109ee565b506001949350505050565b5f9081525f805160206117c5833981519152602052604090206001015490565b61041c826103f3565b61042581610a4b565b61042f8383610a58565b50505050565b5f61043e610af9565b905090565b6001600160a01b038116331461046c5760405163334bd91960e11b815260040160405180910390fd5b6104768282610b02565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156104c05750825b90505f8267ffffffffffffffff1660011480156104dc5750303b155b9050811580156104ea575080155b156105085760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053257845460ff60401b1916600160401b1785555b6001600160a01b0387161580159061055257506001600160a01b03861615155b61055a575f80fd5b6105a060405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060048152602001634d4f564560e01b815250610b7b565b6105e360405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060018152602001603160f81b815250610b91565b6105ed5f88610a58565b50610612866105fe6008600a611625565b61060d906402540be400611633565b610bf0565b831561065857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f805f805160206117858339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b5f61030e82610c24565b5f60608082808083815f805160206117a583398151915280549091501580156106c657506001810154155b61070f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610717610c4c565b61071f610c8a565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f9182525f805160206117c5833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061178583398151915291610337906114f6565b5f336103c68185856109ee565b834211156107ee5760405163313c898160e11b815260048101859052602401610706565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108588c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6108b282610ca0565b90505f6108c182878787610ccc565b9050896001600160a01b0316816001600160a01b031614610908576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610706565b6109138a8a8a610984565b50505050505050505050565b610928826103f3565b61093181610a4b565b61042f8383610b02565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104768383836001610cf8565b5f61099c848461093b565b90505f19811461042f57818110156109e057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610706565b61042f84848484035f610cf8565b6001600160a01b038316610a1757604051634b637e8f60e11b81525f6004820152602401610706565b6001600160a01b038216610a405760405163ec442f0560e01b81525f6004820152602401610706565b610476838383610ddc565b610a558133610f15565b50565b5f5f805160206117c5833981519152610a718484610749565b610af0575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610aa63390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061030e565b5f91505061030e565b5f61043e610f4e565b5f5f805160206117c5833981519152610b1b8484610749565b15610af0575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061030e565b610b83610fc1565b610b8d828261100c565b5050565b610b99610fc1565b5f805160206117a58339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610bd284826116a2565b5060038101610be183826116a2565b505f8082556001909101555050565b6001600160a01b038216610c195760405163ec442f0560e01b81525f6004820152602401610706565b610b8d5f8383610ddc565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610672565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206117a583398151915291610337906114f6565b60605f5f805160206117a5833981519152610326565b5f61030e610cac610af9565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80610cdc8888888861105c565b925092509250610cec8282611124565b50909695505050505050565b5f805160206117858339815191526001600160a01b038516610d2f5760405163e602df0560e01b81525f6004820152602401610706565b6001600160a01b038416610d5857604051634a1406b160e11b81525f6004820152602401610706565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610dd557836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610dcc91815260200190565b60405180910390a35b5050505050565b5f805160206117858339815191526001600160a01b038416610e165781816002015f828254610e0b919061175d565b90915550610e869050565b6001600160a01b0384165f9081526020829052604090205482811015610e685760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610706565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610ea4576002810180548390039055610ec2565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f0791815260200190565b60405180910390a350505050565b610f1f8282610749565b610b8d5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610706565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f786111dc565b610f80611244565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661100a57604051631afcd79f60e31b815260040160405180910390fd5b565b611014610fc1565b5f805160206117858339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361104d84826116a2565b506004810161042f83826116a2565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561109557505f9150600390508261111a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156110e6573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661111157505f92506001915082905061111a565b92505f91508190505b9450945094915050565b5f82600381111561113757611137611770565b03611140575050565b600182600381111561115457611154611770565b036111725760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561118657611186611770565b036111a75760405163fce698f760e01b815260048101829052602401610706565b60038260038111156111bb576111bb611770565b03610b8d576040516335e2f38360e21b815260048101829052602401610706565b5f5f805160206117a5833981519152816111f4610c4c565b80519091501561120c57805160209091012092915050565b8154801561121b579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f805160206117a58339815191528161125c610c8a565b80519091501561127457805160209091012092915050565b6001820154801561121b579392505050565b5f60208284031215611296575f80fd5b81356001600160e01b0319811681146112ad575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112ad60208301846112b4565b80356001600160a01b038116811461130a575f80fd5b919050565b5f8060408385031215611320575f80fd5b611329836112f4565b946020939093013593505050565b5f805f60608486031215611349575f80fd5b611352846112f4565b9250611360602085016112f4565b929592945050506040919091013590565b5f60208284031215611381575f80fd5b5035919050565b5f8060408385031215611399575f80fd5b823591506113a9602084016112f4565b90509250929050565b5f80604083850312156113c3575f80fd5b6113cc836112f4565b91506113a9602084016112f4565b5f602082840312156113ea575f80fd5b6112ad826112f4565b60ff60f81b8816815260e060208201525f61141160e08301896112b4565b828103604084015261142381896112b4565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561147857835183526020938401939092019160010161145a565b50909b9a5050505050505050505050565b5f805f805f805f60e0888a03121561149f575f80fd5b6114a8886112f4565b96506114b6602089016112f4565b95506040880135945060608801359350608088013560ff811681146114d9575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c9082168061150a57607f821691505b60208210810361152857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561157d578085048111156115615761156161152e565b600184161561156f57908102905b60019390931c928002611546565b935093915050565b5f826115935750600161030e565b8161159f57505f61030e565b81600181146115b557600281146115bf576115db565b600191505061030e565b60ff8411156115d0576115d061152e565b50506001821b61030e565b5060208310610133831016604e8410600b84101617156115fe575081810a61030e565b61160a5f198484611542565b805f190482111561161d5761161d61152e565b029392505050565b5f6112ad60ff841683611585565b808202811582820484141761030e5761030e61152e565b634e487b7160e01b5f52604160045260245ffd5b601f82111561047657805f5260205f20601f840160051c810160208510156116835750805b601f840160051c820191505b81811015610dd5575f815560010161168f565b815167ffffffffffffffff8111156116bc576116bc61164a565b6116d0816116ca84546114f6565b8461165e565b6020601f821160018114611702575f83156116eb5750848201515b5f19600385901b1c1916600184901b178455610dd5565b5f84815260208120601f198516915b828110156117315787850151825560209485019460019092019101611711565b508482101561174e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561030e5761030e61152e565b634e487b7160e01b5f52602160045260245ffdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212200c213e57e697f2dee37f51b79647b3593da8c247917d58e21e2647bf25597abc64736f6c634300081a0033", - "sourceMap": "299:1259:112:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:24;;;;;;:::i;:::-;;:::i;:::-;;;470:14:137;;463:22;445:41;;433:2;418:18;3443:202:24;;;;;;;;3011:144:27;;;:::i;:::-;;;;;;;:::i;5505:186::-;;;;;;:::i;:::-;;:::i;4191:152::-;4322:14;;4191:152;;;1645:25:137;;;1633:2;1618:18;4191:152:27;1499:177:137;6251:244:27;;;;;;:::i;:::-;;:::i;4759:191:24:-;;;;;;:::i;:::-;;:::i;5246:136::-;;;;;;:::i;:::-;;:::i;:::-;;1474:82:112;;;1548:1;2920:36:137;;2908:2;2893:18;1474:82:112;2778:184:137;3082:112:28;;;:::i;6348:245:24:-;;;;;;:::i;:::-;;:::i;981:342:112:-;;;;;;:::i;:::-;;:::i;4401:171:27:-;;;;;;:::i;:::-;;:::i;2821:154:28:-;;;;;;:::i;:::-;;:::i;5173:903:31:-;;;:::i;:::-;;;;;;;;;;;;;:::i;3732:207:24:-;;;;;;:::i;:::-;;:::i;3268:148:27:-;;;:::i;2317:49:24:-;;2362:4;2317:49;;4767:178:27;;;;;;:::i;:::-;;:::i;2095:672:28:-;;;;;;:::i;:::-;;:::i;5662:138:24:-;;;;;;:::i;:::-;;:::i;5003:195:27:-;;;;;;:::i;:::-;;:::i;3443:202:24:-;3528:4;-1:-1:-1;;;;;;3551:47:24;;-1:-1:-1;;;3551:47:24;;:87;;-1:-1:-1;;;;;;;;;;1133:40:32;;;3602:36:24;3544:94;3443:202;-1:-1:-1;;3443:202:24:o;3011:144:27:-;3056:13;3081:22;-1:-1:-1;;;;;;;;;;;3106:18:27;3081:43;;3141:1;:7;;3134:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3011:144;:::o;5505:186::-;5578:4;966:10:29;5632:31:27;966:10:29;5648:7:27;5657:5;5632:8;:31::i;:::-;-1:-1:-1;5680:4:27;;5505:186;-1:-1:-1;;;5505:186:27:o;6251:244::-;6338:4;966:10:29;6394:37:27;6410:4;966:10:29;6425:5:27;6394:15;:37::i;:::-;6441:26;6451:4;6457:2;6461:5;6441:9;:26::i;:::-;-1:-1:-1;6484:4:27;;6251:244;-1:-1:-1;;;;6251:244:27:o;4759:191:24:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:24;;;;;:24;;;;4759:191::o;5246:136::-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;3082:112:28:-;3141:7;3167:20;:18;:20::i;:::-;3160:27;;3082:112;:::o;6348:245:24:-;-1:-1:-1;;;;;6441:34:24;;966:10:29;6441:34:24;6437:102;;6498:30;;-1:-1:-1;;;6498:30:24;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;981:342:112:-;8870:21:25;4302:15;;-1:-1:-1;;;4302:15:25;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:25;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:25;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:25;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:25;-1:-1:-1;;;5013:22:25;;;4979:67;-1:-1:-1;;;;;1072:20:112;::::1;::::0;;::::1;::::0;:46:::1;;-1:-1:-1::0;;;;;;1096:22:112;::::1;::::0;::::1;1072:46;1064:55;;;::::0;::::1;;1129:32;;;;;;;;;;;;;;-1:-1:-1::0;;;1129:32:112::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1129:32:112::1;;::::0;:12:::1;:32::i;:::-;1171:40;;;;;;;;;;;;;;-1:-1:-1::0;;;1171:40:112::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1171:40:112::1;;::::0;:23:::1;:40::i;:::-;1221:38;2362:4:24;1252:6:112::0;1221:10:::1;:38::i;:::-;-1:-1:-1::0;1269:47:112::1;1275:8:::0;1299:16:::1;1548:1:::0;1299:2:::1;:16;:::i;:::-;1285:30;::::0;:11:::1;:30;:::i;:::-;1269:5;:47::i;:::-;5070:14:25::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:25;;;5142:14;;-1:-1:-1;7849:50:137;;5142:14:25;;7837:2:137;7822:18;5142:14:25;;;;;;;5066:101;4092:1081;;;;;981:342:112;;:::o;4401:171:27:-;4466:7;;-1:-1:-1;;;;;;;;;;;4510:18:27;-1:-1:-1;;;;;4545:20:27;;;:11;:20;;;;;;;;-1:-1:-1;;4545:20:27;;;;;4401:171::o;2821:154:28:-;2923:7;2949:19;2962:5;2949:12;:19::i;5173:903:31:-;5271:13;5298:18;;5271:13;;;5298:18;5271:13;-1:-1:-1;;;;;;;;;;;5777:13:31;;5511:45;;-1:-1:-1;5777:18:31;:43;;;;-1:-1:-1;5799:16:31;;;;:21;5777:43;5769:77;;;;-1:-1:-1;;;5769:77:31;;8112:2:137;5769:77:31;;;8094:21:137;8151:2;8131:18;;;8124:30;-1:-1:-1;;;8170:18:137;;;8163:51;8231:18;;5769:77:31;;;;;;;;;5908:13;:11;:13::i;:::-;5935:16;:14;:16::i;:::-;6043;;;6027:1;6043:16;;;;;;;;;-1:-1:-1;;;5857:212:31;;;-1:-1:-1;5857:212:31;;-1:-1:-1;5965:13:31;;-1:-1:-1;6000:4:31;;-1:-1:-1;6027:1:31;-1:-1:-1;6043:16:31;-1:-1:-1;5857:212:31;-1:-1:-1;;5173:903:31:o;3732:207:24:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:24;;;;;;;;-1:-1:-1;;;;;3901:31:24;;;;;;;;;;;;;;;3732:207::o;3268:148:27:-;3400:9;3393:16;;3315:13;;-1:-1:-1;;;;;;;;;;;2359:20:27;3393:16;;;:::i;4767:178::-;4836:4;966:10:29;4890:27:27;966:10:29;4907:2:27;4911:5;4890:9;:27::i;2095:672:28:-;2316:8;2298:15;:26;2294:97;;;2347:33;;-1:-1:-1;;;2347:33:28;;;;;1645:25:137;;;1618:18;;2347:33:28;1499:177:137;2294:97:28;2401:18;1277:95;2460:5;2467:7;2476:5;2483:16;2493:5;-1:-1:-1;;;;;1954:16:30;1597:7;1954:16;;;1005:21;1954:16;;;;;:18;;;;;;;;;1537:452;2483:16:28;2432:78;;;;;;8679:25:137;;;;-1:-1:-1;;;;;8740:32:137;;;8720:18;;;8713:60;8809:32;;;;8789:18;;;8782:60;8858:18;;;8851:34;8901:19;;;8894:35;8945:19;;;8938:35;;;8651:19;;2432:78:28;;;;;;;;;;;;2422:89;;;;;;2401:110;;2522:12;2537:28;2554:10;2537:16;:28::i;:::-;2522:43;;2576:14;2593:28;2607:4;2613:1;2616;2619;2593:13;:28::i;:::-;2576:45;;2645:5;-1:-1:-1;;;;;2635:15:28;:6;-1:-1:-1;;;;;2635:15:28;;2631:88;;2673:35;;-1:-1:-1;;;2673:35:28;;-1:-1:-1;;;;;9176:32:137;;;2673:35:28;;;9158:51:137;9245:32;;9225:18;;;9218:60;9131:18;;2673:35:28;8984:300:137;2631:88:28;2729:31;2738:5;2745:7;2754:5;2729:8;:31::i;:::-;2284:483;;;2095:672;;;;;;;:::o;5662:138:24:-;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;5003:195:27:-:0;-1:-1:-1;;;;;5162:20:27;;;5083:7;5162:20;;;:13;:20;;;;;;;;:29;;;;;;;;;;;;;5003:195::o;10264:128::-;10348:37;10357:5;10364:7;10373:5;10380:4;10348:8;:37::i;11993:477::-;12092:24;12119:25;12129:5;12136:7;12119:9;:25::i;:::-;12092:52;;-1:-1:-1;;12158:16:27;:37;12154:310;;12234:5;12215:16;:24;12211:130;;;12266:60;;-1:-1:-1;;;12266:60:27;;-1:-1:-1;;;;;9509:32:137;;12266:60:27;;;9491:51:137;9558:18;;;9551:34;;;9601:18;;;9594:34;;;9464:18;;12266:60:27;9289:345:137;12211:130:27;12382:57;12391:5;12398:7;12426:5;12407:16;:24;12433:5;12382:8;:57::i;6868:300::-;-1:-1:-1;;;;;6951:18:27;;6947:86;;6992:30;;-1:-1:-1;;;6992:30:27;;7019:1;6992:30;;;9785:51:137;9758:18;;6992:30:27;9639:203:137;6947:86:27;-1:-1:-1;;;;;7046:16:27;;7042:86;;7085:32;;-1:-1:-1;;;7085:32:27;;7114:1;7085:32;;;9785:51:137;9758:18;;7085:32:27;9639:203:137;7042:86:27;7137:24;7145:4;7151:2;7155:5;7137:7;:24::i;4148:103:24:-;4214:30;4225:4;966:10:29;4214::24;:30::i;:::-;4148:103;:::o;7270:387::-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:24;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:24;;;;;;;;;:38;;-1:-1:-1;;7475:38:24;7509:4;7475:38;;;7559:12;966:10:29;;887:96;7559:12:24;-1:-1:-1;;;;;7532:40:24;7550:7;-1:-1:-1;;;;;7532:40:24;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;4015:109:31;4068:7;4094:23;:21;:23::i;7892:388:24:-;7970:4;-1:-1:-1;;;;;;;;;;;8059:22:24;8067:4;8073:7;8059;:22::i;:::-;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:24;;;;;;;;;;:39;;-1:-1:-1;;8097:39:24;;;8155:40;966:10:29;;8097:14:24;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;2577:147:27;6931:20:25;:18;:20::i;:::-;2679:38:27::1;2702:5;2709:7;2679:22;:38::i;:::-;2577:147:::0;;:::o;3599:330:31:-;6931:20:25;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;3766:7:31;:14:::1;3776:4:::0;3766:7;:14:::1;:::i;:::-;-1:-1:-1::0;3790:10:31::1;::::0;::::1;:20;3803:7:::0;3790:10;:20:::1;:::i;:::-;-1:-1:-1::0;3891:1:31::1;3875:17:::0;;;3902:16:::1;::::0;;::::1;:20:::0;-1:-1:-1;;3599:330:31:o;8996:208:27:-;-1:-1:-1;;;;;9066:21:27;;9062:91;;9110:32;;-1:-1:-1;;;9110:32:27;;9139:1;9110:32;;;9785:51:137;9758:18;;9110:32:27;9639:203:137;9062:91:27;9162:35;9178:1;9182:7;9191:5;9162:7;:35::i;1259:164:30:-;1319:7;;1005:21;1364:19;886:156;6300:155:31;6441:7;6434:14;;6354:13;;-1:-1:-1;;;;;;;;;;;2839:21:31;6434:14;;;:::i;6682:161::-;6739:13;6764:23;-1:-1:-1;;;;;;;;;;;6790:19:31;2720:156;4946:176;5023:7;5049:66;5082:20;:18;:20::i;:::-;5104:10;3555:4:61;3549:11;-1:-1:-1;;;3573:23:61;;3625:4;3616:14;;3609:39;;;;3677:4;3668:14;;3661:34;3733:4;3718:20;;;3353:401;6803:260:60;6888:7;6908:17;6927:18;6947:16;6967:25;6978:4;6984:1;6987;6990;6967:10;:25::i;:::-;6907:85;;;;;;7002:28;7014:5;7021:8;7002:11;:28::i;:::-;-1:-1:-1;7047:9:60;;6803:260;-1:-1:-1;;;;;;6803:260:60:o;11224:487:27:-;-1:-1:-1;;;;;;;;;;;;;;;;11389:19:27;;11385:89;;11431:32;;-1:-1:-1;;;11431:32:27;;11460:1;11431:32;;;9785:51:137;9758:18;;11431:32:27;9639:203:137;11385:89:27;-1:-1:-1;;;;;11487:21:27;;11483:90;;11531:31;;-1:-1:-1;;;11531:31:27;;11559:1;11531:31;;;9785:51:137;9758:18;;11531:31:27;9639:203:137;11483:90:27;-1:-1:-1;;;;;11582:20:27;;;;;;;:13;;;:20;;;;;;;;:29;;;;;;;;;:37;;;11629:76;;;;11679:7;-1:-1:-1;;;;;11663:31:27;11672:5;-1:-1:-1;;;;;11663:31:27;;11688:5;11663:31;;;;1645:25:137;;1633:2;1618:18;;1499:177;11663:31:27;;;;;;;;11629:76;11322:389;11224:487;;;;:::o;7483:1170::-;-1:-1:-1;;;;;;;;;;;;;;;;7625:18:27;;7621:546;;7779:5;7761:1;:14;;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;7621:546:27;;-1:-1:-1;7621:546:27;;-1:-1:-1;;;;;7837:17:27;;7815:19;7837:17;;;;;;;;;;;7872:19;;;7868:115;;;7918:50;;-1:-1:-1;;;7918:50:27;;-1:-1:-1;;;;;9509:32:137;;7918:50:27;;;9491:51:137;9558:18;;;9551:34;;;9601:18;;;9594:34;;;9464:18;;7918:50:27;9289:345:137;7868:115:27;-1:-1:-1;;;;;8103:17:27;;:11;:17;;;;;;;;;;8123:19;;;;8103:39;;7621:546;-1:-1:-1;;;;;8181:16:27;;8177:429;;8344:14;;;:23;;;;;;;8177:429;;;-1:-1:-1;;;;;8557:15:27;;:11;:15;;;;;;;;;;:24;;;;;;8177:429;8636:2;-1:-1:-1;;;;;8621:25:27;8630:4;-1:-1:-1;;;;;8621:25:27;;8640:5;8621:25;;;;1645::137;;1633:2;1618:18;;1499:177;8621:25:27;;;;;;;;7558:1095;7483:1170;;;:::o;4381:197:24:-;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:24;;-1:-1:-1;;;;;12293:32:137;;4514:47:24;;;12275:51:137;12342:18;;;12335:34;;;12248:18;;4514:47:24;12101:274:137;4130:191:31;4185:7;2073:95;4243:17;:15;:17::i;:::-;4262:20;:18;:20::i;:::-;4221:92;;;;;;12639:25:137;;;;12680:18;;12673:34;;;;12723:18;;;12716:34;4284:13:31;12766:18:137;;;12759:34;4307:4:31;12809:19:137;;;12802:61;12611:19;;4221:92:31;;;;;;;;;;;;4211:103;;;;;;4204:110;;4130:191;:::o;7084:141:25:-;8870:21;8560:40;-1:-1:-1;;;8560:40:25;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:25;;;;;;;;;;;7146:73;7084:141::o;2730:216:27:-;6931:20:25;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;2895:7:27;:15:::1;2905:5:::0;2895:7;:15:::1;:::i;:::-;-1:-1:-1::0;2920:9:27::1;::::0;::::1;:19;2932:7:::0;2920:9;:19:::1;:::i;5140:1530:60:-:0;5266:7;;;6199:66;6186:79;;6182:164;;;-1:-1:-1;6297:1:60;;-1:-1:-1;6301:30:60;;-1:-1:-1;6333:1:60;6281:54;;6182:164;6457:24;;;6440:14;6457:24;;;;;;;;;13101:25:137;;;13174:4;13162:17;;13142:18;;;13135:45;;;;13196:18;;;13189:34;;;13239:18;;;13232:34;;;6457:24:60;;13073:19:137;;6457:24:60;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6457:24:60;;-1:-1:-1;;6457:24:60;;;-1:-1:-1;;;;;;;6495:20:60;;6491:113;;-1:-1:-1;6547:1:60;;-1:-1:-1;6551:29:60;;-1:-1:-1;6547:1:60;;-1:-1:-1;6531:62:60;;6491:113;6622:6;-1:-1:-1;6630:20:60;;-1:-1:-1;6630:20:60;;-1:-1:-1;5140:1530:60;;;;;;;;;:::o;7196:532::-;7291:20;7282:5;:29;;;;;;;;:::i;:::-;;7278:444;;7196:532;;:::o;7278:444::-;7387:29;7378:5;:38;;;;;;;;:::i;:::-;;7374:348;;7439:23;;-1:-1:-1;;;7439:23:60;;;;;;;;;;;7374:348;7492:35;7483:5;:44;;;;;;;;:::i;:::-;;7479:243;;7550:46;;-1:-1:-1;;;7550:46:60;;;;;1645:25:137;;;1618:18;;7550:46:60;1499:177:137;7479:243:60;7626:30;7617:5;:39;;;;;;;;:::i;:::-;;7613:109;;7679:32;;-1:-1:-1;;;7679:32:60;;;;;1645:25:137;;;1618:18;;7679:32:60;1499:177:137;7058:687:31;7108:7;-1:-1:-1;;;;;;;;;;;7108:7:31;7203:13;:11;:13::i;:::-;7230:18;;7182:34;;-1:-1:-1;7230:22:31;7226:513;;7275:22;;;;;;;;7058:687;-1:-1:-1;;7058:687:31:o;7226:513::-;7572:13;;7603:15;;7599:130;;7645:10;7058:687;-1:-1:-1;;;7058:687:31:o;7599:130::-;7701:13;7694:20;;;;;7058:687;:::o;7966:723::-;8019:7;-1:-1:-1;;;;;;;;;;;8019:7:31;8117:16;:14;:16::i;:::-;8147:21;;8093:40;;-1:-1:-1;8147:25:31;8143:540;;8195:25;;;;;;;;7966:723;-1:-1:-1;;7966:723:31:o;8143:540::-;8507:16;;;;8541:18;;8537:136;;8586:13;7966:723;-1:-1:-1;;;7966:723:31:o;14:286:137:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:137;;209:43;;199:71;;266:1;263;256:12;199:71;289:5;14:286;-1:-1:-1;;;14:286:137:o;497:289::-;539:3;577:5;571:12;604:6;599:3;592:19;660:6;653:4;646:5;642:16;635:4;630:3;626:14;620:47;712:1;705:4;696:6;691:3;687:16;683:27;676:38;775:4;768:2;764:7;759:2;751:6;747:15;743:29;738:3;734:39;730:50;723:57;;;497:289;;;;:::o;791:220::-;940:2;929:9;922:21;903:4;960:45;1001:2;990:9;986:18;978:6;960:45;:::i;1016:173::-;1084:20;;-1:-1:-1;;;;;1133:31:137;;1123:42;;1113:70;;1179:1;1176;1169:12;1113:70;1016:173;;;:::o;1194:300::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1362:29;1381:9;1362:29;:::i;:::-;1352:39;1460:2;1445:18;;;;1432:32;;-1:-1:-1;;;1194:300:137:o;1681:374::-;1758:6;1766;1774;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;1866:29;1885:9;1866:29;:::i;:::-;1856:39;;1914:38;1948:2;1937:9;1933:18;1914:38;:::i;:::-;1681:374;;1904:48;;-1:-1:-1;;;2021:2:137;2006:18;;;;1993:32;;1681:374::o;2060:226::-;2119:6;2172:2;2160:9;2151:7;2147:23;2143:32;2140:52;;;2188:1;2185;2178:12;2140:52;-1:-1:-1;2233:23:137;;2060:226;-1:-1:-1;2060:226:137:o;2473:300::-;2541:6;2549;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2663:23;;;-1:-1:-1;2729:38:137;2763:2;2748:18;;2729:38;:::i;:::-;2719:48;;2473:300;;;;;:::o;2967:260::-;3035:6;3043;3096:2;3084:9;3075:7;3071:23;3067:32;3064:52;;;3112:1;3109;3102:12;3064:52;3135:29;3154:9;3135:29;:::i;:::-;3125:39;;3183:38;3217:2;3206:9;3202:18;3183:38;:::i;3232:186::-;3291:6;3344:2;3332:9;3323:7;3319:23;3315:32;3312:52;;;3360:1;3357;3350:12;3312:52;3383:29;3402:9;3383:29;:::i;3423:1238::-;3829:3;3824;3820:13;3812:6;3808:26;3797:9;3790:45;3871:3;3866:2;3855:9;3851:18;3844:31;3771:4;3898:46;3939:3;3928:9;3924:19;3916:6;3898:46;:::i;:::-;3992:9;3984:6;3980:22;3975:2;3964:9;3960:18;3953:50;4026:33;4052:6;4044;4026:33;:::i;:::-;4090:2;4075:18;;4068:34;;;-1:-1:-1;;;;;4139:32:137;;4133:3;4118:19;;4111:61;4159:3;4188:19;;4181:35;;;4253:22;;;4247:3;4232:19;;4225:51;4325:13;;4347:22;;;4397:2;4423:15;;;;-1:-1:-1;4385:15:137;;;;-1:-1:-1;4466:169:137;4480:6;4477:1;4474:13;4466:169;;;4541:13;;4529:26;;4584:2;4610:15;;;;4575:12;;;;4502:1;4495:9;4466:169;;;-1:-1:-1;4652:3:137;;3423:1238;-1:-1:-1;;;;;;;;;;;3423:1238:137:o;4666:903::-;4777:6;4785;4793;4801;4809;4817;4825;4878:3;4866:9;4857:7;4853:23;4849:33;4846:53;;;4895:1;4892;4885:12;4846:53;4918:29;4937:9;4918:29;:::i;:::-;4908:39;;4966:38;5000:2;4989:9;4985:18;4966:38;:::i;:::-;4956:48;-1:-1:-1;5073:2:137;5058:18;;5045:32;;-1:-1:-1;5174:2:137;5159:18;;5146:32;;-1:-1:-1;5256:3:137;5241:19;;5228:33;5305:4;5292:18;;5280:31;;5270:59;;5325:1;5322;5315:12;5270:59;4666:903;;;;-1:-1:-1;4666:903:137;;;;5348:7;5428:3;5413:19;;5400:33;;-1:-1:-1;5532:3:137;5517:19;;;5504:33;;4666:903;-1:-1:-1;;4666:903:137:o;5574:380::-;5653:1;5649:12;;;;5696;;;5717:61;;5771:4;5763:6;5759:17;5749:27;;5717:61;5824:2;5816:6;5813:14;5793:18;5790:38;5787:161;;5870:10;5865:3;5861:20;5858:1;5851:31;5905:4;5902:1;5895:15;5933:4;5930:1;5923:15;5787:161;;5574:380;;;:::o;5959:127::-;6020:10;6015:3;6011:20;6008:1;6001:31;6051:4;6048:1;6041:15;6075:4;6072:1;6065:15;6091:375;6179:1;6197:5;6211:249;6232:1;6222:8;6219:15;6211:249;;;6282:4;6277:3;6273:14;6267:4;6264:24;6261:50;;;6291:18;;:::i;:::-;6341:1;6331:8;6327:16;6324:49;;;6355:16;;;;6324:49;6438:1;6434:16;;;;;6394:15;;6211:249;;;6091:375;;;;;;:::o;6471:902::-;6520:5;6550:8;6540:80;;-1:-1:-1;6591:1:137;6605:5;;6540:80;6639:4;6629:76;;-1:-1:-1;6676:1:137;6690:5;;6629:76;6721:4;6739:1;6734:59;;;;6807:1;6802:174;;;;6714:262;;6734:59;6764:1;6755:10;;6778:5;;;6802:174;6839:3;6829:8;6826:17;6823:43;;;6846:18;;:::i;:::-;-1:-1:-1;;6902:1:137;6888:16;;6961:5;;6714:262;;7060:2;7050:8;7047:16;7041:3;7035:4;7032:13;7028:36;7022:2;7012:8;7009:16;7004:2;6998:4;6995:12;6991:35;6988:77;6985:203;;;-1:-1:-1;7097:19:137;;;7173:5;;6985:203;7220:42;-1:-1:-1;;7245:8:137;7239:4;7220:42;:::i;:::-;7298:6;7294:1;7290:6;7286:19;7277:7;7274:32;7271:58;;;7309:18;;:::i;:::-;7347:20;;6471:902;-1:-1:-1;;;6471:902:137:o;7378:140::-;7436:5;7465:47;7506:4;7496:8;7492:19;7486:4;7465:47;:::i;7523:168::-;7596:9;;;7627;;7644:15;;;7638:22;;7624:37;7614:71;;7665:18;;:::i;8260:127::-;8321:10;8316:3;8312:20;8309:1;8302:31;8352:4;8349:1;8342:15;8376:4;8373:1;8366:15;9973:518;10075:2;10070:3;10067:11;10064:421;;;10111:5;10108:1;10101:16;10155:4;10152:1;10142:18;10225:2;10213:10;10209:19;10206:1;10202:27;10196:4;10192:38;10261:4;10249:10;10246:20;10243:47;;;-1:-1:-1;10284:4:137;10243:47;10339:2;10334:3;10330:12;10327:1;10323:20;10317:4;10313:31;10303:41;;10394:81;10412:2;10405:5;10402:13;10394:81;;;10471:1;10457:16;;10438:1;10427:13;10394:81;;10667:1299;10793:3;10787:10;10820:18;10812:6;10809:30;10806:56;;;10842:18;;:::i;:::-;10871:97;10961:6;10921:38;10953:4;10947:11;10921:38;:::i;:::-;10915:4;10871:97;:::i;:::-;11017:4;11048:2;11037:14;;11065:1;11060:649;;;;11753:1;11770:6;11767:89;;;-1:-1:-1;11822:19:137;;;11816:26;11767:89;-1:-1:-1;;10624:1:137;10620:11;;;10616:24;10612:29;10602:40;10648:1;10644:11;;;10599:57;11869:81;;11030:930;;11060:649;9920:1;9913:14;;;9957:4;9944:18;;-1:-1:-1;;11096:20:137;;;11214:222;11228:7;11225:1;11222:14;11214:222;;;11310:19;;;11304:26;11289:42;;11417:4;11402:20;;;;11370:1;11358:14;;;;11244:12;11214:222;;;11218:3;11464:6;11455:7;11452:19;11449:201;;;11525:19;;;11519:26;-1:-1:-1;;11608:1:137;11604:14;;;11620:3;11600:24;11596:37;11592:42;11577:58;11562:74;;11449:201;-1:-1:-1;;;;11696:1:137;11680:14;;;11676:22;11663:36;;-1:-1:-1;10667:1299:137:o;11971:125::-;12036:9;;;12057:10;;;12054:36;;;12070:18;;:::i;13277:127::-;13338:10;13333:3;13329:20;13326:1;13319:31;13369:4;13366:1;13359:15;13393:4;13390:1;13383:15", - "linkReferences": {} - }, - "methodIdentifiers": { - "DEFAULT_ADMIN_ROLE()": "a217fddf", - "DOMAIN_SEPARATOR()": "3644e515", - "allowance(address,address)": "dd62ed3e", - "approve(address,uint256)": "095ea7b3", - "balanceOf(address)": "70a08231", - "decimals()": "313ce567", - "eip712Domain()": "84b0196e", - "getRoleAdmin(bytes32)": "248a9ca3", - "grantRole(bytes32,address)": "2f2ff15d", - "hasRole(bytes32,address)": "91d14854", - "initialize(address,address)": "485cc955", - "name()": "06fdde03", - "nonces(address)": "7ecebe00", - "permit(address,address,uint256,uint256,uint8,bytes32,bytes32)": "d505accf", - "renounceRole(bytes32,address)": "36568abe", - "revokeRole(bytes32,address)": "d547741f", - "supportsInterface(bytes4)": "01ffc9a7", - "symbol()": "95d89b41", - "totalSupply()": "18160ddd", - "transfer(address,uint256)": "a9059cbb", - "transferFrom(address,address,uint256)": "23b872dd" - }, - "rawMetadata": "{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"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\"},{\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"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\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"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\":[],\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_custody\",\"type\":\"address\"}],\"name\":\"initialize\",\"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\":[{\"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\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"ECDSAInvalidSignature()\":[{\"details\":\"The signature derives the `address(0)`.\"}],\"ECDSAInvalidSignatureLength(uint256)\":[{\"details\":\"The signature has an .\"}],\"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.\"}]},\"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.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"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}.\"},\"constructor\":{\"details\":\"Disables potential implementation exploit\"},\"decimals()\":{\"details\":\"Returns the number of decimals\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize(address,address)\":{\"details\":\"Initializes the contract with initial parameters.\",\"params\":{\"_custody\":\"The address of the custody account.\",\"_owner\":\"The address of the owner who receives default admin role.\"}},\"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.\"},\"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.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"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}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. 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`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"decimals()\":{\"notice\":\"decimals is set to 8, following the Movement network standard decimals\"},\"initialize(address,address)\":{\"notice\":\"The ERC20 token is named \\\"Movement\\\" with symbol \\\"MOVE\\\".EIP712 domain version is set to \\\"1\\\" for signatures.The owner is granted the `DEFAULT_ADMIN_ROLE`.10 billion MOVE tokens are minted to the owner's address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/MOVEToken.sol\":\"MOVEToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"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\":\"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040\",\"dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x8a97653aeba40e9f0c2e8df1a1379b29b927b6dc3534040c668e71ad9ae89d88\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e529c294c9d634eb68a1e4aeb66eb8381de5a08ccd2c0bfeebd48a6b28fcff7\",\"dweb:/ipfs/QmWCezuxfZb68nM3Hs6XzQNNiW7VJsymU4sajy2DW1CKbp\"]},\"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\":\"0x85462422a22578744581e012e9aa0a391958cb360288b0b63f29bf0431d70327\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2bc529e2b9b28da5d26da451058250d85afcaa3c5083ee273ac68fa6bf956b78\",\"dweb:/ipfs/Qmd3Aq59ztmoVmHigsaR4YjkXWKERVpjfQ4a2PHk7Ke6Rx\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"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\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"src/token/MOVEToken.sol\":{\"keccak256\":\"0x907babd7e2db7867a9401ab8edcecd579ad7db099ae4693a27e052887d91eb22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a87e3b44d5e5409f0695ca2057be132b02b12a6cfa3d95a1a69382458e16b20a\",\"dweb:/ipfs/QmPNA8kiRGr3jR4ngz8UeKLUM7QitN4J5xNbxxWYNncV9H\"]}},\"version\":1}", - "metadata": { - "compiler": { - "version": "0.8.26+commit.8a97fa7a" - }, - "language": "Solidity", - "output": { - "abi": [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "type": "error", - "name": "AccessControlBadConfirmation" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "internalType": "bytes32", - "name": "neededRole", - "type": "bytes32" - } - ], - "type": "error", - "name": "AccessControlUnauthorizedAccount" - }, - { - "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", - "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": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32", - "indexed": true - } - ], - "type": "event", - "name": "RoleAdminChanged", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleGranted", - "anonymous": false - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32", - "indexed": true - }, - { - "internalType": "address", - "name": "account", - "type": "address", - "indexed": true - }, - { - "internalType": "address", - "name": "sender", - "type": "address", - "indexed": true - } - ], - "type": "event", - "name": "RoleRevoked", - "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": "DEFAULT_ADMIN_ROLE", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ] - }, - { - "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": [], - "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": "bytes32", - "name": "role", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function", - "name": "getRoleAdmin", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ] - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "grantRole" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function", - "name": "hasRole", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ] - }, - { - "inputs": [ - { - "internalType": "address", - "name": "_owner", - "type": "address" - }, - { - "internalType": "address", - "name": "_custody", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "initialize" - }, - { - "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": [ - { - "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": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "callerConfirmation", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "renounceRole" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "internalType": "address", - "name": "account", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "function", - "name": "revokeRole" - }, - { - "inputs": [ - { - "internalType": "bytes4", - "name": "interfaceId", - "type": "bytes4" - } - ], - "stateMutability": "view", - "type": "function", - "name": "supportsInterface", - "outputs": [ - { - "internalType": "bool", - "name": "", - "type": "bool" - } - ] - }, - { - "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" - } - ] - } - ], - "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}." - }, - "constructor": { - "details": "Disables potential implementation exploit" - }, - "decimals()": { - "details": "Returns the number of decimals" - }, - "eip712Domain()": { - "details": "See {IERC-5267}." - }, - "getRoleAdmin(bytes32)": { - "details": "Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}." - }, - "grantRole(bytes32,address)": { - "details": "Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event." - }, - "hasRole(bytes32,address)": { - "details": "Returns `true` if `account` has been granted `role`." - }, - "initialize(address,address)": { - "details": "Initializes the contract with initial parameters.", - "params": { - "_custody": "The address of the custody account.", - "_owner": "The address of the owner who receives default admin role." - } - }, - "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." - }, - "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." - }, - "renounceRole(bytes32,address)": { - "details": "Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event." - }, - "revokeRole(bytes32,address)": { - "details": "Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event." - }, - "supportsInterface(bytes4)": { - "details": "See {IERC165-supportsInterface}." - }, - "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}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. 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`." - } - }, - "version": 1 - }, - "userdoc": { - "kind": "user", - "methods": { - "decimals()": { - "notice": "decimals is set to 8, following the Movement network standard decimals" - }, - "initialize(address,address)": { - "notice": "The ERC20 token is named \"Movement\" with symbol \"MOVE\".EIP712 domain version is set to \"1\" for signatures.The owner is granted the `DEFAULT_ADMIN_ROLE`.10 billion MOVE tokens are minted to the owner's address." - } - }, - "version": 1 - } - }, - "settings": { - "remappings": [ - "@createx/=lib/createx/src/", - "@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/", - "@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/", - "@safe-smart-account/=lib/safe-smart-account/", - "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/", - "murky/=lib/murky/", - "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", - "openzeppelin-contracts/=lib/openzeppelin-contracts/", - "openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/", - "openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/", - "safe-smart-account/=lib/safe-smart-account/", - "solady/=lib/createx/lib/solady/", - "solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/", - "solmate/=lib/solmate/src/" - ], - "optimizer": { - "enabled": true, - "runs": 200 - }, - "metadata": { - "bytecodeHash": "ipfs" - }, - "compilationTarget": { - "src/token/MOVEToken.sol": "MOVEToken" - }, - "evmVersion": "cancun", - "libraries": {} - }, - "sources": { - "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol": { - "keccak256": "0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225", - "urls": [ - "bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45", - "dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN" - ], - "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": "0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f", - "urls": [ - "bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040", - "dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol": { - "keccak256": "0x8a97653aeba40e9f0c2e8df1a1379b29b927b6dc3534040c668e71ad9ae89d88", - "urls": [ - "bzz-raw://6e529c294c9d634eb68a1e4aeb66eb8381de5a08ccd2c0bfeebd48a6b28fcff7", - "dweb:/ipfs/QmWCezuxfZb68nM3Hs6XzQNNiW7VJsymU4sajy2DW1CKbp" - ], - "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": "0x85462422a22578744581e012e9aa0a391958cb360288b0b63f29bf0431d70327", - "urls": [ - "bzz-raw://2bc529e2b9b28da5d26da451058250d85afcaa3c5083ee273ac68fa6bf956b78", - "dweb:/ipfs/Qmd3Aq59ztmoVmHigsaR4YjkXWKERVpjfQ4a2PHk7Ke6Rx" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol": { - "keccak256": "0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8", - "urls": [ - "bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45", - "dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/access/IAccessControl.sol": { - "keccak256": "0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41", - "urls": [ - "bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26", - "dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH" - ], - "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": "0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7", - "urls": [ - "bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f", - "dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": { - "keccak256": "0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70", - "urls": [ - "bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c", - "dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol": { - "keccak256": "0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2", - "urls": [ - "bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850", - "dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol": { - "keccak256": "0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff", - "urls": [ - "bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d", - "dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/Strings.sol": { - "keccak256": "0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792", - "urls": [ - "bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453", - "dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol": { - "keccak256": "0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf", - "urls": [ - "bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c", - "dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol": { - "keccak256": "0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435", - "urls": [ - "bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c", - "dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol": { - "keccak256": "0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b", - "urls": [ - "bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df", - "dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/math/Math.sol": { - "keccak256": "0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d", - "urls": [ - "bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875", - "dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L" - ], - "license": "MIT" - }, - "lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol": { - "keccak256": "0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72", - "urls": [ - "bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc", - "dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT" - ], - "license": "MIT" - }, - "src/token/MOVEToken.sol": { - "keccak256": "0x907babd7e2db7867a9401ab8edcecd579ad7db099ae4693a27e052887d91eb22", - "urls": [ - "bzz-raw://a87e3b44d5e5409f0695ca2057be132b02b12a6cfa3d95a1a69382458e16b20a", - "dweb:/ipfs/QmPNA8kiRGr3jR4ngz8UeKLUM7QitN4J5xNbxxWYNncV9H" - ], - "license": "MIT" - } - }, - "version": 1 - }, - "storageLayout": { - "storage": [], - "types": {} - }, - "ast": { - "absolutePath": "src/token/MOVEToken.sol", - "id": 56720, - "exportedSymbols": { - "AccessControlUpgradeable": [ - 39385 - ], - "ERC20PermitUpgradeable": [ - 40607 - ], - "MOVEToken": [ - 56719 - ] - }, - "nodeType": "SourceUnit", - "src": "32:1526:112", - "nodes": [ - { - "id": 56640, - "nodeType": "PragmaDirective", - "src": "32:24:112", - "nodes": [], - "literals": [ - "solidity", - "^", - "0.8", - ".19" - ] - }, - { - "id": 56642, - "nodeType": "ImportDirective", - "src": "58:125:112", - "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": 56720, - "sourceUnit": 40608, - "symbolAliases": [ - { - "foreign": { - "id": 56641, - "name": "ERC20PermitUpgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40607, - "src": "66:22:112", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 56644, - "nodeType": "ImportDirective", - "src": "184:113:112", - "nodes": [], - "absolutePath": "lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol", - "file": "@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol", - "nameLocation": "-1:-1:-1", - "scope": 56720, - "sourceUnit": 39386, - "symbolAliases": [ - { - "foreign": { - "id": 56643, - "name": "AccessControlUpgradeable", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 39385, - "src": "192:24:112", - "typeDescriptions": {} - }, - "nameLocation": "-1:-1:-1" - } - ], - "unitAlias": "" - }, - { - "id": 56719, - "nodeType": "ContractDefinition", - "src": "299:1259:112", - "nodes": [ - { - "id": 56656, - "nodeType": "FunctionDefinition", - "src": "447:39:112", - "nodes": [], - "body": { - "id": 56655, - "nodeType": "Block", - "src": "461:25:112", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 56652, - "name": "_disableInitializers", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 39607, - "src": "462:20:112", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$__$returns$__$", - "typeString": "function ()" - } - }, - "id": 56653, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "462:22:112", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 56654, - "nodeType": "ExpressionStatement", - "src": "462:22:112" - } - ] - }, - "documentation": { - "id": 56649, - "nodeType": "StructuredDocumentation", - "src": "377:65:112", - "text": " @dev Disables potential implementation exploit" - }, - "implemented": true, - "kind": "constructor", - "modifiers": [], - "name": "", - "nameLocation": "-1:-1:-1", - "parameters": { - "id": 56650, - "nodeType": "ParameterList", - "parameters": [], - "src": "458:2:112" - }, - "returnParameters": { - "id": 56651, - "nodeType": "ParameterList", - "parameters": [], - "src": "461:0:112" - }, - "scope": 56719, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "id": 56708, - "nodeType": "FunctionDefinition", - "src": "981:342:112", - "nodes": [], - "body": { - "id": 56707, - "nodeType": "Block", - "src": "1054:269:112", - "nodes": [], - "statements": [ - { - "expression": { - "arguments": [ - { - "commonType": { - "typeIdentifier": "t_bool", - "typeString": "bool" - }, - "id": 56679, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 56672, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 56667, - "name": "_owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 56659, - "src": "1072:6:112", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 56670, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1090:1:112", - "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": 56669, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1082:7:112", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 56668, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1082:7:112", - "typeDescriptions": {} - } - }, - "id": 56671, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1082:10:112", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1072:20:112", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "nodeType": "BinaryOperation", - "operator": "&&", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "id": 56678, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "id": 56673, - "name": "_custody", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 56661, - "src": "1096:8:112", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "nodeType": "BinaryOperation", - "operator": "!=", - "rightExpression": { - "arguments": [ - { - "hexValue": "30", - "id": 56676, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1116:1:112", - "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": 56675, - "isConstant": false, - "isLValue": false, - "isPure": true, - "lValueRequested": false, - "nodeType": "ElementaryTypeNameExpression", - "src": "1108:7:112", - "typeDescriptions": { - "typeIdentifier": "t_type$_t_address_$", - "typeString": "type(address)" - }, - "typeName": { - "id": 56674, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1108:7:112", - "typeDescriptions": {} - } - }, - "id": 56677, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "typeConversion", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1108:10:112", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "src": "1096:22:112", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "src": "1072:46:112", - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - ], - "id": 56666, - "name": "require", - "nodeType": "Identifier", - "overloadedDeclarations": [ - -18, - -18, - -18 - ], - "referencedDeclaration": -18, - "src": "1064:7:112", - "typeDescriptions": { - "typeIdentifier": "t_function_require_pure$_t_bool_$returns$__$", - "typeString": "function (bool) pure" - } - }, - "id": 56680, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1064:55:112", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 56681, - "nodeType": "ExpressionStatement", - "src": "1064:55:112" - }, - { - "expression": { - "arguments": [ - { - "hexValue": "4d6f76656d656e74", - "id": 56683, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1142:10:112", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252", - "typeString": "literal_string \"Movement\"" - }, - "value": "Movement" - }, - { - "hexValue": "4d4f5645", - "id": 56684, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1154:6:112", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_94304e8d07ec49123c30284d16c4a1082e90258cc0faf510314d9c3808edcda0", - "typeString": "literal_string \"MOVE\"" - }, - "value": "MOVE" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252", - "typeString": "literal_string \"Movement\"" - }, - { - "typeIdentifier": "t_stringliteral_94304e8d07ec49123c30284d16c4a1082e90258cc0faf510314d9c3808edcda0", - "typeString": "literal_string \"MOVE\"" - } - ], - "id": 56682, - "name": "__ERC20_init", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 39889, - "src": "1129:12:112", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory,string memory)" - } - }, - "id": 56685, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1129:32:112", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 56686, - "nodeType": "ExpressionStatement", - "src": "1129:32:112" - }, - { - "expression": { - "arguments": [ - { - "hexValue": "4d6f76656d656e74", - "id": 56688, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1195:10:112", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252", - "typeString": "literal_string \"Movement\"" - }, - "value": "Movement" - }, - { - "hexValue": "31", - "id": 56689, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "string", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1207:3:112", - "typeDescriptions": { - "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", - "typeString": "literal_string \"1\"" - }, - "value": "1" - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252", - "typeString": "literal_string \"Movement\"" - }, - { - "typeIdentifier": "t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6", - "typeString": "literal_string \"1\"" - } - ], - "id": 56687, - "name": "__EIP712_init_unchained", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40861, - "src": "1171:23:112", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$", - "typeString": "function (string memory,string memory)" - } - }, - "id": 56690, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1171:40:112", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 56691, - "nodeType": "ExpressionStatement", - "src": "1171:40:112" - }, - { - "expression": { - "arguments": [ - { - "id": 56693, - "name": "DEFAULT_ADMIN_ROLE", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 39051, - "src": "1232:18:112", - "typeDescriptions": { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - } - }, - { - "id": 56694, - "name": "_owner", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 56659, - "src": "1252:6:112", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_bytes32", - "typeString": "bytes32" - }, - { - "typeIdentifier": "t_address", - "typeString": "address" - } - ], - "id": 56692, - "name": "_grantRole", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 39338, - "src": "1221:10:112", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$", - "typeString": "function (bytes32,address) returns (bool)" - } - }, - "id": 56695, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1221:38:112", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_bool", - "typeString": "bool" - } - }, - "id": 56696, - "nodeType": "ExpressionStatement", - "src": "1221:38:112" - }, - { - "expression": { - "arguments": [ - { - "id": 56698, - "name": "_custody", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 56661, - "src": "1275:8:112", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 56704, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130303030303030303030", - "id": 56699, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1285:11:112", - "typeDescriptions": { - "typeIdentifier": "t_rational_10000000000_by_1", - "typeString": "int_const 10000000000" - }, - "value": "10000000000" - }, - "nodeType": "BinaryOperation", - "operator": "*", - "rightExpression": { - "commonType": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - }, - "id": 56703, - "isConstant": false, - "isLValue": false, - "isPure": false, - "lValueRequested": false, - "leftExpression": { - "hexValue": "3130", - "id": 56700, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1299:2:112", - "typeDescriptions": { - "typeIdentifier": "t_rational_10_by_1", - "typeString": "int_const 10" - }, - "value": "10" - }, - "nodeType": "BinaryOperation", - "operator": "**", - "rightExpression": { - "arguments": [], - "expression": { - "argumentTypes": [], - "id": 56701, - "name": "decimals", - "nodeType": "Identifier", - "overloadedDeclarations": [ - 56718 - ], - "referencedDeclaration": 56718, - "src": "1305:8:112", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_pure$__$returns$_t_uint8_$", - "typeString": "function () pure returns (uint8)" - } - }, - "id": 56702, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1305:10:112", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "src": "1299:16:112", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - }, - "src": "1285:30:112", - "typeDescriptions": { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - } - ], - "expression": { - "argumentTypes": [ - { - "typeIdentifier": "t_address", - "typeString": "address" - }, - { - "typeIdentifier": "t_uint256", - "typeString": "uint256" - } - ], - "id": 56697, - "name": "_mint", - "nodeType": "Identifier", - "overloadedDeclarations": [], - "referencedDeclaration": 40270, - "src": "1269:5:112", - "typeDescriptions": { - "typeIdentifier": "t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$", - "typeString": "function (address,uint256)" - } - }, - "id": 56705, - "isConstant": false, - "isLValue": false, - "isPure": false, - "kind": "functionCall", - "lValueRequested": false, - "nameLocations": [], - "names": [], - "nodeType": "FunctionCall", - "src": "1269:47:112", - "tryCall": false, - "typeDescriptions": { - "typeIdentifier": "t_tuple$__$", - "typeString": "tuple()" - } - }, - "id": 56706, - "nodeType": "ExpressionStatement", - "src": "1269:47:112" - } - ] - }, - "documentation": { - "id": 56657, - "nodeType": "StructuredDocumentation", - "src": "492:484:112", - "text": " @dev Initializes the contract with initial parameters.\n @param _owner The address of the owner who receives default admin role.\n @param _custody The address of the custody account.\n @notice The ERC20 token is named \"Movement\" with symbol \"MOVE\".\n @notice EIP712 domain version is set to \"1\" for signatures.\n @notice The owner is granted the `DEFAULT_ADMIN_ROLE`.\n @notice 10 billion MOVE tokens are minted to the owner's address." - }, - "functionSelector": "485cc955", - "implemented": true, - "kind": "function", - "modifiers": [ - { - "id": 56664, - "kind": "modifierInvocation", - "modifierName": { - "id": 56663, - "name": "initializer", - "nameLocations": [ - "1042:11:112" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 39493, - "src": "1042:11:112" - }, - "nodeType": "ModifierInvocation", - "src": "1042:11:112" - } - ], - "name": "initialize", - "nameLocation": "990:10:112", - "parameters": { - "id": 56662, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 56659, - "mutability": "mutable", - "name": "_owner", - "nameLocation": "1009:6:112", - "nodeType": "VariableDeclaration", - "scope": 56708, - "src": "1001:14:112", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 56658, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1001:7:112", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - }, - { - "constant": false, - "id": 56661, - "mutability": "mutable", - "name": "_custody", - "nameLocation": "1025:8:112", - "nodeType": "VariableDeclaration", - "scope": 56708, - "src": "1017:16:112", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - }, - "typeName": { - "id": 56660, - "name": "address", - "nodeType": "ElementaryTypeName", - "src": "1017:7:112", - "stateMutability": "nonpayable", - "typeDescriptions": { - "typeIdentifier": "t_address", - "typeString": "address" - } - }, - "visibility": "internal" - } - ], - "src": "1000:34:112" - }, - "returnParameters": { - "id": 56665, - "nodeType": "ParameterList", - "parameters": [], - "src": "1054:0:112" - }, - "scope": 56719, - "stateMutability": "nonpayable", - "virtual": false, - "visibility": "public" - }, - { - "id": 56718, - "nodeType": "FunctionDefinition", - "src": "1474:82:112", - "nodes": [], - "body": { - "id": 56717, - "nodeType": "Block", - "src": "1531:25:112", - "nodes": [], - "statements": [ - { - "expression": { - "hexValue": "38", - "id": 56715, - "isConstant": false, - "isLValue": false, - "isPure": true, - "kind": "number", - "lValueRequested": false, - "nodeType": "Literal", - "src": "1548:1:112", - "typeDescriptions": { - "typeIdentifier": "t_rational_8_by_1", - "typeString": "int_const 8" - }, - "value": "8" - }, - "functionReturnParameters": 56714, - "id": 56716, - "nodeType": "Return", - "src": "1541:8:112" - } - ] - }, - "baseFunctions": [ - 39958 - ], - "documentation": { - "id": 56709, - "nodeType": "StructuredDocumentation", - "src": "1329:140:112", - "text": " @dev Returns the number of decimals\n @notice decimals is set to 8, following the Movement network standard decimals" - }, - "functionSelector": "313ce567", - "implemented": true, - "kind": "function", - "modifiers": [], - "name": "decimals", - "nameLocation": "1483:8:112", - "overrides": { - "id": 56711, - "nodeType": "OverrideSpecifier", - "overrides": [], - "src": "1506:8:112" - }, - "parameters": { - "id": 56710, - "nodeType": "ParameterList", - "parameters": [], - "src": "1491:2:112" - }, - "returnParameters": { - "id": 56714, - "nodeType": "ParameterList", - "parameters": [ - { - "constant": false, - "id": 56713, - "mutability": "mutable", - "name": "", - "nameLocation": "-1:-1:-1", - "nodeType": "VariableDeclaration", - "scope": 56718, - "src": "1524:5:112", - "stateVariable": false, - "storageLocation": "default", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - }, - "typeName": { - "id": 56712, - "name": "uint8", - "nodeType": "ElementaryTypeName", - "src": "1524:5:112", - "typeDescriptions": { - "typeIdentifier": "t_uint8", - "typeString": "uint8" - } - }, - "visibility": "internal" - } - ], - "src": "1523:7:112" - }, - "scope": 56719, - "stateMutability": "pure", - "virtual": false, - "visibility": "public" - } - ], - "abstract": false, - "baseContracts": [ - { - "baseName": { - "id": 56645, - "name": "ERC20PermitUpgradeable", - "nameLocations": [ - "321:22:112" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 40607, - "src": "321:22:112" - }, - "id": 56646, - "nodeType": "InheritanceSpecifier", - "src": "321:22:112" - }, - { - "baseName": { - "id": 56647, - "name": "AccessControlUpgradeable", - "nameLocations": [ - "345:24:112" - ], - "nodeType": "IdentifierPath", - "referencedDeclaration": 39385, - "src": "345:24:112" - }, - "id": 56648, - "nodeType": "InheritanceSpecifier", - "src": "345:24:112" - } - ], - "canonicalName": "MOVEToken", - "contractDependencies": [], - "contractKind": "contract", - "fullyImplemented": true, - "linearizedBaseContracts": [ - 56719, - 39385, - 41148, - 45166, - 41527, - 40607, - 40764, - 41108, - 42745, - 43725, - 40438, - 42797, - 43689, - 43663, - 40653, - 39639 - ], - "name": "MOVEToken", - "nameLocation": "308:9:112", - "scope": 56720, - "usedErrors": [ - 39402, - 39405, - 40473, - 40480, - 40667, - 41454, - 41457, - 42767, - 42772, - 42777, - 42786, - 42791, - 42796, - 44719, - 44724, - 44729 - ], - "usedEvents": [ - 39410, - 41466, - 41475, - 41484, - 42725, - 43597, - 43606 - ] - } - ], - "license": "MIT" - }, - "id": 112 -} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"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":"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":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_owner","type":"address","internalType":"address"},{"name":"_custody","type":"address","internalType":"address"}],"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":"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":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"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":"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":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","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":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"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":[]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61181a806100d65f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063485cc955116100b457806395d89b411161007957806395d89b4114610283578063a217fddf1461028b578063a9059cbb14610292578063d505accf146102a5578063d547741f146102b8578063dd62ed3e146102cb575f80fd5b8063485cc9551461021c57806370a082311461022f5780637ecebe001461024257806384b0196e1461025557806391d1485414610270575f80fd5b8063248a9ca3116100fa578063248a9ca3146101ca5780632f2ff15d146101dd578063313ce567146101f25780633644e5151461020157806336568abe14610209575f80fd5b806301ffc9a71461013657806306fdde031461015e578063095ea7b31461017357806318160ddd1461018657806323b872dd146101b7575b5f80fd5b610149610144366004611286565b6102de565b60405190151581526020015b60405180910390f35b610166610314565b60405161015591906112e2565b61014961018136600461130f565b6103b9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610155565b6101496101c5366004611337565b6103d0565b6101a96101d8366004611371565b6103f3565b6101f06101eb366004611388565b610413565b005b60405160088152602001610155565b6101a9610435565b6101f0610217366004611388565b610443565b6101f061022a3660046113b2565b61047b565b6101a961023d3660046113da565b610661565b6101a96102503660046113da565b610691565b61025d61069b565b60405161015597969594939291906113f3565b61014961027e366004611388565b610749565b61016661077f565b6101a95f81565b6101496102a036600461130f565b6107bd565b6101f06102b3366004611489565b6107ca565b6101f06102c6366004611388565b61091f565b6101a96102d93660046113b2565b61093b565b5f6001600160e01b03198216637965db0b60e01b148061030e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5f805160206117858339815191525b9050806003018054610337906114f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610363906114f6565b80156103ae5780601f10610385576101008083540402835291602001916103ae565b820191905f5260205f20905b81548152906001019060200180831161039157829003601f168201915b505050505091505090565b5f336103c6818585610984565b5060019392505050565b5f336103dd858285610991565b6103e88585856109ee565b506001949350505050565b5f9081525f805160206117c5833981519152602052604090206001015490565b61041c826103f3565b61042581610a4b565b61042f8383610a58565b50505050565b5f61043e610af9565b905090565b6001600160a01b038116331461046c5760405163334bd91960e11b815260040160405180910390fd5b6104768282610b02565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156104c05750825b90505f8267ffffffffffffffff1660011480156104dc5750303b155b9050811580156104ea575080155b156105085760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053257845460ff60401b1916600160401b1785555b6001600160a01b0387161580159061055257506001600160a01b03861615155b61055a575f80fd5b6105a060405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060048152602001634d4f564560e01b815250610b7b565b6105e360405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060018152602001603160f81b815250610b91565b6105ed5f88610a58565b50610612866105fe6008600a611625565b61060d906402540be400611633565b610bf0565b831561065857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f805f805160206117858339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b5f61030e82610c24565b5f60608082808083815f805160206117a583398151915280549091501580156106c657506001810154155b61070f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610717610c4c565b61071f610c8a565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f9182525f805160206117c5833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061178583398151915291610337906114f6565b5f336103c68185856109ee565b834211156107ee5760405163313c898160e11b815260048101859052602401610706565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108588c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6108b282610ca0565b90505f6108c182878787610ccc565b9050896001600160a01b0316816001600160a01b031614610908576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610706565b6109138a8a8a610984565b50505050505050505050565b610928826103f3565b61093181610a4b565b61042f8383610b02565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104768383836001610cf8565b5f61099c848461093b565b90505f19811461042f57818110156109e057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610706565b61042f84848484035f610cf8565b6001600160a01b038316610a1757604051634b637e8f60e11b81525f6004820152602401610706565b6001600160a01b038216610a405760405163ec442f0560e01b81525f6004820152602401610706565b610476838383610ddc565b610a558133610f15565b50565b5f5f805160206117c5833981519152610a718484610749565b610af0575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610aa63390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061030e565b5f91505061030e565b5f61043e610f4e565b5f5f805160206117c5833981519152610b1b8484610749565b15610af0575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061030e565b610b83610fc1565b610b8d828261100c565b5050565b610b99610fc1565b5f805160206117a58339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610bd284826116a2565b5060038101610be183826116a2565b505f8082556001909101555050565b6001600160a01b038216610c195760405163ec442f0560e01b81525f6004820152602401610706565b610b8d5f8383610ddc565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610672565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206117a583398151915291610337906114f6565b60605f5f805160206117a5833981519152610326565b5f61030e610cac610af9565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80610cdc8888888861105c565b925092509250610cec8282611124565b50909695505050505050565b5f805160206117858339815191526001600160a01b038516610d2f5760405163e602df0560e01b81525f6004820152602401610706565b6001600160a01b038416610d5857604051634a1406b160e11b81525f6004820152602401610706565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610dd557836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610dcc91815260200190565b60405180910390a35b5050505050565b5f805160206117858339815191526001600160a01b038416610e165781816002015f828254610e0b919061175d565b90915550610e869050565b6001600160a01b0384165f9081526020829052604090205482811015610e685760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610706565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610ea4576002810180548390039055610ec2565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f0791815260200190565b60405180910390a350505050565b610f1f8282610749565b610b8d5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610706565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f786111dc565b610f80611244565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661100a57604051631afcd79f60e31b815260040160405180910390fd5b565b611014610fc1565b5f805160206117858339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361104d84826116a2565b506004810161042f83826116a2565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561109557505f9150600390508261111a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156110e6573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661111157505f92506001915082905061111a565b92505f91508190505b9450945094915050565b5f82600381111561113757611137611770565b03611140575050565b600182600381111561115457611154611770565b036111725760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561118657611186611770565b036111a75760405163fce698f760e01b815260048101829052602401610706565b60038260038111156111bb576111bb611770565b03610b8d576040516335e2f38360e21b815260048101829052602401610706565b5f5f805160206117a5833981519152816111f4610c4c565b80519091501561120c57805160209091012092915050565b8154801561121b579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f805160206117a58339815191528161125c610c8a565b80519091501561127457805160209091012092915050565b6001820154801561121b579392505050565b5f60208284031215611296575f80fd5b81356001600160e01b0319811681146112ad575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112ad60208301846112b4565b80356001600160a01b038116811461130a575f80fd5b919050565b5f8060408385031215611320575f80fd5b611329836112f4565b946020939093013593505050565b5f805f60608486031215611349575f80fd5b611352846112f4565b9250611360602085016112f4565b929592945050506040919091013590565b5f60208284031215611381575f80fd5b5035919050565b5f8060408385031215611399575f80fd5b823591506113a9602084016112f4565b90509250929050565b5f80604083850312156113c3575f80fd5b6113cc836112f4565b91506113a9602084016112f4565b5f602082840312156113ea575f80fd5b6112ad826112f4565b60ff60f81b8816815260e060208201525f61141160e08301896112b4565b828103604084015261142381896112b4565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561147857835183526020938401939092019160010161145a565b50909b9a5050505050505050505050565b5f805f805f805f60e0888a03121561149f575f80fd5b6114a8886112f4565b96506114b6602089016112f4565b95506040880135945060608801359350608088013560ff811681146114d9575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c9082168061150a57607f821691505b60208210810361152857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561157d578085048111156115615761156161152e565b600184161561156f57908102905b60019390931c928002611546565b935093915050565b5f826115935750600161030e565b8161159f57505f61030e565b81600181146115b557600281146115bf576115db565b600191505061030e565b60ff8411156115d0576115d061152e565b50506001821b61030e565b5060208310610133831016604e8410600b84101617156115fe575081810a61030e565b61160a5f198484611542565b805f190482111561161d5761161d61152e565b029392505050565b5f6112ad60ff841683611585565b808202811582820484141761030e5761030e61152e565b634e487b7160e01b5f52604160045260245ffd5b601f82111561047657805f5260205f20601f840160051c810160208510156116835750805b601f840160051c820191505b81811015610dd5575f815560010161168f565b815167ffffffffffffffff8111156116bc576116bc61164a565b6116d0816116ca84546114f6565b8461165e565b6020601f821160018114611702575f83156116eb5750848201515b5f19600385901b1c1916600184901b178455610dd5565b5f84815260208120601f198516915b828110156117315787850151825560209485019460019092019101611711565b508482101561174e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561030e5761030e61152e565b634e487b7160e01b5f52602160045260245ffdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212200c213e57e697f2dee37f51b79647b3593da8c247917d58e21e2647bf25597abc64736f6c634300081a0033","sourceMap":"299:1259:113:-:0;;;447:39;;;;;;;;;-1:-1:-1;462:22:113;:20;:22::i;:::-;299:1259;;7711:422:25;8870:21;7900:15;;;;;;;7896:76;;;7938:23;;-1:-1:-1;;;7938:23:25;;;;;;;;;;;7896:76;7985:14;;-1:-1:-1;;;;;7985:14:25;;;:34;7981:146;;8035:33;;-1:-1:-1;;;;;;8035:33:25;-1:-1:-1;;;;;8035:33:25;;;;;8087:29;;158:50:138;;;8087:29:25;;146:2:138;131:18;8087:29:25;;;;;;;7981:146;7760:373;7711:422::o;14:200:138:-;299:1259:113;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063485cc955116100b457806395d89b411161007957806395d89b4114610283578063a217fddf1461028b578063a9059cbb14610292578063d505accf146102a5578063d547741f146102b8578063dd62ed3e146102cb575f80fd5b8063485cc9551461021c57806370a082311461022f5780637ecebe001461024257806384b0196e1461025557806391d1485414610270575f80fd5b8063248a9ca3116100fa578063248a9ca3146101ca5780632f2ff15d146101dd578063313ce567146101f25780633644e5151461020157806336568abe14610209575f80fd5b806301ffc9a71461013657806306fdde031461015e578063095ea7b31461017357806318160ddd1461018657806323b872dd146101b7575b5f80fd5b610149610144366004611286565b6102de565b60405190151581526020015b60405180910390f35b610166610314565b60405161015591906112e2565b61014961018136600461130f565b6103b9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610155565b6101496101c5366004611337565b6103d0565b6101a96101d8366004611371565b6103f3565b6101f06101eb366004611388565b610413565b005b60405160088152602001610155565b6101a9610435565b6101f0610217366004611388565b610443565b6101f061022a3660046113b2565b61047b565b6101a961023d3660046113da565b610661565b6101a96102503660046113da565b610691565b61025d61069b565b60405161015597969594939291906113f3565b61014961027e366004611388565b610749565b61016661077f565b6101a95f81565b6101496102a036600461130f565b6107bd565b6101f06102b3366004611489565b6107ca565b6101f06102c6366004611388565b61091f565b6101a96102d93660046113b2565b61093b565b5f6001600160e01b03198216637965db0b60e01b148061030e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5f805160206117858339815191525b9050806003018054610337906114f6565b80601f0160208091040260200160405190810160405280929190818152602001828054610363906114f6565b80156103ae5780601f10610385576101008083540402835291602001916103ae565b820191905f5260205f20905b81548152906001019060200180831161039157829003601f168201915b505050505091505090565b5f336103c6818585610984565b5060019392505050565b5f336103dd858285610991565b6103e88585856109ee565b506001949350505050565b5f9081525f805160206117c5833981519152602052604090206001015490565b61041c826103f3565b61042581610a4b565b61042f8383610a58565b50505050565b5f61043e610af9565b905090565b6001600160a01b038116331461046c5760405163334bd91960e11b815260040160405180910390fd5b6104768282610b02565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156104c05750825b90505f8267ffffffffffffffff1660011480156104dc5750303b155b9050811580156104ea575080155b156105085760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053257845460ff60401b1916600160401b1785555b6001600160a01b0387161580159061055257506001600160a01b03861615155b61055a575f80fd5b6105a060405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060048152602001634d4f564560e01b815250610b7b565b6105e360405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060018152602001603160f81b815250610b91565b6105ed5f88610a58565b50610612866105fe6008600a611625565b61060d906402540be400611633565b610bf0565b831561065857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f805f805160206117858339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b5f61030e82610c24565b5f60608082808083815f805160206117a583398151915280549091501580156106c657506001810154155b61070f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610717610c4c565b61071f610c8a565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f9182525f805160206117c5833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061178583398151915291610337906114f6565b5f336103c68185856109ee565b834211156107ee5760405163313c898160e11b815260048101859052602401610706565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108588c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6108b282610ca0565b90505f6108c182878787610ccc565b9050896001600160a01b0316816001600160a01b031614610908576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610706565b6109138a8a8a610984565b50505050505050505050565b610928826103f3565b61093181610a4b565b61042f8383610b02565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104768383836001610cf8565b5f61099c848461093b565b90505f19811461042f57818110156109e057604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610706565b61042f84848484035f610cf8565b6001600160a01b038316610a1757604051634b637e8f60e11b81525f6004820152602401610706565b6001600160a01b038216610a405760405163ec442f0560e01b81525f6004820152602401610706565b610476838383610ddc565b610a558133610f15565b50565b5f5f805160206117c5833981519152610a718484610749565b610af0575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610aa63390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061030e565b5f91505061030e565b5f61043e610f4e565b5f5f805160206117c5833981519152610b1b8484610749565b15610af0575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061030e565b610b83610fc1565b610b8d828261100c565b5050565b610b99610fc1565b5f805160206117a58339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610bd284826116a2565b5060038101610be183826116a2565b505f8082556001909101555050565b6001600160a01b038216610c195760405163ec442f0560e01b81525f6004820152602401610706565b610b8d5f8383610ddc565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610672565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206117a583398151915291610337906114f6565b60605f5f805160206117a5833981519152610326565b5f61030e610cac610af9565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80610cdc8888888861105c565b925092509250610cec8282611124565b50909695505050505050565b5f805160206117858339815191526001600160a01b038516610d2f5760405163e602df0560e01b81525f6004820152602401610706565b6001600160a01b038416610d5857604051634a1406b160e11b81525f6004820152602401610706565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610dd557836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610dcc91815260200190565b60405180910390a35b5050505050565b5f805160206117858339815191526001600160a01b038416610e165781816002015f828254610e0b919061175d565b90915550610e869050565b6001600160a01b0384165f9081526020829052604090205482811015610e685760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610706565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610ea4576002810180548390039055610ec2565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f0791815260200190565b60405180910390a350505050565b610f1f8282610749565b610b8d5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610706565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f786111dc565b610f80611244565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661100a57604051631afcd79f60e31b815260040160405180910390fd5b565b611014610fc1565b5f805160206117858339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361104d84826116a2565b506004810161042f83826116a2565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561109557505f9150600390508261111a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156110e6573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661111157505f92506001915082905061111a565b92505f91508190505b9450945094915050565b5f82600381111561113757611137611770565b03611140575050565b600182600381111561115457611154611770565b036111725760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561118657611186611770565b036111a75760405163fce698f760e01b815260048101829052602401610706565b60038260038111156111bb576111bb611770565b03610b8d576040516335e2f38360e21b815260048101829052602401610706565b5f5f805160206117a5833981519152816111f4610c4c565b80519091501561120c57805160209091012092915050565b8154801561121b579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f805160206117a58339815191528161125c610c8a565b80519091501561127457805160209091012092915050565b6001820154801561121b579392505050565b5f60208284031215611296575f80fd5b81356001600160e01b0319811681146112ad575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112ad60208301846112b4565b80356001600160a01b038116811461130a575f80fd5b919050565b5f8060408385031215611320575f80fd5b611329836112f4565b946020939093013593505050565b5f805f60608486031215611349575f80fd5b611352846112f4565b9250611360602085016112f4565b929592945050506040919091013590565b5f60208284031215611381575f80fd5b5035919050565b5f8060408385031215611399575f80fd5b823591506113a9602084016112f4565b90509250929050565b5f80604083850312156113c3575f80fd5b6113cc836112f4565b91506113a9602084016112f4565b5f602082840312156113ea575f80fd5b6112ad826112f4565b60ff60f81b8816815260e060208201525f61141160e08301896112b4565b828103604084015261142381896112b4565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561147857835183526020938401939092019160010161145a565b50909b9a5050505050505050505050565b5f805f805f805f60e0888a03121561149f575f80fd5b6114a8886112f4565b96506114b6602089016112f4565b95506040880135945060608801359350608088013560ff811681146114d9575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c9082168061150a57607f821691505b60208210810361152857634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561157d578085048111156115615761156161152e565b600184161561156f57908102905b60019390931c928002611546565b935093915050565b5f826115935750600161030e565b8161159f57505f61030e565b81600181146115b557600281146115bf576115db565b600191505061030e565b60ff8411156115d0576115d061152e565b50506001821b61030e565b5060208310610133831016604e8410600b84101617156115fe575081810a61030e565b61160a5f198484611542565b805f190482111561161d5761161d61152e565b029392505050565b5f6112ad60ff841683611585565b808202811582820484141761030e5761030e61152e565b634e487b7160e01b5f52604160045260245ffd5b601f82111561047657805f5260205f20601f840160051c810160208510156116835750805b601f840160051c820191505b81811015610dd5575f815560010161168f565b815167ffffffffffffffff8111156116bc576116bc61164a565b6116d0816116ca84546114f6565b8461165e565b6020601f821160018114611702575f83156116eb5750848201515b5f19600385901b1c1916600184901b178455610dd5565b5f84815260208120601f198516915b828110156117315787850151825560209485019460019092019101611711565b508482101561174e57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561030e5761030e61152e565b634e487b7160e01b5f52602160045260245ffdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212200c213e57e697f2dee37f51b79647b3593da8c247917d58e21e2647bf25597abc64736f6c634300081a0033","sourceMap":"299:1259:113:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:24;;;;;;:::i;:::-;;:::i;:::-;;;470:14:138;;463:22;445:41;;433:2;418:18;3443:202:24;;;;;;;;3011:144:27;;;:::i;:::-;;;;;;;:::i;5505:186::-;;;;;;:::i;:::-;;:::i;4191:152::-;4322:14;;4191:152;;;1645:25:138;;;1633:2;1618:18;4191:152:27;1499:177:138;6251:244:27;;;;;;:::i;:::-;;:::i;4759:191:24:-;;;;;;:::i;:::-;;:::i;5246:136::-;;;;;;:::i;:::-;;:::i;:::-;;1474:82:113;;;1548:1;2920:36:138;;2908:2;2893:18;1474:82:113;2778:184:138;3082:112:28;;;:::i;6348:245:24:-;;;;;;:::i;:::-;;:::i;981:342:113:-;;;;;;:::i;:::-;;:::i;4401:171:27:-;;;;;;:::i;:::-;;:::i;2821:154:28:-;;;;;;:::i;:::-;;:::i;5173:903:31:-;;;:::i;:::-;;;;;;;;;;;;;:::i;3732:207:24:-;;;;;;:::i;:::-;;:::i;3268:148:27:-;;;:::i;2317:49:24:-;;2362:4;2317:49;;4767:178:27;;;;;;:::i;:::-;;:::i;2095:672:28:-;;;;;;:::i;:::-;;:::i;5662:138:24:-;;;;;;:::i;:::-;;:::i;5003:195:27:-;;;;;;:::i;:::-;;:::i;3443:202:24:-;3528:4;-1:-1:-1;;;;;;3551:47:24;;-1:-1:-1;;;3551:47:24;;:87;;-1:-1:-1;;;;;;;;;;1133:40:32;;;3602:36:24;3544:94;3443:202;-1:-1:-1;;3443:202:24:o;3011:144:27:-;3056:13;3081:22;-1:-1:-1;;;;;;;;;;;3106:18:27;3081:43;;3141:1;:7;;3134:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3011:144;:::o;5505:186::-;5578:4;966:10:29;5632:31:27;966:10:29;5648:7:27;5657:5;5632:8;:31::i;:::-;-1:-1:-1;5680:4:27;;5505:186;-1:-1:-1;;;5505:186:27:o;6251:244::-;6338:4;966:10:29;6394:37:27;6410:4;966:10:29;6425:5:27;6394:15;:37::i;:::-;6441:26;6451:4;6457:2;6461:5;6441:9;:26::i;:::-;-1:-1:-1;6484:4:27;;6251:244;-1:-1:-1;;;;6251:244:27:o;4759:191:24:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:24;;;;;:24;;;;4759:191::o;5246:136::-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;3082:112:28:-;3141:7;3167:20;:18;:20::i;:::-;3160:27;;3082:112;:::o;6348:245:24:-;-1:-1:-1;;;;;6441:34:24;;966:10:29;6441:34:24;6437:102;;6498:30;;-1:-1:-1;;;6498:30:24;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;981:342:113:-;8870:21:25;4302:15;;-1:-1:-1;;;4302:15:25;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:25;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:25;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:25;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:25;-1:-1:-1;;;5013:22:25;;;4979:67;-1:-1:-1;;;;;1072:20:113;::::1;::::0;;::::1;::::0;:46:::1;;-1:-1:-1::0;;;;;;1096:22:113;::::1;::::0;::::1;1072:46;1064:55;;;::::0;::::1;;1129:32;;;;;;;;;;;;;;-1:-1:-1::0;;;1129:32:113::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1129:32:113::1;;::::0;:12:::1;:32::i;:::-;1171:40;;;;;;;;;;;;;;-1:-1:-1::0;;;1171:40:113::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1171:40:113::1;;::::0;:23:::1;:40::i;:::-;1221:38;2362:4:24;1252:6:113::0;1221:10:::1;:38::i;:::-;-1:-1:-1::0;1269:47:113::1;1275:8:::0;1299:16:::1;1548:1:::0;1299:2:::1;:16;:::i;:::-;1285:30;::::0;:11:::1;:30;:::i;:::-;1269:5;:47::i;:::-;5070:14:25::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:25;;;5142:14;;-1:-1:-1;7849:50:138;;5142:14:25;;7837:2:138;7822:18;5142:14:25;;;;;;;5066:101;4092:1081;;;;;981:342:113;;:::o;4401:171:27:-;4466:7;;-1:-1:-1;;;;;;;;;;;4510:18:27;-1:-1:-1;;;;;4545:20:27;;;:11;:20;;;;;;;;-1:-1:-1;;4545:20:27;;;;;4401:171::o;2821:154:28:-;2923:7;2949:19;2962:5;2949:12;:19::i;5173:903:31:-;5271:13;5298:18;;5271:13;;;5298:18;5271:13;-1:-1:-1;;;;;;;;;;;5777:13:31;;5511:45;;-1:-1:-1;5777:18:31;:43;;;;-1:-1:-1;5799:16:31;;;;:21;5777:43;5769:77;;;;-1:-1:-1;;;5769:77:31;;8112:2:138;5769:77:31;;;8094:21:138;8151:2;8131:18;;;8124:30;-1:-1:-1;;;8170:18:138;;;8163:51;8231:18;;5769:77:31;;;;;;;;;5908:13;:11;:13::i;:::-;5935:16;:14;:16::i;:::-;6043;;;6027:1;6043:16;;;;;;;;;-1:-1:-1;;;5857:212:31;;;-1:-1:-1;5857:212:31;;-1:-1:-1;5965:13:31;;-1:-1:-1;6000:4:31;;-1:-1:-1;6027:1:31;-1:-1:-1;6043:16:31;-1:-1:-1;5857:212:31;-1:-1:-1;;5173:903:31:o;3732:207:24:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:24;;;;;;;;-1:-1:-1;;;;;3901:31:24;;;;;;;;;;;;;;;3732:207::o;3268:148:27:-;3400:9;3393:16;;3315:13;;-1:-1:-1;;;;;;;;;;;2359:20:27;3393:16;;;:::i;4767:178::-;4836:4;966:10:29;4890:27:27;966:10:29;4907:2:27;4911:5;4890:9;:27::i;2095:672:28:-;2316:8;2298:15;:26;2294:97;;;2347:33;;-1:-1:-1;;;2347:33:28;;;;;1645:25:138;;;1618:18;;2347:33:28;1499:177:138;2294:97:28;2401:18;1277:95;2460:5;2467:7;2476:5;2483:16;2493:5;-1:-1:-1;;;;;1954:16:30;1597:7;1954:16;;;1005:21;1954:16;;;;;:18;;;;;;;;;1537:452;2483:16:28;2432:78;;;;;;8679:25:138;;;;-1:-1:-1;;;;;8740:32:138;;;8720:18;;;8713:60;8809:32;;;;8789:18;;;8782:60;8858:18;;;8851:34;8901:19;;;8894:35;8945:19;;;8938:35;;;8651:19;;2432:78:28;;;;;;;;;;;;2422:89;;;;;;2401:110;;2522:12;2537:28;2554:10;2537:16;:28::i;:::-;2522:43;;2576:14;2593:28;2607:4;2613:1;2616;2619;2593:13;:28::i;:::-;2576:45;;2645:5;-1:-1:-1;;;;;2635:15:28;:6;-1:-1:-1;;;;;2635:15:28;;2631:88;;2673:35;;-1:-1:-1;;;2673:35:28;;-1:-1:-1;;;;;9176:32:138;;;2673:35:28;;;9158:51:138;9245:32;;9225:18;;;9218:60;9131:18;;2673:35:28;8984:300:138;2631:88:28;2729:31;2738:5;2745:7;2754:5;2729:8;:31::i;:::-;2284:483;;;2095:672;;;;;;;:::o;5662:138:24:-;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;5003:195:27:-:0;-1:-1:-1;;;;;5162:20:27;;;5083:7;5162:20;;;:13;:20;;;;;;;;:29;;;;;;;;;;;;;5003:195::o;10264:128::-;10348:37;10357:5;10364:7;10373:5;10380:4;10348:8;:37::i;11993:477::-;12092:24;12119:25;12129:5;12136:7;12119:9;:25::i;:::-;12092:52;;-1:-1:-1;;12158:16:27;:37;12154:310;;12234:5;12215:16;:24;12211:130;;;12266:60;;-1:-1:-1;;;12266:60:27;;-1:-1:-1;;;;;9509:32:138;;12266:60:27;;;9491:51:138;9558:18;;;9551:34;;;9601:18;;;9594:34;;;9464:18;;12266:60:27;9289:345:138;12211:130:27;12382:57;12391:5;12398:7;12426:5;12407:16;:24;12433:5;12382:8;:57::i;6868:300::-;-1:-1:-1;;;;;6951:18:27;;6947:86;;6992:30;;-1:-1:-1;;;6992:30:27;;7019:1;6992:30;;;9785:51:138;9758:18;;6992:30:27;9639:203:138;6947:86:27;-1:-1:-1;;;;;7046:16:27;;7042:86;;7085:32;;-1:-1:-1;;;7085:32:27;;7114:1;7085:32;;;9785:51:138;9758:18;;7085:32:27;9639:203:138;7042:86:27;7137:24;7145:4;7151:2;7155:5;7137:7;:24::i;4148:103:24:-;4214:30;4225:4;966:10:29;4214::24;:30::i;:::-;4148:103;:::o;7270:387::-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:24;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:24;;;;;;;;;:38;;-1:-1:-1;;7475:38:24;7509:4;7475:38;;;7559:12;966:10:29;;887:96;7559:12:24;-1:-1:-1;;;;;7532:40:24;7550:7;-1:-1:-1;;;;;7532:40:24;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;4015:109:31;4068:7;4094:23;:21;:23::i;7892:388:24:-;7970:4;-1:-1:-1;;;;;;;;;;;8059:22:24;8067:4;8073:7;8059;:22::i;:::-;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:24;;;;;;;;;;:39;;-1:-1:-1;;8097:39:24;;;8155:40;966:10:29;;8097:14:24;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;2577:147:27;6931:20:25;:18;:20::i;:::-;2679:38:27::1;2702:5;2709:7;2679:22;:38::i;:::-;2577:147:::0;;:::o;3599:330:31:-;6931:20:25;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;3766:7:31;:14:::1;3776:4:::0;3766:7;:14:::1;:::i;:::-;-1:-1:-1::0;3790:10:31::1;::::0;::::1;:20;3803:7:::0;3790:10;:20:::1;:::i;:::-;-1:-1:-1::0;3891:1:31::1;3875:17:::0;;;3902:16:::1;::::0;;::::1;:20:::0;-1:-1:-1;;3599:330:31:o;8996:208:27:-;-1:-1:-1;;;;;9066:21:27;;9062:91;;9110:32;;-1:-1:-1;;;9110:32:27;;9139:1;9110:32;;;9785:51:138;9758:18;;9110:32:27;9639:203:138;9062:91:27;9162:35;9178:1;9182:7;9191:5;9162:7;:35::i;1259:164:30:-;1319:7;;1005:21;1364:19;886:156;6300:155:31;6441:7;6434:14;;6354:13;;-1:-1:-1;;;;;;;;;;;2839:21:31;6434:14;;;:::i;6682:161::-;6739:13;6764:23;-1:-1:-1;;;;;;;;;;;6790:19:31;2720:156;4946:176;5023:7;5049:66;5082:20;:18;:20::i;:::-;5104:10;3555:4:62;3549:11;-1:-1:-1;;;3573:23:62;;3625:4;3616:14;;3609:39;;;;3677:4;3668:14;;3661:34;3733:4;3718:20;;;3353:401;6803:260:61;6888:7;6908:17;6927:18;6947:16;6967:25;6978:4;6984:1;6987;6990;6967:10;:25::i;:::-;6907:85;;;;;;7002:28;7014:5;7021:8;7002:11;:28::i;:::-;-1:-1:-1;7047:9:61;;6803:260;-1:-1:-1;;;;;;6803:260:61:o;11224:487:27:-;-1:-1:-1;;;;;;;;;;;;;;;;11389:19:27;;11385:89;;11431:32;;-1:-1:-1;;;11431:32:27;;11460:1;11431:32;;;9785:51:138;9758:18;;11431:32:27;9639:203:138;11385:89:27;-1:-1:-1;;;;;11487:21:27;;11483:90;;11531:31;;-1:-1:-1;;;11531:31:27;;11559:1;11531:31;;;9785:51:138;9758:18;;11531:31:27;9639:203:138;11483:90:27;-1:-1:-1;;;;;11582:20:27;;;;;;;:13;;;:20;;;;;;;;:29;;;;;;;;;:37;;;11629:76;;;;11679:7;-1:-1:-1;;;;;11663:31:27;11672:5;-1:-1:-1;;;;;11663:31:27;;11688:5;11663:31;;;;1645:25:138;;1633:2;1618:18;;1499:177;11663:31:27;;;;;;;;11629:76;11322:389;11224:487;;;;:::o;7483:1170::-;-1:-1:-1;;;;;;;;;;;;;;;;7625:18:27;;7621:546;;7779:5;7761:1;:14;;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;7621:546:27;;-1:-1:-1;7621:546:27;;-1:-1:-1;;;;;7837:17:27;;7815:19;7837:17;;;;;;;;;;;7872:19;;;7868:115;;;7918:50;;-1:-1:-1;;;7918:50:27;;-1:-1:-1;;;;;9509:32:138;;7918:50:27;;;9491:51:138;9558:18;;;9551:34;;;9601:18;;;9594:34;;;9464:18;;7918:50:27;9289:345:138;7868:115:27;-1:-1:-1;;;;;8103:17:27;;:11;:17;;;;;;;;;;8123:19;;;;8103:39;;7621:546;-1:-1:-1;;;;;8181:16:27;;8177:429;;8344:14;;;:23;;;;;;;8177:429;;;-1:-1:-1;;;;;8557:15:27;;:11;:15;;;;;;;;;;:24;;;;;;8177:429;8636:2;-1:-1:-1;;;;;8621:25:27;8630:4;-1:-1:-1;;;;;8621:25:27;;8640:5;8621:25;;;;1645::138;;1633:2;1618:18;;1499:177;8621:25:27;;;;;;;;7558:1095;7483:1170;;;:::o;4381:197:24:-;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:24;;-1:-1:-1;;;;;12293:32:138;;4514:47:24;;;12275:51:138;12342:18;;;12335:34;;;12248:18;;4514:47:24;12101:274:138;4130:191:31;4185:7;2073:95;4243:17;:15;:17::i;:::-;4262:20;:18;:20::i;:::-;4221:92;;;;;;12639:25:138;;;;12680:18;;12673:34;;;;12723:18;;;12716:34;4284:13:31;12766:18:138;;;12759:34;4307:4:31;12809:19:138;;;12802:61;12611:19;;4221:92:31;;;;;;;;;;;;4211:103;;;;;;4204:110;;4130:191;:::o;7084:141:25:-;8870:21;8560:40;-1:-1:-1;;;8560:40:25;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:25;;;;;;;;;;;7146:73;7084:141::o;2730:216:27:-;6931:20:25;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;2895:7:27;:15:::1;2905:5:::0;2895:7;:15:::1;:::i;:::-;-1:-1:-1::0;2920:9:27::1;::::0;::::1;:19;2932:7:::0;2920:9;:19:::1;:::i;5140:1530:61:-:0;5266:7;;;6199:66;6186:79;;6182:164;;;-1:-1:-1;6297:1:61;;-1:-1:-1;6301:30:61;;-1:-1:-1;6333:1:61;6281:54;;6182:164;6457:24;;;6440:14;6457:24;;;;;;;;;13101:25:138;;;13174:4;13162:17;;13142:18;;;13135:45;;;;13196:18;;;13189:34;;;13239:18;;;13232:34;;;6457:24:61;;13073:19:138;;6457:24:61;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6457:24:61;;-1:-1:-1;;6457:24:61;;;-1:-1:-1;;;;;;;6495:20:61;;6491:113;;-1:-1:-1;6547:1:61;;-1:-1:-1;6551:29:61;;-1:-1:-1;6547:1:61;;-1:-1:-1;6531:62:61;;6491:113;6622:6;-1:-1:-1;6630:20:61;;-1:-1:-1;6630:20:61;;-1:-1:-1;5140:1530:61;;;;;;;;;:::o;7196:532::-;7291:20;7282:5;:29;;;;;;;;:::i;:::-;;7278:444;;7196:532;;:::o;7278:444::-;7387:29;7378:5;:38;;;;;;;;:::i;:::-;;7374:348;;7439:23;;-1:-1:-1;;;7439:23:61;;;;;;;;;;;7374:348;7492:35;7483:5;:44;;;;;;;;:::i;:::-;;7479:243;;7550:46;;-1:-1:-1;;;7550:46:61;;;;;1645:25:138;;;1618:18;;7550:46:61;1499:177:138;7479:243:61;7626:30;7617:5;:39;;;;;;;;:::i;:::-;;7613:109;;7679:32;;-1:-1:-1;;;7679:32:61;;;;;1645:25:138;;;1618:18;;7679:32:61;1499:177:138;7058:687:31;7108:7;-1:-1:-1;;;;;;;;;;;7108:7:31;7203:13;:11;:13::i;:::-;7230:18;;7182:34;;-1:-1:-1;7230:22:31;7226:513;;7275:22;;;;;;;;7058:687;-1:-1:-1;;7058:687:31:o;7226:513::-;7572:13;;7603:15;;7599:130;;7645:10;7058:687;-1:-1:-1;;;7058:687:31:o;7599:130::-;7701:13;7694:20;;;;;7058:687;:::o;7966:723::-;8019:7;-1:-1:-1;;;;;;;;;;;8019:7:31;8117:16;:14;:16::i;:::-;8147:21;;8093:40;;-1:-1:-1;8147:25:31;8143:540;;8195:25;;;;;;;;7966:723;-1:-1:-1;;7966:723:31:o;8143:540::-;8507:16;;;;8541:18;;8537:136;;8586:13;7966:723;-1:-1:-1;;;7966:723:31:o;14:286:138:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:138;;209:43;;199:71;;266:1;263;256:12;199:71;289:5;14:286;-1:-1:-1;;;14:286:138:o;497:289::-;539:3;577:5;571:12;604:6;599:3;592:19;660:6;653:4;646:5;642:16;635:4;630:3;626:14;620:47;712:1;705:4;696:6;691:3;687:16;683:27;676:38;775:4;768:2;764:7;759:2;751:6;747:15;743:29;738:3;734:39;730:50;723:57;;;497:289;;;;:::o;791:220::-;940:2;929:9;922:21;903:4;960:45;1001:2;990:9;986:18;978:6;960:45;:::i;1016:173::-;1084:20;;-1:-1:-1;;;;;1133:31:138;;1123:42;;1113:70;;1179:1;1176;1169:12;1113:70;1016:173;;;:::o;1194:300::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1362:29;1381:9;1362:29;:::i;:::-;1352:39;1460:2;1445:18;;;;1432:32;;-1:-1:-1;;;1194:300:138:o;1681:374::-;1758:6;1766;1774;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;1866:29;1885:9;1866:29;:::i;:::-;1856:39;;1914:38;1948:2;1937:9;1933:18;1914:38;:::i;:::-;1681:374;;1904:48;;-1:-1:-1;;;2021:2:138;2006:18;;;;1993:32;;1681:374::o;2060:226::-;2119:6;2172:2;2160:9;2151:7;2147:23;2143:32;2140:52;;;2188:1;2185;2178:12;2140:52;-1:-1:-1;2233:23:138;;2060:226;-1:-1:-1;2060:226:138:o;2473:300::-;2541:6;2549;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2663:23;;;-1:-1:-1;2729:38:138;2763:2;2748:18;;2729:38;:::i;:::-;2719:48;;2473:300;;;;;:::o;2967:260::-;3035:6;3043;3096:2;3084:9;3075:7;3071:23;3067:32;3064:52;;;3112:1;3109;3102:12;3064:52;3135:29;3154:9;3135:29;:::i;:::-;3125:39;;3183:38;3217:2;3206:9;3202:18;3183:38;:::i;3232:186::-;3291:6;3344:2;3332:9;3323:7;3319:23;3315:32;3312:52;;;3360:1;3357;3350:12;3312:52;3383:29;3402:9;3383:29;:::i;3423:1238::-;3829:3;3824;3820:13;3812:6;3808:26;3797:9;3790:45;3871:3;3866:2;3855:9;3851:18;3844:31;3771:4;3898:46;3939:3;3928:9;3924:19;3916:6;3898:46;:::i;:::-;3992:9;3984:6;3980:22;3975:2;3964:9;3960:18;3953:50;4026:33;4052:6;4044;4026:33;:::i;:::-;4090:2;4075:18;;4068:34;;;-1:-1:-1;;;;;4139:32:138;;4133:3;4118:19;;4111:61;4159:3;4188:19;;4181:35;;;4253:22;;;4247:3;4232:19;;4225:51;4325:13;;4347:22;;;4397:2;4423:15;;;;-1:-1:-1;4385:15:138;;;;-1:-1:-1;4466:169:138;4480:6;4477:1;4474:13;4466:169;;;4541:13;;4529:26;;4584:2;4610:15;;;;4575:12;;;;4502:1;4495:9;4466:169;;;-1:-1:-1;4652:3:138;;3423:1238;-1:-1:-1;;;;;;;;;;;3423:1238:138:o;4666:903::-;4777:6;4785;4793;4801;4809;4817;4825;4878:3;4866:9;4857:7;4853:23;4849:33;4846:53;;;4895:1;4892;4885:12;4846:53;4918:29;4937:9;4918:29;:::i;:::-;4908:39;;4966:38;5000:2;4989:9;4985:18;4966:38;:::i;:::-;4956:48;-1:-1:-1;5073:2:138;5058:18;;5045:32;;-1:-1:-1;5174:2:138;5159:18;;5146:32;;-1:-1:-1;5256:3:138;5241:19;;5228:33;5305:4;5292:18;;5280:31;;5270:59;;5325:1;5322;5315:12;5270:59;4666:903;;;;-1:-1:-1;4666:903:138;;;;5348:7;5428:3;5413:19;;5400:33;;-1:-1:-1;5532:3:138;5517:19;;;5504:33;;4666:903;-1:-1:-1;;4666:903:138:o;5574:380::-;5653:1;5649:12;;;;5696;;;5717:61;;5771:4;5763:6;5759:17;5749:27;;5717:61;5824:2;5816:6;5813:14;5793:18;5790:38;5787:161;;5870:10;5865:3;5861:20;5858:1;5851:31;5905:4;5902:1;5895:15;5933:4;5930:1;5923:15;5787:161;;5574:380;;;:::o;5959:127::-;6020:10;6015:3;6011:20;6008:1;6001:31;6051:4;6048:1;6041:15;6075:4;6072:1;6065:15;6091:375;6179:1;6197:5;6211:249;6232:1;6222:8;6219:15;6211:249;;;6282:4;6277:3;6273:14;6267:4;6264:24;6261:50;;;6291:18;;:::i;:::-;6341:1;6331:8;6327:16;6324:49;;;6355:16;;;;6324:49;6438:1;6434:16;;;;;6394:15;;6211:249;;;6091:375;;;;;;:::o;6471:902::-;6520:5;6550:8;6540:80;;-1:-1:-1;6591:1:138;6605:5;;6540:80;6639:4;6629:76;;-1:-1:-1;6676:1:138;6690:5;;6629:76;6721:4;6739:1;6734:59;;;;6807:1;6802:174;;;;6714:262;;6734:59;6764:1;6755:10;;6778:5;;;6802:174;6839:3;6829:8;6826:17;6823:43;;;6846:18;;:::i;:::-;-1:-1:-1;;6902:1:138;6888:16;;6961:5;;6714:262;;7060:2;7050:8;7047:16;7041:3;7035:4;7032:13;7028:36;7022:2;7012:8;7009:16;7004:2;6998:4;6995:12;6991:35;6988:77;6985:203;;;-1:-1:-1;7097:19:138;;;7173:5;;6985:203;7220:42;-1:-1:-1;;7245:8:138;7239:4;7220:42;:::i;:::-;7298:6;7294:1;7290:6;7286:19;7277:7;7274:32;7271:58;;;7309:18;;:::i;:::-;7347:20;;6471:902;-1:-1:-1;;;6471:902:138:o;7378:140::-;7436:5;7465:47;7506:4;7496:8;7492:19;7486:4;7465:47;:::i;7523:168::-;7596:9;;;7627;;7644:15;;;7638:22;;7624:37;7614:71;;7665:18;;:::i;8260:127::-;8321:10;8316:3;8312:20;8309:1;8302:31;8352:4;8349:1;8342:15;8376:4;8373:1;8366:15;9973:518;10075:2;10070:3;10067:11;10064:421;;;10111:5;10108:1;10101:16;10155:4;10152:1;10142:18;10225:2;10213:10;10209:19;10206:1;10202:27;10196:4;10192:38;10261:4;10249:10;10246:20;10243:47;;;-1:-1:-1;10284:4:138;10243:47;10339:2;10334:3;10330:12;10327:1;10323:20;10317:4;10313:31;10303:41;;10394:81;10412:2;10405:5;10402:13;10394:81;;;10471:1;10457:16;;10438:1;10427:13;10394:81;;10667:1299;10793:3;10787:10;10820:18;10812:6;10809:30;10806:56;;;10842:18;;:::i;:::-;10871:97;10961:6;10921:38;10953:4;10947:11;10921:38;:::i;:::-;10915:4;10871:97;:::i;:::-;11017:4;11048:2;11037:14;;11065:1;11060:649;;;;11753:1;11770:6;11767:89;;;-1:-1:-1;11822:19:138;;;11816:26;11767:89;-1:-1:-1;;10624:1:138;10620:11;;;10616:24;10612:29;10602:40;10648:1;10644:11;;;10599:57;11869:81;;11030:930;;11060:649;9920:1;9913:14;;;9957:4;9944:18;;-1:-1:-1;;11096:20:138;;;11214:222;11228:7;11225:1;11222:14;11214:222;;;11310:19;;;11304:26;11289:42;;11417:4;11402:20;;;;11370:1;11358:14;;;;11244:12;11214:222;;;11218:3;11464:6;11455:7;11452:19;11449:201;;;11525:19;;;11519:26;-1:-1:-1;;11608:1:138;11604:14;;;11620:3;11600:24;11596:37;11592:42;11577:58;11562:74;;11449:201;-1:-1:-1;;;;11696:1:138;11680:14;;;11676:22;11663:36;;-1:-1:-1;10667:1299:138:o;11971:125::-;12036:9;;;12057:10;;;12054:36;;;12070:18;;:::i;13277:127::-;13338:10;13333:3;13329:20;13326:1;13319:31;13369:4;13366:1;13359:15;13393:4;13390:1;13383:15","linkReferences":{}},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","eip712Domain()":"84b0196e","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize(address,address)":"485cc955","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"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\"},{\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"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\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"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\":[],\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_custody\",\"type\":\"address\"}],\"name\":\"initialize\",\"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\":[{\"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\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"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.\"}]},\"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.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"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}.\"},\"constructor\":{\"details\":\"Disables potential implementation exploit\"},\"decimals()\":{\"details\":\"Returns the number of decimals\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize(address,address)\":{\"details\":\"Initializes the contract with initial parameters.\",\"params\":{\"_custody\":\"The address of the custody account.\",\"_owner\":\"The address of the owner who receives default admin role.\"}},\"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.\"},\"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.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"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}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. 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`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"decimals()\":{\"notice\":\"decimals is set to 8, following the Movement network standard decimals\"},\"initialize(address,address)\":{\"notice\":\"The ERC20 token is named \\\"Movement\\\" with symbol \\\"MOVE\\\".EIP712 domain version is set to \\\"1\\\" for signatures.The owner is granted the `DEFAULT_ADMIN_ROLE`.10 billion MOVE tokens are minted to the owner's address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/MOVEToken.sol\":\"MOVEToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"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\":\"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040\",\"dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol\":{\"keccak256\":\"0x8a97653aeba40e9f0c2e8df1a1379b29b927b6dc3534040c668e71ad9ae89d88\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e529c294c9d634eb68a1e4aeb66eb8381de5a08ccd2c0bfeebd48a6b28fcff7\",\"dweb:/ipfs/QmWCezuxfZb68nM3Hs6XzQNNiW7VJsymU4sajy2DW1CKbp\"]},\"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\":\"0x85462422a22578744581e012e9aa0a391958cb360288b0b63f29bf0431d70327\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2bc529e2b9b28da5d26da451058250d85afcaa3c5083ee273ac68fa6bf956b78\",\"dweb:/ipfs/Qmd3Aq59ztmoVmHigsaR4YjkXWKERVpjfQ4a2PHk7Ke6Rx\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"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\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts/contracts/utils/Strings.sol\":{\"keccak256\":\"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453\",\"dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol\":{\"keccak256\":\"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c\",\"dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF\"]},\"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol\":{\"keccak256\":\"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c\",\"dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol\":{\"keccak256\":\"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc\",\"dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT\"]},\"src/token/MOVEToken.sol\":{\"keccak256\":\"0x907babd7e2db7867a9401ab8edcecd579ad7db099ae4693a27e052887d91eb22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a87e3b44d5e5409f0695ca2057be132b02b12a6cfa3d95a1a69382458e16b20a\",\"dweb:/ipfs/QmPNA8kiRGr3jR4ngz8UeKLUM7QitN4J5xNbxxWYNncV9H\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"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","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":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","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":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"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":[],"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":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_custody","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"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":[{"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":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"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"}]}],"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}."},"constructor":{"details":"Disables potential implementation exploit"},"decimals()":{"details":"Returns the number of decimals"},"eip712Domain()":{"details":"See {IERC-5267}."},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize(address,address)":{"details":"Initializes the contract with initial parameters.","params":{"_custody":"The address of the custody account.","_owner":"The address of the owner who receives default admin role."}},"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."},"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."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"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}. Emits an {Approval} event indicating the updated allowance. This is not required by the EIP. See the note at the beginning of {ERC20}. 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`."}},"version":1},"userdoc":{"kind":"user","methods":{"decimals()":{"notice":"decimals is set to 8, following the Movement network standard decimals"},"initialize(address,address)":{"notice":"The ERC20 token is named \"Movement\" with symbol \"MOVE\".EIP712 domain version is set to \"1\" for signatures.The owner is granted the `DEFAULT_ADMIN_ROLE`.10 billion MOVE tokens are minted to the owner's address."}},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/token/MOVEToken.sol":"MOVEToken"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"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":"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f","urls":["bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040","dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC20PermitUpgradeable.sol":{"keccak256":"0x8a97653aeba40e9f0c2e8df1a1379b29b927b6dc3534040c668e71ad9ae89d88","urls":["bzz-raw://6e529c294c9d634eb68a1e4aeb66eb8381de5a08ccd2c0bfeebd48a6b28fcff7","dweb:/ipfs/QmWCezuxfZb68nM3Hs6XzQNNiW7VJsymU4sajy2DW1CKbp"],"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":"0x85462422a22578744581e012e9aa0a391958cb360288b0b63f29bf0431d70327","urls":["bzz-raw://2bc529e2b9b28da5d26da451058250d85afcaa3c5083ee273ac68fa6bf956b78","dweb:/ipfs/Qmd3Aq59ztmoVmHigsaR4YjkXWKERVpjfQ4a2PHk7Ke6Rx"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol":{"keccak256":"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8","urls":["bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45","dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"],"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":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Strings.sol":{"keccak256":"0x55f102ea785d8399c0e58d1108e2d289506dde18abc6db1b7f68c1f9f9bc5792","urls":["bzz-raw://6e52e0a7765c943ef14e5bcf11e46e6139fa044be564881378349236bf2e3453","dweb:/ipfs/QmZEeeXoFPW47amyP35gfzomF9DixqqTEPwzBakv6cZw6i"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/ECDSA.sol":{"keccak256":"0xeed0a08b0b091f528356cbc7245891a4c748682d4f6a18055e8e6ca77d12a6cf","urls":["bzz-raw://ba80ba06c8e6be852847e4c5f4492cef801feb6558ae09ed705ff2e04ea8b13c","dweb:/ipfs/QmXRJDv3xHLVQCVXg1ZvR35QS9sij5y9NDWYzMfUfAdTHF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/cryptography/MessageHashUtils.sol":{"keccak256":"0xba333517a3add42cd35fe877656fc3dfcc9de53baa4f3aabbd6d12a92e4ea435","urls":["bzz-raw://2ceacff44c0fdc81e48e0e0b1db87a2076d3c1fb497341de077bf1da9f6b406c","dweb:/ipfs/QmRUo1muMRAewxrKQ7TkXUtknyRoR57AyEkoPpiuZQ8FzX"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/SignedMath.sol":{"keccak256":"0x5f7e4076e175393767754387c962926577f1660dd9b810187b9002407656be72","urls":["bzz-raw://7d533a1c97cd43a57cd9c465f7ee8dd0e39ae93a8fb8ff8e5303a356b081cdcc","dweb:/ipfs/QmVBEei6aTnvYNZp2CHYVNKyZS4q1KkjANfY39WVXZXVoT"],"license":"MIT"},"src/token/MOVEToken.sol":{"keccak256":"0x907babd7e2db7867a9401ab8edcecd579ad7db099ae4693a27e052887d91eb22","urls":["bzz-raw://a87e3b44d5e5409f0695ca2057be132b02b12a6cfa3d95a1a69382458e16b20a","dweb:/ipfs/QmPNA8kiRGr3jR4ngz8UeKLUM7QitN4J5xNbxxWYNncV9H"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/token/MOVEToken.sol","id":56986,"exportedSymbols":{"AccessControlUpgradeable":[39385],"ERC20PermitUpgradeable":[40607],"MOVEToken":[56985]},"nodeType":"SourceUnit","src":"32:1526:113","nodes":[{"id":56906,"nodeType":"PragmaDirective","src":"32:24:113","nodes":[],"literals":["solidity","^","0.8",".19"]},{"id":56908,"nodeType":"ImportDirective","src":"58:125:113","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":56986,"sourceUnit":40608,"symbolAliases":[{"foreign":{"id":56907,"name":"ERC20PermitUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40607,"src":"66:22:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":56910,"nodeType":"ImportDirective","src":"184:113:113","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol","nameLocation":"-1:-1:-1","scope":56986,"sourceUnit":39386,"symbolAliases":[{"foreign":{"id":56909,"name":"AccessControlUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39385,"src":"192:24:113","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":56985,"nodeType":"ContractDefinition","src":"299:1259:113","nodes":[{"id":56922,"nodeType":"FunctionDefinition","src":"447:39:113","nodes":[],"body":{"id":56921,"nodeType":"Block","src":"461:25:113","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":56918,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39607,"src":"462:20:113","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":56919,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"462:22:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56920,"nodeType":"ExpressionStatement","src":"462:22:113"}]},"documentation":{"id":56915,"nodeType":"StructuredDocumentation","src":"377:65:113","text":" @dev Disables potential implementation exploit"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":56916,"nodeType":"ParameterList","parameters":[],"src":"458:2:113"},"returnParameters":{"id":56917,"nodeType":"ParameterList","parameters":[],"src":"461:0:113"},"scope":56985,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56974,"nodeType":"FunctionDefinition","src":"981:342:113","nodes":[],"body":{"id":56973,"nodeType":"Block","src":"1054:269:113","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":56945,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":56938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56933,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56925,"src":"1072:6:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":56936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1090:1:113","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":56935,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1082:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56934,"name":"address","nodeType":"ElementaryTypeName","src":"1082:7:113","typeDescriptions":{}}},"id":56937,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1082:10:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1072:20:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":56944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56939,"name":"_custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56927,"src":"1096:8:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":56942,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1116:1:113","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":56941,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1108:7:113","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56940,"name":"address","nodeType":"ElementaryTypeName","src":"1108:7:113","typeDescriptions":{}}},"id":56943,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1108:10:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1096:22:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1072:46:113","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":56932,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1064:7:113","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":56946,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1064:55:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56947,"nodeType":"ExpressionStatement","src":"1064:55:113"},{"expression":{"arguments":[{"hexValue":"4d6f76656d656e74","id":56949,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1142:10:113","typeDescriptions":{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},"value":"Movement"},{"hexValue":"4d4f5645","id":56950,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1154:6:113","typeDescriptions":{"typeIdentifier":"t_stringliteral_94304e8d07ec49123c30284d16c4a1082e90258cc0faf510314d9c3808edcda0","typeString":"literal_string \"MOVE\""},"value":"MOVE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},{"typeIdentifier":"t_stringliteral_94304e8d07ec49123c30284d16c4a1082e90258cc0faf510314d9c3808edcda0","typeString":"literal_string \"MOVE\""}],"id":56948,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39889,"src":"1129:12:113","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":56951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1129:32:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56952,"nodeType":"ExpressionStatement","src":"1129:32:113"},{"expression":{"arguments":[{"hexValue":"4d6f76656d656e74","id":56954,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1195:10:113","typeDescriptions":{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},"value":"Movement"},{"hexValue":"31","id":56955,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1207:3:113","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""}],"id":56953,"name":"__EIP712_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40861,"src":"1171:23:113","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":56956,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1171:40:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56957,"nodeType":"ExpressionStatement","src":"1171:40:113"},{"expression":{"arguments":[{"id":56959,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"1232:18:113","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":56960,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56925,"src":"1252:6:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56958,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39338,"src":"1221:10:113","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":56961,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1221:38:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56962,"nodeType":"ExpressionStatement","src":"1221:38:113"},{"expression":{"arguments":[{"id":56964,"name":"_custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56927,"src":"1275:8:113","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56970,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130303030303030303030","id":56965,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1285:11:113","typeDescriptions":{"typeIdentifier":"t_rational_10000000000_by_1","typeString":"int_const 10000000000"},"value":"10000000000"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":56966,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1299:2:113","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":56967,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[56984],"referencedDeclaration":56984,"src":"1305:8:113","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint8_$","typeString":"function () pure returns (uint8)"}},"id":56968,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1305:10:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1299:16:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1285:30:113","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56963,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40270,"src":"1269:5:113","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":56971,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1269:47:113","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56972,"nodeType":"ExpressionStatement","src":"1269:47:113"}]},"documentation":{"id":56923,"nodeType":"StructuredDocumentation","src":"492:484:113","text":" @dev Initializes the contract with initial parameters.\n @param _owner The address of the owner who receives default admin role.\n @param _custody The address of the custody account.\n @notice The ERC20 token is named \"Movement\" with symbol \"MOVE\".\n @notice EIP712 domain version is set to \"1\" for signatures.\n @notice The owner is granted the `DEFAULT_ADMIN_ROLE`.\n @notice 10 billion MOVE tokens are minted to the owner's address."},"functionSelector":"485cc955","implemented":true,"kind":"function","modifiers":[{"id":56930,"kind":"modifierInvocation","modifierName":{"id":56929,"name":"initializer","nameLocations":["1042:11:113"],"nodeType":"IdentifierPath","referencedDeclaration":39493,"src":"1042:11:113"},"nodeType":"ModifierInvocation","src":"1042:11:113"}],"name":"initialize","nameLocation":"990:10:113","parameters":{"id":56928,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56925,"mutability":"mutable","name":"_owner","nameLocation":"1009:6:113","nodeType":"VariableDeclaration","scope":56974,"src":"1001:14:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56924,"name":"address","nodeType":"ElementaryTypeName","src":"1001:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56927,"mutability":"mutable","name":"_custody","nameLocation":"1025:8:113","nodeType":"VariableDeclaration","scope":56974,"src":"1017:16:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56926,"name":"address","nodeType":"ElementaryTypeName","src":"1017:7:113","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1000:34:113"},"returnParameters":{"id":56931,"nodeType":"ParameterList","parameters":[],"src":"1054:0:113"},"scope":56985,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56984,"nodeType":"FunctionDefinition","src":"1474:82:113","nodes":[],"body":{"id":56983,"nodeType":"Block","src":"1531:25:113","nodes":[],"statements":[{"expression":{"hexValue":"38","id":56981,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1548:1:113","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"functionReturnParameters":56980,"id":56982,"nodeType":"Return","src":"1541:8:113"}]},"baseFunctions":[39958],"documentation":{"id":56975,"nodeType":"StructuredDocumentation","src":"1329:140:113","text":" @dev Returns the number of decimals\n @notice decimals is set to 8, following the Movement network standard decimals"},"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"1483:8:113","overrides":{"id":56977,"nodeType":"OverrideSpecifier","overrides":[],"src":"1506:8:113"},"parameters":{"id":56976,"nodeType":"ParameterList","parameters":[],"src":"1491:2:113"},"returnParameters":{"id":56980,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56979,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":56984,"src":"1524:5:113","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":56978,"name":"uint8","nodeType":"ElementaryTypeName","src":"1524:5:113","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1523:7:113"},"scope":56985,"stateMutability":"pure","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":56911,"name":"ERC20PermitUpgradeable","nameLocations":["321:22:113"],"nodeType":"IdentifierPath","referencedDeclaration":40607,"src":"321:22:113"},"id":56912,"nodeType":"InheritanceSpecifier","src":"321:22:113"},{"baseName":{"id":56913,"name":"AccessControlUpgradeable","nameLocations":["345:24:113"],"nodeType":"IdentifierPath","referencedDeclaration":39385,"src":"345:24:113"},"id":56914,"nodeType":"InheritanceSpecifier","src":"345:24:113"}],"canonicalName":"MOVEToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[56985,39385,41148,45235,41527,40607,40764,41108,42745,43725,40438,42797,43689,43663,40653,39639],"name":"MOVEToken","nameLocation":"308:9:113","scope":56986,"usedErrors":[39402,39405,40473,40480,40667,41454,41457,42767,42772,42777,42786,42791,42796,44788,44793,44798],"usedEvents":[39410,41466,41475,41484,42725,43597,43606]}],"license":"MIT"},"id":113} \ No newline at end of file diff --git a/protocol/mcr/cli/client/abis/MovementStaking.json b/protocol/mcr/cli/client/abis/MovementStaking.json index f79819f9..9b822a63 100644 --- a/protocol/mcr/cli/client/abis/MovementStaking.json +++ b/protocol/mcr/cli/client/abis/MovementStaking.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"WHITELIST_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"acceptGenesisCeremony","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"currentEpochByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"currentEpoch","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"domainGenesisAccepted","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"epochDurationByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"epochDuration","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"epochStakesByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"epochTotalStakeByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"epochUnstakesByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttestersByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpochStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpochUnstake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodiansByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getEpochByBlockTime","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextEpochByBlockTime","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStakeAtEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStakeForCurrentEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStakeForEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUnstakeAtEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"_token","type":"address","internalType":"contract IERC20"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"registerDomain","inputs":[{"name":"epochDuration","type":"uint256","internalType":"uint256"},{"name":"custodians","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeAddressFromWhitelist","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reward","inputs":[{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"amounts","type":"uint256[]","internalType":"uint256[]"},{"name":"custodians","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rollOverEpoch","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setGenesisCeremony","inputs":[{"name":"custodians","type":"address[]","internalType":"address[]"},{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"stakes","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"slash","inputs":[{"name":"custodians","type":"address[]","internalType":"address[]"},{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"amounts","type":"uint256[]","internalType":"uint256[]"},{"name":"refundAmounts","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"contract IERC20"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"unstake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"whitelistAddress","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AttesterEpochRolledOver","inputs":[{"name":"attester","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"unstake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AttesterStaked","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":false,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AttesterUnstaked","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":false,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EpochRolledOver","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"CustodianTransferAmountMismatch","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"GenesisAlreadyAccepted","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"StakeExceedsGenesisStake","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a0604052306080523480156012575f80fd5b50608051612b386100395f395f81816119f701528181611a200152611b660152612b385ff3fe608060405260043610610249575f3560e01c80638129fc1c11610134578063bf6eac2f116100b3578063d37304f811610078578063d37304f814610773578063d547741f14610792578063d5ca03de146107b1578063da33ee7f146107d0578063fc0c546a146107ef578063ff62787c14610825575f80fd5b8063bf6eac2f146106a3578063c0b95ab8146106c2578063c3471ff814610707578063c4d66de814610726578063d1ba90ff14610745575f80fd5b806392a2ebf3116100f957806392a2ebf31461060c578063a217fddf14610620578063a885c97514610633578063a887b71c14610652578063ad3cb1cc14610666575f80fd5b80638129fc1c1461057c5780638489e58014610590578063879b938b146105af5780638d908258146105ce57806391d14854146105ed575f80fd5b806344198e4d116101cb5780635cdf3155116101905780635cdf31551461046e57806360829f8a146104ba57806365f1ea20146104d9578063702243601461051e5780637667b76d1461053d5780637a997ab71461055c575f80fd5b806344198e4d146103cd5780634d3223a5146103ec5780634f1ef2861461040b57806352d1902d1461041e57806354300d7a14610432575f80fd5b80632c7785a8116102115780632c7785a8146103265780632f2ff15d1461034557806336568abe146103645780633bccf6351461038357806341566585146103ae575f80fd5b806301ffc9a71461024d5780630a0b1b6414610281578063248a9ca3146102ba578063286dd3f5146102d95780632924b73b146102fa575b5f80fd5b348015610258575f80fd5b5061026c6102673660046124cd565b610844565b60405190151581526020015b60405180910390f35b34801561028c575f80fd5b506102ac61029b366004612508565b60026020525f908152604090205481565b604051908152602001610278565b3480156102c5575f80fd5b506102ac6102d4366004612523565b61087a565b3480156102e4575f80fd5b506102f86102f3366004612508565b61089a565b005b348015610305575f80fd5b50610319610314366004612508565b6108bf565b604051610278919061253a565b348015610331575f80fd5b506102ac610340366004612508565b6109a9565b348015610350575f80fd5b506102f861035f366004612585565b6109d8565b34801561036f575f80fd5b506102f861037e366004612585565b6109fa565b34801561038e575f80fd5b506102ac61039d366004612508565b60016020525f908152604090205481565b3480156103b9575f80fd5b506102f86103c8366004612508565b610a32565b3480156103d8575f80fd5b506102ac6103e73660046125b3565b610a53565b3480156103f7575f80fd5b506102ac610406366004612508565b610a9b565b6102f86104193660046125f3565b610ab5565b348015610429575f80fd5b506102ac610ad0565b34801561043d575f80fd5b506102ac61044c3660046126b6565b600760209081525f938452604080852082529284528284209052825290205481565b348015610479575f80fd5b506102ac6104883660046126b6565b6001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b3480156104c5575f80fd5b506102f86104d43660046126f5565b610aeb565b3480156104e4575f80fd5b506102ac6104f3366004612733565b600660209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610529575f80fd5b506102ac610538366004612783565b610b74565b348015610548575f80fd5b506102ac610557366004612783565b610b91565b348015610567575f80fd5b506102ac5f80516020612aa383398151915281565b348015610587575f80fd5b506102f8610ba6565b34801561059b575f80fd5b506102ac6105aa366004612508565b610cb0565b3480156105ba575f80fd5b506102ac6105c9366004612733565b610cc8565b3480156105d9575f80fd5b506102ac6105e8366004612733565b610d05565b3480156105f8575f80fd5b5061026c610607366004612585565b610d42565b348015610617575f80fd5b506102f8610d78565b34801561062b575f80fd5b506102ac5f81565b34801561063e575f80fd5b506102f861064d366004612807565b610ebc565b34801561065d575f80fd5b506102f86110cc565b348015610671575f80fd5b50610696604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161027891906128d1565b3480156106ae575f80fd5b506102f86106bd3660046126f5565b6110e0565b3480156106cd575f80fd5b506102ac6106dc366004612733565b600560209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610712575f80fd5b506102ac610721366004612508565b6112ff565b348015610731575f80fd5b506102f8610740366004612508565b611321565b348015610750575f80fd5b5061026c61075f366004612508565b60086020525f908152604090205460ff1681565b34801561077e575f80fd5b506102f861078d366004612906565b611446565b34801561079d575f80fd5b506102f86107ac366004612585565b6114b0565b3480156107bc575f80fd5b506103196107cb366004612508565b6114cc565b3480156107db575f80fd5b506102f86107ea36600461294d565b6115af565b3480156107fa575f80fd5b505f5461080d906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b348015610830575f80fd5b506102f861083f36600461294d565b61163a565b5f6001600160e01b03198216637965db0b60e01b148061087457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f9081525f80516020612ae3833981519152602052604090206001015490565b5f6108a4816118b1565b6108bb5f80516020612aa3833981519152836114b0565b5050565b6001600160a01b0381165f908152600360205260408120606091906108e3906118be565b6001600160401b038111156108fa576108fa6125df565b604051908082528060200260200182016040528015610923578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600360205260409020610948906118be565b8110156109a2576001600160a01b0384165f90815260036020526040902061097090826118c7565b828281518110610982576109826129e9565b6001600160a01b0390921660209283029190910190910152600101610928565b5092915050565b5f6109b382610a9b565b156109d1576109c1826112ff565b6109cc906001612a11565b610874565b5f92915050565b6109e18261087a565b6109ea816118b1565b6109f483836118d2565b50505050565b6001600160a01b0381163314610a235760405163334bd91960e11b815260040160405180910390fd5b610a2d8282611973565b505050565b5f610a3c816118b1565b6108bb5f80516020612aa3833981519152836109d8565b5f610a9483610a6185610a9b565b846001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b9392505050565b6001600160a01b03165f9081526002602052604090205490565b610abd6119ec565b610ac682611a90565b6108bb8282611a9a565b5f610ad9611b5b565b505f80516020612ac383398151915290565b5f80516020612aa3833981519152610b02816118b1565b610b1784610b0f866109a9565b853386611ba4565b826001600160a01b0316610b2a85610cb0565b60408051338152602081018690526001600160a01b038816917fd41c64546a5c34c283150998874c7ee0412c8954f57aef484c681f6e137827df910160405180910390a450505050565b5f610b8984610b8286610a9b565b8585610d05565b949350505050565b5f610b8984610b9f86610a9b565b8585610cc8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610bea5750825b90505f826001600160401b03166001148015610c055750303b155b905081158015610c13575080155b15610c315760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c5b57845460ff60401b1916600160401b1785555b610c63611bf8565b8315610ca957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f610cba82610a9b565b156109d1576109c182610a9b565b6001600160a01b039384165f9081526006602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b6001600160a01b039384165f9081526005602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f9182525f80516020612ae3833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b335f8181526008602052604090205460ff1615610da75760405162fe178760e01b815260040160405180910390fd5b6001600160a01b0381165f908152600860205260409020805460ff19166001179055610dd2816112ff565b6001600160a01b0382165f908152600260205260408120919091555b6001600160a01b0382165f908152600360205260409020610e0e906118be565b8110156108bb576001600160a01b0382165f908152600360205260408120610e3690836118c7565b90505f5b6001600160a01b0384165f908152600460205260409020610e5a906118be565b811015610eb2576001600160a01b0384165f908152600460205260408120610e8290836118c7565b90505f610e91865f8487610d05565b9050610ea886610ea088610a9b565b848785611c08565b5050600101610e3a565b5050600101610dee565b5f5b858110156110c1575f610f85610f4633610ef88b8b87818110610ee357610ee36129e9565b90506020020160208101906104069190612508565b8d8d87818110610f0a57610f0a6129e9565b9050602002016020810190610f1f9190612508565b8c8c88818110610f3157610f316129e9565b90506020020160208101906105e89190612508565b610f80888886818110610f5b57610f5b6129e9565b90506020020135878787818110610f7457610f746129e9565b90506020020135611c93565b611c93565b9050610fdf30898985818110610f9d57610f9d6129e9565b9050602002016020810190610fb29190612508565b8c8c86818110610fc457610fc46129e9565b9050602002016020810190610fd99190612508565b84611ca8565b61105833610fec33610a9b565b8c8c86818110610ffe57610ffe6129e9565b90506020020160208101906110139190612508565b8b8b87818110611025576110256129e9565b905060200201602081019061103a9190612508565b8a8a8881811061104c5761104c6129e9565b90506020020135611ed1565b6110b83361106533610a9b565b8c8c86818110611077576110776129e9565b905060200201602081019061108c9190612508565b8b8b8781811061109e5761109e6129e9565b90506020020160208101906110b39190612508565b611f08565b50600101610ebe565b505050505050505050565b6110de336110d933610a9b565b611f7a565b565b5f80516020612aa38339815191526110f7816118b1565b6001600160a01b0384165f9081526003602052604090206111189033612097565b505f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561115f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111839190612a24565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303815f875af11580156111d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111fa9190612a3b565b506112058382612a11565b5f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561124a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126e9190612a24565b1461128c57604051631910d68360e21b815260040160405180910390fd5b6112a185611299876109a9565b863387611c08565b836001600160a01b03166112b486610cb0565b60408051338152602081018790526001600160a01b038916917f7be65c2ae4d3c544de23b1db5bea4d541c02b93a5f4302852f4dc9880e0cb554910160405180910390a45050505050565b6001600160a01b0381165f908152600160205260408120546108749042612a5a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156113655750825b90505f826001600160401b031660011480156113805750303b155b90508115801561138e575080155b156113ac5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156113d657845460ff60401b1916600160401b1785555b6113de6120ab565b5f80546001600160a01b0319166001600160a01b038816179055831561143e57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b335f8181526001602052604081208590555b82811015610ca9576114a7848483818110611475576114756129e9565b905060200201602081019061148a9190612508565b6001600160a01b0384165f90815260046020526040902090612097565b50600101611458565b6114b98261087a565b6114c2816118b1565b6109f48383611973565b6001600160a01b0381165f908152600460205260408120606091906114f0906118be565b6001600160401b03811115611507576115076125df565b604051908082528060200260200182016040528015611530578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600460205260409020611555906118be565b8110156109a2576001600160a01b0384165f90815260046020526040902061157d90826118c7565b82828151811061158f5761158f6129e9565b6001600160a01b0390921660209283029190910190910152600101611535565b5f5b8581101561163157611629338888848181106115cf576115cf6129e9565b90506020020160208101906115e49190612508565b8585858181106115f6576115f66129e9565b905060200201602081019061160b9190612508565b88888681811061161d5761161d6129e9565b90506020020135611ca8565b6001016115b1565b50505050505050565b33611644816112ff565b6001600160a01b0382165f908152600260205260408120919091555b848110156118a7575f88888381811061167b5761167b6129e9565b90506020020160208101906116909190612508565b90505f6116ab845f848b8b88818110610f3157610f316129e9565b90508585848181106116bf576116bf6129e9565b905060200201358111156116e657604051630eba55e760e21b815260040160405180910390fd5b61172d8888858181106116fb576116fb6129e9565b90506020020160208101906117109190612508565b6001600160a01b0386165f90815260036020526040902090612097565b50858584818110611740576117406129e9565b9050602002013560055f866001600160a01b03166001600160a01b031681526020019081526020015f205f61177487610a9b565b81526020019081526020015f205f846001600160a01b03166001600160a01b031681526020019081526020015f205f8a8a878181106117b5576117b56129e9565b90506020020160208101906117ca9190612508565b6001600160a01b0316815260208101919091526040015f20558585848181106117f5576117f56129e9565b6001600160a01b038088165f9081526007602090815260408083208380528252808320938916835292815291812080549290930294909401359391925061183d908490612a11565b909155505f905081878786818110611857576118576129e9565b905060200201356118689190612a79565b905061189c308a8a87818110611880576118806129e9565b90506020020160208101906118959190612508565b8584611ca8565b505050600101611660565b5050505050505050565b6118bb81336120bd565b50565b5f610874825490565b5f610a9483836120f6565b5f5f80516020612ae38339815191526118eb8484610d42565b61196a575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556119203390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610874565b5f915050610874565b5f5f80516020612ae383398151915261198c8484610d42565b1561196a575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610874565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a7257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a665f80516020612ac3833981519152546001600160a01b031690565b6001600160a01b031614155b156110de5760405163703e46dd60e11b815260040160405180910390fd5b5f6108bb816118b1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611af4575060408051601f3d908101601f19168201909252611af191810190612a24565b60015b611b2157604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f80516020612ac38339815191528114611b5157604051632a87526960e21b815260048101829052602401611b18565b610a2d838361211c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110de5760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b038086165f90815260066020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611bec908490612a11565b90915550505050505050565b611c00612171565b6110de6120ab565b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611c50908490612a11565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290611bec908490612a11565b5f818310611ca15781610a94565b5090919050565b306001600160a01b03851603611e1c575f546001600160a01b03808416911603611d46575f5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044015b6020604051808303815f875af1158015611d1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d409190612a3b565b506109f4565b5f5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015611d95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db99190612a3b565b506040516318950c7160e01b81526001600160a01b038481166004830152602482018390528316906318950c71906044015f604051808303815f87803b158015611e01575f80fd5b505af1158015611e13573d5f803e3d5ffd5b505050506109f4565b5f546001600160a01b03808416911603611e70575f546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201849052909116906323b872dd90606401611d00565b60405163c4652d8360e01b81526001600160a01b03858116600483015284811660248301526044820183905283169063c4652d83906064015f604051808303815f87803b158015611ebf575f80fd5b505af11580156118a7573d5f803e3d5ffd5b835f611edf87838787610d05565b905082811015611efb57611ef687838787856121ba565b611631565b61163187838787876121ba565b5f611f1585858585610d05565b90505f611f23856001612a11565b90505f611f3287838787610cc8565b905082811115611631576001600160a01b038088165f9081526006602090815260408083208684528252808320848a1684528252808320938816835292905220839055611631565b5f5b6001600160a01b0383165f908152600360205260409020611f9c906118be565b811015612031576001600160a01b0383165f908152600360205260408120611fc490836118c7565b90505f5b6001600160a01b0385165f908152600460205260409020611fe8906118be565b811015612027576001600160a01b0385165f90815260046020526040812061201090836118c7565b905061201e86868386612245565b50600101611fc8565b5050600101611f7c565b5061203d816001612a11565b6001600160a01b0383165f81815260026020526040908190209290925590517fb693195b5ff3e376f8b562486abc516e10fe2467b75f0e4165e79cf4ab70dc419061208b9084815260200190565b60405180910390a25050565b5f610a94836001600160a01b038416612308565b6120b3612171565b6118bb5f336118d2565b6120c78282610d42565b6108bb5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401611b18565b5f825f01828154811061210b5761210b6129e9565b905f5260205f200154905092915050565b61212582612354565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561216957610a2d82826123b7565b6108bb612429565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166110de57604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290612202908490612a79565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290611bec908490612a79565b5f61225285858585610d05565b90505f61226b86612264876001612a11565b8686610cc8565b9050818111156122785750805b5f6122838284612a79565b905061229c87612294886001612a11565b878785611c08565b6122a830858785611ca8565b846001600160a01b031686856001600160a01b03167f3ddb7f725ac69363a1df8296c965af4d268f31b082480dcd8419d284fb7fd34286866040516122f7929190918252602082015260400190565b60405180910390a450505050505050565b5f81815260018301602052604081205461234d57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610874565b505f610874565b806001600160a01b03163b5f0361238957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611b18565b5f80516020612ac383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516123d39190612a8c565b5f60405180830381855af49150503d805f811461240b576040519150601f19603f3d011682016040523d82523d5f602084013e612410565b606091505b5091509150612420858383612448565b95945050505050565b34156110de5760405163b398979f60e01b815260040160405180910390fd5b60608261245d57612458826124a4565b610a94565b815115801561247457506001600160a01b0384163b155b1561249d57604051639996b31560e01b81526001600160a01b0385166004820152602401611b18565b5080610a94565b8051156124b45780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f602082840312156124dd575f80fd5b81356001600160e01b031981168114610a94575f80fd5b6001600160a01b03811681146118bb575f80fd5b5f60208284031215612518575f80fd5b8135610a94816124f4565b5f60208284031215612533575f80fd5b5035919050565b602080825282518282018190525f918401906040840190835b8181101561257a5783516001600160a01b0316835260209384019390920191600101612553565b509095945050505050565b5f8060408385031215612596575f80fd5b8235915060208301356125a8816124f4565b809150509250929050565b5f80604083850312156125c4575f80fd5b82356125cf816124f4565b915060208301356125a8816124f4565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612604575f80fd5b823561260f816124f4565b915060208301356001600160401b03811115612629575f80fd5b8301601f81018513612639575f80fd5b80356001600160401b03811115612652576126526125df565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612680576126806125df565b604052818152828201602001871015612697575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f805f606084860312156126c8575f80fd5b83356126d3816124f4565b92506020840135915060408401356126ea816124f4565b809150509250925092565b5f805f60608486031215612707575f80fd5b8335612712816124f4565b92506020840135612722816124f4565b929592945050506040919091013590565b5f805f8060808587031215612746575f80fd5b8435612751816124f4565b9350602085013592506040850135612768816124f4565b91506060850135612778816124f4565b939692955090935050565b5f805f60608486031215612795575f80fd5b83356127a0816124f4565b925060208401356127b0816124f4565b915060408401356126ea816124f4565b5f8083601f8401126127d0575f80fd5b5081356001600160401b038111156127e6575f80fd5b6020830191508360208260051b8501011115612800575f80fd5b9250929050565b5f805f805f805f806080898b03121561281e575f80fd5b88356001600160401b03811115612833575f80fd5b61283f8b828c016127c0565b90995097505060208901356001600160401b0381111561285d575f80fd5b6128698b828c016127c0565b90975095505060408901356001600160401b03811115612887575f80fd5b6128938b828c016127c0565b90955093505060608901356001600160401b038111156128b1575f80fd5b6128bd8b828c016127c0565b999c989b5096995094979396929594505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f60408486031215612918575f80fd5b8335925060208401356001600160401b03811115612934575f80fd5b612940868287016127c0565b9497909650939450505050565b5f805f805f8060608789031215612962575f80fd5b86356001600160401b03811115612977575f80fd5b61298389828a016127c0565b90975095505060208701356001600160401b038111156129a1575f80fd5b6129ad89828a016127c0565b90955093505060408701356001600160401b038111156129cb575f80fd5b6129d789828a016127c0565b979a9699509497509295939492505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610874576108746129fd565b5f60208284031215612a34575f80fd5b5051919050565b5f60208284031215612a4b575f80fd5b81518015158114610a94575f80fd5b5f82612a7457634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610874576108746129fd565b5f82518060208501845e5f92019182525091905056fedc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220607b8c1972ce4fe4e14ac69101762168966bf4e7c61c37e51539df8ce23e5dde64736f6c634300081a0033","sourceMap":"591:19196:108:-:0;;;1171:4:26;1128:48;;591:19196:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405260043610610249575f3560e01c80638129fc1c11610134578063bf6eac2f116100b3578063d37304f811610078578063d37304f814610773578063d547741f14610792578063d5ca03de146107b1578063da33ee7f146107d0578063fc0c546a146107ef578063ff62787c14610825575f80fd5b8063bf6eac2f146106a3578063c0b95ab8146106c2578063c3471ff814610707578063c4d66de814610726578063d1ba90ff14610745575f80fd5b806392a2ebf3116100f957806392a2ebf31461060c578063a217fddf14610620578063a885c97514610633578063a887b71c14610652578063ad3cb1cc14610666575f80fd5b80638129fc1c1461057c5780638489e58014610590578063879b938b146105af5780638d908258146105ce57806391d14854146105ed575f80fd5b806344198e4d116101cb5780635cdf3155116101905780635cdf31551461046e57806360829f8a146104ba57806365f1ea20146104d9578063702243601461051e5780637667b76d1461053d5780637a997ab71461055c575f80fd5b806344198e4d146103cd5780634d3223a5146103ec5780634f1ef2861461040b57806352d1902d1461041e57806354300d7a14610432575f80fd5b80632c7785a8116102115780632c7785a8146103265780632f2ff15d1461034557806336568abe146103645780633bccf6351461038357806341566585146103ae575f80fd5b806301ffc9a71461024d5780630a0b1b6414610281578063248a9ca3146102ba578063286dd3f5146102d95780632924b73b146102fa575b5f80fd5b348015610258575f80fd5b5061026c6102673660046124cd565b610844565b60405190151581526020015b60405180910390f35b34801561028c575f80fd5b506102ac61029b366004612508565b60026020525f908152604090205481565b604051908152602001610278565b3480156102c5575f80fd5b506102ac6102d4366004612523565b61087a565b3480156102e4575f80fd5b506102f86102f3366004612508565b61089a565b005b348015610305575f80fd5b50610319610314366004612508565b6108bf565b604051610278919061253a565b348015610331575f80fd5b506102ac610340366004612508565b6109a9565b348015610350575f80fd5b506102f861035f366004612585565b6109d8565b34801561036f575f80fd5b506102f861037e366004612585565b6109fa565b34801561038e575f80fd5b506102ac61039d366004612508565b60016020525f908152604090205481565b3480156103b9575f80fd5b506102f86103c8366004612508565b610a32565b3480156103d8575f80fd5b506102ac6103e73660046125b3565b610a53565b3480156103f7575f80fd5b506102ac610406366004612508565b610a9b565b6102f86104193660046125f3565b610ab5565b348015610429575f80fd5b506102ac610ad0565b34801561043d575f80fd5b506102ac61044c3660046126b6565b600760209081525f938452604080852082529284528284209052825290205481565b348015610479575f80fd5b506102ac6104883660046126b6565b6001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b3480156104c5575f80fd5b506102f86104d43660046126f5565b610aeb565b3480156104e4575f80fd5b506102ac6104f3366004612733565b600660209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610529575f80fd5b506102ac610538366004612783565b610b74565b348015610548575f80fd5b506102ac610557366004612783565b610b91565b348015610567575f80fd5b506102ac5f80516020612aa383398151915281565b348015610587575f80fd5b506102f8610ba6565b34801561059b575f80fd5b506102ac6105aa366004612508565b610cb0565b3480156105ba575f80fd5b506102ac6105c9366004612733565b610cc8565b3480156105d9575f80fd5b506102ac6105e8366004612733565b610d05565b3480156105f8575f80fd5b5061026c610607366004612585565b610d42565b348015610617575f80fd5b506102f8610d78565b34801561062b575f80fd5b506102ac5f81565b34801561063e575f80fd5b506102f861064d366004612807565b610ebc565b34801561065d575f80fd5b506102f86110cc565b348015610671575f80fd5b50610696604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161027891906128d1565b3480156106ae575f80fd5b506102f86106bd3660046126f5565b6110e0565b3480156106cd575f80fd5b506102ac6106dc366004612733565b600560209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610712575f80fd5b506102ac610721366004612508565b6112ff565b348015610731575f80fd5b506102f8610740366004612508565b611321565b348015610750575f80fd5b5061026c61075f366004612508565b60086020525f908152604090205460ff1681565b34801561077e575f80fd5b506102f861078d366004612906565b611446565b34801561079d575f80fd5b506102f86107ac366004612585565b6114b0565b3480156107bc575f80fd5b506103196107cb366004612508565b6114cc565b3480156107db575f80fd5b506102f86107ea36600461294d565b6115af565b3480156107fa575f80fd5b505f5461080d906001600160a01b031681565b6040516001600160a01b039091168152602001610278565b348015610830575f80fd5b506102f861083f36600461294d565b61163a565b5f6001600160e01b03198216637965db0b60e01b148061087457506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f9081525f80516020612ae3833981519152602052604090206001015490565b5f6108a4816118b1565b6108bb5f80516020612aa3833981519152836114b0565b5050565b6001600160a01b0381165f908152600360205260408120606091906108e3906118be565b6001600160401b038111156108fa576108fa6125df565b604051908082528060200260200182016040528015610923578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600360205260409020610948906118be565b8110156109a2576001600160a01b0384165f90815260036020526040902061097090826118c7565b828281518110610982576109826129e9565b6001600160a01b0390921660209283029190910190910152600101610928565b5092915050565b5f6109b382610a9b565b156109d1576109c1826112ff565b6109cc906001612a11565b610874565b5f92915050565b6109e18261087a565b6109ea816118b1565b6109f483836118d2565b50505050565b6001600160a01b0381163314610a235760405163334bd91960e11b815260040160405180910390fd5b610a2d8282611973565b505050565b5f610a3c816118b1565b6108bb5f80516020612aa3833981519152836109d8565b5f610a9483610a6185610a9b565b846001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b9392505050565b6001600160a01b03165f9081526002602052604090205490565b610abd6119ec565b610ac682611a90565b6108bb8282611a9a565b5f610ad9611b5b565b505f80516020612ac383398151915290565b5f80516020612aa3833981519152610b02816118b1565b610b1784610b0f866109a9565b853386611ba4565b826001600160a01b0316610b2a85610cb0565b60408051338152602081018690526001600160a01b038816917fd41c64546a5c34c283150998874c7ee0412c8954f57aef484c681f6e137827df910160405180910390a450505050565b5f610b8984610b8286610a9b565b8585610d05565b949350505050565b5f610b8984610b9f86610a9b565b8585610cc8565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610bea5750825b90505f826001600160401b03166001148015610c055750303b155b905081158015610c13575080155b15610c315760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c5b57845460ff60401b1916600160401b1785555b610c63611bf8565b8315610ca957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f610cba82610a9b565b156109d1576109c182610a9b565b6001600160a01b039384165f9081526006602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b6001600160a01b039384165f9081526005602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f9182525f80516020612ae3833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b335f8181526008602052604090205460ff1615610da75760405162fe178760e01b815260040160405180910390fd5b6001600160a01b0381165f908152600860205260409020805460ff19166001179055610dd2816112ff565b6001600160a01b0382165f908152600260205260408120919091555b6001600160a01b0382165f908152600360205260409020610e0e906118be565b8110156108bb576001600160a01b0382165f908152600360205260408120610e3690836118c7565b90505f5b6001600160a01b0384165f908152600460205260409020610e5a906118be565b811015610eb2576001600160a01b0384165f908152600460205260408120610e8290836118c7565b90505f610e91865f8487610d05565b9050610ea886610ea088610a9b565b848785611c08565b5050600101610e3a565b5050600101610dee565b5f5b858110156110c1575f610f85610f4633610ef88b8b87818110610ee357610ee36129e9565b90506020020160208101906104069190612508565b8d8d87818110610f0a57610f0a6129e9565b9050602002016020810190610f1f9190612508565b8c8c88818110610f3157610f316129e9565b90506020020160208101906105e89190612508565b610f80888886818110610f5b57610f5b6129e9565b90506020020135878787818110610f7457610f746129e9565b90506020020135611c93565b611c93565b9050610fdf30898985818110610f9d57610f9d6129e9565b9050602002016020810190610fb29190612508565b8c8c86818110610fc457610fc46129e9565b9050602002016020810190610fd99190612508565b84611ca8565b61105833610fec33610a9b565b8c8c86818110610ffe57610ffe6129e9565b90506020020160208101906110139190612508565b8b8b87818110611025576110256129e9565b905060200201602081019061103a9190612508565b8a8a8881811061104c5761104c6129e9565b90506020020135611ed1565b6110b83361106533610a9b565b8c8c86818110611077576110776129e9565b905060200201602081019061108c9190612508565b8b8b8781811061109e5761109e6129e9565b90506020020160208101906110b39190612508565b611f08565b50600101610ebe565b505050505050505050565b6110de336110d933610a9b565b611f7a565b565b5f80516020612aa38339815191526110f7816118b1565b6001600160a01b0384165f9081526003602052604090206111189033612097565b505f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561115f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111839190612a24565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303815f875af11580156111d6573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111fa9190612a3b565b506112058382612a11565b5f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561124a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061126e9190612a24565b1461128c57604051631910d68360e21b815260040160405180910390fd5b6112a185611299876109a9565b863387611c08565b836001600160a01b03166112b486610cb0565b60408051338152602081018790526001600160a01b038916917f7be65c2ae4d3c544de23b1db5bea4d541c02b93a5f4302852f4dc9880e0cb554910160405180910390a45050505050565b6001600160a01b0381165f908152600160205260408120546108749042612a5a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156113655750825b90505f826001600160401b031660011480156113805750303b155b90508115801561138e575080155b156113ac5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156113d657845460ff60401b1916600160401b1785555b6113de6120ab565b5f80546001600160a01b0319166001600160a01b038816179055831561143e57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b335f8181526001602052604081208590555b82811015610ca9576114a7848483818110611475576114756129e9565b905060200201602081019061148a9190612508565b6001600160a01b0384165f90815260046020526040902090612097565b50600101611458565b6114b98261087a565b6114c2816118b1565b6109f48383611973565b6001600160a01b0381165f908152600460205260408120606091906114f0906118be565b6001600160401b03811115611507576115076125df565b604051908082528060200260200182016040528015611530578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600460205260409020611555906118be565b8110156109a2576001600160a01b0384165f90815260046020526040902061157d90826118c7565b82828151811061158f5761158f6129e9565b6001600160a01b0390921660209283029190910190910152600101611535565b5f5b8581101561163157611629338888848181106115cf576115cf6129e9565b90506020020160208101906115e49190612508565b8585858181106115f6576115f66129e9565b905060200201602081019061160b9190612508565b88888681811061161d5761161d6129e9565b90506020020135611ca8565b6001016115b1565b50505050505050565b33611644816112ff565b6001600160a01b0382165f908152600260205260408120919091555b848110156118a7575f88888381811061167b5761167b6129e9565b90506020020160208101906116909190612508565b90505f6116ab845f848b8b88818110610f3157610f316129e9565b90508585848181106116bf576116bf6129e9565b905060200201358111156116e657604051630eba55e760e21b815260040160405180910390fd5b61172d8888858181106116fb576116fb6129e9565b90506020020160208101906117109190612508565b6001600160a01b0386165f90815260036020526040902090612097565b50858584818110611740576117406129e9565b9050602002013560055f866001600160a01b03166001600160a01b031681526020019081526020015f205f61177487610a9b565b81526020019081526020015f205f846001600160a01b03166001600160a01b031681526020019081526020015f205f8a8a878181106117b5576117b56129e9565b90506020020160208101906117ca9190612508565b6001600160a01b0316815260208101919091526040015f20558585848181106117f5576117f56129e9565b6001600160a01b038088165f9081526007602090815260408083208380528252808320938916835292815291812080549290930294909401359391925061183d908490612a11565b909155505f905081878786818110611857576118576129e9565b905060200201356118689190612a79565b905061189c308a8a87818110611880576118806129e9565b90506020020160208101906118959190612508565b8584611ca8565b505050600101611660565b5050505050505050565b6118bb81336120bd565b50565b5f610874825490565b5f610a9483836120f6565b5f5f80516020612ae38339815191526118eb8484610d42565b61196a575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556119203390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610874565b5f915050610874565b5f5f80516020612ae383398151915261198c8484610d42565b1561196a575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610874565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611a7257507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611a665f80516020612ac3833981519152546001600160a01b031690565b6001600160a01b031614155b156110de5760405163703e46dd60e11b815260040160405180910390fd5b5f6108bb816118b1565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611af4575060408051601f3d908101601f19168201909252611af191810190612a24565b60015b611b2157604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f80516020612ac38339815191528114611b5157604051632a87526960e21b815260048101829052602401611b18565b610a2d838361211c565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146110de5760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b038086165f90815260066020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611bec908490612a11565b90915550505050505050565b611c00612171565b6110de6120ab565b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611c50908490612a11565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290611bec908490612a11565b5f818310611ca15781610a94565b5090919050565b306001600160a01b03851603611e1c575f546001600160a01b03808416911603611d46575f5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044015b6020604051808303815f875af1158015611d1c573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d409190612a3b565b506109f4565b5f5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015611d95573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611db99190612a3b565b506040516318950c7160e01b81526001600160a01b038481166004830152602482018390528316906318950c71906044015f604051808303815f87803b158015611e01575f80fd5b505af1158015611e13573d5f803e3d5ffd5b505050506109f4565b5f546001600160a01b03808416911603611e70575f546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201849052909116906323b872dd90606401611d00565b60405163c4652d8360e01b81526001600160a01b03858116600483015284811660248301526044820183905283169063c4652d83906064015f604051808303815f87803b158015611ebf575f80fd5b505af11580156118a7573d5f803e3d5ffd5b835f611edf87838787610d05565b905082811015611efb57611ef687838787856121ba565b611631565b61163187838787876121ba565b5f611f1585858585610d05565b90505f611f23856001612a11565b90505f611f3287838787610cc8565b905082811115611631576001600160a01b038088165f9081526006602090815260408083208684528252808320848a1684528252808320938816835292905220839055611631565b5f5b6001600160a01b0383165f908152600360205260409020611f9c906118be565b811015612031576001600160a01b0383165f908152600360205260408120611fc490836118c7565b90505f5b6001600160a01b0385165f908152600460205260409020611fe8906118be565b811015612027576001600160a01b0385165f90815260046020526040812061201090836118c7565b905061201e86868386612245565b50600101611fc8565b5050600101611f7c565b5061203d816001612a11565b6001600160a01b0383165f81815260026020526040908190209290925590517fb693195b5ff3e376f8b562486abc516e10fe2467b75f0e4165e79cf4ab70dc419061208b9084815260200190565b60405180910390a25050565b5f610a94836001600160a01b038416612308565b6120b3612171565b6118bb5f336118d2565b6120c78282610d42565b6108bb5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401611b18565b5f825f01828154811061210b5761210b6129e9565b905f5260205f200154905092915050565b61212582612354565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561216957610a2d82826123b7565b6108bb612429565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff166110de57604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290612202908490612a79565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290611bec908490612a79565b5f61225285858585610d05565b90505f61226b86612264876001612a11565b8686610cc8565b9050818111156122785750805b5f6122838284612a79565b905061229c87612294886001612a11565b878785611c08565b6122a830858785611ca8565b846001600160a01b031686856001600160a01b03167f3ddb7f725ac69363a1df8296c965af4d268f31b082480dcd8419d284fb7fd34286866040516122f7929190918252602082015260400190565b60405180910390a450505050505050565b5f81815260018301602052604081205461234d57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610874565b505f610874565b806001600160a01b03163b5f0361238957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401611b18565b5f80516020612ac383398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516123d39190612a8c565b5f60405180830381855af49150503d805f811461240b576040519150601f19603f3d011682016040523d82523d5f602084013e612410565b606091505b5091509150612420858383612448565b95945050505050565b34156110de5760405163b398979f60e01b815260040160405180910390fd5b60608261245d57612458826124a4565b610a94565b815115801561247457506001600160a01b0384163b155b1561249d57604051639996b31560e01b81526001600160a01b0385166004820152602401611b18565b5080610a94565b8051156124b45780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f602082840312156124dd575f80fd5b81356001600160e01b031981168114610a94575f80fd5b6001600160a01b03811681146118bb575f80fd5b5f60208284031215612518575f80fd5b8135610a94816124f4565b5f60208284031215612533575f80fd5b5035919050565b602080825282518282018190525f918401906040840190835b8181101561257a5783516001600160a01b0316835260209384019390920191600101612553565b509095945050505050565b5f8060408385031215612596575f80fd5b8235915060208301356125a8816124f4565b809150509250929050565b5f80604083850312156125c4575f80fd5b82356125cf816124f4565b915060208301356125a8816124f4565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612604575f80fd5b823561260f816124f4565b915060208301356001600160401b03811115612629575f80fd5b8301601f81018513612639575f80fd5b80356001600160401b03811115612652576126526125df565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612680576126806125df565b604052818152828201602001871015612697575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f805f606084860312156126c8575f80fd5b83356126d3816124f4565b92506020840135915060408401356126ea816124f4565b809150509250925092565b5f805f60608486031215612707575f80fd5b8335612712816124f4565b92506020840135612722816124f4565b929592945050506040919091013590565b5f805f8060808587031215612746575f80fd5b8435612751816124f4565b9350602085013592506040850135612768816124f4565b91506060850135612778816124f4565b939692955090935050565b5f805f60608486031215612795575f80fd5b83356127a0816124f4565b925060208401356127b0816124f4565b915060408401356126ea816124f4565b5f8083601f8401126127d0575f80fd5b5081356001600160401b038111156127e6575f80fd5b6020830191508360208260051b8501011115612800575f80fd5b9250929050565b5f805f805f805f806080898b03121561281e575f80fd5b88356001600160401b03811115612833575f80fd5b61283f8b828c016127c0565b90995097505060208901356001600160401b0381111561285d575f80fd5b6128698b828c016127c0565b90975095505060408901356001600160401b03811115612887575f80fd5b6128938b828c016127c0565b90955093505060608901356001600160401b038111156128b1575f80fd5b6128bd8b828c016127c0565b999c989b5096995094979396929594505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f60408486031215612918575f80fd5b8335925060208401356001600160401b03811115612934575f80fd5b612940868287016127c0565b9497909650939450505050565b5f805f805f8060608789031215612962575f80fd5b86356001600160401b03811115612977575f80fd5b61298389828a016127c0565b90975095505060208701356001600160401b038111156129a1575f80fd5b6129ad89828a016127c0565b90955093505060408701356001600160401b038111156129cb575f80fd5b6129d789828a016127c0565b979a9699509497509295939492505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115610874576108746129fd565b5f60208284031215612a34575f80fd5b5051919050565b5f60208284031215612a4b575f80fd5b81518015158114610a94575f80fd5b5f82612a7457634e487b7160e01b5f52601260045260245ffd5b500490565b81810381811115610874576108746129fd565b5f82518060208501845e5f92019182525091905056fedc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220607b8c1972ce4fe4e14ac69101762168966bf4e7c61c37e51539df8ce23e5dde64736f6c634300081a0033","sourceMap":"591:19196:108:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:24;;;;;;;;;;-1:-1:-1;3443:202:24;;;;;:::i;:::-;;:::i;:::-;;;470:14:137;;463:22;445:41;;433:2;418:18;3443:202:24;;;;;;;;612:75:109;;;;;;;;;;-1:-1:-1;612:75:109;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1031:25:137;;;1019:2;1004:18;612:75:109;885:177:137;4759:191:24;;;;;;;;;;-1:-1:-1;4759:191:24;;;;;:::i;:::-;;:::i;19634:151:108:-;;;;;;;;;;-1:-1:-1;19634:151:108;;;;;:::i;:::-;;:::i;:::-;;1747:387;;;;;;;;;;-1:-1:-1;1747:387:108;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;6588:195::-;;;;;;;;;;-1:-1:-1;6588:195:108;;;;;:::i;:::-;;:::i;5246:136:24:-;;;;;;;;;;-1:-1:-1;5246:136:24;;;;;:::i;:::-;;:::i;6348:245::-;;;;;;;;;;-1:-1:-1;6348:245:24;;;;;:::i;:::-;;:::i;529:77:109:-;;;;;;;;;;-1:-1:-1;529:77:109;;;;;:::i;:::-;;;;;;;;;;;;;;19488:140:108;;;;;;;;;;-1:-1:-1;19488:140:108;;;;;:::i;:::-;;:::i;8521:226::-;;;;;;;;;;-1:-1:-1;8521:226:108;;;;;:::i;:::-;;:::i;6272:123::-;;;;;;;;;;-1:-1:-1;6272:123:108;;;;;:::i;:::-;;:::i;4158:214:26:-;;;;;;:::i;:::-;;:::i;3705:134::-;;;;;;;;;;;;;:::i;1457:146:109:-;;;;;;;;;;-1:-1:-1;1457:146:109;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8251:214:108;;;;;;;;;;-1:-1:-1;8251:214:108;;;;;:::i;:::-;-1:-1:-1;;;;;8409:31:108;;;8383:7;8409:31;;;:23;:31;;;;;;;;:38;;;;;;;;;:49;;;;;;;;;;;;8251:214;10498:786;;;;;;;;;;-1:-1:-1;10498:786:108;;;;;:::i;:::-;;:::i;1192:193:109:-;;;;;;;;;;-1:-1:-1;1192:193:109;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7159:326:108;;;;;;;;;;-1:-1:-1;7159:326:108;;;;;:::i;:::-;;:::i;7869:330::-;;;;;;;;;;-1:-1:-1;7869:330:108;;;;;:::i;:::-;;:::i;1727:68:109:-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1727:68:109;;514:86:110;;;;;;;;;;;;;:::i;6428:154:108:-;;;;;;;;;;-1:-1:-1;6428:154:108;;;;;:::i;:::-;;:::i;7553:244::-;;;;;;;;;;-1:-1:-1;7553:244:108;;;;;:::i;:::-;;:::i;6849:240::-;;;;;;;;;;-1:-1:-1;6849:240:108;;;;;:::i;:::-;;:::i;3732:207:24:-;;;;;;;;;;-1:-1:-1;3732:207:24;;;;;:::i;:::-;;:::i;2140:1187:108:-;;;;;;;;;;;;;:::i;2317:49:24:-;;;;;;;;;;-1:-1:-1;2317:49:24;2362:4;2317:49;;15920:1564:108;;;;;;;;;;-1:-1:-1;15920:1564:108;;;;;:::i;:::-;;:::i;13464:106::-;;;;;;;;;;;;;:::i;1819:58:26:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:26;;;;;;;;;;;;:::i;8786:1661:108:-;;;;;;;;;;-1:-1:-1;8786:1661:108;;;;;:::i;:::-;;:::i;937:191:109:-;;;;;;;;;;-1:-1:-1;937:191:109;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6052:146:108;;;;;;;;;;-1:-1:-1;6052:146:108;;;;;:::i;:::-;;:::i;746:125::-;;;;;;;;;;-1:-1:-1;746:125:108;;;;;:::i;:::-;;:::i;1610:60:109:-;;;;;;;;;;-1:-1:-1;1610:60:109;;;;;:::i;:::-;;;;;;;;;;;;;;;;877:336:108;;;;;;;;;;-1:-1:-1;877:336:108;;;;;:::i;:::-;;:::i;5662:138:24:-;;;;;;;;;;-1:-1:-1;5662:138:24;;;;;:::i;:::-;;:::i;1219:522:108:-;;;;;;;;;;-1:-1:-1;1219:522:108;;;;;:::i;:::-;;:::i;19031:451::-;;;;;;;;;;-1:-1:-1;19031:451:108;;;;;:::i;:::-;;:::i;503:19:109:-;;;;;;;;;;-1:-1:-1;503:19:109;;;;-1:-1:-1;;;;;503:19:109;;;;;;-1:-1:-1;;;;;11186:32:137;;;11168:51;;11156:2;11141:18;503:19:109;11006:219:137;3333:1270:108;;;;;;;;;;-1:-1:-1;3333:1270:108;;;;;:::i;:::-;;:::i;3443:202:24:-;3528:4;-1:-1:-1;;;;;;3551:47:24;;-1:-1:-1;;;3551:47:24;;:87;;-1:-1:-1;;;;;;;;;;1133:40:32;;;3602:36:24;3544:94;3443:202;-1:-1:-1;;3443:202:24:o;4759:191::-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:24;;;;;:24;;;;4759:191::o;19634:151:108:-;2362:4:24;3191:16;2362:4;3191:10;:16::i;:::-;19746:32:108::1;-1:-1:-1::0;;;;;;;;;;;19773:4:108::1;19746:10;:32::i;:::-;19634:151:::0;;:::o;1747:387::-;-1:-1:-1;;;;;1912:25:108;;1856:26;1912:25;;;:17;:25;;;;;1828:16;;1856:26;1912:34;;:32;:34::i;:::-;-1:-1:-1;;;;;1885:71:108;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1885:71:108;;1856:100;;1971:9;1966:136;-1:-1:-1;;;;;1990:25:108;;;;;;:17;:25;;;;;:34;;:32;:34::i;:::-;1986:1;:38;1966:136;;;-1:-1:-1;;;;;2060:25:108;;;;;;:17;:25;;;;;:31;;2089:1;2060:28;:31::i;:::-;2045:9;2055:1;2045:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2045:46:108;;;:12;;;;;;;;;;;:46;2026:3;;1966:136;;;-1:-1:-1;2118:9:108;1747:387;-1:-1:-1;;1747:387:108:o;6588:195::-;6672:7;6710:23;6726:6;6710:15;:23::i;:::-;:28;:66;;6745:27;6765:6;6745:19;:27::i;:::-;:31;;6775:1;6745:31;:::i;:::-;6710:66;;;6741:1;6691:85;6588:195;-1:-1:-1;;6588:195:108:o;5246:136:24:-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;6348:245::-;-1:-1:-1;;;;;6441:34:24;;966:10:29;6441:34:24;6437:102;;6498:30;;-1:-1:-1;;;6498:30:24;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;19488:140:108:-;2362:4:24;3191:16;2362:4;3191:10;:16::i;:::-;19590:31:108::1;-1:-1:-1::0;;;;;;;;;;;19616:4:108::1;19590:9;:31::i;8521:226::-:0;8637:7;8675:65;8697:6;8705:23;8721:6;8705:15;:23::i;:::-;8730:9;-1:-1:-1;;;;;8409:31:108;;;8383:7;8409:31;;;:23;:31;;;;;;;;:38;;;;;;;;;:49;;;;;;;;;;;;8251:214;8675:65;8656:84;8521:226;-1:-1:-1;;;8521:226:108:o;6272:123::-;-1:-1:-1;;;;;6360:28:108;6334:7;6360:28;;;:20;:28;;;;;;;6272:123::o;4158:214:26:-;2653:13;:11;:13::i;:::-;4273:36:::1;4291:17;4273;:36::i;:::-;4319:46;4341:17;4360:4;4319:21;:46::i;3705:134::-:0;3774:7;2924:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3705:134:26;:::o;10498:786:108:-;-1:-1:-1;;;;;;;;;;;3191:16:24;3202:4;3191:10;:16::i;:::-;10961:153:108::1;10986:6;11006:31;11030:6;11006:23;:31::i;:::-;11051:9;11074:10;11098:6;10961:11;:153::i;:::-;11214:9;-1:-1:-1::0;;;;;11130:147:108::1;11180:20;11193:6;11180:12;:20::i;:::-;11130:147;::::0;;11237:10:::1;12902:51:137::0;;12984:2;12969:18;;12962:34;;;-1:-1:-1;;;;;11130:147:108;::::1;::::0;::::1;::::0;12875:18:137;11130:147:108::1;;;;;;;10498:786:::0;;;;:::o;7159:326::-;7293:7;7331:147;7364:6;7388:23;7404:6;7388:15;:23::i;:::-;7429:9;7456:8;7331:15;:147::i;:::-;7312:166;7159:326;-1:-1:-1;;;;7159:326:108:o;7869:330::-;8005:7;8043:149;8078:6;8102:23;8118:6;8102:15;:23::i;:::-;8143:9;8170:8;8043:17;:149::i;514:86:110:-;8870:21:25;4302:15;;-1:-1:-1;;;4302:15:25;;;;4301:16;;-1:-1:-1;;;;;4348:14:25;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:25;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:25;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:25;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:25;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:25;-1:-1:-1;;;5013:22:25;;;4979:67;573:20:110::1;:18;:20::i;:::-;5070:14:25::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:25;;;5142:14;;-1:-1:-1;13160:50:137;;5142:14:25;;13148:2:137;13133:18;5142:14:25;;;;;;;5066:101;4092:1081;;;;;514:86:110:o;6428:154:108:-;6487:7;6513:23;6529:6;6513:15;:23::i;:::-;:28;:62;;6548:23;6564:6;6548:15;:23::i;7553:244::-;-1:-1:-1;;;;;7733:29:108;;;7707:7;7733:29;;;:21;:29;;;;;;;;:36;;;;;;;;;:47;;;;;;;;;;;:57;;;;;;;;;;;;7553:244::o;6849:240::-;-1:-1:-1;;;;;7027:27:108;;;7001:7;7027:27;;;:19;:27;;;;;;;;:34;;;;;;;;;:45;;;;;;;;;;;:55;;;;;;;;;;;;6849:240::o;3732:207:24:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:24;;;;;;;;-1:-1:-1;;;;;3901:31:24;;;;;;;;;;;;;;;3732:207::o;2140:1187:108:-;2207:10;2190:14;2231:29;;;:21;:29;;;;;;;;2227:66;;;2269:24;;-1:-1:-1;;;2269:24:108;;;;;;;;;;;2227:66;-1:-1:-1;;;;;2303:29:108;;;;;;:21;:29;;;;;:36;;-1:-1:-1;;2303:36:108;2335:4;2303:36;;;2449:27;2325:6;2449:19;:27::i;:::-;-1:-1:-1;;;;;2418:28:108;;;;;;:20;:28;;;;;:58;;;;2487:834;-1:-1:-1;;;;;2511:25:108;;;;;;:17;:25;;;;;:34;;:32;:34::i;:::-;2507:1;:38;2487:834;;;-1:-1:-1;;;;;2585:25:108;;2566:16;2585:25;;;:17;:25;;;;;:31;;2614:1;2585:28;:31::i;:::-;2566:50;;2636:9;2631:680;-1:-1:-1;;;;;2655:26:108;;;;;;:18;:26;;;;;:35;;:33;:35::i;:::-;2651:1;:39;2631:680;;;-1:-1:-1;;;;;2735:26:108;;2715:17;2735:26;;;:18;:26;;;;;:32;;2765:1;2735:29;:32::i;:::-;2715:52;;2844:21;2868:145;2905:6;2933:1;2956:9;2987:8;2868:15;:145::i;:::-;2844:169;;3100:196;3131:6;3159:23;3175:6;3159:15;:23::i;:::-;3204:9;3235:8;3265:13;3100:9;:196::i;:::-;-1:-1:-1;;2692:3:108;;2631:680;;;-1:-1:-1;;2547:3:108;;2487:834;;15920:1564;16118:9;16113:1365;16133:20;;;16113:1365;;;16401:20;16424:281;16450:185;16487:10;16519:29;16535:9;;16545:1;16535:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;16519:29::-;16570:10;;16581:1;16570:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16605:9;;16615:1;16605:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;16450:185::-;16653:38;16662:7;;16670:1;16662:10;;;;;;;:::i;:::-;;;;;;;16674:13;;16688:1;16674:16;;;;;;;:::i;:::-;;;;;;;16653:8;:38::i;:::-;16424:8;:281::i;:::-;16401:304;;16719:226;16757:4;16858:9;;16868:1;16858:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16888:10;;16899:1;16888:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16919:12;16719;:226::i;:::-;17104:187;17133:10;17161:27;17177:10;17161:15;:27::i;:::-;17206:10;;17217:1;17206:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17237:9;;17247:1;17237:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17267:7;;17275:1;17267:10;;;;;;;:::i;:::-;;;;;;;17104:11;:187::i;:::-;17306:161;17337:10;17365:27;17381:10;17365:15;:27::i;:::-;17410:10;;17421:1;17410:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17441:9;;17451:1;17441:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;17306:13;:161::i;:::-;-1:-1:-1;16155:3:108;;16113:1365;;;;15920:1564;;;;;;;;:::o;13464:106::-;13508:55;13523:10;13535:27;13551:10;13535:15;:27::i;:::-;13508:14;:55::i;:::-;13464:106::o;8786:1661::-;-1:-1:-1;;;;;;;;;;;3191:16:24;3202:4;3191:10;:16::i;:::-;-1:-1:-1;;;;;8978:25:108;::::1;;::::0;;;:17:::1;:25;::::0;;;;:41:::1;::::0;9008:10:::1;8978:29;:41::i;:::-;-1:-1:-1::0;9383:21:108::1;9407:5:::0;;:30:::1;::::0;-1:-1:-1;;;9407:30:108;;9431:4:::1;9407:30;::::0;::::1;11168:51:137::0;-1:-1:-1;;;;;9407:5:108;;::::1;::::0;:15:::1;::::0;11141:18:137;;9407:30:108::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9718:57;::::0;-1:-1:-1;;;9718:57:108;;9741:10:::1;9718:57;::::0;::::1;13820:51:137::0;9761:4:108::1;13887:18:137::0;;;13880:60;13956:18;;;13949:34;;;9383:54:108;;-1:-1:-1;;;;;;9718:22:108;::::1;::::0;::::1;::::0;13793:18:137;;9718:57:108::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;9908:22:108::1;9924:6:::0;9908:13;:22:::1;:::i;:::-;9874:5;::::0;:30:::1;::::0;-1:-1:-1;;;9874:30:108;;9898:4:::1;9874:30;::::0;::::1;11168:51:137::0;-1:-1:-1;;;;;9874:5:108;;::::1;::::0;:15:::1;::::0;11141:18:137;;9874:30:108::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;9870:114;;9951:33;;-1:-1:-1::0;;;9951:33:108::1;;;;;;;;;;;9870:114;10051:160;10074:6;10094:31;10118:6;10094:23;:31::i;:::-;10147:9;10171:10;10195:6;10051:9;:160::i;:::-;10376:9;-1:-1:-1::0;;;;;10286:154:108::1;10334:20;10347:6;10334:12;:20::i;:::-;10286:154;::::0;;10400:10:::1;12902:51:137::0;;12984:2;12969:18;;12962:34;;;-1:-1:-1;;;;;10286:154:108;::::1;::::0;::::1;::::0;12875:18:137;10286:154:108::1;;;;;;;8915:1532;8786:1661:::0;;;;:::o;6052:146::-;-1:-1:-1;;;;;6162:29:108;;6118:7;6162:29;;;:21;:29;;;;;;6144:47;;:15;:47;:::i;746:125::-;8870:21:25;4302:15;;-1:-1:-1;;;4302:15:25;;;;4301:16;;-1:-1:-1;;;;;4348:14:25;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:25;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:25;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:25;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:25;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:25;-1:-1:-1;;;5013:22:25;;;4979:67;810:30:108::1;:28;:30::i;:::-;850:5;:14:::0;;-1:-1:-1;;;;;;850:14:108::1;-1:-1:-1::0;;;;;850:14:108;::::1;;::::0;;5066:101:25;;;;5100:23;;-1:-1:-1;;;;5100:23:25;;;5142:14;;-1:-1:-1;13160:50:137;;5142:14:25;;13148:2:137;13133:18;5142:14:25;;;;;;;5066:101;4092:1081;;;;;746:125:108;:::o;877:336::-;1013:10;996:14;1033:29;;;:21;:29;;;;;:45;;;1089:118;1109:21;;;1089:118;;;1151:45;1182:10;;1193:1;1182:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1151:26:108;;;;;;:18;:26;;;;;;:30;:45::i;:::-;-1:-1:-1;1132:3:108;;1089:118;;5662:138:24;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;1219:522:108:-:0;-1:-1:-1;;;;;1514:26:108;;1457:27;1514:26;;;:18;:26;;;;;1301:16;;1457:27;1514:35;;:33;:35::i;:::-;-1:-1:-1;;;;;1487:72:108;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1487:72:108;;1457:102;;1574:9;1569:139;-1:-1:-1;;;;;1593:26:108;;;;;;:18;:26;;;;;:35;;:33;:35::i;:::-;1589:1;:39;1569:139;;;-1:-1:-1;;;;;1665:26:108;;;;;;:18;:26;;;;;:32;;1695:1;1665:29;:32::i;:::-;1649:10;1660:1;1649:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1649:48:108;;;:13;;;;;;;;;;;:48;1630:3;;1569:139;;19031:451;19312:9;19307:169;19327:20;;;19307:169;;;19400:65;19413:10;19425:9;;19435:1;19425:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19439:10;;19450:1;19439:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;19454:7;;19462:1;19454:10;;;;;;;:::i;:::-;;;;;;;19400:12;:65::i;:::-;19349:3;;19307:169;;;;19031:451;;;;;;:::o;3333:1270::-;3513:10;3564:27;3513:10;3564:19;:27::i;:::-;-1:-1:-1;;;;;3533:28:108;;;;;;:20;:28;;;;;:58;;;;3602:995;3622:20;;;3602:995;;;3663:17;3683:10;;3694:1;3683:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;3663:33;;3765:21;3789:129;3822:6;3846:1;3865:9;3892;;3902:1;3892:12;;;;;;;:::i;3789:129::-;3765:153;;4026:6;;4033:1;4026:9;;;;;;;:::i;:::-;;;;;;;4010:13;:25;4006:64;;;4044:26;;-1:-1:-1;;;4044:26:108;;;;;;;;;;;4006:64;4128:43;4158:9;;4168:1;4158:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4128:25:108;;;;;;:17;:25;;;;;;:29;:43::i;:::-;;4295:6;;4302:1;4295:9;;;;;;;:::i;:::-;;;;;;;4185:19;:27;4205:6;-1:-1:-1;;;;;4185:27:108;-1:-1:-1;;;;;4185:27:108;;;;;;;;;;;;:52;4213:23;4229:6;4213:15;:23::i;:::-;4185:52;;;;;;;;;;;:63;4238:9;-1:-1:-1;;;;;4185:63:108;-1:-1:-1;;;;;4185:63:108;;;;;;;;;;;;:107;4266:9;;4276:1;4266:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4185:107:108;;;;;;;;;;;;-1:-1:-1;4185:107:108;:119;4367:6;;4374:1;4367:9;;;;;;;:::i;:::-;-1:-1:-1;;;;;4318:31:108;;;;;;;:23;4367:9;4318:31;;;;;;;:34;;;;;;;;:45;;;;;;;;;;;:58;;4367:9;;;;;;;;;;4318:45;;-1:-1:-1;4318:58:108;;4367:9;;4318:58;:::i;:::-;;;;-1:-1:-1;4458:20:108;;-1:-1:-1;4493:13:108;4481:6;;4488:1;4481:9;;;;;;;:::i;:::-;;;;;;;:25;;;;:::i;:::-;4458:48;;4520:66;4541:4;4548:9;;4558:1;4548:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;4562:9;4573:12;4520;:66::i;:::-;-1:-1:-1;;;3644:3:108;;3602:995;;;;3486:1117;3333:1270;;;;;;:::o;4148:103:24:-;4214:30;4225:4;966:10:29;4214::24;:30::i;:::-;4148:103;:::o;9117:115:66:-;9180:7;9206:19;9214:3;4556:18;;4474:107;9574:156;9648:7;9698:22;9702:3;9714:5;9698:3;:22::i;7270:387:24:-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:24;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:24;;;;;;;;;:38;;-1:-1:-1;;7475:38:24;7509:4;7475:38;;;7559:12;966:10:29;;887:96;7559:12:24;-1:-1:-1;;;;;7532:40:24;7550:7;-1:-1:-1;;;;;7532:40:24;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7892:388;7970:4;-1:-1:-1;;;;;;;;;;;8059:22:24;8067:4;8073:7;8059;:22::i;:::-;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:24;;;;;;;;;;:39;;-1:-1:-1;;8097:39:24;;;8155:40;966:10:29;;8097:14:24;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;4599:312:26;4679:4;-1:-1:-1;;;;;4688:6:26;4671:23;;;:120;;;4785:6;-1:-1:-1;;;;;4749:42:26;:32;-1:-1:-1;;;;;;;;;;;2035:53:43;-1:-1:-1;;;;;2035:53:43;;1957:138;4749:32:26;-1:-1:-1;;;;;4749:42:26;;;4671:120;4654:251;;;4865:29;;-1:-1:-1;;;4865:29:26;;;;;;;;;;;965:103:110;2362:4:24;3191:16;2362:4;3191:10;:16::i;6052:538:26:-;6169:17;-1:-1:-1;;;;;6151:50:26;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6151:52:26;;;;;;;;-1:-1:-1;;6151:52:26;;;;;;;;;;;;:::i;:::-;;;6147:437;;6513:60;;-1:-1:-1;;;6513:60:26;;-1:-1:-1;;;;;11186:32:137;;6513:60:26;;;11168:51:137;11141:18;;6513:60:26;;;;;;;;6147:437;-1:-1:-1;;;;;;;;;;;6245:40:26;;6241:120;;6312:34;;-1:-1:-1;;;6312:34:26;;;;;1031:25:137;;;1004:18;;6312:34:26;885:177:137;6241:120:26;6374:54;6404:17;6423:4;6374:29;:54::i;5028:213::-;5102:4;-1:-1:-1;;;;;5111:6:26;5094:23;;5090:145;;5195:29;;-1:-1:-1;;;5195:29:26;;;;;;;;;;;5242:244:108;-1:-1:-1;;;;;5412:29:108;;;;;;;:21;:29;;;;;;;;:36;;;;;;;;:47;;;;;;;;;;:57;;;;;;;;;;;:67;;5473:6;;5412:29;:67;;5473:6;;5412:67;:::i;:::-;;;;-1:-1:-1;;;;;;;5242:244:108:o;606:103:110:-;6931:20:25;:18;:20::i;:::-;672:30:110::1;:28;:30::i;4609:309:108:-:0;-1:-1:-1;;;;;4777:27:108;;;;;;;:19;:27;;;;;;;;:34;;;;;;;;:45;;;;;;;;;;:55;;;;;;;;;;;:65;;4836:6;;4777:27;:65;;4836:6;;4777:65;:::i;:::-;;;;-1:-1:-1;;;;;;;4852:31:108;;;;;;;:23;:31;;;;;;;;:38;;;;;;;;:49;;;;;;;;;;;:59;;4905:6;;4852:31;:59;;4905:6;;4852:59;:::i;2557:104:64:-;2615:7;2645:1;2641;:5;:13;;2653:1;2641:13;;;-1:-1:-1;2649:1:64;;2557:104;-1:-1:-1;2557:104:64:o;17490:1535:108:-;17656:4;-1:-1:-1;;;;;17640:21:108;;;17636:1383;;17741:5;;-1:-1:-1;;;;;17733:27:108;;;17741:5;;17733:27;17729:456;;17829:5;;:32;;-1:-1:-1;;;17829:32:108;;-1:-1:-1;;;;;12920:32:137;;;17829::108;;;12902:51:137;12969:18;;;12962:34;;;17829:5:108;;;;:14;;12875:18:137;;17829:32:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17636:1383;;17729:456;17992:5;;:32;;-1:-1:-1;;;17992:32:108;;-1:-1:-1;;;;;12920:32:137;;;17992::108;;;12902:51:137;12969:18;;;12962:34;;;17992:5:108;;;;:13;;12875:18:137;;17992:32:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;18108:62:108;;-1:-1:-1;;;18108:62:108;;-1:-1:-1;;;;;12920:32:137;;;18108:62:108;;;12902:51:137;12969:18;;;12962:34;;;18108:44:108;;;;;12875:18:137;;18108:62:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17636:1383;;;18583:5;;-1:-1:-1;;;;;18575:27:108;;;18583:5;;18575:27;18571:438;;18671:5;;:42;;-1:-1:-1;;;18671:42:108;;-1:-1:-1;;;;;13838:32:137;;;18671:42:108;;;13820:51:137;13907:32;;;13887:18;;;13880:60;13956:18;;;13949:34;;;18671:5:108;;;;:18;;13793::137;;18671:42:108;13618:371:137;18571:438:108;18844:150;;-1:-1:-1;;;18844:150:108;;-1:-1:-1;;;;;13838:32:137;;;18844:150:108;;;13820:51:137;13907:32;;;13887:18;;;13880:60;13956:18;;;13949:34;;;18844:48:108;;;;;13793:18:137;;18844:150:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13877:803;14122:5;14100:19;14161:115;14190:6;14122:5;14235:9;14258:8;14161:15;:115::i;:::-;14137:139;;14385:6;14369:13;:22;14365:309;;;14407:163;14437:6;14461:11;14490:9;14517:8;14543:13;14407:12;:163::i;:::-;14365:309;;;14601:62;14614:6;14622:11;14635:9;14646:8;14656:6;14601:12;:62::i;15012:902::-;15219:21;15243:109;15272:6;15292:5;15311:9;15334:8;15243:15;:109::i;:::-;15219:133;-1:-1:-1;15362:19:108;15384:9;:5;15392:1;15384:9;:::i;:::-;15362:31;;15403:23;15429:117;15460:6;15480:11;15505:9;15528:8;15429:17;:117::i;:::-;15403:143;;15579:13;15561:15;:31;15557:351;;;-1:-1:-1;;;;;5915:29:108;;;;;;;:21;:29;;;;;;;;:36;;;;;;;;:47;;;;;;;;;;:57;;;;;;;;;:66;;;15735:162;5745:243;12697:761;12926:9;12921:383;-1:-1:-1;;;;;12945:25:108;;;;;;:17;:25;;;;;:34;;:32;:34::i;:::-;12941:1;:38;12921:383;;;-1:-1:-1;;;;;13019:25:108;;13000:16;13019:25;;;:17;:25;;;;;:31;;13048:1;13019:28;:31::i;:::-;13000:50;;13070:9;13065:229;-1:-1:-1;;;;;13089:26:108;;;;;;:18;:26;;;;;:35;;:33;:35::i;:::-;13085:1;:39;13065:229;;;-1:-1:-1;;;;;13169:26:108;;13149:17;13169:26;;;:18;:26;;;;;:32;;13199:1;13169:29;:32::i;:::-;13149:52;;13220:59;13238:6;13246:11;13259:9;13270:8;13220:17;:59::i;:::-;-1:-1:-1;13126:3:108;;13065:229;;;-1:-1:-1;;12981:3:108;;12921:383;;;-1:-1:-1;13384:15:108;:11;13398:1;13384:15;:::i;:::-;-1:-1:-1;;;;;13353:28:108;;;;;;:20;:28;;;;;;;:46;;;;13415:36;;;;;;13439:11;1031:25:137;;1019:2;1004:18;;885:177;13415:36:108;;;;;;;;12697:761;;:::o;8316:150:66:-;8386:4;8409:50;8414:3;-1:-1:-1;;;;;8434:23:66;;8409:4;:50::i;715:125:110:-;6931:20:25;:18;:20::i;:::-;791:42:110::1;2362:4:24;822:10:110;791;:42::i;4381:197:24:-:0;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:24;;-1:-1:-1;;;;;12920:32:137;;4514:47:24;;;12902:51:137;12969:18;;;12962:34;;;12875:18;;4514:47:24;12728:274:137;4923:118:66;4990:7;5016:3;:11;;5028:5;5016:18;;;;;;;;:::i;:::-;;;;;;;;;5009:25;;4923:118;;;;:::o;2779:335:43:-;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:43;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;2960:148::-;3079:18;:16;:18::i;7084:141:25:-;8870:21;8560:40;-1:-1:-1;;;8560:40:25;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:25;;;;;;;;;;;4924:312:108;-1:-1:-1;;;;;5095:27:108;;;;;;;:19;:27;;;;;;;;:34;;;;;;;;:45;;;;;;;;;;:55;;;;;;;;;;;:65;;5154:6;;5095:27;:65;;5154:6;;5095:65;:::i;:::-;;;;-1:-1:-1;;;;;;;5170:31:108;;;;;;;:23;:31;;;;;;;;:38;;;;;;;;:49;;;;;;;;;;;:59;;5223:6;;5170:31;:59;;5223:6;;5170:59;:::i;11351:1340::-;11596:19;11618:115;11647:6;11667:11;11692:9;11715:8;11618:15;:115::i;:::-;11596:137;-1:-1:-1;11743:21:108;11767:121;11798:6;11818:15;:11;11832:1;11818:15;:::i;:::-;11847:9;11870:8;11767:17;:121::i;:::-;11743:145;;11918:11;11902:13;:27;11898:85;;;-1:-1:-1;11961:11:108;11898:85;11992:17;12012:27;12026:13;12012:11;:27;:::i;:::-;11992:47;-1:-1:-1;12050:66:108;12060:6;12068:15;:11;12082:1;12068:15;:::i;:::-;12085:9;12096:8;12106:9;12050;:66::i;:::-;12450:63;12471:4;12478:8;12488:9;12499:13;12450:12;:63::i;:::-;12613:9;-1:-1:-1;;;;;12529:155:108;12588:11;12566:8;-1:-1:-1;;;;;12529:155:108;;12636:11;12661:13;12529:155;;;;;;15273:25:137;;;15329:2;15314:18;;15307:34;15261:2;15246:18;;15099:248;12529:155:108;;;;;;;;11499:1192;;;11351:1340;;;;:::o;2241:406:66:-;2304:4;4360:21;;;:14;;;:21;;;;;;2320:321;;-1:-1:-1;2362:23:66;;;;;;;;:11;:23;;;;;;;;;;;;;2544:18;;2520:21;;;:14;;;:21;;;;;;:42;;;;2576:11;;2320:321;-1:-1:-1;2625:5:66;2618:12;;2186:281:43;2263:17;-1:-1:-1;;;;;2263:29:43;;2296:1;2263:34;2259:119;;2320:47;;-1:-1:-1;;;2320:47:43;;-1:-1:-1;;;;;11186:32:137;;2320:47:43;;;11168:51:137;11141:18;;2320:47:43;11006:219:137;2259:119:43;-1:-1:-1;;;;;;;;;;;2387:73:43;;-1:-1:-1;;;;;;2387:73:43;-1:-1:-1;;;;;2387:73:43;;;;;;;;;;2186:281::o;4106:253:56:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:56;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:56:o;6598:122:43:-;6648:9;:13;6644:70;;6684:19;;-1:-1:-1;;;6684:19:43;;;;;;;;;;;4625:582:56;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:56;;;:23;5045:49;5041:119;;;5121:24;;-1:-1:-1;;;5121:24:56;;-1:-1:-1;;;;;11186:32:137;;5121:24:56;;;11168:51:137;11141:18;;5121:24:56;11006:219:137;5041:119:56;-1:-1:-1;5180:10:56;5173:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:56;;;;;;;;;;;14:286:137;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:137;;209:43;;199:71;;266:1;263;256:12;497:131;-1:-1:-1;;;;;572:31:137;;562:42;;552:70;;618:1;615;608:12;633:247;692:6;745:2;733:9;724:7;720:23;716:32;713:52;;;761:1;758;751:12;713:52;800:9;787:23;819:31;844:5;819:31;:::i;1067:226::-;1126:6;1179:2;1167:9;1158:7;1154:23;1150:32;1147:52;;;1195:1;1192;1185:12;1147:52;-1:-1:-1;1240:23:137;;1067:226;-1:-1:-1;1067:226:137:o;1480:637::-;1670:2;1682:21;;;1752:13;;1655:18;;;1774:22;;;1622:4;;1853:15;;;1827:2;1812:18;;;1622:4;1896:195;1910:6;1907:1;1904:13;1896:195;;;1975:13;;-1:-1:-1;;;;;1971:39:137;1959:52;;2040:2;2066:15;;;;2031:12;;;;2007:1;1925:9;1896:195;;;-1:-1:-1;2108:3:137;;1480:637;-1:-1:-1;;;;;1480:637:137:o;2122:367::-;2190:6;2198;2251:2;2239:9;2230:7;2226:23;2222:32;2219:52;;;2267:1;2264;2257:12;2219:52;2312:23;;;-1:-1:-1;2411:2:137;2396:18;;2383:32;2424:33;2383:32;2424:33;:::i;:::-;2476:7;2466:17;;;2122:367;;;;;:::o;2494:388::-;2562:6;2570;2623:2;2611:9;2602:7;2598:23;2594:32;2591:52;;;2639:1;2636;2629:12;2591:52;2678:9;2665:23;2697:31;2722:5;2697:31;:::i;:::-;2747:5;-1:-1:-1;2804:2:137;2789:18;;2776:32;2817:33;2776:32;2817:33;:::i;2887:127::-;2948:10;2943:3;2939:20;2936:1;2929:31;2979:4;2976:1;2969:15;3003:4;3000:1;2993:15;3019:1079;3096:6;3104;3157:2;3145:9;3136:7;3132:23;3128:32;3125:52;;;3173:1;3170;3163:12;3125:52;3212:9;3199:23;3231:31;3256:5;3231:31;:::i;:::-;3281:5;-1:-1:-1;3337:2:137;3322:18;;3309:32;-1:-1:-1;;;;;3353:30:137;;3350:50;;;3396:1;3393;3386:12;3350:50;3419:22;;3472:4;3464:13;;3460:27;-1:-1:-1;3450:55:137;;3501:1;3498;3491:12;3450:55;3541:2;3528:16;-1:-1:-1;;;;;3559:6:137;3556:30;3553:56;;;3589:18;;:::i;:::-;3638:2;3632:9;3730:2;3692:17;;-1:-1:-1;;3688:31:137;;;3721:2;3684:40;3680:54;3668:67;;-1:-1:-1;;;;;3750:34:137;;3786:22;;;3747:62;3744:88;;;3812:18;;:::i;:::-;3848:2;3841:22;3872;;;3913:15;;;3930:2;3909:24;3906:37;-1:-1:-1;3903:57:137;;;3956:1;3953;3946:12;3903:57;4012:6;4007:2;4003;3999:11;3994:2;3986:6;3982:15;3969:50;4065:1;4060:2;4051:6;4043;4039:19;4035:28;4028:39;4086:6;4076:16;;;;;3019:1079;;;;;:::o;4103:508::-;4180:6;4188;4196;4249:2;4237:9;4228:7;4224:23;4220:32;4217:52;;;4265:1;4262;4255:12;4217:52;4304:9;4291:23;4323:31;4348:5;4323:31;:::i;:::-;4373:5;-1:-1:-1;4451:2:137;4436:18;;4423:32;;-1:-1:-1;4533:2:137;4518:18;;4505:32;4546:33;4505:32;4546:33;:::i;:::-;4598:7;4588:17;;;4103:508;;;;;:::o;4616:::-;4693:6;4701;4709;4762:2;4750:9;4741:7;4737:23;4733:32;4730:52;;;4778:1;4775;4768:12;4730:52;4817:9;4804:23;4836:31;4861:5;4836:31;:::i;:::-;4886:5;-1:-1:-1;4943:2:137;4928:18;;4915:32;4956:33;4915:32;4956:33;:::i;:::-;4616:508;;5008:7;;-1:-1:-1;;;5088:2:137;5073:18;;;;5060:32;;4616:508::o;5129:650::-;5215:6;5223;5231;5239;5292:3;5280:9;5271:7;5267:23;5263:33;5260:53;;;5309:1;5306;5299:12;5260:53;5348:9;5335:23;5367:31;5392:5;5367:31;:::i;:::-;5417:5;-1:-1:-1;5495:2:137;5480:18;;5467:32;;-1:-1:-1;5577:2:137;5562:18;;5549:32;5590:33;5549:32;5590:33;:::i;:::-;5642:7;-1:-1:-1;5701:2:137;5686:18;;5673:32;5714:33;5673:32;5714:33;:::i;:::-;5129:650;;;;-1:-1:-1;5129:650:137;;-1:-1:-1;;5129:650:137:o;5784:529::-;5861:6;5869;5877;5930:2;5918:9;5909:7;5905:23;5901:32;5898:52;;;5946:1;5943;5936:12;5898:52;5985:9;5972:23;6004:31;6029:5;6004:31;:::i;:::-;6054:5;-1:-1:-1;6111:2:137;6096:18;;6083:32;6124:33;6083:32;6124:33;:::i;:::-;6176:7;-1:-1:-1;6235:2:137;6220:18;;6207:32;6248:33;6207:32;6248:33;:::i;6318:367::-;6381:8;6391:6;6445:3;6438:4;6430:6;6426:17;6422:27;6412:55;;6463:1;6460;6453:12;6412:55;-1:-1:-1;6486:20:137;;-1:-1:-1;;;;;6518:30:137;;6515:50;;;6561:1;6558;6551:12;6515:50;6598:4;6590:6;6586:17;6574:29;;6658:3;6651:4;6641:6;6638:1;6634:14;6626:6;6622:27;6618:38;6615:47;6612:67;;;6675:1;6672;6665:12;6612:67;6318:367;;;;;:::o;6690:1431::-;6884:6;6892;6900;6908;6916;6924;6932;6940;6993:3;6981:9;6972:7;6968:23;6964:33;6961:53;;;7010:1;7007;7000:12;6961:53;7050:9;7037:23;-1:-1:-1;;;;;7075:6:137;7072:30;7069:50;;;7115:1;7112;7105:12;7069:50;7154:70;7216:7;7207:6;7196:9;7192:22;7154:70;:::i;:::-;7243:8;;-1:-1:-1;7128:96:137;-1:-1:-1;;7331:2:137;7316:18;;7303:32;-1:-1:-1;;;;;7347:32:137;;7344:52;;;7392:1;7389;7382:12;7344:52;7431:72;7495:7;7484:8;7473:9;7469:24;7431:72;:::i;:::-;7522:8;;-1:-1:-1;7405:98:137;-1:-1:-1;;7610:2:137;7595:18;;7582:32;-1:-1:-1;;;;;7626:32:137;;7623:52;;;7671:1;7668;7661:12;7623:52;7710:72;7774:7;7763:8;7752:9;7748:24;7710:72;:::i;:::-;7801:8;;-1:-1:-1;7684:98:137;-1:-1:-1;;7889:2:137;7874:18;;7861:32;-1:-1:-1;;;;;7905:32:137;;7902:52;;;7950:1;7947;7940:12;7902:52;7989:72;8053:7;8042:8;8031:9;8027:24;7989:72;:::i;:::-;6690:1431;;;;-1:-1:-1;6690:1431:137;;-1:-1:-1;6690:1431:137;;;;;;8080:8;-1:-1:-1;;;6690:1431:137:o;8126:418::-;8275:2;8264:9;8257:21;8238:4;8307:6;8301:13;8350:6;8345:2;8334:9;8330:18;8323:34;8409:6;8404:2;8396:6;8392:15;8387:2;8376:9;8372:18;8366:50;8465:1;8460:2;8451:6;8440:9;8436:22;8432:31;8425:42;8535:2;8528;8524:7;8519:2;8511:6;8507:15;8503:29;8492:9;8488:45;8484:54;8476:62;;;8126:418;;;;:::o;9346:551::-;9441:6;9449;9457;9510:2;9498:9;9489:7;9485:23;9481:32;9478:52;;;9526:1;9523;9516:12;9478:52;9571:23;;;-1:-1:-1;9669:2:137;9654:18;;9641:32;-1:-1:-1;;;;;9685:30:137;;9682:50;;;9728:1;9725;9718:12;9682:50;9767:70;9829:7;9820:6;9809:9;9805:22;9767:70;:::i;:::-;9346:551;;9856:8;;-1:-1:-1;9741:96:137;;-1:-1:-1;;;;9346:551:137:o;9902:1099::-;10060:6;10068;10076;10084;10092;10100;10153:2;10141:9;10132:7;10128:23;10124:32;10121:52;;;10169:1;10166;10159:12;10121:52;10209:9;10196:23;-1:-1:-1;;;;;10234:6:137;10231:30;10228:50;;;10274:1;10271;10264:12;10228:50;10313:70;10375:7;10366:6;10355:9;10351:22;10313:70;:::i;:::-;10402:8;;-1:-1:-1;10287:96:137;-1:-1:-1;;10490:2:137;10475:18;;10462:32;-1:-1:-1;;;;;10506:32:137;;10503:52;;;10551:1;10548;10541:12;10503:52;10590:72;10654:7;10643:8;10632:9;10628:24;10590:72;:::i;:::-;10681:8;;-1:-1:-1;10564:98:137;-1:-1:-1;;10769:2:137;10754:18;;10741:32;-1:-1:-1;;;;;10785:32:137;;10782:52;;;10830:1;10827;10820:12;10782:52;10869:72;10933:7;10922:8;10911:9;10907:24;10869:72;:::i;:::-;9902:1099;;;;-1:-1:-1;9902:1099:137;;-1:-1:-1;9902:1099:137;;10960:8;;9902:1099;-1:-1:-1;;;9902:1099:137:o;12334:127::-;12395:10;12390:3;12386:20;12383:1;12376:31;12426:4;12423:1;12416:15;12450:4;12447:1;12440:15;12466:127;12527:10;12522:3;12518:20;12515:1;12508:31;12558:4;12555:1;12548:15;12582:4;12579:1;12572:15;12598:125;12663:9;;;12684:10;;;12681:36;;;12697:18;;:::i;13429:184::-;13499:6;13552:2;13540:9;13531:7;13527:23;13523:32;13520:52;;;13568:1;13565;13558:12;13520:52;-1:-1:-1;13591:16:137;;13429:184;-1:-1:-1;13429:184:137:o;13994:277::-;14061:6;14114:2;14102:9;14093:7;14089:23;14085:32;14082:52;;;14130:1;14127;14120:12;14082:52;14162:9;14156:16;14215:5;14208:13;14201:21;14194:5;14191:32;14181:60;;14237:1;14234;14227:12;14276:217;14316:1;14342;14332:132;;14386:10;14381:3;14377:20;14374:1;14367:31;14421:4;14418:1;14411:15;14449:4;14446:1;14439:15;14332:132;-1:-1:-1;14478:9:137;;14276:217::o;14498:128::-;14565:9;;;14586:11;;;14583:37;;;14600:18;;:::i;15352:301::-;15481:3;15519:6;15513:13;15565:6;15558:4;15550:6;15546:17;15541:3;15535:37;15627:1;15591:16;;15616:13;;;-1:-1:-1;15591:16:137;15352:301;-1:-1:-1;15352:301:137:o","linkReferences":{},"immutableReferences":{"39659":[{"start":6647,"length":32},{"start":6688,"length":32},{"start":7014,"length":32}]}},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","WHITELIST_ROLE()":"7a997ab7","acceptGenesisCeremony()":"92a2ebf3","currentEpochByDomain(address)":"0a0b1b64","domainGenesisAccepted(address)":"d1ba90ff","epochDurationByDomain(address)":"3bccf635","epochStakesByDomain(address,uint256,address,address)":"c0b95ab8","epochTotalStakeByDomain(address,uint256,address)":"54300d7a","epochUnstakesByDomain(address,uint256,address,address)":"65f1ea20","getAttestersByDomain(address)":"2924b73b","getCurrentEpoch(address)":"4d3223a5","getCurrentEpochStake(address,address,address)":"70224360","getCurrentEpochUnstake(address,address,address)":"7667b76d","getCustodiansByDomain(address)":"d5ca03de","getEpochByBlockTime(address)":"c3471ff8","getNextEpoch(address)":"8489e580","getNextEpochByBlockTime(address)":"2c7785a8","getRoleAdmin(bytes32)":"248a9ca3","getStakeAtEpoch(address,uint256,address,address)":"8d908258","getTotalStakeForCurrentEpoch(address,address)":"44198e4d","getTotalStakeForEpoch(address,uint256,address)":"5cdf3155","getUnstakeAtEpoch(address,uint256,address,address)":"879b938b","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize()":"8129fc1c","initialize(address)":"c4d66de8","proxiableUUID()":"52d1902d","registerDomain(uint256,address[])":"d37304f8","removeAddressFromWhitelist(address)":"286dd3f5","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","reward(address[],uint256[],address[])":"da33ee7f","rollOverEpoch()":"a887b71c","setGenesisCeremony(address[],address[],uint256[])":"ff62787c","slash(address[],address[],uint256[],uint256[])":"a885c975","stake(address,address,uint256)":"bf6eac2f","supportsInterface(bytes4)":"01ffc9a7","token()":"fc0c546a","unstake(address,address,uint256)":"60829f8a","upgradeToAndCall(address,bytes)":"4f1ef286","whitelistAddress(address)":"41566585"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodianTransferAmountMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GenesisAlreadyAccepted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakeExceedsGenesisStake\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unstake\",\"type\":\"uint256\"}],\"name\":\"AttesterEpochRolledOver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"name\":\"AttesterStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"name\":\"AttesterUnstaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"EpochRolledOver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WHITELIST_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"currentEpochByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentEpoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"domainGenesisAccepted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"epochDurationByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochDuration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"epochStakesByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"epochTotalStakeByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"epochUnstakesByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getAttestersByDomain\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getCurrentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getCurrentEpochStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getCurrentEpochUnstake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getCustodiansByDomain\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getEpochByBlockTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getNextEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getNextEpochByBlockTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStakeAtEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getTotalStakeForCurrentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getTotalStakeForEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getUnstakeAtEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epochDuration\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"}],\"name\":\"registerDomain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"removeAddressFromWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"}],\"name\":\"reward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollOverEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"stakes\",\"type\":\"uint256[]\"}],\"name\":\"setGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"refundAmounts\",\"type\":\"uint256[]\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"whitelistAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize()\":{\"details\":\"Initialize the contract\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/staking/MovementStaking.sol\":\"MovementStaking\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194\",\"dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"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/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040\",\"dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt\"]},\"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/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"]},\"src/staking/MovementStaking.sol\":{\"keccak256\":\"0xc8a4e4541fefdf79e699e0a0ab1de5cf5e247e1bcc5758dd03456f287a2f4806\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://2904e448c31814b10e9de4751d0efdfbd72f3fc7465944869933afe5c29a10b1\",\"dweb:/ipfs/QmZxXrs7AY2kCQVSB6em8osNZTYorwVX5dfcisUTYcqAkN\"]},\"src/staking/MovementStakingStorage.sol\":{\"keccak256\":\"0x9ca2df17c7dec2b75cc96453c60ef64a570ae1adf429d1a92e879127616af4af\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0d53c127b022fd35429ea183b0f1882bb03a62ed4e7e8e79f7058421fe49a947\",\"dweb:/ipfs/QmUMhEebucKiE2MedG9B18vcJMozwQ8yQFwV364Lnrjjej\"]},\"src/staking/base/BaseStaking.sol\":{\"keccak256\":\"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46\",\"dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx\"]},\"src/staking/interfaces/IMovementStaking.sol\":{\"keccak256\":\"0x23a7eca75e0fd004a60f17f88e0a0a011e135a3e666f5853276e3715f64a7f30\",\"urls\":[\"bzz-raw://43f792aa3c470a609ef6f7ab6578123453a4e205e0654dd2fa7d4a25356d76a0\",\"dweb:/ipfs/QmdGb1yzNehEUsWDyeA5BbtF9CJrbJzyng6CRhbBs3xsJ5\"]},\"src/token/base/BaseToken.sol\":{\"keccak256\":\"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e\",\"dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd\"]},\"src/token/base/MintableToken.sol\":{\"keccak256\":\"0x67dcaae55138dda0f6fb9cce7d00b21b1dcf48144d0442073bec83aedbd73ca6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009d22618ed30e84b0839edbe7bd1a18afe7073a62477667bf96d765428385b7\",\"dweb:/ipfs/QmNzA9RjM6SxVJYWohq7JbLvyBrhzzjzQQwBfArBQqCNAQ\"]},\"src/token/base/WrappedToken.sol\":{\"keccak256\":\"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885\",\"dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4\"]},\"src/token/base/WrappedTokenStorage.sol\":{\"keccak256\":\"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08\",\"dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj\"]},\"src/token/custodian/CustodianToken.sol\":{\"keccak256\":\"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04\",\"dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"CustodianTransferAmountMismatch"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[],"type":"error","name":"GenesisAlreadyAccepted"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"StakeExceedsGenesisStake"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"address","name":"attester","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false},{"internalType":"uint256","name":"unstake","type":"uint256","indexed":false}],"type":"event","name":"AttesterEpochRolledOver","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"address","name":"attester","type":"address","indexed":false},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false}],"type":"event","name":"AttesterStaked","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"address","name":"attester","type":"address","indexed":false},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false}],"type":"event","name":"AttesterUnstaked","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":false}],"type":"event","name":"EpochRolledOver","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"WHITELIST_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptGenesisCeremony"},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"currentEpochByDomain","outputs":[{"internalType":"uint256","name":"currentEpoch","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"domainGenesisAccepted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"epochDurationByDomain","outputs":[{"internalType":"uint256","name":"epochDuration","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"epochStakesByDomain","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"epochTotalStakeByDomain","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"epochUnstakesByDomain","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getAttestersByDomain","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getCurrentEpochStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getCurrentEpochUnstake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodiansByDomain","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getEpochByBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getNextEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getNextEpochByBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStakeAtEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getTotalStakeForCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getTotalStakeForEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getUnstakeAtEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epochDuration","type":"uint256"},{"internalType":"address[]","name":"custodians","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"registerDomain"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"removeAddressFromWhitelist"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address[]","name":"custodians","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"reward"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"rollOverEpoch"},{"inputs":[{"internalType":"address[]","name":"custodians","type":"address[]"},{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"stakes","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"setGenesisCeremony"},{"inputs":[{"internalType":"address[]","name":"custodians","type":"address[]"},{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"refundAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"slash"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"contract IERC20","name":"custodian","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"stake"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"unstake"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"whitelistAddress"}],"devdoc":{"kind":"dev","methods":{"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize()":{"details":"Initialize the contract"},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/staking/MovementStaking.sol":"MovementStaking"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/forge-std/src/console.sol":{"keccak256":"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a","urls":["bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194","dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"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/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53","urls":["bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930","dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f","urls":["bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040","dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt"],"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/introspection/ERC165Upgradeable.sol":{"keccak256":"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8","urls":["bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45","dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c","urls":["bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba","dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c","urls":["bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9","dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65","urls":["bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a","dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"],"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/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386","urls":["bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0","dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa","urls":["bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1","dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA"],"license":"MIT"},"src/staking/MovementStaking.sol":{"keccak256":"0xc8a4e4541fefdf79e699e0a0ab1de5cf5e247e1bcc5758dd03456f287a2f4806","urls":["bzz-raw://2904e448c31814b10e9de4751d0efdfbd72f3fc7465944869933afe5c29a10b1","dweb:/ipfs/QmZxXrs7AY2kCQVSB6em8osNZTYorwVX5dfcisUTYcqAkN"],"license":"UNLICENSED"},"src/staking/MovementStakingStorage.sol":{"keccak256":"0x9ca2df17c7dec2b75cc96453c60ef64a570ae1adf429d1a92e879127616af4af","urls":["bzz-raw://0d53c127b022fd35429ea183b0f1882bb03a62ed4e7e8e79f7058421fe49a947","dweb:/ipfs/QmUMhEebucKiE2MedG9B18vcJMozwQ8yQFwV364Lnrjjej"],"license":"UNLICENSED"},"src/staking/base/BaseStaking.sol":{"keccak256":"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393","urls":["bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46","dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx"],"license":"MIT"},"src/staking/interfaces/IMovementStaking.sol":{"keccak256":"0x23a7eca75e0fd004a60f17f88e0a0a011e135a3e666f5853276e3715f64a7f30","urls":["bzz-raw://43f792aa3c470a609ef6f7ab6578123453a4e205e0654dd2fa7d4a25356d76a0","dweb:/ipfs/QmdGb1yzNehEUsWDyeA5BbtF9CJrbJzyng6CRhbBs3xsJ5"],"license":null},"src/token/base/BaseToken.sol":{"keccak256":"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2","urls":["bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e","dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd"],"license":"MIT"},"src/token/base/MintableToken.sol":{"keccak256":"0x67dcaae55138dda0f6fb9cce7d00b21b1dcf48144d0442073bec83aedbd73ca6","urls":["bzz-raw://009d22618ed30e84b0839edbe7bd1a18afe7073a62477667bf96d765428385b7","dweb:/ipfs/QmNzA9RjM6SxVJYWohq7JbLvyBrhzzjzQQwBfArBQqCNAQ"],"license":"MIT"},"src/token/base/WrappedToken.sol":{"keccak256":"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45","urls":["bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885","dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4"],"license":"MIT"},"src/token/base/WrappedTokenStorage.sol":{"keccak256":"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e","urls":["bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08","dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj"],"license":"MIT"},"src/token/custodian/CustodianToken.sol":{"keccak256":"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350","urls":["bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04","dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":56292,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"token","offset":0,"slot":"0","type":"t_contract(IERC20)43663"},{"astId":56296,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochDurationByDomain","offset":0,"slot":"1","type":"t_mapping(t_address,t_uint256)"},{"astId":56300,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"currentEpochByDomain","offset":0,"slot":"2","type":"t_mapping(t_address,t_uint256)"},{"astId":56305,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"attestersByDomain","offset":0,"slot":"3","type":"t_mapping(t_address,t_struct(AddressSet)46651_storage)"},{"astId":56310,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"custodiansByDomain","offset":0,"slot":"4","type":"t_mapping(t_address,t_struct(AddressSet)46651_storage)"},{"astId":56320,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochStakesByDomain","offset":0,"slot":"5","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))"},{"astId":56330,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochUnstakesByDomain","offset":0,"slot":"6","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))"},{"astId":56338,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochTotalStakeByDomain","offset":0,"slot":"7","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_uint256)))"},{"astId":56342,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"domainGenesisAccepted","offset":0,"slot":"8","type":"t_mapping(t_address,t_bool)"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_bytes32)dyn_storage":{"encoding":"dynamic_array","label":"bytes32[]","numberOfBytes":"32","base":"t_bytes32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IERC20)43663":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))"},"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_uint256)))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => mapping(address => uint256)))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},"t_mapping(t_address,t_struct(AddressSet)46651_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct EnumerableSet.AddressSet)","numberOfBytes":"32","value":"t_struct(AddressSet)46651_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => mapping(address => uint256)))","numberOfBytes":"32","value":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},"t_mapping(t_uint256,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_struct(AddressSet)46651_storage":{"encoding":"inplace","label":"struct EnumerableSet.AddressSet","numberOfBytes":"64","members":[{"astId":46650,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_inner","offset":0,"slot":"0","type":"t_struct(Set)46336_storage"}]},"t_struct(Set)46336_storage":{"encoding":"inplace","label":"struct EnumerableSet.Set","numberOfBytes":"64","members":[{"astId":46331,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_values","offset":0,"slot":"0","type":"t_array(t_bytes32)dyn_storage"},{"astId":46335,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_positions","offset":0,"slot":"1","type":"t_mapping(t_bytes32,t_uint256)"}]},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/staking/MovementStaking.sol","id":56273,"exportedSymbols":{"BaseStaking":[56403],"EnumerableSet":[46938],"ICustodianToken":[57304],"IERC20":[43663],"IMovementStaking":[56638],"Math":[46220],"MovementStaking":[56272],"MovementStakingStorage":[56348],"SafeERC20":[44015],"console":[24306]},"nodeType":"SourceUnit","src":"39:19749:108","nodes":[{"id":54871,"nodeType":"PragmaDirective","src":"39:24:108","nodes":[],"literals":["solidity","^","0.8",".13"]},{"id":54872,"nodeType":"ImportDirective","src":"64:31:108","nodes":[],"absolutePath":"lib/forge-std/src/console.sol","file":"forge-std/console.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":24307,"symbolAliases":[],"unitAlias":""},{"id":54874,"nodeType":"ImportDirective","src":"96:51:108","nodes":[],"absolutePath":"src/staking/base/BaseStaking.sol","file":"./base/BaseStaking.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":56404,"symbolAliases":[{"foreign":{"id":54873,"name":"BaseStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56403,"src":"104:11:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54876,"nodeType":"ImportDirective","src":"148:82:108","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":44016,"symbolAliases":[{"foreign":{"id":54875,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44015,"src":"156:9:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54878,"nodeType":"ImportDirective","src":"231:69:108","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol","file":"@openzeppelin/contracts/interfaces/IERC20.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":42721,"symbolAliases":[{"foreign":{"id":54877,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43663,"src":"239:6:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54880,"nodeType":"ImportDirective","src":"301:70:108","nodes":[],"absolutePath":"src/token/custodian/CustodianToken.sol","file":"../token/custodian/CustodianToken.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":57640,"symbolAliases":[{"foreign":{"id":54879,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57304,"src":"309:15:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54882,"nodeType":"ImportDirective","src":"372:65:108","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/math/Math.sol","file":"@openzeppelin/contracts/utils/math/Math.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":46221,"symbolAliases":[{"foreign":{"id":54881,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46220,"src":"380:4:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54885,"nodeType":"ImportDirective","src":"438:83:108","nodes":[],"absolutePath":"src/staking/MovementStakingStorage.sol","file":"./MovementStakingStorage.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":56349,"symbolAliases":[{"foreign":{"id":54883,"name":"MovementStakingStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56348,"src":"446:22:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":54884,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46938,"src":"470:13:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":54887,"nodeType":"ImportDirective","src":"522:67:108","nodes":[],"absolutePath":"src/staking/interfaces/IMovementStaking.sol","file":"./interfaces/IMovementStaking.sol","nameLocation":"-1:-1:-1","scope":56273,"sourceUnit":56639,"symbolAliases":[{"foreign":{"id":54886,"name":"IMovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56638,"src":"530:16:108","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":56272,"nodeType":"ContractDefinition","src":"591:19196:108","nodes":[{"id":54897,"nodeType":"UsingForDirective","src":"691:49:108","nodes":[],"global":false,"libraryName":{"id":54894,"name":"EnumerableSet","nameLocations":["697:13:108"],"nodeType":"IdentifierPath","referencedDeclaration":46938,"src":"697:13:108"},"typeName":{"id":54896,"nodeType":"UserDefinedTypeName","pathNode":{"id":54895,"name":"EnumerableSet.AddressSet","nameLocations":["715:13:108","729:10:108"],"nodeType":"IdentifierPath","referencedDeclaration":46651,"src":"715:24:108"},"referencedDeclaration":46651,"src":"715:24:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},{"id":54913,"nodeType":"FunctionDefinition","src":"746:125:108","nodes":[],"body":{"id":54912,"nodeType":"Block","src":"800:71:108","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":54905,"name":"__BaseStaking_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56391,"src":"810:28:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":54906,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"810:30:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":54907,"nodeType":"ExpressionStatement","src":"810:30:108"},{"expression":{"id":54910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":54908,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"850:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54909,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54900,"src":"858:6:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"src":"850:14:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":54911,"nodeType":"ExpressionStatement","src":"850:14:108"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":54903,"kind":"modifierInvocation","modifierName":{"id":54902,"name":"initializer","nameLocations":["788:11:108"],"nodeType":"IdentifierPath","referencedDeclaration":39493,"src":"788:11:108"},"nodeType":"ModifierInvocation","src":"788:11:108"}],"name":"initialize","nameLocation":"755:10:108","parameters":{"id":54901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54900,"mutability":"mutable","name":"_token","nameLocation":"773:6:108","nodeType":"VariableDeclaration","scope":54913,"src":"766:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"},"typeName":{"id":54899,"nodeType":"UserDefinedTypeName","pathNode":{"id":54898,"name":"IERC20","nameLocations":["766:6:108"],"nodeType":"IdentifierPath","referencedDeclaration":43663,"src":"766:6:108"},"referencedDeclaration":43663,"src":"766:6:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"765:15:108"},"returnParameters":{"id":54904,"nodeType":"ParameterList","parameters":[],"src":"800:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":54955,"nodeType":"FunctionDefinition","src":"877:336:108","nodes":[],"body":{"id":54954,"nodeType":"Block","src":"986:227:108","nodes":[],"statements":[{"assignments":[54922],"declarations":[{"constant":false,"id":54922,"mutability":"mutable","name":"domain","nameLocation":"1004:6:108","nodeType":"VariableDeclaration","scope":54954,"src":"996:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54921,"name":"address","nodeType":"ElementaryTypeName","src":"996:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":54925,"initialValue":{"expression":{"id":54923,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1013:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":54924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1017:6:108","memberName":"sender","nodeType":"MemberAccess","src":"1013:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"996:27:108"},{"expression":{"id":54930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":54926,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56296,"src":"1033:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":54928,"indexExpression":{"id":54927,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54922,"src":"1055:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1033:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":54929,"name":"epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54915,"src":"1065:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1033:45:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54931,"nodeType":"ExpressionStatement","src":"1033:45:108"},{"body":{"id":54952,"nodeType":"Block","src":"1137:70:108","statements":[{"expression":{"arguments":[{"baseExpression":{"id":54947,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54918,"src":"1182:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":54949,"indexExpression":{"id":54948,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54933,"src":"1193:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1182:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":54943,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"1151:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":54945,"indexExpression":{"id":54944,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54922,"src":"1170:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1151:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":54946,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1178:3:108","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":46678,"src":"1151:30:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$46651_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":54950,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1151:45:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54951,"nodeType":"ExpressionStatement","src":"1151:45:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54939,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54936,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54933,"src":"1109:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":54937,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54918,"src":"1113:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":54938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1124:6:108","memberName":"length","nodeType":"MemberAccess","src":"1113:17:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1109:21:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":54953,"initializationExpression":{"assignments":[54933],"declarations":[{"constant":false,"id":54933,"mutability":"mutable","name":"i","nameLocation":"1102:1:108","nodeType":"VariableDeclaration","scope":54953,"src":"1094:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54932,"name":"uint256","nodeType":"ElementaryTypeName","src":"1094:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54935,"initialValue":{"hexValue":"30","id":54934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1106:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1094:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":54941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1132:3:108","subExpression":{"id":54940,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54933,"src":"1132:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54942,"nodeType":"ExpressionStatement","src":"1132:3:108"},"nodeType":"ForStatement","src":"1089:118:108"}]},"baseFunctions":[56415],"functionSelector":"d37304f8","implemented":true,"kind":"function","modifiers":[],"name":"registerDomain","nameLocation":"886:14:108","parameters":{"id":54919,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54915,"mutability":"mutable","name":"epochDuration","nameLocation":"918:13:108","nodeType":"VariableDeclaration","scope":54955,"src":"910:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54914,"name":"uint256","nodeType":"ElementaryTypeName","src":"910:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":54918,"mutability":"mutable","name":"custodians","nameLocation":"960:10:108","nodeType":"VariableDeclaration","scope":54955,"src":"941:29:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54916,"name":"address","nodeType":"ElementaryTypeName","src":"941:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54917,"nodeType":"ArrayTypeName","src":"941:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"900:76:108"},"returnParameters":{"id":54920,"nodeType":"ParameterList","parameters":[],"src":"986:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55008,"nodeType":"FunctionDefinition","src":"1219:522:108","nodes":[],"body":{"id":55007,"nodeType":"Block","src":"1319:422:108","nodes":[],"statements":[{"assignments":[54967],"declarations":[{"constant":false,"id":54967,"mutability":"mutable","name":"custodians","nameLocation":"1474:10:108","nodeType":"VariableDeclaration","scope":55007,"src":"1457:27:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54965,"name":"address","nodeType":"ElementaryTypeName","src":"1457:7:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54966,"nodeType":"ArrayTypeName","src":"1457:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":54977,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":54971,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"1514:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":54973,"indexExpression":{"id":54972,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54957,"src":"1533:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1514:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":54974,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1541:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"1514:33:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":54975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1514:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":54970,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1487:13:108","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":54968,"name":"address","nodeType":"ElementaryTypeName","src":"1491:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54969,"nodeType":"ArrayTypeName","src":"1491:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":54976,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1487:72:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1457:102:108"},{"body":{"id":55003,"nodeType":"Block","src":"1635:73:108","statements":[{"expression":{"id":55001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":54992,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54967,"src":"1649:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":54994,"indexExpression":{"id":54993,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54979,"src":"1660:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1649:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":54999,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54979,"src":"1695:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":54995,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"1665:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":54997,"indexExpression":{"id":54996,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54957,"src":"1684:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1665:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":54998,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1692:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"1665:29:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55000,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1665:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1649:48:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55002,"nodeType":"ExpressionStatement","src":"1649:48:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":54988,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":54982,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54979,"src":"1589:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":54983,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"1593:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":54985,"indexExpression":{"id":54984,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54957,"src":"1612:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1593:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":54986,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1620:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"1593:33:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":54987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1593:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1589:39:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55004,"initializationExpression":{"assignments":[54979],"declarations":[{"constant":false,"id":54979,"mutability":"mutable","name":"i","nameLocation":"1582:1:108","nodeType":"VariableDeclaration","scope":55004,"src":"1574:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":54978,"name":"uint256","nodeType":"ElementaryTypeName","src":"1574:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":54981,"initialValue":{"hexValue":"30","id":54980,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1586:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1574:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":54990,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1630:3:108","subExpression":{"id":54989,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54979,"src":"1630:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":54991,"nodeType":"ExpressionStatement","src":"1630:3:108"},"nodeType":"ForStatement","src":"1569:139:108"},{"expression":{"id":55005,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":54967,"src":"1724:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":54962,"id":55006,"nodeType":"Return","src":"1717:17:108"}]},"baseFunctions":[56553],"functionSelector":"d5ca03de","implemented":true,"kind":"function","modifiers":[],"name":"getCustodiansByDomain","nameLocation":"1228:21:108","parameters":{"id":54958,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54957,"mutability":"mutable","name":"domain","nameLocation":"1267:6:108","nodeType":"VariableDeclaration","scope":55008,"src":"1259:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":54956,"name":"address","nodeType":"ElementaryTypeName","src":"1259:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1249:30:108"},"returnParameters":{"id":54962,"nodeType":"ParameterList","parameters":[{"constant":false,"id":54961,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55008,"src":"1301:16:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":54959,"name":"address","nodeType":"ElementaryTypeName","src":"1301:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":54960,"nodeType":"ArrayTypeName","src":"1301:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1300:18:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55061,"nodeType":"FunctionDefinition","src":"1747:387:108","nodes":[],"body":{"id":55060,"nodeType":"Block","src":"1846:288:108","nodes":[],"statements":[{"assignments":[55020],"declarations":[{"constant":false,"id":55020,"mutability":"mutable","name":"attesters","nameLocation":"1873:9:108","nodeType":"VariableDeclaration","scope":55060,"src":"1856:26:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55018,"name":"address","nodeType":"ElementaryTypeName","src":"1856:7:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55019,"nodeType":"ArrayTypeName","src":"1856:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":55030,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55024,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"1912:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55026,"indexExpression":{"id":55025,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55010,"src":"1930:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1912:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55027,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1938:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"1912:32:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1912:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55023,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1885:13:108","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":55021,"name":"address","nodeType":"ElementaryTypeName","src":"1889:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55022,"nodeType":"ArrayTypeName","src":"1889:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":55029,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1885:71:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1856:100:108"},{"body":{"id":55056,"nodeType":"Block","src":"2031:71:108","statements":[{"expression":{"id":55054,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55045,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55020,"src":"2045:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":55047,"indexExpression":{"id":55046,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55032,"src":"2055:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2045:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55052,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55032,"src":"2089:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55048,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"2060:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55050,"indexExpression":{"id":55049,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55010,"src":"2078:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2060:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55051,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2086:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"2060:28:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55053,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2060:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2045:46:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55055,"nodeType":"ExpressionStatement","src":"2045:46:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55035,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55032,"src":"1986:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55036,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"1990:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55038,"indexExpression":{"id":55037,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55010,"src":"2008:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1990:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55039,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2016:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"1990:32:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55040,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1990:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1986:38:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55057,"initializationExpression":{"assignments":[55032],"declarations":[{"constant":false,"id":55032,"mutability":"mutable","name":"i","nameLocation":"1979:1:108","nodeType":"VariableDeclaration","scope":55057,"src":"1971:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55031,"name":"uint256","nodeType":"ElementaryTypeName","src":"1971:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55034,"initialValue":{"hexValue":"30","id":55033,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1983:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1971:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2026:3:108","subExpression":{"id":55042,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55032,"src":"2026:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55044,"nodeType":"ExpressionStatement","src":"2026:3:108"},"nodeType":"ForStatement","src":"1966:136:108"},{"expression":{"id":55058,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55020,"src":"2118:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":55015,"id":55059,"nodeType":"Return","src":"2111:16:108"}]},"baseFunctions":[56561],"functionSelector":"2924b73b","implemented":true,"kind":"function","modifiers":[],"name":"getAttestersByDomain","nameLocation":"1756:20:108","parameters":{"id":55011,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55010,"mutability":"mutable","name":"domain","nameLocation":"1794:6:108","nodeType":"VariableDeclaration","scope":55061,"src":"1786:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55009,"name":"address","nodeType":"ElementaryTypeName","src":"1786:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1776:30:108"},"returnParameters":{"id":55015,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55014,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55061,"src":"1828:16:108","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55012,"name":"address","nodeType":"ElementaryTypeName","src":"1828:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55013,"nodeType":"ArrayTypeName","src":"1828:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1827:18:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55160,"nodeType":"FunctionDefinition","src":"2140:1187:108","nodes":[],"body":{"id":55159,"nodeType":"Block","src":"2180:1147:108","nodes":[],"statements":[{"assignments":[55065],"declarations":[{"constant":false,"id":55065,"mutability":"mutable","name":"domain","nameLocation":"2198:6:108","nodeType":"VariableDeclaration","scope":55159,"src":"2190:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55064,"name":"address","nodeType":"ElementaryTypeName","src":"2190:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55068,"initialValue":{"expression":{"id":55066,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2207:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55067,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2211:6:108","memberName":"sender","nodeType":"MemberAccess","src":"2207:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2190:27:108"},{"condition":{"baseExpression":{"id":55069,"name":"domainGenesisAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56342,"src":"2231:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55071,"indexExpression":{"id":55070,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2253:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2231:29:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55075,"nodeType":"IfStatement","src":"2227:66:108","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":55072,"name":"GenesisAlreadyAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56637,"src":"2269:22:108","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":55073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2269:24:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":55074,"nodeType":"RevertStatement","src":"2262:31:108"}},{"expression":{"id":55080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55076,"name":"domainGenesisAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56342,"src":"2303:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55078,"indexExpression":{"id":55077,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2325:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2303:29:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":55079,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2335:4:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2303:36:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55081,"nodeType":"ExpressionStatement","src":"2303:36:108"},{"expression":{"id":55088,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55082,"name":"currentEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56300,"src":"2418:20:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55084,"indexExpression":{"id":55083,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2439:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2418:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55086,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2469:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55085,"name":"getEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"2449:19:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2449:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2418:58:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55089,"nodeType":"ExpressionStatement","src":"2418:58:108"},{"body":{"id":55157,"nodeType":"Block","src":"2552:769:108","statements":[{"assignments":[55105],"declarations":[{"constant":false,"id":55105,"mutability":"mutable","name":"attester","nameLocation":"2574:8:108","nodeType":"VariableDeclaration","scope":55157,"src":"2566:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55104,"name":"address","nodeType":"ElementaryTypeName","src":"2566:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55112,"initialValue":{"arguments":[{"id":55110,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55091,"src":"2614:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55106,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"2585:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55108,"indexExpression":{"id":55107,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2603:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2585:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55109,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2611:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"2585:28:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55111,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2585:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2566:50:108"},{"body":{"id":55155,"nodeType":"Block","src":"2697:614:108","statements":[{"assignments":[55128],"declarations":[{"constant":false,"id":55128,"mutability":"mutable","name":"custodian","nameLocation":"2723:9:108","nodeType":"VariableDeclaration","scope":55155,"src":"2715:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55127,"name":"address","nodeType":"ElementaryTypeName","src":"2715:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55135,"initialValue":{"arguments":[{"id":55133,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55114,"src":"2765:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55129,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"2735:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55131,"indexExpression":{"id":55130,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2754:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2735:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55132,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2762:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"2735:29:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2735:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2715:52:108"},{"assignments":[55137],"declarations":[{"constant":false,"id":55137,"mutability":"mutable","name":"attesterStake","nameLocation":"2852:13:108","nodeType":"VariableDeclaration","scope":55155,"src":"2844:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55136,"name":"uint256","nodeType":"ElementaryTypeName","src":"2844:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55144,"initialValue":{"arguments":[{"id":55139,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2905:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":55140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2933:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":55141,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55128,"src":"2956:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55142,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55105,"src":"2987:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55138,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"2868:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2868:145:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2844:169:108"},{"expression":{"arguments":[{"id":55146,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"3131:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55148,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"3175:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55147,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"3159:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3159:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55150,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55128,"src":"3204:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55151,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55105,"src":"3235:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55152,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55137,"src":"3265:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55145,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55320,"src":"3100:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3100:196:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55154,"nodeType":"ExpressionStatement","src":"3100:196:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55123,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55117,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55114,"src":"2651:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55118,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"2655:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55120,"indexExpression":{"id":55119,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2674:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2655:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2682:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"2655:33:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55122,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2655:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2651:39:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55156,"initializationExpression":{"assignments":[55114],"declarations":[{"constant":false,"id":55114,"mutability":"mutable","name":"j","nameLocation":"2644:1:108","nodeType":"VariableDeclaration","scope":55156,"src":"2636:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55113,"name":"uint256","nodeType":"ElementaryTypeName","src":"2636:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55116,"initialValue":{"hexValue":"30","id":55115,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2648:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2636:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2692:3:108","subExpression":{"id":55124,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55114,"src":"2692:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55126,"nodeType":"ExpressionStatement","src":"2692:3:108"},"nodeType":"ForStatement","src":"2631:680:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55100,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55094,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55091,"src":"2507:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55095,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"2511:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55097,"indexExpression":{"id":55096,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55065,"src":"2529:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2511:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55098,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2537:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"2511:32:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2511:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2507:38:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55158,"initializationExpression":{"assignments":[55091],"declarations":[{"constant":false,"id":55091,"mutability":"mutable","name":"i","nameLocation":"2500:1:108","nodeType":"VariableDeclaration","scope":55158,"src":"2492:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55090,"name":"uint256","nodeType":"ElementaryTypeName","src":"2492:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55093,"initialValue":{"hexValue":"30","id":55092,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2504:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2492:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2547:3:108","subExpression":{"id":55101,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55091,"src":"2547:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55103,"nodeType":"ExpressionStatement","src":"2547:3:108"},"nodeType":"ForStatement","src":"2487:834:108"}]},"baseFunctions":[56418],"functionSelector":"92a2ebf3","implemented":true,"kind":"function","modifiers":[],"name":"acceptGenesisCeremony","nameLocation":"2149:21:108","parameters":{"id":55062,"nodeType":"ParameterList","parameters":[],"src":"2170:2:108"},"returnParameters":{"id":55063,"nodeType":"ParameterList","parameters":[],"src":"2180:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":55284,"nodeType":"FunctionDefinition","src":"3333:1270:108","nodes":[],"body":{"id":55283,"nodeType":"Block","src":"3486:1117:108","nodes":[],"statements":[{"assignments":[55173],"declarations":[{"constant":false,"id":55173,"mutability":"mutable","name":"domain","nameLocation":"3504:6:108","nodeType":"VariableDeclaration","scope":55283,"src":"3496:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55172,"name":"address","nodeType":"ElementaryTypeName","src":"3496:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55176,"initialValue":{"expression":{"id":55174,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3513:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3517:6:108","memberName":"sender","nodeType":"MemberAccess","src":"3513:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3496:27:108"},{"expression":{"id":55183,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55177,"name":"currentEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56300,"src":"3533:20:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55179,"indexExpression":{"id":55178,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"3554:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3533:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55181,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"3584:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55180,"name":"getEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"3564:19:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55182,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3564:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3533:58:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55184,"nodeType":"ExpressionStatement","src":"3533:58:108"},{"body":{"id":55281,"nodeType":"Block","src":"3649:948:108","statements":[{"assignments":[55197],"declarations":[{"constant":false,"id":55197,"mutability":"mutable","name":"custodian","nameLocation":"3671:9:108","nodeType":"VariableDeclaration","scope":55281,"src":"3663:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55196,"name":"address","nodeType":"ElementaryTypeName","src":"3663:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55201,"initialValue":{"baseExpression":{"id":55198,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55163,"src":"3683:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55200,"indexExpression":{"id":55199,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"3694:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3683:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3663:33:108"},{"assignments":[55203],"declarations":[{"constant":false,"id":55203,"mutability":"mutable","name":"attesterStake","nameLocation":"3773:13:108","nodeType":"VariableDeclaration","scope":55281,"src":"3765:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55202,"name":"uint256","nodeType":"ElementaryTypeName","src":"3765:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55212,"initialValue":{"arguments":[{"id":55205,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"3822:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":55206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3846:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":55207,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55197,"src":"3865:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":55208,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"3892:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55210,"indexExpression":{"id":55209,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"3902:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3892:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55204,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"3789:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55211,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3789:129:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"3765:153:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55213,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55203,"src":"4010:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"baseExpression":{"id":55214,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55169,"src":"4026:6:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":55216,"indexExpression":{"id":55215,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4033:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4026:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4010:25:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55221,"nodeType":"IfStatement","src":"4006:64:108","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":55218,"name":"StakeExceedsGenesisStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56633,"src":"4044:24:108","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":55219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4044:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":55220,"nodeType":"RevertStatement","src":"4037:33:108"}},{"expression":{"arguments":[{"baseExpression":{"id":55226,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"4158:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55228,"indexExpression":{"id":55227,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4168:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4158:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":55222,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"4128:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55224,"indexExpression":{"id":55223,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"4146:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4128:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55225,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"4154:3:108","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":46678,"src":"4128:29:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$46651_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":55229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4128:43:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55230,"nodeType":"ExpressionStatement","src":"4128:43:108"},{"expression":{"id":55247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55231,"name":"epochStakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56320,"src":"4185:19:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55240,"indexExpression":{"id":55232,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"4205:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4185:27:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55241,"indexExpression":{"arguments":[{"id":55234,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"4229:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55233,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"4213:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4213:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4185:52:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55242,"indexExpression":{"id":55236,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55197,"src":"4238:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4185:63:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55243,"indexExpression":{"baseExpression":{"id":55237,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"4266:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55239,"indexExpression":{"id":55238,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4276:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4266:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4185:107:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"baseExpression":{"id":55244,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55169,"src":"4295:6:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":55246,"indexExpression":{"id":55245,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4302:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4295:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4185:119:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55248,"nodeType":"ExpressionStatement","src":"4185:119:108"},{"expression":{"id":55259,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55249,"name":"epochTotalStakeByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56338,"src":"4318:23:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":55253,"indexExpression":{"id":55250,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55173,"src":"4342:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4318:31:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":55254,"indexExpression":{"hexValue":"30","id":55251,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4350:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4318:34:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55255,"indexExpression":{"id":55252,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55197,"src":"4353:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4318:45:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"baseExpression":{"id":55256,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55169,"src":"4367:6:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":55258,"indexExpression":{"id":55257,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4374:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4367:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4318:58:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55260,"nodeType":"ExpressionStatement","src":"4318:58:108"},{"assignments":[55262],"declarations":[{"constant":false,"id":55262,"mutability":"mutable","name":"refundAmount","nameLocation":"4466:12:108","nodeType":"VariableDeclaration","scope":55281,"src":"4458:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55261,"name":"uint256","nodeType":"ElementaryTypeName","src":"4458:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55268,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55267,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":55263,"name":"stakes","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55169,"src":"4481:6:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":55265,"indexExpression":{"id":55264,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4488:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4481:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":55266,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55203,"src":"4493:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4481:25:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"4458:48:108"},{"expression":{"arguments":[{"arguments":[{"id":55272,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"4541:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":55271,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4533:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55270,"name":"address","nodeType":"ElementaryTypeName","src":"4533:7:108","typeDescriptions":{}}},"id":55273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4533:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":55274,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"4548:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55276,"indexExpression":{"id":55275,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"4558:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4548:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55277,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55197,"src":"4562:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55278,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55262,"src":"4573:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55269,"name":"_payAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56203,"src":"4520:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":55279,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4520:66:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55280,"nodeType":"ExpressionStatement","src":"4520:66:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55189,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"3622:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55190,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55166,"src":"3626:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55191,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3636:6:108","memberName":"length","nodeType":"MemberAccess","src":"3626:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3622:20:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55282,"initializationExpression":{"assignments":[55186],"declarations":[{"constant":false,"id":55186,"mutability":"mutable","name":"i","nameLocation":"3615:1:108","nodeType":"VariableDeclaration","scope":55282,"src":"3607:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55185,"name":"uint256","nodeType":"ElementaryTypeName","src":"3607:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55188,"initialValue":{"hexValue":"30","id":55187,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3619:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3607:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3644:3:108","subExpression":{"id":55193,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55186,"src":"3644:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55195,"nodeType":"ExpressionStatement","src":"3644:3:108"},"nodeType":"ForStatement","src":"3602:995:108"}]},"baseFunctions":[56430],"functionSelector":"ff62787c","implemented":true,"kind":"function","modifiers":[],"name":"setGenesisCeremony","nameLocation":"3342:18:108","parameters":{"id":55170,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55163,"mutability":"mutable","name":"custodians","nameLocation":"3389:10:108","nodeType":"VariableDeclaration","scope":55284,"src":"3370:29:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55161,"name":"address","nodeType":"ElementaryTypeName","src":"3370:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55162,"nodeType":"ArrayTypeName","src":"3370:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":55166,"mutability":"mutable","name":"attesters","nameLocation":"3428:9:108","nodeType":"VariableDeclaration","scope":55284,"src":"3409:28:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55164,"name":"address","nodeType":"ElementaryTypeName","src":"3409:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55165,"nodeType":"ArrayTypeName","src":"3409:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":55169,"mutability":"mutable","name":"stakes","nameLocation":"3466:6:108","nodeType":"VariableDeclaration","scope":55284,"src":"3447:25:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":55167,"name":"uint256","nodeType":"ElementaryTypeName","src":"3447:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55168,"nodeType":"ArrayTypeName","src":"3447:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"3360:118:108"},"returnParameters":{"id":55171,"nodeType":"ParameterList","parameters":[],"src":"3486:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":55320,"nodeType":"FunctionDefinition","src":"4609:309:108","nodes":[],"body":{"id":55319,"nodeType":"Block","src":"4767:151:108","nodes":[],"statements":[{"expression":{"id":55307,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55297,"name":"epochStakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56320,"src":"4777:19:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55302,"indexExpression":{"id":55298,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55286,"src":"4797:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4777:27:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55303,"indexExpression":{"id":55299,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55288,"src":"4805:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4777:34:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55304,"indexExpression":{"id":55300,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55290,"src":"4812:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4777:45:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55305,"indexExpression":{"id":55301,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55292,"src":"4823:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4777:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":55306,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55294,"src":"4836:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4777:65:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55308,"nodeType":"ExpressionStatement","src":"4777:65:108"},{"expression":{"id":55317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55309,"name":"epochTotalStakeByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56338,"src":"4852:23:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":55313,"indexExpression":{"id":55310,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55286,"src":"4876:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4852:31:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":55314,"indexExpression":{"id":55311,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55288,"src":"4884:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4852:38:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55315,"indexExpression":{"id":55312,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55290,"src":"4891:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4852:49:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":55316,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55294,"src":"4905:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4852:59:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55318,"nodeType":"ExpressionStatement","src":"4852:59:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_addStake","nameLocation":"4618:9:108","parameters":{"id":55295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55286,"mutability":"mutable","name":"domain","nameLocation":"4645:6:108","nodeType":"VariableDeclaration","scope":55320,"src":"4637:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55285,"name":"address","nodeType":"ElementaryTypeName","src":"4637:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55288,"mutability":"mutable","name":"epoch","nameLocation":"4669:5:108","nodeType":"VariableDeclaration","scope":55320,"src":"4661:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55287,"name":"uint256","nodeType":"ElementaryTypeName","src":"4661:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55290,"mutability":"mutable","name":"custodian","nameLocation":"4692:9:108","nodeType":"VariableDeclaration","scope":55320,"src":"4684:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55289,"name":"address","nodeType":"ElementaryTypeName","src":"4684:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55292,"mutability":"mutable","name":"attester","nameLocation":"4719:8:108","nodeType":"VariableDeclaration","scope":55320,"src":"4711:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55291,"name":"address","nodeType":"ElementaryTypeName","src":"4711:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55294,"mutability":"mutable","name":"amount","nameLocation":"4745:6:108","nodeType":"VariableDeclaration","scope":55320,"src":"4737:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55293,"name":"uint256","nodeType":"ElementaryTypeName","src":"4737:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4627:130:108"},"returnParameters":{"id":55296,"nodeType":"ParameterList","parameters":[],"src":"4767:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55356,"nodeType":"FunctionDefinition","src":"4924:312:108","nodes":[],"body":{"id":55355,"nodeType":"Block","src":"5085:151:108","nodes":[],"statements":[{"expression":{"id":55343,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55333,"name":"epochStakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56320,"src":"5095:19:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55338,"indexExpression":{"id":55334,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55322,"src":"5115:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5095:27:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55339,"indexExpression":{"id":55335,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55324,"src":"5123:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5095:34:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55340,"indexExpression":{"id":55336,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55326,"src":"5130:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5095:45:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55341,"indexExpression":{"id":55337,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55328,"src":"5141:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5095:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":55342,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55330,"src":"5154:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5095:65:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55344,"nodeType":"ExpressionStatement","src":"5095:65:108"},{"expression":{"id":55353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55345,"name":"epochTotalStakeByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56338,"src":"5170:23:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":55349,"indexExpression":{"id":55346,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55322,"src":"5194:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5170:31:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":55350,"indexExpression":{"id":55347,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55324,"src":"5202:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5170:38:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55351,"indexExpression":{"id":55348,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55326,"src":"5209:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5170:49:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":55352,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55330,"src":"5223:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5170:59:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55354,"nodeType":"ExpressionStatement","src":"5170:59:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeStake","nameLocation":"4933:12:108","parameters":{"id":55331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55322,"mutability":"mutable","name":"domain","nameLocation":"4963:6:108","nodeType":"VariableDeclaration","scope":55356,"src":"4955:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55321,"name":"address","nodeType":"ElementaryTypeName","src":"4955:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55324,"mutability":"mutable","name":"epoch","nameLocation":"4987:5:108","nodeType":"VariableDeclaration","scope":55356,"src":"4979:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55323,"name":"uint256","nodeType":"ElementaryTypeName","src":"4979:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55326,"mutability":"mutable","name":"custodian","nameLocation":"5010:9:108","nodeType":"VariableDeclaration","scope":55356,"src":"5002:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55325,"name":"address","nodeType":"ElementaryTypeName","src":"5002:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55328,"mutability":"mutable","name":"attester","nameLocation":"5037:8:108","nodeType":"VariableDeclaration","scope":55356,"src":"5029:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55327,"name":"address","nodeType":"ElementaryTypeName","src":"5029:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55330,"mutability":"mutable","name":"amount","nameLocation":"5063:6:108","nodeType":"VariableDeclaration","scope":55356,"src":"5055:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55329,"name":"uint256","nodeType":"ElementaryTypeName","src":"5055:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4945:130:108"},"returnParameters":{"id":55332,"nodeType":"ParameterList","parameters":[],"src":"5085:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55382,"nodeType":"FunctionDefinition","src":"5242:244:108","nodes":[],"body":{"id":55381,"nodeType":"Block","src":"5402:84:108","nodes":[],"statements":[{"expression":{"id":55379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55369,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56330,"src":"5412:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55374,"indexExpression":{"id":55370,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55358,"src":"5434:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5412:29:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55375,"indexExpression":{"id":55371,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55360,"src":"5442:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5412:36:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55376,"indexExpression":{"id":55372,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55362,"src":"5449:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5412:47:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55377,"indexExpression":{"id":55373,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55364,"src":"5460:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5412:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":55378,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55366,"src":"5473:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5412:67:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55380,"nodeType":"ExpressionStatement","src":"5412:67:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_addUnstake","nameLocation":"5251:11:108","parameters":{"id":55367,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55358,"mutability":"mutable","name":"domain","nameLocation":"5280:6:108","nodeType":"VariableDeclaration","scope":55382,"src":"5272:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55357,"name":"address","nodeType":"ElementaryTypeName","src":"5272:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55360,"mutability":"mutable","name":"epoch","nameLocation":"5304:5:108","nodeType":"VariableDeclaration","scope":55382,"src":"5296:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55359,"name":"uint256","nodeType":"ElementaryTypeName","src":"5296:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55362,"mutability":"mutable","name":"custodian","nameLocation":"5327:9:108","nodeType":"VariableDeclaration","scope":55382,"src":"5319:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55361,"name":"address","nodeType":"ElementaryTypeName","src":"5319:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55364,"mutability":"mutable","name":"attester","nameLocation":"5354:8:108","nodeType":"VariableDeclaration","scope":55382,"src":"5346:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55363,"name":"address","nodeType":"ElementaryTypeName","src":"5346:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55366,"mutability":"mutable","name":"amount","nameLocation":"5380:6:108","nodeType":"VariableDeclaration","scope":55382,"src":"5372:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55365,"name":"uint256","nodeType":"ElementaryTypeName","src":"5372:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5262:130:108"},"returnParameters":{"id":55368,"nodeType":"ParameterList","parameters":[],"src":"5402:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55408,"nodeType":"FunctionDefinition","src":"5492:247:108","nodes":[],"body":{"id":55407,"nodeType":"Block","src":"5655:84:108","nodes":[],"statements":[{"expression":{"id":55405,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55395,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56330,"src":"5665:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55400,"indexExpression":{"id":55396,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55384,"src":"5687:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5665:29:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55401,"indexExpression":{"id":55397,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55386,"src":"5695:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5665:36:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55402,"indexExpression":{"id":55398,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55388,"src":"5702:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5665:47:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55403,"indexExpression":{"id":55399,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55390,"src":"5713:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5665:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":55404,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55392,"src":"5726:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5665:67:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55406,"nodeType":"ExpressionStatement","src":"5665:67:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeUnstake","nameLocation":"5501:14:108","parameters":{"id":55393,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55384,"mutability":"mutable","name":"domain","nameLocation":"5533:6:108","nodeType":"VariableDeclaration","scope":55408,"src":"5525:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55383,"name":"address","nodeType":"ElementaryTypeName","src":"5525:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55386,"mutability":"mutable","name":"epoch","nameLocation":"5557:5:108","nodeType":"VariableDeclaration","scope":55408,"src":"5549:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55385,"name":"uint256","nodeType":"ElementaryTypeName","src":"5549:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55388,"mutability":"mutable","name":"custodian","nameLocation":"5580:9:108","nodeType":"VariableDeclaration","scope":55408,"src":"5572:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55387,"name":"address","nodeType":"ElementaryTypeName","src":"5572:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55390,"mutability":"mutable","name":"attester","nameLocation":"5607:8:108","nodeType":"VariableDeclaration","scope":55408,"src":"5599:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55389,"name":"address","nodeType":"ElementaryTypeName","src":"5599:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55392,"mutability":"mutable","name":"amount","nameLocation":"5633:6:108","nodeType":"VariableDeclaration","scope":55408,"src":"5625:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55391,"name":"uint256","nodeType":"ElementaryTypeName","src":"5625:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5515:130:108"},"returnParameters":{"id":55394,"nodeType":"ParameterList","parameters":[],"src":"5655:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55434,"nodeType":"FunctionDefinition","src":"5745:243:108","nodes":[],"body":{"id":55433,"nodeType":"Block","src":"5905:83:108","nodes":[],"statements":[{"expression":{"id":55431,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55421,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56330,"src":"5915:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55426,"indexExpression":{"id":55422,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55410,"src":"5937:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5915:29:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55427,"indexExpression":{"id":55423,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55412,"src":"5945:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5915:36:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55428,"indexExpression":{"id":55424,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55414,"src":"5952:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5915:47:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55429,"indexExpression":{"id":55425,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55416,"src":"5963:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5915:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55430,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55418,"src":"5975:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5915:66:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55432,"nodeType":"ExpressionStatement","src":"5915:66:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setUnstake","nameLocation":"5754:11:108","parameters":{"id":55419,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55410,"mutability":"mutable","name":"domain","nameLocation":"5783:6:108","nodeType":"VariableDeclaration","scope":55434,"src":"5775:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55409,"name":"address","nodeType":"ElementaryTypeName","src":"5775:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55412,"mutability":"mutable","name":"epoch","nameLocation":"5807:5:108","nodeType":"VariableDeclaration","scope":55434,"src":"5799:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55411,"name":"uint256","nodeType":"ElementaryTypeName","src":"5799:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55414,"mutability":"mutable","name":"custodian","nameLocation":"5830:9:108","nodeType":"VariableDeclaration","scope":55434,"src":"5822:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55413,"name":"address","nodeType":"ElementaryTypeName","src":"5822:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55416,"mutability":"mutable","name":"attester","nameLocation":"5857:8:108","nodeType":"VariableDeclaration","scope":55434,"src":"5849:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55415,"name":"address","nodeType":"ElementaryTypeName","src":"5849:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55418,"mutability":"mutable","name":"amount","nameLocation":"5883:6:108","nodeType":"VariableDeclaration","scope":55434,"src":"5875:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55417,"name":"uint256","nodeType":"ElementaryTypeName","src":"5875:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5765:130:108"},"returnParameters":{"id":55420,"nodeType":"ParameterList","parameters":[],"src":"5905:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55449,"nodeType":"FunctionDefinition","src":"6052:146:108","nodes":[],"body":{"id":55448,"nodeType":"Block","src":"6127:71:108","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":55441,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"6144:5:108","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":55442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6150:9:108","memberName":"timestamp","nodeType":"MemberAccess","src":"6144:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"id":55443,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56296,"src":"6162:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55445,"indexExpression":{"id":55444,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55436,"src":"6184:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6162:29:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6144:47:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55440,"id":55447,"nodeType":"Return","src":"6137:54:108"}]},"baseFunctions":[56437],"functionSelector":"c3471ff8","implemented":true,"kind":"function","modifiers":[],"name":"getEpochByBlockTime","nameLocation":"6061:19:108","parameters":{"id":55437,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55436,"mutability":"mutable","name":"domain","nameLocation":"6089:6:108","nodeType":"VariableDeclaration","scope":55449,"src":"6081:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55435,"name":"address","nodeType":"ElementaryTypeName","src":"6081:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6080:16:108"},"returnParameters":{"id":55440,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55439,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55449,"src":"6118:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55438,"name":"uint256","nodeType":"ElementaryTypeName","src":"6118:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6117:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55461,"nodeType":"FunctionDefinition","src":"6272:123:108","nodes":[],"body":{"id":55460,"nodeType":"Block","src":"6343:52:108","nodes":[],"statements":[{"expression":{"baseExpression":{"id":55456,"name":"currentEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56300,"src":"6360:20:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55458,"indexExpression":{"id":55457,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55451,"src":"6381:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6360:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55455,"id":55459,"nodeType":"Return","src":"6353:35:108"}]},"baseFunctions":[56444],"functionSelector":"4d3223a5","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentEpoch","nameLocation":"6281:15:108","parameters":{"id":55452,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55451,"mutability":"mutable","name":"domain","nameLocation":"6305:6:108","nodeType":"VariableDeclaration","scope":55461,"src":"6297:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55450,"name":"address","nodeType":"ElementaryTypeName","src":"6297:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6296:16:108"},"returnParameters":{"id":55455,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55454,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55461,"src":"6334:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55453,"name":"uint256","nodeType":"ElementaryTypeName","src":"6334:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6333:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55482,"nodeType":"FunctionDefinition","src":"6428:154:108","nodes":[],"body":{"id":55481,"nodeType":"Block","src":"6496:86:108","nodes":[],"statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55469,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55463,"src":"6529:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55468,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"6513:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6513:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55471,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6540:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6513:28:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55478,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55475,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55463,"src":"6564:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55474,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"6548:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6548:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55477,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6574:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6548:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6513:62:108","trueExpression":{"hexValue":"30","id":55473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6544:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55467,"id":55480,"nodeType":"Return","src":"6506:69:108"}]},"baseFunctions":[56451],"functionSelector":"8489e580","implemented":true,"kind":"function","modifiers":[],"name":"getNextEpoch","nameLocation":"6437:12:108","parameters":{"id":55464,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55463,"mutability":"mutable","name":"domain","nameLocation":"6458:6:108","nodeType":"VariableDeclaration","scope":55482,"src":"6450:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55462,"name":"address","nodeType":"ElementaryTypeName","src":"6450:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6449:16:108"},"returnParameters":{"id":55467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55482,"src":"6487:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55465,"name":"uint256","nodeType":"ElementaryTypeName","src":"6487:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6486:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55503,"nodeType":"FunctionDefinition","src":"6588:195:108","nodes":[],"body":{"id":55502,"nodeType":"Block","src":"6681:102:108","nodes":[],"statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55490,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55484,"src":"6726:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55489,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"6710:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55491,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6710:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55492,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6737:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"6710:28:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55496,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55484,"src":"6765:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55495,"name":"getEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55449,"src":"6745:19:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55497,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6745:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55498,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6775:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"6745:31:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"6710:66:108","trueExpression":{"hexValue":"30","id":55494,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"6741:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55488,"id":55501,"nodeType":"Return","src":"6691:85:108"}]},"baseFunctions":[56458],"functionSelector":"2c7785a8","implemented":true,"kind":"function","modifiers":[],"name":"getNextEpochByBlockTime","nameLocation":"6597:23:108","parameters":{"id":55485,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55484,"mutability":"mutable","name":"domain","nameLocation":"6638:6:108","nodeType":"VariableDeclaration","scope":55503,"src":"6630:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55483,"name":"address","nodeType":"ElementaryTypeName","src":"6630:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6620:30:108"},"returnParameters":{"id":55488,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55487,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55503,"src":"6672:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55486,"name":"uint256","nodeType":"ElementaryTypeName","src":"6672:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6671:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55527,"nodeType":"FunctionDefinition","src":"6849:240:108","nodes":[],"body":{"id":55526,"nodeType":"Block","src":"7010:79:108","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55516,"name":"epochStakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56320,"src":"7027:19:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55518,"indexExpression":{"id":55517,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55505,"src":"7047:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7027:27:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55520,"indexExpression":{"id":55519,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55507,"src":"7055:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7027:34:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55522,"indexExpression":{"id":55521,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55509,"src":"7062:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7027:45:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55524,"indexExpression":{"id":55523,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55511,"src":"7073:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7027:55:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55515,"id":55525,"nodeType":"Return","src":"7020:62:108"}]},"baseFunctions":[56471],"functionSelector":"8d908258","implemented":true,"kind":"function","modifiers":[],"name":"getStakeAtEpoch","nameLocation":"6858:15:108","parameters":{"id":55512,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55505,"mutability":"mutable","name":"domain","nameLocation":"6891:6:108","nodeType":"VariableDeclaration","scope":55527,"src":"6883:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55504,"name":"address","nodeType":"ElementaryTypeName","src":"6883:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55507,"mutability":"mutable","name":"epoch","nameLocation":"6915:5:108","nodeType":"VariableDeclaration","scope":55527,"src":"6907:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55506,"name":"uint256","nodeType":"ElementaryTypeName","src":"6907:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55509,"mutability":"mutable","name":"custodian","nameLocation":"6938:9:108","nodeType":"VariableDeclaration","scope":55527,"src":"6930:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55508,"name":"address","nodeType":"ElementaryTypeName","src":"6930:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55511,"mutability":"mutable","name":"attester","nameLocation":"6965:8:108","nodeType":"VariableDeclaration","scope":55527,"src":"6957:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55510,"name":"address","nodeType":"ElementaryTypeName","src":"6957:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6873:106:108"},"returnParameters":{"id":55515,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55514,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55527,"src":"7001:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55513,"name":"uint256","nodeType":"ElementaryTypeName","src":"7001:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7000:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55548,"nodeType":"FunctionDefinition","src":"7159:326:108","nodes":[],"body":{"id":55547,"nodeType":"Block","src":"7302:183:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":55539,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55529,"src":"7364:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55541,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55529,"src":"7404:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55540,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"7388:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55542,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7388:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55543,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55531,"src":"7429:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55544,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55533,"src":"7456:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55538,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"7331:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55545,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7331:147:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55537,"id":55546,"nodeType":"Return","src":"7312:166:108"}]},"baseFunctions":[56482],"functionSelector":"70224360","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentEpochStake","nameLocation":"7168:20:108","parameters":{"id":55534,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55529,"mutability":"mutable","name":"domain","nameLocation":"7206:6:108","nodeType":"VariableDeclaration","scope":55548,"src":"7198:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55528,"name":"address","nodeType":"ElementaryTypeName","src":"7198:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55531,"mutability":"mutable","name":"custodian","nameLocation":"7230:9:108","nodeType":"VariableDeclaration","scope":55548,"src":"7222:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55530,"name":"address","nodeType":"ElementaryTypeName","src":"7222:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55533,"mutability":"mutable","name":"attester","nameLocation":"7257:8:108","nodeType":"VariableDeclaration","scope":55548,"src":"7249:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55532,"name":"address","nodeType":"ElementaryTypeName","src":"7249:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7188:83:108"},"returnParameters":{"id":55537,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55536,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55548,"src":"7293:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55535,"name":"uint256","nodeType":"ElementaryTypeName","src":"7293:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7292:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55572,"nodeType":"FunctionDefinition","src":"7553:244:108","nodes":[],"body":{"id":55571,"nodeType":"Block","src":"7716:81:108","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55561,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56330,"src":"7733:21:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55563,"indexExpression":{"id":55562,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55550,"src":"7755:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7733:29:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55565,"indexExpression":{"id":55564,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55552,"src":"7763:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7733:36:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55567,"indexExpression":{"id":55566,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55554,"src":"7770:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7733:47:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55569,"indexExpression":{"id":55568,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55556,"src":"7781:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7733:57:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55560,"id":55570,"nodeType":"Return","src":"7726:64:108"}]},"baseFunctions":[56495],"functionSelector":"879b938b","implemented":true,"kind":"function","modifiers":[],"name":"getUnstakeAtEpoch","nameLocation":"7562:17:108","parameters":{"id":55557,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55550,"mutability":"mutable","name":"domain","nameLocation":"7597:6:108","nodeType":"VariableDeclaration","scope":55572,"src":"7589:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55549,"name":"address","nodeType":"ElementaryTypeName","src":"7589:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55552,"mutability":"mutable","name":"epoch","nameLocation":"7621:5:108","nodeType":"VariableDeclaration","scope":55572,"src":"7613:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55551,"name":"uint256","nodeType":"ElementaryTypeName","src":"7613:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55554,"mutability":"mutable","name":"custodian","nameLocation":"7644:9:108","nodeType":"VariableDeclaration","scope":55572,"src":"7636:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55553,"name":"address","nodeType":"ElementaryTypeName","src":"7636:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55556,"mutability":"mutable","name":"attester","nameLocation":"7671:8:108","nodeType":"VariableDeclaration","scope":55572,"src":"7663:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55555,"name":"address","nodeType":"ElementaryTypeName","src":"7663:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7579:106:108"},"returnParameters":{"id":55560,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55559,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55572,"src":"7707:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55558,"name":"uint256","nodeType":"ElementaryTypeName","src":"7707:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7706:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55593,"nodeType":"FunctionDefinition","src":"7869:330:108","nodes":[],"body":{"id":55592,"nodeType":"Block","src":"8014:185:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":55584,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55574,"src":"8078:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55586,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55574,"src":"8118:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55585,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"8102:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55587,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8102:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55588,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55576,"src":"8143:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55589,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55578,"src":"8170:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55583,"name":"getUnstakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55572,"src":"8043:17:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55590,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8043:149:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55582,"id":55591,"nodeType":"Return","src":"8024:168:108"}]},"baseFunctions":[56506],"functionSelector":"7667b76d","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentEpochUnstake","nameLocation":"7878:22:108","parameters":{"id":55579,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55574,"mutability":"mutable","name":"domain","nameLocation":"7918:6:108","nodeType":"VariableDeclaration","scope":55593,"src":"7910:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55573,"name":"address","nodeType":"ElementaryTypeName","src":"7910:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55576,"mutability":"mutable","name":"custodian","nameLocation":"7942:9:108","nodeType":"VariableDeclaration","scope":55593,"src":"7934:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55575,"name":"address","nodeType":"ElementaryTypeName","src":"7934:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55578,"mutability":"mutable","name":"attester","nameLocation":"7969:8:108","nodeType":"VariableDeclaration","scope":55593,"src":"7961:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55577,"name":"address","nodeType":"ElementaryTypeName","src":"7961:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7900:83:108"},"returnParameters":{"id":55582,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55581,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55593,"src":"8005:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55580,"name":"uint256","nodeType":"ElementaryTypeName","src":"8005:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8004:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55613,"nodeType":"FunctionDefinition","src":"8251:214:108","nodes":[],"body":{"id":55612,"nodeType":"Block","src":"8392:73:108","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55604,"name":"epochTotalStakeByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56338,"src":"8409:23:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":55606,"indexExpression":{"id":55605,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55595,"src":"8433:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8409:31:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":55608,"indexExpression":{"id":55607,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55597,"src":"8441:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8409:38:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55610,"indexExpression":{"id":55609,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55599,"src":"8448:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8409:49:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55603,"id":55611,"nodeType":"Return","src":"8402:56:108"}]},"baseFunctions":[56517],"functionSelector":"5cdf3155","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStakeForEpoch","nameLocation":"8260:21:108","parameters":{"id":55600,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55595,"mutability":"mutable","name":"domain","nameLocation":"8299:6:108","nodeType":"VariableDeclaration","scope":55613,"src":"8291:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55594,"name":"address","nodeType":"ElementaryTypeName","src":"8291:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55597,"mutability":"mutable","name":"epoch","nameLocation":"8323:5:108","nodeType":"VariableDeclaration","scope":55613,"src":"8315:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55596,"name":"uint256","nodeType":"ElementaryTypeName","src":"8315:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55599,"mutability":"mutable","name":"custodian","nameLocation":"8346:9:108","nodeType":"VariableDeclaration","scope":55613,"src":"8338:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55598,"name":"address","nodeType":"ElementaryTypeName","src":"8338:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8281:80:108"},"returnParameters":{"id":55603,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55602,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55613,"src":"8383:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55601,"name":"uint256","nodeType":"ElementaryTypeName","src":"8383:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8382:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55631,"nodeType":"FunctionDefinition","src":"8521:226:108","nodes":[],"body":{"id":55630,"nodeType":"Block","src":"8646:101:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":55623,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55615,"src":"8697:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55625,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55615,"src":"8721:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55624,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"8705:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55626,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8705:23:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55627,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55617,"src":"8730:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55622,"name":"getTotalStakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55613,"src":"8675:21:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view returns (uint256)"}},"id":55628,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8675:65:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55621,"id":55629,"nodeType":"Return","src":"8656:84:108"}]},"baseFunctions":[56526],"functionSelector":"44198e4d","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStakeForCurrentEpoch","nameLocation":"8530:28:108","parameters":{"id":55618,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55615,"mutability":"mutable","name":"domain","nameLocation":"8576:6:108","nodeType":"VariableDeclaration","scope":55631,"src":"8568:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55614,"name":"address","nodeType":"ElementaryTypeName","src":"8568:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55617,"mutability":"mutable","name":"custodian","nameLocation":"8600:9:108","nodeType":"VariableDeclaration","scope":55631,"src":"8592:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55616,"name":"address","nodeType":"ElementaryTypeName","src":"8592:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8558:57:108"},"returnParameters":{"id":55621,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55620,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55631,"src":"8637:7:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55619,"name":"uint256","nodeType":"ElementaryTypeName","src":"8637:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8636:9:108"},"scope":56272,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55718,"nodeType":"FunctionDefinition","src":"8786:1661:108","nodes":[],"body":{"id":55717,"nodeType":"Block","src":"8915:1532:108","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":55648,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9008:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9012:6:108","memberName":"sender","nodeType":"MemberAccess","src":"9008:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":55644,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"8978:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55646,"indexExpression":{"id":55645,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55633,"src":"8996:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8978:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55647,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"9004:3:108","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":46678,"src":"8978:29:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$46651_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":55650,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8978:41:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55651,"nodeType":"ExpressionStatement","src":"8978:41:108"},{"assignments":[55653],"declarations":[{"constant":false,"id":55653,"mutability":"mutable","name":"balanceBefore","nameLocation":"9391:13:108","nodeType":"VariableDeclaration","scope":55717,"src":"9383:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55652,"name":"uint256","nodeType":"ElementaryTypeName","src":"9383:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55661,"initialValue":{"arguments":[{"arguments":[{"id":55658,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9431:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":55657,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9423:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55656,"name":"address","nodeType":"ElementaryTypeName","src":"9423:7:108","typeDescriptions":{}}},"id":55659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9423:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":55654,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"9407:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":55655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9413:9:108","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43620,"src":"9407:15:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":55660,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9407:30:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9383:54:108"},{"expression":{"arguments":[{"expression":{"id":55665,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9741:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9745:6:108","memberName":"sender","nodeType":"MemberAccess","src":"9741:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55669,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9761:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":55668,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9753:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55667,"name":"address","nodeType":"ElementaryTypeName","src":"9753:7:108","typeDescriptions":{}}},"id":55670,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9753:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55671,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55638,"src":"9768:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":55662,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55636,"src":"9718:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":55664,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9728:12:108","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43662,"src":"9718:22:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":55672,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9718:57:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55673,"nodeType":"ExpressionStatement","src":"9718:57:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55684,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":55678,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9898:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":55677,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9890:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55676,"name":"address","nodeType":"ElementaryTypeName","src":"9890:7:108","typeDescriptions":{}}},"id":55679,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9890:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":55674,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"9874:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":55675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9880:9:108","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43620,"src":"9874:15:108","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":55680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9874:30:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55683,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55681,"name":"balanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55653,"src":"9908:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":55682,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55638,"src":"9924:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9908:22:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9874:56:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55688,"nodeType":"IfStatement","src":"9870:114:108","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":55685,"name":"CustodianTransferAmountMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56635,"src":"9951:31:108","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":55686,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9951:33:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":55687,"nodeType":"RevertStatement","src":"9944:40:108"}},{"expression":{"arguments":[{"id":55690,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55633,"src":"10074:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55692,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55633,"src":"10118:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55691,"name":"getNextEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55503,"src":"10094:23:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10094:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":55696,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55636,"src":"10147:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":55695,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10139:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55694,"name":"address","nodeType":"ElementaryTypeName","src":"10139:7:108","typeDescriptions":{}}},"id":55697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10139:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55698,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10171:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55699,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10175:6:108","memberName":"sender","nodeType":"MemberAccess","src":"10171:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55700,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55638,"src":"10195:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55689,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55320,"src":"10051:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10051:160:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55702,"nodeType":"ExpressionStatement","src":"10051:160:108"},{"eventCall":{"arguments":[{"id":55704,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55633,"src":"10314:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55706,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55633,"src":"10347:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55705,"name":"getNextEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55482,"src":"10334:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55707,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10334:20:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":55710,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55636,"src":"10376:9:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":55709,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10368:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55708,"name":"address","nodeType":"ElementaryTypeName","src":"10368:7:108","typeDescriptions":{}}},"id":55711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10368:18:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55712,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10400:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55713,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10404:6:108","memberName":"sender","nodeType":"MemberAccess","src":"10400:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55714,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55638,"src":"10424:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55703,"name":"AttesterStaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56601,"src":"10286:14:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10286:154:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55716,"nodeType":"EmitStatement","src":"10281:159:108"}]},"baseFunctions":[56536],"functionSelector":"bf6eac2f","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":55641,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56347,"src":"8899:14:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":55642,"kind":"modifierInvocation","modifierName":{"id":55640,"name":"onlyRole","nameLocations":["8890:8:108"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"8890:8:108"},"nodeType":"ModifierInvocation","src":"8890:24:108"}],"name":"stake","nameLocation":"8795:5:108","parameters":{"id":55639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55633,"mutability":"mutable","name":"domain","nameLocation":"8818:6:108","nodeType":"VariableDeclaration","scope":55718,"src":"8810:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55632,"name":"address","nodeType":"ElementaryTypeName","src":"8810:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55636,"mutability":"mutable","name":"custodian","nameLocation":"8841:9:108","nodeType":"VariableDeclaration","scope":55718,"src":"8834:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"},"typeName":{"id":55635,"nodeType":"UserDefinedTypeName","pathNode":{"id":55634,"name":"IERC20","nameLocations":["8834:6:108"],"nodeType":"IdentifierPath","referencedDeclaration":43663,"src":"8834:6:108"},"referencedDeclaration":43663,"src":"8834:6:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":55638,"mutability":"mutable","name":"amount","nameLocation":"8868:6:108","nodeType":"VariableDeclaration","scope":55718,"src":"8860:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55637,"name":"uint256","nodeType":"ElementaryTypeName","src":"8860:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8800:80:108"},"returnParameters":{"id":55643,"nodeType":"ParameterList","parameters":[],"src":"8915:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55753,"nodeType":"FunctionDefinition","src":"10498:786:108","nodes":[],"body":{"id":55752,"nodeType":"Block","src":"10630:654:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":55731,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55720,"src":"10986:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55733,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55720,"src":"11030:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55732,"name":"getNextEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55503,"src":"11006:23:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55734,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11006:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55735,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55722,"src":"11051:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55736,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11074:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11078:6:108","memberName":"sender","nodeType":"MemberAccess","src":"11074:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55738,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55724,"src":"11098:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55730,"name":"_addUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55382,"src":"10961:11:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10961:153:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55740,"nodeType":"ExpressionStatement","src":"10961:153:108"},{"eventCall":{"arguments":[{"id":55742,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55720,"src":"11160:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55744,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55720,"src":"11193:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55743,"name":"getNextEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55482,"src":"11180:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55745,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11180:20:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55746,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55722,"src":"11214:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55747,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"11237:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11241:6:108","memberName":"sender","nodeType":"MemberAccess","src":"11237:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55749,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55724,"src":"11261:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55741,"name":"AttesterUnstaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56613,"src":"11130:16:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55750,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11130:147:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55751,"nodeType":"EmitStatement","src":"11125:152:108"}]},"baseFunctions":[56545],"functionSelector":"60829f8a","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":55727,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56347,"src":"10614:14:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":55728,"kind":"modifierInvocation","modifierName":{"id":55726,"name":"onlyRole","nameLocations":["10605:8:108"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"10605:8:108"},"nodeType":"ModifierInvocation","src":"10605:24:108"}],"name":"unstake","nameLocation":"10507:7:108","parameters":{"id":55725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55720,"mutability":"mutable","name":"domain","nameLocation":"10532:6:108","nodeType":"VariableDeclaration","scope":55753,"src":"10524:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55719,"name":"address","nodeType":"ElementaryTypeName","src":"10524:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55722,"mutability":"mutable","name":"custodian","nameLocation":"10556:9:108","nodeType":"VariableDeclaration","scope":55753,"src":"10548:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55721,"name":"address","nodeType":"ElementaryTypeName","src":"10548:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55724,"mutability":"mutable","name":"amount","nameLocation":"10583:6:108","nodeType":"VariableDeclaration","scope":55753,"src":"10575:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55723,"name":"uint256","nodeType":"ElementaryTypeName","src":"10575:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10514:81:108"},"returnParameters":{"id":55729,"nodeType":"ParameterList","parameters":[],"src":"10630:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55828,"nodeType":"FunctionDefinition","src":"11351:1340:108","nodes":[],"body":{"id":55827,"nodeType":"Block","src":"11499:1192:108","nodes":[],"statements":[{"assignments":[55765],"declarations":[{"constant":false,"id":55765,"mutability":"mutable","name":"stakeAmount","nameLocation":"11604:11:108","nodeType":"VariableDeclaration","scope":55827,"src":"11596:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55764,"name":"uint256","nodeType":"ElementaryTypeName","src":"11596:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55772,"initialValue":{"arguments":[{"id":55767,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55755,"src":"11647:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55768,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55757,"src":"11667:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55769,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55759,"src":"11692:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55770,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55761,"src":"11715:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55766,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"11618:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11618:115:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11596:137:108"},{"assignments":[55774],"declarations":[{"constant":false,"id":55774,"mutability":"mutable","name":"unstakeAmount","nameLocation":"11751:13:108","nodeType":"VariableDeclaration","scope":55827,"src":"11743:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55773,"name":"uint256","nodeType":"ElementaryTypeName","src":"11743:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55783,"initialValue":{"arguments":[{"id":55776,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55755,"src":"11798:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55779,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55777,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55757,"src":"11818:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55778,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11832:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"11818:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55780,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55759,"src":"11847:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55781,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55761,"src":"11870:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55775,"name":"getUnstakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55572,"src":"11767:17:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11767:121:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11743:145:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55786,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55784,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55774,"src":"11902:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":55785,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55765,"src":"11918:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11902:27:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55792,"nodeType":"IfStatement","src":"11898:85:108","trueBody":{"id":55791,"nodeType":"Block","src":"11931:52:108","statements":[{"expression":{"id":55789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55787,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55774,"src":"11945:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55788,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55765,"src":"11961:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11945:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55790,"nodeType":"ExpressionStatement","src":"11945:27:108"}]}},{"assignments":[55794],"declarations":[{"constant":false,"id":55794,"mutability":"mutable","name":"remainder","nameLocation":"12000:9:108","nodeType":"VariableDeclaration","scope":55827,"src":"11992:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55793,"name":"uint256","nodeType":"ElementaryTypeName","src":"11992:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55798,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55795,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55765,"src":"12012:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":55796,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55774,"src":"12026:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12012:27:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"11992:47:108"},{"expression":{"arguments":[{"id":55800,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55755,"src":"12060:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55801,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55757,"src":"12068:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55802,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12082:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12068:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55804,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55759,"src":"12085:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55805,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55761,"src":"12096:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55806,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55794,"src":"12106:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55799,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55320,"src":"12050:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55807,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12050:66:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55808,"nodeType":"ExpressionStatement","src":"12050:66:108"},{"expression":{"arguments":[{"arguments":[{"id":55812,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12471:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":55811,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12463:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55810,"name":"address","nodeType":"ElementaryTypeName","src":"12463:7:108","typeDescriptions":{}}},"id":55813,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12463:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55814,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55761,"src":"12478:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55815,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55759,"src":"12488:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55816,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55774,"src":"12499:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55809,"name":"_payAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56203,"src":"12450:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":55817,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12450:63:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55818,"nodeType":"ExpressionStatement","src":"12450:63:108"},{"eventCall":{"arguments":[{"id":55820,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55761,"src":"12566:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55821,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55757,"src":"12588:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55822,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55759,"src":"12613:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55823,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55765,"src":"12636:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55824,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55774,"src":"12661:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55819,"name":"AttesterEpochRolledOver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56625,"src":"12529:23:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,uint256,uint256)"}},"id":55825,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12529:155:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55826,"nodeType":"EmitStatement","src":"12524:160:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_rollOverAttester","nameLocation":"11360:17:108","parameters":{"id":55762,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55755,"mutability":"mutable","name":"domain","nameLocation":"11395:6:108","nodeType":"VariableDeclaration","scope":55828,"src":"11387:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55754,"name":"address","nodeType":"ElementaryTypeName","src":"11387:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55757,"mutability":"mutable","name":"epochNumber","nameLocation":"11419:11:108","nodeType":"VariableDeclaration","scope":55828,"src":"11411:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55756,"name":"uint256","nodeType":"ElementaryTypeName","src":"11411:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55759,"mutability":"mutable","name":"custodian","nameLocation":"11448:9:108","nodeType":"VariableDeclaration","scope":55828,"src":"11440:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55758,"name":"address","nodeType":"ElementaryTypeName","src":"11440:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55761,"mutability":"mutable","name":"attester","nameLocation":"11475:8:108","nodeType":"VariableDeclaration","scope":55828,"src":"11467:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55760,"name":"address","nodeType":"ElementaryTypeName","src":"11467:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11377:112:108"},"returnParameters":{"id":55763,"nodeType":"ParameterList","parameters":[],"src":"11499:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55906,"nodeType":"FunctionDefinition","src":"12697:761:108","nodes":[],"body":{"id":55905,"nodeType":"Block","src":"12767:691:108","nodes":[],"statements":[{"body":{"id":55890,"nodeType":"Block","src":"12986:318:108","statements":[{"assignments":[55850],"declarations":[{"constant":false,"id":55850,"mutability":"mutable","name":"attester","nameLocation":"13008:8:108","nodeType":"VariableDeclaration","scope":55890,"src":"13000:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55849,"name":"address","nodeType":"ElementaryTypeName","src":"13000:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55857,"initialValue":{"arguments":[{"id":55855,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55836,"src":"13048:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55851,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"13019:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55853,"indexExpression":{"id":55852,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13037:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13019:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55854,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13045:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"13019:28:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55856,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13019:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"13000:50:108"},{"body":{"id":55888,"nodeType":"Block","src":"13131:163:108","statements":[{"assignments":[55873],"declarations":[{"constant":false,"id":55873,"mutability":"mutable","name":"custodian","nameLocation":"13157:9:108","nodeType":"VariableDeclaration","scope":55888,"src":"13149:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55872,"name":"address","nodeType":"ElementaryTypeName","src":"13149:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55880,"initialValue":{"arguments":[{"id":55878,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55859,"src":"13199:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55874,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"13169:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55876,"indexExpression":{"id":55875,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13188:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13169:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55877,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13196:2:108","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46774,"src":"13169:29:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55879,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13169:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"13149:52:108"},{"expression":{"arguments":[{"id":55882,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13238:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55883,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55832,"src":"13246:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55884,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55873,"src":"13259:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55885,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55850,"src":"13270:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55881,"name":"_rollOverAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55828,"src":"13220:17:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,uint256,address,address)"}},"id":55886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13220:59:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55887,"nodeType":"ExpressionStatement","src":"13220:59:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55868,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55862,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55859,"src":"13085:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55863,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56310,"src":"13089:18:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55865,"indexExpression":{"id":55864,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13108:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13089:26:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55866,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13116:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"13089:33:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55867,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13089:35:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13085:39:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55889,"initializationExpression":{"assignments":[55859],"declarations":[{"constant":false,"id":55859,"mutability":"mutable","name":"j","nameLocation":"13078:1:108","nodeType":"VariableDeclaration","scope":55889,"src":"13070:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55858,"name":"uint256","nodeType":"ElementaryTypeName","src":"13070:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55861,"initialValue":{"hexValue":"30","id":55860,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13082:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"13070:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"13126:3:108","subExpression":{"id":55869,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55859,"src":"13126:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55871,"nodeType":"ExpressionStatement","src":"13126:3:108"},"nodeType":"ForStatement","src":"13065:229:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55845,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55839,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55836,"src":"12941:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55840,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"12945:17:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46651_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55842,"indexExpression":{"id":55841,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"12963:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12945:25:108","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46651_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55843,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12971:6:108","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"12945:32:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46651_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46651_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12945:34:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12941:38:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55891,"initializationExpression":{"assignments":[55836],"declarations":[{"constant":false,"id":55836,"mutability":"mutable","name":"i","nameLocation":"12934:1:108","nodeType":"VariableDeclaration","scope":55891,"src":"12926:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55835,"name":"uint256","nodeType":"ElementaryTypeName","src":"12926:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55838,"initialValue":{"hexValue":"30","id":55837,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12938:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"12926:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55847,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"12981:3:108","subExpression":{"id":55846,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55836,"src":"12981:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55848,"nodeType":"ExpressionStatement","src":"12981:3:108"},"nodeType":"ForStatement","src":"12921:383:108"},{"expression":{"id":55898,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55892,"name":"currentEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56300,"src":"13353:20:108","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55894,"indexExpression":{"id":55893,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13374:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13353:28:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55897,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55895,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55832,"src":"13384:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55896,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13398:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"13384:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13353:46:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55899,"nodeType":"ExpressionStatement","src":"13353:46:108"},{"eventCall":{"arguments":[{"id":55901,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55830,"src":"13431:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55902,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55832,"src":"13439:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55900,"name":"EpochRolledOver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56631,"src":"13415:15:108","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":55903,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13415:36:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55904,"nodeType":"EmitStatement","src":"13410:41:108"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_rollOverEpoch","nameLocation":"12706:14:108","parameters":{"id":55833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55830,"mutability":"mutable","name":"domain","nameLocation":"12729:6:108","nodeType":"VariableDeclaration","scope":55906,"src":"12721:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55829,"name":"address","nodeType":"ElementaryTypeName","src":"12721:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55832,"mutability":"mutable","name":"epochNumber","nameLocation":"12745:11:108","nodeType":"VariableDeclaration","scope":55906,"src":"12737:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55831,"name":"uint256","nodeType":"ElementaryTypeName","src":"12737:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12720:37:108"},"returnParameters":{"id":55834,"nodeType":"ParameterList","parameters":[],"src":"12767:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55919,"nodeType":"FunctionDefinition","src":"13464:106:108","nodes":[],"body":{"id":55918,"nodeType":"Block","src":"13498:72:108","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":55910,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13523:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55911,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13527:6:108","memberName":"sender","nodeType":"MemberAccess","src":"13523:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":55913,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13551:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55914,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13555:6:108","memberName":"sender","nodeType":"MemberAccess","src":"13551:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55912,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"13535:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55915,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13535:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55909,"name":"_rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55906,"src":"13508:14:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":55916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13508:55:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55917,"nodeType":"ExpressionStatement","src":"13508:55:108"}]},"baseFunctions":[56564],"functionSelector":"a887b71c","implemented":true,"kind":"function","modifiers":[],"name":"rollOverEpoch","nameLocation":"13473:13:108","parameters":{"id":55907,"nodeType":"ParameterList","parameters":[],"src":"13486:2:108"},"returnParameters":{"id":55908,"nodeType":"ParameterList","parameters":[],"src":"13498:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55969,"nodeType":"FunctionDefinition","src":"13877:803:108","nodes":[],"body":{"id":55968,"nodeType":"Block","src":"14037:643:108","nodes":[],"statements":[{"assignments":[55934],"declarations":[{"constant":false,"id":55934,"mutability":"mutable","name":"targetEpoch","nameLocation":"14108:11:108","nodeType":"VariableDeclaration","scope":55968,"src":"14100:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55933,"name":"uint256","nodeType":"ElementaryTypeName","src":"14100:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55936,"initialValue":{"id":55935,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55924,"src":"14122:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14100:27:108"},{"assignments":[55938],"declarations":[{"constant":false,"id":55938,"mutability":"mutable","name":"stakeForEpoch","nameLocation":"14145:13:108","nodeType":"VariableDeclaration","scope":55968,"src":"14137:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55937,"name":"uint256","nodeType":"ElementaryTypeName","src":"14137:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55945,"initialValue":{"arguments":[{"id":55940,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55922,"src":"14190:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55941,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55934,"src":"14210:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55942,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55926,"src":"14235:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55943,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55928,"src":"14258:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55939,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"14161:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14161:115:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14137:139:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55946,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55938,"src":"14369:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":55947,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"14385:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14369:22:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":55966,"nodeType":"Block","src":"14587:87:108","statements":[{"expression":{"arguments":[{"id":55959,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55922,"src":"14614:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55960,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55934,"src":"14622:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55961,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55926,"src":"14635:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55962,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55928,"src":"14646:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55963,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55930,"src":"14656:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55958,"name":"_removeStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55356,"src":"14601:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55964,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14601:62:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55965,"nodeType":"ExpressionStatement","src":"14601:62:108"}]},"id":55967,"nodeType":"IfStatement","src":"14365:309:108","trueBody":{"id":55957,"nodeType":"Block","src":"14393:188:108","statements":[{"expression":{"arguments":[{"id":55950,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55922,"src":"14437:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55951,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55934,"src":"14461:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55952,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55926,"src":"14490:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55953,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55928,"src":"14517:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55954,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55938,"src":"14543:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55949,"name":"_removeStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55356,"src":"14407:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14407:163:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55956,"nodeType":"ExpressionStatement","src":"14407:163:108"}]}}]},"documentation":{"id":55920,"nodeType":"StructuredDocumentation","src":"13576:296:108","text":" @dev Slash an attester's stake\n @param domain The domain of the attester\n @param epoch The epoch in which the slash is attempted\n @param custodian The custodian of the token\n @param attester The attester to slash\n @param amount The amount to slash"},"implemented":true,"kind":"function","modifiers":[],"name":"_slashStake","nameLocation":"13886:11:108","parameters":{"id":55931,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55922,"mutability":"mutable","name":"domain","nameLocation":"13915:6:108","nodeType":"VariableDeclaration","scope":55969,"src":"13907:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55921,"name":"address","nodeType":"ElementaryTypeName","src":"13907:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55924,"mutability":"mutable","name":"epoch","nameLocation":"13939:5:108","nodeType":"VariableDeclaration","scope":55969,"src":"13931:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55923,"name":"uint256","nodeType":"ElementaryTypeName","src":"13931:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55926,"mutability":"mutable","name":"custodian","nameLocation":"13962:9:108","nodeType":"VariableDeclaration","scope":55969,"src":"13954:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55925,"name":"address","nodeType":"ElementaryTypeName","src":"13954:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55928,"mutability":"mutable","name":"attester","nameLocation":"13989:8:108","nodeType":"VariableDeclaration","scope":55969,"src":"13981:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55927,"name":"address","nodeType":"ElementaryTypeName","src":"13981:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55930,"mutability":"mutable","name":"amount","nameLocation":"14015:6:108","nodeType":"VariableDeclaration","scope":55969,"src":"14007:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55929,"name":"uint256","nodeType":"ElementaryTypeName","src":"14007:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13897:130:108"},"returnParameters":{"id":55932,"nodeType":"ParameterList","parameters":[],"src":"14037:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":56019,"nodeType":"FunctionDefinition","src":"15012:902:108","nodes":[],"body":{"id":56018,"nodeType":"Block","src":"15150:764:108","nodes":[],"statements":[{"assignments":[55982],"declarations":[{"constant":false,"id":55982,"mutability":"mutable","name":"stakeForEpoch","nameLocation":"15227:13:108","nodeType":"VariableDeclaration","scope":56018,"src":"15219:21:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55981,"name":"uint256","nodeType":"ElementaryTypeName","src":"15219:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55989,"initialValue":{"arguments":[{"id":55984,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55972,"src":"15272:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55985,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55974,"src":"15292:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55986,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55976,"src":"15311:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55987,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55978,"src":"15334:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55983,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"15243:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55988,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15243:109:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15219:133:108"},{"assignments":[55991],"declarations":[{"constant":false,"id":55991,"mutability":"mutable","name":"targetEpoch","nameLocation":"15370:11:108","nodeType":"VariableDeclaration","scope":56018,"src":"15362:19:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55990,"name":"uint256","nodeType":"ElementaryTypeName","src":"15362:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55995,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55994,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55992,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55974,"src":"15384:5:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55993,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15392:1:108","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15384:9:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15362:31:108"},{"assignments":[55997],"declarations":[{"constant":false,"id":55997,"mutability":"mutable","name":"unstakeForEpoch","nameLocation":"15411:15:108","nodeType":"VariableDeclaration","scope":56018,"src":"15403:23:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55996,"name":"uint256","nodeType":"ElementaryTypeName","src":"15403:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56004,"initialValue":{"arguments":[{"id":55999,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55972,"src":"15460:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56000,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55991,"src":"15480:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56001,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55976,"src":"15505:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56002,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55978,"src":"15528:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55998,"name":"getUnstakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55572,"src":"15429:17:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":56003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15429:117:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15403:143:108"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56007,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56005,"name":"unstakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55997,"src":"15561:15:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":56006,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"15579:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15561:31:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56017,"nodeType":"IfStatement","src":"15557:351:108","trueBody":{"id":56016,"nodeType":"Block","src":"15594:314:108","statements":[{"expression":{"arguments":[{"id":56009,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55972,"src":"15764:6:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56010,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55991,"src":"15788:11:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56011,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55976,"src":"15817:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56012,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55978,"src":"15844:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56013,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55982,"src":"15870:13:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56008,"name":"_setUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55434,"src":"15735:11:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":56014,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15735:162:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56015,"nodeType":"ExpressionStatement","src":"15735:162:108"}]}}]},"documentation":{"id":55970,"nodeType":"StructuredDocumentation","src":"14686:321:108","text":" @dev Slash an attester's unstake\n @param domain The domain of the attester\n @param epoch The epoch in which the slash is attempted, i.e., epoch - 1 of the epoch where the unstake will be removed\n @param custodian The custodian of the token\n @param attester The attester to slash"},"implemented":true,"kind":"function","modifiers":[],"name":"_slashUnstake","nameLocation":"15021:13:108","parameters":{"id":55979,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55972,"mutability":"mutable","name":"domain","nameLocation":"15052:6:108","nodeType":"VariableDeclaration","scope":56019,"src":"15044:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55971,"name":"address","nodeType":"ElementaryTypeName","src":"15044:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55974,"mutability":"mutable","name":"epoch","nameLocation":"15076:5:108","nodeType":"VariableDeclaration","scope":56019,"src":"15068:13:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55973,"name":"uint256","nodeType":"ElementaryTypeName","src":"15068:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55976,"mutability":"mutable","name":"custodian","nameLocation":"15099:9:108","nodeType":"VariableDeclaration","scope":56019,"src":"15091:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55975,"name":"address","nodeType":"ElementaryTypeName","src":"15091:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55978,"mutability":"mutable","name":"attester","nameLocation":"15126:8:108","nodeType":"VariableDeclaration","scope":56019,"src":"15118:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55977,"name":"address","nodeType":"ElementaryTypeName","src":"15118:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15034:106:108"},"returnParameters":{"id":55980,"nodeType":"ParameterList","parameters":[],"src":"15150:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":56125,"nodeType":"FunctionDefinition","src":"15920:1564:108","nodes":[],"body":{"id":56124,"nodeType":"Block","src":"16103:1381:108","nodes":[],"statements":[{"body":{"id":56122,"nodeType":"Block","src":"16160:1318:108","statements":[{"assignments":[56046],"declarations":[{"constant":false,"id":56046,"mutability":"mutable","name":"refundAmount","nameLocation":"16409:12:108","nodeType":"VariableDeclaration","scope":56122,"src":"16401:20:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56045,"name":"uint256","nodeType":"ElementaryTypeName","src":"16401:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56074,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":56050,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16487:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16491:6:108","memberName":"sender","nodeType":"MemberAccess","src":"16487:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":56053,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"16535:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56055,"indexExpression":{"id":56054,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16545:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16535:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56052,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"16519:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":56056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16519:29:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56057,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56022,"src":"16570:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56059,"indexExpression":{"id":56058,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16581:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16570:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56060,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"16605:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56062,"indexExpression":{"id":56061,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16615:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16605:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56049,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55527,"src":"16450:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":56063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16450:185:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"baseExpression":{"id":56066,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56028,"src":"16662:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56068,"indexExpression":{"id":56067,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16670:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16662:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56069,"name":"refundAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56031,"src":"16674:13:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56071,"indexExpression":{"id":56070,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16688:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16674:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56064,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46220,"src":"16653:4:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$46220_$","typeString":"type(library Math)"}},"id":56065,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16658:3:108","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":45371,"src":"16653:8:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":56072,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16653:38:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56047,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46220,"src":"16424:4:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$46220_$","typeString":"type(library Math)"}},"id":56048,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16429:3:108","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":45371,"src":"16424:8:108","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":56073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16424:281:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"16401:304:108"},{"expression":{"arguments":[{"arguments":[{"id":56078,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16757:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":56077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16749:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56076,"name":"address","nodeType":"ElementaryTypeName","src":"16749:7:108","typeDescriptions":{}}},"id":56079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16749:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56080,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"16858:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56082,"indexExpression":{"id":56081,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16868:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16858:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56083,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56022,"src":"16888:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56085,"indexExpression":{"id":56084,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16899:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16888:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56086,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56046,"src":"16919:12:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56075,"name":"_payAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56203,"src":"16719:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":56087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16719:226:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56088,"nodeType":"ExpressionStatement","src":"16719:226:108"},{"expression":{"arguments":[{"expression":{"id":56090,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17133:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56091,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17137:6:108","memberName":"sender","nodeType":"MemberAccess","src":"17133:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":56093,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17177:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17181:6:108","memberName":"sender","nodeType":"MemberAccess","src":"17177:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56092,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"17161:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":56095,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17161:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56096,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56022,"src":"17206:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56098,"indexExpression":{"id":56097,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"17217:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17206:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56099,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"17237:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56101,"indexExpression":{"id":56100,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"17247:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17237:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56102,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56028,"src":"17267:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56104,"indexExpression":{"id":56103,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"17275:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17267:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56089,"name":"_slashStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55969,"src":"17104:11:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":56105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17104:187:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56106,"nodeType":"ExpressionStatement","src":"17104:187:108"},{"expression":{"arguments":[{"expression":{"id":56108,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17337:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17341:6:108","memberName":"sender","nodeType":"MemberAccess","src":"17337:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":56111,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17381:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56112,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17385:6:108","memberName":"sender","nodeType":"MemberAccess","src":"17381:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56110,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55461,"src":"17365:15:108","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":56113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17365:27:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56114,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56022,"src":"17410:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56116,"indexExpression":{"id":56115,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"17421:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17410:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56117,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"17441:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56119,"indexExpression":{"id":56118,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"17451:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"17441:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56107,"name":"_slashUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56019,"src":"17306:13:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,uint256,address,address)"}},"id":56120,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17306:161:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56121,"nodeType":"ExpressionStatement","src":"17306:161:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56038,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16133:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":56039,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56025,"src":"16137:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16147:6:108","memberName":"length","nodeType":"MemberAccess","src":"16137:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16133:20:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56123,"initializationExpression":{"assignments":[56035],"declarations":[{"constant":false,"id":56035,"mutability":"mutable","name":"i","nameLocation":"16126:1:108","nodeType":"VariableDeclaration","scope":56123,"src":"16118:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56034,"name":"uint256","nodeType":"ElementaryTypeName","src":"16118:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56037,"initialValue":{"hexValue":"30","id":56036,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16130:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16118:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":56043,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16155:3:108","subExpression":{"id":56042,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"16155:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56044,"nodeType":"ExpressionStatement","src":"16155:3:108"},"nodeType":"ForStatement","src":"16113:1365:108"}]},"baseFunctions":[56579],"functionSelector":"a885c975","implemented":true,"kind":"function","modifiers":[],"name":"slash","nameLocation":"15929:5:108","parameters":{"id":56032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56022,"mutability":"mutable","name":"custodians","nameLocation":"15963:10:108","nodeType":"VariableDeclaration","scope":56125,"src":"15944:29:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56020,"name":"address","nodeType":"ElementaryTypeName","src":"15944:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56021,"nodeType":"ArrayTypeName","src":"15944:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":56025,"mutability":"mutable","name":"attesters","nameLocation":"16002:9:108","nodeType":"VariableDeclaration","scope":56125,"src":"15983:28:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56023,"name":"address","nodeType":"ElementaryTypeName","src":"15983:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56024,"nodeType":"ArrayTypeName","src":"15983:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":56028,"mutability":"mutable","name":"amounts","nameLocation":"16040:7:108","nodeType":"VariableDeclaration","scope":56125,"src":"16021:26:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":56026,"name":"uint256","nodeType":"ElementaryTypeName","src":"16021:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56027,"nodeType":"ArrayTypeName","src":"16021:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":56031,"mutability":"mutable","name":"refundAmounts","nameLocation":"16076:13:108","nodeType":"VariableDeclaration","scope":56125,"src":"16057:32:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":56029,"name":"uint256","nodeType":"ElementaryTypeName","src":"16057:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56030,"nodeType":"ArrayTypeName","src":"16057:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"15934:161:108"},"returnParameters":{"id":56033,"nodeType":"ParameterList","parameters":[],"src":"16103:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56203,"nodeType":"FunctionDefinition","src":"17490:1535:108","nodes":[],"body":{"id":56202,"nodeType":"Block","src":"17626:1399:108","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":56141,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56136,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56127,"src":"17640:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":56139,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"17656:4:108","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56272","typeString":"contract MovementStaking"}],"id":56138,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17648:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56137,"name":"address","nodeType":"ElementaryTypeName","src":"17648:7:108","typeDescriptions":{}}},"id":56140,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17648:13:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17640:21:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":56200,"nodeType":"Block","src":"18201:818:108","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":56179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":56176,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"18583:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":56175,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"18575:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56174,"name":"address","nodeType":"ElementaryTypeName","src":"18575:7:108","typeDescriptions":{}}},"id":56177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18575:14:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":56178,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56131,"src":"18593:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"18575:27:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":56198,"nodeType":"Block","src":"18761:248:108","statements":[{"expression":{"arguments":[{"id":56193,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56127,"src":"18914:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56194,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56129,"src":"18940:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56195,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"18970:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":56190,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56131,"src":"18860:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56189,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57304,"src":"18844:15:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICustodianToken_$57304_$","typeString":"type(contract ICustodianToken)"}},"id":56191,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18844:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICustodianToken_$57304","typeString":"contract ICustodianToken"}},"id":56192,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18871:21:108","memberName":"buyCustodialTokenFrom","nodeType":"MemberAccess","referencedDeclaration":57303,"src":"18844:48:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":56196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18844:150:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56197,"nodeType":"ExpressionStatement","src":"18844:150:108"}]},"id":56199,"nodeType":"IfStatement","src":"18571:438:108","trueBody":{"id":56188,"nodeType":"Block","src":"18604:151:108","statements":[{"expression":{"arguments":[{"id":56183,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56127,"src":"18690:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56184,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56129,"src":"18696:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56185,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"18706:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56180,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"18671:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":56182,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18677:12:108","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43662,"src":"18671:18:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":56186,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18671:42:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56187,"nodeType":"ExpressionStatement","src":"18671:42:108"}]}}]},"id":56201,"nodeType":"IfStatement","src":"17636:1383:108","trueBody":{"id":56173,"nodeType":"Block","src":"17663:532:108","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":56147,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":56144,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"17741:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":56143,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17733:7:108","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56142,"name":"address","nodeType":"ElementaryTypeName","src":"17733:7:108","typeDescriptions":{}}},"id":56145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17733:14:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":56146,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56131,"src":"17751:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17733:27:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":56171,"nodeType":"Block","src":"17909:276:108","statements":[{"expression":{"arguments":[{"id":56159,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56131,"src":"18006:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56160,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"18017:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56156,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"17992:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":56158,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17998:7:108","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":43650,"src":"17992:13:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":56161,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17992:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56162,"nodeType":"ExpressionStatement","src":"17992:32:108"},{"expression":{"arguments":[{"id":56167,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56129,"src":"18153:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56168,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"18163:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":56164,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56131,"src":"18124:9:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56163,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57304,"src":"18108:15:108","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICustodianToken_$57304_$","typeString":"type(contract ICustodianToken)"}},"id":56165,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18108:26:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICustodianToken_$57304","typeString":"contract ICustodianToken"}},"id":56166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18135:17:108","memberName":"buyCustodialToken","nodeType":"MemberAccess","referencedDeclaration":57294,"src":"18108:44:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":56169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18108:62:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56170,"nodeType":"ExpressionStatement","src":"18108:62:108"}]},"id":56172,"nodeType":"IfStatement","src":"17729:456:108","trueBody":{"id":56155,"nodeType":"Block","src":"17762:141:108","statements":[{"expression":{"arguments":[{"id":56151,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56129,"src":"17844:8:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56152,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"17854:6:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56148,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56292,"src":"17829:5:108","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":56150,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17835:8:108","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":43630,"src":"17829:14:108","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":56153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17829:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56154,"nodeType":"ExpressionStatement","src":"17829:32:108"}]}}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttester","nameLocation":"17499:12:108","parameters":{"id":56134,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56127,"mutability":"mutable","name":"from","nameLocation":"17529:4:108","nodeType":"VariableDeclaration","scope":56203,"src":"17521:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56126,"name":"address","nodeType":"ElementaryTypeName","src":"17521:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56129,"mutability":"mutable","name":"attester","nameLocation":"17551:8:108","nodeType":"VariableDeclaration","scope":56203,"src":"17543:16:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56128,"name":"address","nodeType":"ElementaryTypeName","src":"17543:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56131,"mutability":"mutable","name":"custodian","nameLocation":"17577:9:108","nodeType":"VariableDeclaration","scope":56203,"src":"17569:17:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56130,"name":"address","nodeType":"ElementaryTypeName","src":"17569:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56133,"mutability":"mutable","name":"amount","nameLocation":"17604:6:108","nodeType":"VariableDeclaration","scope":56203,"src":"17596:14:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56132,"name":"uint256","nodeType":"ElementaryTypeName","src":"17596:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17511:105:108"},"returnParameters":{"id":56135,"nodeType":"ParameterList","parameters":[],"src":"17626:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":56243,"nodeType":"FunctionDefinition","src":"19031:451:108","nodes":[],"body":{"id":56242,"nodeType":"Block","src":"19173:309:108","nodes":[],"statements":[{"body":{"id":56240,"nodeType":"Block","src":"19354:122:108","statements":[{"expression":{"arguments":[{"expression":{"id":56227,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19413:3:108","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56228,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19417:6:108","memberName":"sender","nodeType":"MemberAccess","src":"19413:10:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56229,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56206,"src":"19425:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56231,"indexExpression":{"id":56230,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56216,"src":"19435:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19425:12:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56232,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56212,"src":"19439:10:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56234,"indexExpression":{"id":56233,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56216,"src":"19450:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19439:13:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56235,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56209,"src":"19454:7:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56237,"indexExpression":{"id":56236,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56216,"src":"19462:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19454:10:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56226,"name":"_payAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56203,"src":"19400:12:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":56238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19400:65:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56239,"nodeType":"ExpressionStatement","src":"19400:65:108"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56219,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56216,"src":"19327:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":56220,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56206,"src":"19331:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56221,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19341:6:108","memberName":"length","nodeType":"MemberAccess","src":"19331:16:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19327:20:108","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56241,"initializationExpression":{"assignments":[56216],"declarations":[{"constant":false,"id":56216,"mutability":"mutable","name":"i","nameLocation":"19320:1:108","nodeType":"VariableDeclaration","scope":56241,"src":"19312:9:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56215,"name":"uint256","nodeType":"ElementaryTypeName","src":"19312:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56218,"initialValue":{"hexValue":"30","id":56217,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19324:1:108","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"19312:13:108"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":56224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19349:3:108","subExpression":{"id":56223,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56216,"src":"19349:1:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56225,"nodeType":"ExpressionStatement","src":"19349:3:108"},"nodeType":"ForStatement","src":"19307:169:108"}]},"functionSelector":"da33ee7f","implemented":true,"kind":"function","modifiers":[],"name":"reward","nameLocation":"19040:6:108","parameters":{"id":56213,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56206,"mutability":"mutable","name":"attesters","nameLocation":"19075:9:108","nodeType":"VariableDeclaration","scope":56243,"src":"19056:28:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56204,"name":"address","nodeType":"ElementaryTypeName","src":"19056:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56205,"nodeType":"ArrayTypeName","src":"19056:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":56209,"mutability":"mutable","name":"amounts","nameLocation":"19113:7:108","nodeType":"VariableDeclaration","scope":56243,"src":"19094:26:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":56207,"name":"uint256","nodeType":"ElementaryTypeName","src":"19094:7:108","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56208,"nodeType":"ArrayTypeName","src":"19094:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":56212,"mutability":"mutable","name":"custodians","nameLocation":"19149:10:108","nodeType":"VariableDeclaration","scope":56243,"src":"19130:29:108","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56210,"name":"address","nodeType":"ElementaryTypeName","src":"19130:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56211,"nodeType":"ArrayTypeName","src":"19130:9:108","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"19046:119:108"},"returnParameters":{"id":56214,"nodeType":"ParameterList","parameters":[],"src":"19173:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56257,"nodeType":"FunctionDefinition","src":"19488:140:108","nodes":[],"body":{"id":56256,"nodeType":"Block","src":"19580:48:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":56252,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56347,"src":"19600:14:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":56253,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56245,"src":"19616:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56251,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39213,"src":"19590:9:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":56254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19590:31:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56255,"nodeType":"ExpressionStatement","src":"19590:31:108"}]},"baseFunctions":[56584],"functionSelector":"41566585","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":56248,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"19560:18:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":56249,"kind":"modifierInvocation","modifierName":{"id":56247,"name":"onlyRole","nameLocations":["19551:8:108"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"19551:8:108"},"nodeType":"ModifierInvocation","src":"19551:28:108"}],"name":"whitelistAddress","nameLocation":"19497:16:108","parameters":{"id":56246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56245,"mutability":"mutable","name":"addr","nameLocation":"19531:4:108","nodeType":"VariableDeclaration","scope":56257,"src":"19523:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56244,"name":"address","nodeType":"ElementaryTypeName","src":"19523:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19513:28:108"},"returnParameters":{"id":56250,"nodeType":"ParameterList","parameters":[],"src":"19580:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":56271,"nodeType":"FunctionDefinition","src":"19634:151:108","nodes":[],"body":{"id":56270,"nodeType":"Block","src":"19736:49:108","nodes":[],"statements":[{"expression":{"arguments":[{"id":56266,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56347,"src":"19757:14:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":56267,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56259,"src":"19773:4:108","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56265,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"19746:10:108","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":56268,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19746:32:108","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56269,"nodeType":"ExpressionStatement","src":"19746:32:108"}]},"baseFunctions":[56589],"functionSelector":"286dd3f5","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":56262,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"19716:18:108","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":56263,"kind":"modifierInvocation","modifierName":{"id":56261,"name":"onlyRole","nameLocations":["19707:8:108"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"19707:8:108"},"nodeType":"ModifierInvocation","src":"19707:28:108"}],"name":"removeAddressFromWhitelist","nameLocation":"19643:26:108","parameters":{"id":56260,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56259,"mutability":"mutable","name":"addr","nameLocation":"19687:4:108","nodeType":"VariableDeclaration","scope":56271,"src":"19679:12:108","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56258,"name":"address","nodeType":"ElementaryTypeName","src":"19679:7:108","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19669:28:108"},"returnParameters":{"id":56264,"nodeType":"ParameterList","parameters":[],"src":"19736:0:108"},"scope":56272,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":54888,"name":"MovementStakingStorage","nameLocations":["623:22:108"],"nodeType":"IdentifierPath","referencedDeclaration":56348,"src":"623:22:108"},"id":54889,"nodeType":"InheritanceSpecifier","src":"623:22:108"},{"baseName":{"id":54890,"name":"IMovementStaking","nameLocations":["651:16:108"],"nodeType":"IdentifierPath","referencedDeclaration":56638,"src":"651:16:108"},"id":54891,"nodeType":"InheritanceSpecifier","src":"651:16:108"},{"baseName":{"id":54892,"name":"BaseStaking","nameLocations":["673:11:108"],"nodeType":"IdentifierPath","referencedDeclaration":56403,"src":"673:11:108"},"id":54893,"nodeType":"InheritanceSpecifier","src":"673:11:108"}],"canonicalName":"MovementStaking","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[56272,56403,39821,42755,39385,41148,45166,41527,40653,39639,56638,56348],"name":"MovementStaking","nameLocation":"600:15:108","scope":56273,"usedErrors":[39402,39405,39666,39671,41454,41457,42965,42978,44073,44076,56633,56635,56637],"usedEvents":[39410,41466,41475,41484,42944,56601,56613,56625,56631]}],"license":"UNLICENSED"},"id":108} \ No newline at end of file +{"abi":[{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"WHITELIST_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"acceptGenesisCeremony","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"currentEpochByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"currentEpoch","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"domainGenesisAccepted","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"epochDurationByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"epochDuration","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"epochStakesByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"epochTotalStakeByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"epochUnstakesByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttestersByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpochStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCurrentEpochUnstake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodiansByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getEpochByBlockTime","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextEpochByBlockTime","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStakeAtEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStakeForCurrentEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStakeForEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUnstakeAtEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"_token","type":"address","internalType":"contract IERC20"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"registerDomain","inputs":[{"name":"epochDuration","type":"uint256","internalType":"uint256"},{"name":"custodians","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeAddressFromWhitelist","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"reward","inputs":[{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"amounts","type":"uint256[]","internalType":"uint256[]"},{"name":"custodians","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rollOverEpoch","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"slash","inputs":[{"name":"custodians","type":"address[]","internalType":"address[]"},{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"amounts","type":"uint256[]","internalType":"uint256[]"},{"name":"refundAmounts","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"contract IERC20"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"unstake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"whitelistAddress","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AttesterEpochRolledOver","inputs":[{"name":"attester","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"unstake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AttesterStaked","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":false,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AttesterUnstaked","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":false,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EpochRolledOver","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"CustodianTransferAmountMismatch","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedInnerCall","inputs":[]},{"type":"error","name":"GenesisAlreadyAccepted","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"StakeExceedsGenesisStake","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a0604052306080523480156012575f80fd5b50600160095560805161292661003e5f395f81816117b2015281816117db015261192101526129265ff3fe60806040526004361061023e575f3560e01c80637a997ab711610134578063ad3cb1cc116100b3578063d1ba90ff11610078578063d1ba90ff1461073a578063d37304f814610768578063d547741f14610787578063d5ca03de146107a6578063da33ee7f146107c5578063fc0c546a146107e4575f80fd5b8063ad3cb1cc1461065b578063bf6eac2f14610698578063c0b95ab8146106b7578063c3471ff8146106fc578063c4d66de81461071b575f80fd5b806391d14854116100f957806391d14854146105e257806392a2ebf314610601578063a217fddf14610615578063a885c97514610628578063a887b71c14610647575f80fd5b80637a997ab7146105515780638129fc1c146105715780638489e58014610585578063879b938b146105a45780638d908258146105c3575f80fd5b806344198e4d116101c05780635cdf3155116101855780635cdf31551461046357806360829f8a146104af57806365f1ea20146104ce57806370224360146105135780637667b76d14610532575f80fd5b806344198e4d146103c25780634d3223a5146103e15780634f1ef2861461040057806352d1902d1461041357806354300d7a14610427575f80fd5b80632c7785a8116102065780632c7785a81461031b5780632f2ff15d1461033a57806336568abe146103595780633bccf6351461037857806341566585146103a3575f80fd5b806301ffc9a7146102425780630a0b1b6414610276578063248a9ca3146102af578063286dd3f5146102ce5780632924b73b146102ef575b5f80fd5b34801561024d575f80fd5b5061026161025c3660046122bb565b61081a565b60405190151581526020015b60405180910390f35b348015610281575f80fd5b506102a16102903660046122f6565b60026020525f908152604090205481565b60405190815260200161026d565b3480156102ba575f80fd5b506102a16102c9366004612311565b610850565b3480156102d9575f80fd5b506102ed6102e83660046122f6565b610870565b005b3480156102fa575f80fd5b5061030e6103093660046122f6565b610895565b60405161026d9190612328565b348015610326575f80fd5b506102a16103353660046122f6565b61097f565b348015610345575f80fd5b506102ed610354366004612373565b6109ae565b348015610364575f80fd5b506102ed610373366004612373565b6109d0565b348015610383575f80fd5b506102a16103923660046122f6565b60016020525f908152604090205481565b3480156103ae575f80fd5b506102ed6103bd3660046122f6565b610a08565b3480156103cd575f80fd5b506102a16103dc3660046123a1565b610a29565b3480156103ec575f80fd5b506102a16103fb3660046122f6565b610a71565b6102ed61040e3660046123e1565b610a8b565b34801561041e575f80fd5b506102a1610aa6565b348015610432575f80fd5b506102a16104413660046124a4565b600760209081525f938452604080852082529284528284209052825290205481565b34801561046e575f80fd5b506102a161047d3660046124a4565b6001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b3480156104ba575f80fd5b506102ed6104c93660046124e3565b610ac1565b3480156104d9575f80fd5b506102a16104e8366004612521565b600660209081525f948552604080862082529385528385208152918452828420909152825290205481565b34801561051e575f80fd5b506102a161052d366004612571565b610b56565b34801561053d575f80fd5b506102a161054c366004612571565b610b73565b34801561055c575f80fd5b506102a15f8051602061289183398151915281565b34801561057c575f80fd5b506102ed610b88565b348015610590575f80fd5b506102a161059f3660046122f6565b610c92565b3480156105af575f80fd5b506102a16105be366004612521565b610caa565b3480156105ce575f80fd5b506102a16105dd366004612521565b610ce7565b3480156105ed575f80fd5b506102616105fc366004612373565b610d24565b34801561060c575f80fd5b506102ed610d5a565b348015610620575f80fd5b506102a15f81565b348015610633575f80fd5b506102ed6106423660046125f5565b610eb4565b348015610652575f80fd5b506102ed6110d6565b348015610666575f80fd5b5061068b604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161026d91906126bf565b3480156106a3575f80fd5b506102ed6106b23660046124e3565b6110e8565b3480156106c2575f80fd5b506102a16106d1366004612521565b600560209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610707575f80fd5b506102a16107163660046122f6565b611313565b348015610726575f80fd5b506102ed6107353660046122f6565b611335565b348015610745575f80fd5b506102616107543660046122f6565b60086020525f908152604090205460ff1681565b348015610773575f80fd5b506102ed6107823660046126f4565b61145a565b348015610792575f80fd5b506102ed6107a1366004612373565b6114d8565b3480156107b1575f80fd5b5061030e6107c03660046122f6565b6114f4565b3480156107d0575f80fd5b506102ed6107df36600461273b565b6115d7565b3480156107ef575f80fd5b505f54610802906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b5f6001600160e01b03198216637965db0b60e01b148061084a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f9081525f805160206128d1833981519152602052604090206001015490565b5f61087a8161166c565b6108915f80516020612891833981519152836114d8565b5050565b6001600160a01b0381165f908152600360205260408120606091906108b990611679565b6001600160401b038111156108d0576108d06123cd565b6040519080825280602002602001820160405280156108f9578160200160208202803683370190505b5090505f5b6001600160a01b0384165f90815260036020526040902061091e90611679565b811015610978576001600160a01b0384165f9081526003602052604090206109469082611682565b828281518110610958576109586127d7565b6001600160a01b03909216602092830291909101909101526001016108fe565b5092915050565b5f61098982610a71565b156109a75761099782611313565b6109a29060016127ff565b61084a565b5f92915050565b6109b782610850565b6109c08161166c565b6109ca838361168d565b50505050565b6001600160a01b03811633146109f95760405163334bd91960e11b815260040160405180910390fd5b610a03828261172e565b505050565b5f610a128161166c565b6108915f80516020612891833981519152836109ae565b5f610a6a83610a3785610a71565b846001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b9392505050565b6001600160a01b03165f9081526002602052604090205490565b610a936117a7565b610a9c8261184b565b6108918282611855565b5f610aaf611916565b505f805160206128b183398151915290565b5f80516020612891833981519152610ad88161166c565b610ae061195f565b610af584610aed8661097f565b853386611989565b826001600160a01b0316610b0885610c92565b60408051338152602081018690526001600160a01b038816917fd41c64546a5c34c283150998874c7ee0412c8954f57aef484c681f6e137827df910160405180910390a46109ca6001600955565b5f610b6b84610b6486610a71565b8585610ce7565b949350505050565b5f610b6b84610b8186610a71565b8585610caa565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610bcc5750825b90505f826001600160401b03166001148015610be75750303b155b905081158015610bf5575080155b15610c135760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c3d57845460ff60401b1916600160401b1785555b610c456119dd565b8315610c8b57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f610c9c82610a71565b156109a75761099782610a71565b6001600160a01b039384165f9081526006602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b6001600160a01b039384165f9081526005602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f9182525f805160206128d1833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610d6261195f565b335f8181526008602052604090205460ff1615610d915760405162fe178760e01b815260040160405180910390fd5b6001600160a01b0381165f908152600860205260409020805460ff19166001179055610dbc81611313565b6001600160a01b0382165f908152600260205260408120919091555b6001600160a01b0382165f908152600360205260409020610df890611679565b811015610ea6576001600160a01b0382165f908152600360205260408120610e209083611682565b90505f5b6001600160a01b0384165f908152600460205260409020610e4490611679565b811015610e9c576001600160a01b0384165f908152600460205260408120610e6c9083611682565b90505f610e7b865f8487610ce7565b9050610e9286610e8a88610a71565b8487856119ed565b5050600101610e24565b5050600101610dd8565b5050610eb26001600955565b565b610ebc61195f565b5f5b858110156110c1575f610f85610f4633610ef88b8b87818110610ee357610ee36127d7565b90506020020160208101906103fb91906122f6565b8d8d87818110610f0a57610f0a6127d7565b9050602002016020810190610f1f91906122f6565b8c8c88818110610f3157610f316127d7565b90506020020160208101906105dd91906122f6565b610f80888886818110610f5b57610f5b6127d7565b90506020020135878787818110610f7457610f746127d7565b90506020020135611a78565b611a78565b9050610fdf30898985818110610f9d57610f9d6127d7565b9050602002016020810190610fb291906122f6565b8c8c86818110610fc457610fc46127d7565b9050602002016020810190610fd991906122f6565b84611a8d565b61105833610fec33610a71565b8c8c86818110610ffe57610ffe6127d7565b905060200201602081019061101391906122f6565b8b8b87818110611025576110256127d7565b905060200201602081019061103a91906122f6565b8a8a8881811061104c5761104c6127d7565b90506020020135611cb6565b6110b83361106533610a71565b8c8c86818110611077576110776127d7565b905060200201602081019061108c91906122f6565b8b8b8781811061109e5761109e6127d7565b90506020020160208101906110b391906122f6565b611cf6565b50600101610ebe565b506110cc6001600955565b5050505050505050565b610eb2336110e333610a71565b611d68565b5f805160206128918339815191526110ff8161166c565b61110761195f565b6001600160a01b0384165f9081526003602052604090206111289033611e85565b505f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561116f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111939190612812565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303815f875af11580156111e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061120a9190612829565b5061121583826127ff565b5f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561125a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061127e9190612812565b1461129c57604051631910d68360e21b815260040160405180910390fd5b6112b1856112a98761097f565b8633876119ed565b836001600160a01b03166112c486610c92565b60408051338152602081018790526001600160a01b038916917f7be65c2ae4d3c544de23b1db5bea4d541c02b93a5f4302852f4dc9880e0cb554910160405180910390a4506109ca6001600955565b6001600160a01b0381165f9081526001602052604081205461084a9042612848565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156113795750825b90505f826001600160401b031660011480156113945750303b155b9050811580156113a2575080155b156113c05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156113ea57845460ff60401b1916600160401b1785555b6113f2611e99565b5f80546001600160a01b0319166001600160a01b038816179055831561145257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b61146261195f565b335f8181526001602052604081208590555b828110156114cc576114c3848483818110611491576114916127d7565b90506020020160208101906114a691906122f6565b6001600160a01b0384165f90815260046020526040902090611e85565b50600101611474565b5050610a036001600955565b6114e182610850565b6114ea8161166c565b6109ca838361172e565b6001600160a01b0381165f9081526004602052604081206060919061151890611679565b6001600160401b0381111561152f5761152f6123cd565b604051908082528060200260200182016040528015611558578160200160208202803683370190505b5090505f5b6001600160a01b0384165f90815260046020526040902061157d90611679565b811015610978576001600160a01b0384165f9081526004602052604090206115a59082611682565b8282815181106115b7576115b76127d7565b6001600160a01b039092166020928302919091019091015260010161155d565b6115df61195f565b5f5b8581101561166157611659338888848181106115ff576115ff6127d7565b905060200201602081019061161491906122f6565b858585818110611626576116266127d7565b905060200201602081019061163b91906122f6565b88888681811061164d5761164d6127d7565b90506020020135611a8d565b6001016115e1565b506114526001600955565b6116768133611eab565b50565b5f61084a825490565b5f610a6a8383611ee4565b5f5f805160206128d18339815191526116a68484610d24565b611725575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556116db3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061084a565b5f91505061084a565b5f5f805160206128d18339815191526117478484610d24565b15611725575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061084a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061182d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166118215f805160206128b1833981519152546001600160a01b031690565b6001600160a01b031614155b15610eb25760405163703e46dd60e11b815260040160405180910390fd5b5f6108918161166c565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118af575060408051601f3d908101601f191682019092526118ac91810190612812565b60015b6118dc57604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f805160206128b1833981519152811461190c57604051632a87526960e21b8152600481018290526024016118d3565b610a038383611f0a565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610eb25760405163703e46dd60e11b815260040160405180910390fd5b60026009540361198257604051633ee5aeb560e01b815260040160405180910390fd5b6002600955565b6001600160a01b038086165f908152600660209081526040808320888452825280832087851684528252808320938616835292905290812080548392906119d19084906127ff565b90915550505050505050565b6119e5611f5f565b610eb2611e99565b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611a359084906127ff565b90915550506001600160a01b038086165f9081526007602090815260408083208884528252808320938716835292905290812080548392906119d19084906127ff565b5f818310611a865781610a6a565b5090919050565b306001600160a01b03851603611c01575f546001600160a01b03808416911603611b2b575f5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044015b6020604051808303815f875af1158015611b01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b259190612829565b506109ca565b5f5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015611b7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9e9190612829565b506040516318950c7160e01b81526001600160a01b038481166004830152602482018390528316906318950c71906044015f604051808303815f87803b158015611be6575f80fd5b505af1158015611bf8573d5f803e3d5ffd5b505050506109ca565b5f546001600160a01b03808416911603611c55575f546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201849052909116906323b872dd90606401611ae5565b60405163c4652d8360e01b81526001600160a01b03858116600483015284811660248301526044820183905283169063c4652d83906064015f604051808303815f87803b158015611ca4575f80fd5b505af11580156110cc573d5f803e3d5ffd5b835f611cc487838787610ce7565b905082811015611ce057611cdb8783878785611fa8565b611ced565b611ced8783878787611fa8565b50505050505050565b5f611d0385858585610ce7565b90505f611d118560016127ff565b90505f611d2087838787610caa565b905082811115611ced576001600160a01b038088165f9081526006602090815260408083208684528252808320848a1684528252808320938816835292905220839055611ced565b5f5b6001600160a01b0383165f908152600360205260409020611d8a90611679565b811015611e1f576001600160a01b0383165f908152600360205260408120611db29083611682565b90505f5b6001600160a01b0385165f908152600460205260409020611dd690611679565b811015611e15576001600160a01b0385165f908152600460205260408120611dfe9083611682565b9050611e0c86868386612033565b50600101611db6565b5050600101611d6a565b50611e2b8160016127ff565b6001600160a01b0383165f81815260026020526040908190209290925590517fb693195b5ff3e376f8b562486abc516e10fe2467b75f0e4165e79cf4ab70dc4190611e799084815260200190565b60405180910390a25050565b5f610a6a836001600160a01b0384166120f6565b611ea1611f5f565b6116765f3361168d565b611eb58282610d24565b6108915760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016118d3565b5f825f018281548110611ef957611ef96127d7565b905f5260205f200154905092915050565b611f1382612142565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611f5757610a0382826121a5565b610891612217565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610eb257604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611ff0908490612867565b90915550506001600160a01b038086165f9081526007602090815260408083208884528252808320938716835292905290812080548392906119d1908490612867565b5f61204085858585610ce7565b90505f612059866120528760016127ff565b8686610caa565b9050818111156120665750805b5f6120718284612867565b905061208a876120828860016127ff565b8787856119ed565b61209630858785611a8d565b846001600160a01b031686856001600160a01b03167f3ddb7f725ac69363a1df8296c965af4d268f31b082480dcd8419d284fb7fd34286866040516120e5929190918252602082015260400190565b60405180910390a450505050505050565b5f81815260018301602052604081205461213b57508154600181810184555f84815260208082209093018490558454848252828601909352604090209190915561084a565b505f61084a565b806001600160a01b03163b5f0361217757604051634c9c8ce360e01b81526001600160a01b03821660048201526024016118d3565b5f805160206128b183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516121c1919061287a565b5f60405180830381855af49150503d805f81146121f9576040519150601f19603f3d011682016040523d82523d5f602084013e6121fe565b606091505b509150915061220e858383612236565b95945050505050565b3415610eb25760405163b398979f60e01b815260040160405180910390fd5b60608261224b5761224682612292565b610a6a565b815115801561226257506001600160a01b0384163b155b1561228b57604051639996b31560e01b81526001600160a01b03851660048201526024016118d3565b5080610a6a565b8051156122a25780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f602082840312156122cb575f80fd5b81356001600160e01b031981168114610a6a575f80fd5b6001600160a01b0381168114611676575f80fd5b5f60208284031215612306575f80fd5b8135610a6a816122e2565b5f60208284031215612321575f80fd5b5035919050565b602080825282518282018190525f918401906040840190835b818110156123685783516001600160a01b0316835260209384019390920191600101612341565b509095945050505050565b5f8060408385031215612384575f80fd5b823591506020830135612396816122e2565b809150509250929050565b5f80604083850312156123b2575f80fd5b82356123bd816122e2565b91506020830135612396816122e2565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156123f2575f80fd5b82356123fd816122e2565b915060208301356001600160401b03811115612417575f80fd5b8301601f81018513612427575f80fd5b80356001600160401b03811115612440576124406123cd565b604051601f8201601f19908116603f011681016001600160401b038111828210171561246e5761246e6123cd565b604052818152828201602001871015612485575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f805f606084860312156124b6575f80fd5b83356124c1816122e2565b92506020840135915060408401356124d8816122e2565b809150509250925092565b5f805f606084860312156124f5575f80fd5b8335612500816122e2565b92506020840135612510816122e2565b929592945050506040919091013590565b5f805f8060808587031215612534575f80fd5b843561253f816122e2565b9350602085013592506040850135612556816122e2565b91506060850135612566816122e2565b939692955090935050565b5f805f60608486031215612583575f80fd5b833561258e816122e2565b9250602084013561259e816122e2565b915060408401356124d8816122e2565b5f8083601f8401126125be575f80fd5b5081356001600160401b038111156125d4575f80fd5b6020830191508360208260051b85010111156125ee575f80fd5b9250929050565b5f805f805f805f806080898b03121561260c575f80fd5b88356001600160401b03811115612621575f80fd5b61262d8b828c016125ae565b90995097505060208901356001600160401b0381111561264b575f80fd5b6126578b828c016125ae565b90975095505060408901356001600160401b03811115612675575f80fd5b6126818b828c016125ae565b90955093505060608901356001600160401b0381111561269f575f80fd5b6126ab8b828c016125ae565b999c989b5096995094979396929594505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f60408486031215612706575f80fd5b8335925060208401356001600160401b03811115612722575f80fd5b61272e868287016125ae565b9497909650939450505050565b5f805f805f8060608789031215612750575f80fd5b86356001600160401b03811115612765575f80fd5b61277189828a016125ae565b90975095505060208701356001600160401b0381111561278f575f80fd5b61279b89828a016125ae565b90955093505060408701356001600160401b038111156127b9575f80fd5b6127c589828a016125ae565b979a9699509497509295939492505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561084a5761084a6127eb565b5f60208284031215612822575f80fd5b5051919050565b5f60208284031215612839575f80fd5b81518015158114610a6a575f80fd5b5f8261286257634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561084a5761084a6127eb565b5f82518060208501845e5f92019182525091905056fedc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220f89cd60db1a241d5973d2920b5637bf68cceb132f2c25bc4d7a85f8d1390562e64736f6c634300081a0033","sourceMap":"651:18019:109:-:0;;;1171:4:26;1128:48;;651:18019:109;;;;;;;;;-1:-1:-1;1713:1:58;1917:7;:21;651:18019:109;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x60806040526004361061023e575f3560e01c80637a997ab711610134578063ad3cb1cc116100b3578063d1ba90ff11610078578063d1ba90ff1461073a578063d37304f814610768578063d547741f14610787578063d5ca03de146107a6578063da33ee7f146107c5578063fc0c546a146107e4575f80fd5b8063ad3cb1cc1461065b578063bf6eac2f14610698578063c0b95ab8146106b7578063c3471ff8146106fc578063c4d66de81461071b575f80fd5b806391d14854116100f957806391d14854146105e257806392a2ebf314610601578063a217fddf14610615578063a885c97514610628578063a887b71c14610647575f80fd5b80637a997ab7146105515780638129fc1c146105715780638489e58014610585578063879b938b146105a45780638d908258146105c3575f80fd5b806344198e4d116101c05780635cdf3155116101855780635cdf31551461046357806360829f8a146104af57806365f1ea20146104ce57806370224360146105135780637667b76d14610532575f80fd5b806344198e4d146103c25780634d3223a5146103e15780634f1ef2861461040057806352d1902d1461041357806354300d7a14610427575f80fd5b80632c7785a8116102065780632c7785a81461031b5780632f2ff15d1461033a57806336568abe146103595780633bccf6351461037857806341566585146103a3575f80fd5b806301ffc9a7146102425780630a0b1b6414610276578063248a9ca3146102af578063286dd3f5146102ce5780632924b73b146102ef575b5f80fd5b34801561024d575f80fd5b5061026161025c3660046122bb565b61081a565b60405190151581526020015b60405180910390f35b348015610281575f80fd5b506102a16102903660046122f6565b60026020525f908152604090205481565b60405190815260200161026d565b3480156102ba575f80fd5b506102a16102c9366004612311565b610850565b3480156102d9575f80fd5b506102ed6102e83660046122f6565b610870565b005b3480156102fa575f80fd5b5061030e6103093660046122f6565b610895565b60405161026d9190612328565b348015610326575f80fd5b506102a16103353660046122f6565b61097f565b348015610345575f80fd5b506102ed610354366004612373565b6109ae565b348015610364575f80fd5b506102ed610373366004612373565b6109d0565b348015610383575f80fd5b506102a16103923660046122f6565b60016020525f908152604090205481565b3480156103ae575f80fd5b506102ed6103bd3660046122f6565b610a08565b3480156103cd575f80fd5b506102a16103dc3660046123a1565b610a29565b3480156103ec575f80fd5b506102a16103fb3660046122f6565b610a71565b6102ed61040e3660046123e1565b610a8b565b34801561041e575f80fd5b506102a1610aa6565b348015610432575f80fd5b506102a16104413660046124a4565b600760209081525f938452604080852082529284528284209052825290205481565b34801561046e575f80fd5b506102a161047d3660046124a4565b6001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b3480156104ba575f80fd5b506102ed6104c93660046124e3565b610ac1565b3480156104d9575f80fd5b506102a16104e8366004612521565b600660209081525f948552604080862082529385528385208152918452828420909152825290205481565b34801561051e575f80fd5b506102a161052d366004612571565b610b56565b34801561053d575f80fd5b506102a161054c366004612571565b610b73565b34801561055c575f80fd5b506102a15f8051602061289183398151915281565b34801561057c575f80fd5b506102ed610b88565b348015610590575f80fd5b506102a161059f3660046122f6565b610c92565b3480156105af575f80fd5b506102a16105be366004612521565b610caa565b3480156105ce575f80fd5b506102a16105dd366004612521565b610ce7565b3480156105ed575f80fd5b506102616105fc366004612373565b610d24565b34801561060c575f80fd5b506102ed610d5a565b348015610620575f80fd5b506102a15f81565b348015610633575f80fd5b506102ed6106423660046125f5565b610eb4565b348015610652575f80fd5b506102ed6110d6565b348015610666575f80fd5b5061068b604051806040016040528060058152602001640352e302e360dc1b81525081565b60405161026d91906126bf565b3480156106a3575f80fd5b506102ed6106b23660046124e3565b6110e8565b3480156106c2575f80fd5b506102a16106d1366004612521565b600560209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610707575f80fd5b506102a16107163660046122f6565b611313565b348015610726575f80fd5b506102ed6107353660046122f6565b611335565b348015610745575f80fd5b506102616107543660046122f6565b60086020525f908152604090205460ff1681565b348015610773575f80fd5b506102ed6107823660046126f4565b61145a565b348015610792575f80fd5b506102ed6107a1366004612373565b6114d8565b3480156107b1575f80fd5b5061030e6107c03660046122f6565b6114f4565b3480156107d0575f80fd5b506102ed6107df36600461273b565b6115d7565b3480156107ef575f80fd5b505f54610802906001600160a01b031681565b6040516001600160a01b03909116815260200161026d565b5f6001600160e01b03198216637965db0b60e01b148061084a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b5f9081525f805160206128d1833981519152602052604090206001015490565b5f61087a8161166c565b6108915f80516020612891833981519152836114d8565b5050565b6001600160a01b0381165f908152600360205260408120606091906108b990611679565b6001600160401b038111156108d0576108d06123cd565b6040519080825280602002602001820160405280156108f9578160200160208202803683370190505b5090505f5b6001600160a01b0384165f90815260036020526040902061091e90611679565b811015610978576001600160a01b0384165f9081526003602052604090206109469082611682565b828281518110610958576109586127d7565b6001600160a01b03909216602092830291909101909101526001016108fe565b5092915050565b5f61098982610a71565b156109a75761099782611313565b6109a29060016127ff565b61084a565b5f92915050565b6109b782610850565b6109c08161166c565b6109ca838361168d565b50505050565b6001600160a01b03811633146109f95760405163334bd91960e11b815260040160405180910390fd5b610a03828261172e565b505050565b5f610a128161166c565b6108915f80516020612891833981519152836109ae565b5f610a6a83610a3785610a71565b846001600160a01b039283165f908152600760209081526040808320948352938152838220929094168152925290205490565b9392505050565b6001600160a01b03165f9081526002602052604090205490565b610a936117a7565b610a9c8261184b565b6108918282611855565b5f610aaf611916565b505f805160206128b183398151915290565b5f80516020612891833981519152610ad88161166c565b610ae061195f565b610af584610aed8661097f565b853386611989565b826001600160a01b0316610b0885610c92565b60408051338152602081018690526001600160a01b038816917fd41c64546a5c34c283150998874c7ee0412c8954f57aef484c681f6e137827df910160405180910390a46109ca6001600955565b5f610b6b84610b6486610a71565b8585610ce7565b949350505050565b5f610b6b84610b8186610a71565b8585610caa565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015610bcc5750825b90505f826001600160401b03166001148015610be75750303b155b905081158015610bf5575080155b15610c135760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315610c3d57845460ff60401b1916600160401b1785555b610c456119dd565b8315610c8b57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f610c9c82610a71565b156109a75761099782610a71565b6001600160a01b039384165f9081526006602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b6001600160a01b039384165f9081526005602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f9182525f805160206128d1833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b610d6261195f565b335f8181526008602052604090205460ff1615610d915760405162fe178760e01b815260040160405180910390fd5b6001600160a01b0381165f908152600860205260409020805460ff19166001179055610dbc81611313565b6001600160a01b0382165f908152600260205260408120919091555b6001600160a01b0382165f908152600360205260409020610df890611679565b811015610ea6576001600160a01b0382165f908152600360205260408120610e209083611682565b90505f5b6001600160a01b0384165f908152600460205260409020610e4490611679565b811015610e9c576001600160a01b0384165f908152600460205260408120610e6c9083611682565b90505f610e7b865f8487610ce7565b9050610e9286610e8a88610a71565b8487856119ed565b5050600101610e24565b5050600101610dd8565b5050610eb26001600955565b565b610ebc61195f565b5f5b858110156110c1575f610f85610f4633610ef88b8b87818110610ee357610ee36127d7565b90506020020160208101906103fb91906122f6565b8d8d87818110610f0a57610f0a6127d7565b9050602002016020810190610f1f91906122f6565b8c8c88818110610f3157610f316127d7565b90506020020160208101906105dd91906122f6565b610f80888886818110610f5b57610f5b6127d7565b90506020020135878787818110610f7457610f746127d7565b90506020020135611a78565b611a78565b9050610fdf30898985818110610f9d57610f9d6127d7565b9050602002016020810190610fb291906122f6565b8c8c86818110610fc457610fc46127d7565b9050602002016020810190610fd991906122f6565b84611a8d565b61105833610fec33610a71565b8c8c86818110610ffe57610ffe6127d7565b905060200201602081019061101391906122f6565b8b8b87818110611025576110256127d7565b905060200201602081019061103a91906122f6565b8a8a8881811061104c5761104c6127d7565b90506020020135611cb6565b6110b83361106533610a71565b8c8c86818110611077576110776127d7565b905060200201602081019061108c91906122f6565b8b8b8781811061109e5761109e6127d7565b90506020020160208101906110b391906122f6565b611cf6565b50600101610ebe565b506110cc6001600955565b5050505050505050565b610eb2336110e333610a71565b611d68565b5f805160206128918339815191526110ff8161166c565b61110761195f565b6001600160a01b0384165f9081526003602052604090206111289033611e85565b505f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561116f573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906111939190612812565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303815f875af11580156111e6573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061120a9190612829565b5061121583826127ff565b5f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561125a573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061127e9190612812565b1461129c57604051631910d68360e21b815260040160405180910390fd5b6112b1856112a98761097f565b8633876119ed565b836001600160a01b03166112c486610c92565b60408051338152602081018790526001600160a01b038916917f7be65c2ae4d3c544de23b1db5bea4d541c02b93a5f4302852f4dc9880e0cb554910160405180910390a4506109ca6001600955565b6001600160a01b0381165f9081526001602052604081205461084a9042612848565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156113795750825b90505f826001600160401b031660011480156113945750303b155b9050811580156113a2575080155b156113c05760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156113ea57845460ff60401b1916600160401b1785555b6113f2611e99565b5f80546001600160a01b0319166001600160a01b038816179055831561145257845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050565b61146261195f565b335f8181526001602052604081208590555b828110156114cc576114c3848483818110611491576114916127d7565b90506020020160208101906114a691906122f6565b6001600160a01b0384165f90815260046020526040902090611e85565b50600101611474565b5050610a036001600955565b6114e182610850565b6114ea8161166c565b6109ca838361172e565b6001600160a01b0381165f9081526004602052604081206060919061151890611679565b6001600160401b0381111561152f5761152f6123cd565b604051908082528060200260200182016040528015611558578160200160208202803683370190505b5090505f5b6001600160a01b0384165f90815260046020526040902061157d90611679565b811015610978576001600160a01b0384165f9081526004602052604090206115a59082611682565b8282815181106115b7576115b76127d7565b6001600160a01b039092166020928302919091019091015260010161155d565b6115df61195f565b5f5b8581101561166157611659338888848181106115ff576115ff6127d7565b905060200201602081019061161491906122f6565b858585818110611626576116266127d7565b905060200201602081019061163b91906122f6565b88888681811061164d5761164d6127d7565b90506020020135611a8d565b6001016115e1565b506114526001600955565b6116768133611eab565b50565b5f61084a825490565b5f610a6a8383611ee4565b5f5f805160206128d18339815191526116a68484610d24565b611725575f848152602082815260408083206001600160a01b03871684529091529020805460ff191660011790556116db3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061084a565b5f91505061084a565b5f5f805160206128d18339815191526117478484610d24565b15611725575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061084a565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061182d57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166118215f805160206128b1833981519152546001600160a01b031690565b6001600160a01b031614155b15610eb25760405163703e46dd60e11b815260040160405180910390fd5b5f6108918161166c565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156118af575060408051601f3d908101601f191682019092526118ac91810190612812565b60015b6118dc57604051634c9c8ce360e01b81526001600160a01b03831660048201526024015b60405180910390fd5b5f805160206128b1833981519152811461190c57604051632a87526960e21b8152600481018290526024016118d3565b610a038383611f0a565b306001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614610eb25760405163703e46dd60e11b815260040160405180910390fd5b60026009540361198257604051633ee5aeb560e01b815260040160405180910390fd5b6002600955565b6001600160a01b038086165f908152600660209081526040808320888452825280832087851684528252808320938616835292905290812080548392906119d19084906127ff565b90915550505050505050565b6119e5611f5f565b610eb2611e99565b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611a359084906127ff565b90915550506001600160a01b038086165f9081526007602090815260408083208884528252808320938716835292905290812080548392906119d19084906127ff565b5f818310611a865781610a6a565b5090919050565b306001600160a01b03851603611c01575f546001600160a01b03808416911603611b2b575f5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb906044015b6020604051808303815f875af1158015611b01573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b259190612829565b506109ca565b5f5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015611b7a573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b9e9190612829565b506040516318950c7160e01b81526001600160a01b038481166004830152602482018390528316906318950c71906044015f604051808303815f87803b158015611be6575f80fd5b505af1158015611bf8573d5f803e3d5ffd5b505050506109ca565b5f546001600160a01b03808416911603611c55575f546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201849052909116906323b872dd90606401611ae5565b60405163c4652d8360e01b81526001600160a01b03858116600483015284811660248301526044820183905283169063c4652d83906064015f604051808303815f87803b158015611ca4575f80fd5b505af11580156110cc573d5f803e3d5ffd5b835f611cc487838787610ce7565b905082811015611ce057611cdb8783878785611fa8565b611ced565b611ced8783878787611fa8565b50505050505050565b5f611d0385858585610ce7565b90505f611d118560016127ff565b90505f611d2087838787610caa565b905082811115611ced576001600160a01b038088165f9081526006602090815260408083208684528252808320848a1684528252808320938816835292905220839055611ced565b5f5b6001600160a01b0383165f908152600360205260409020611d8a90611679565b811015611e1f576001600160a01b0383165f908152600360205260408120611db29083611682565b90505f5b6001600160a01b0385165f908152600460205260409020611dd690611679565b811015611e15576001600160a01b0385165f908152600460205260408120611dfe9083611682565b9050611e0c86868386612033565b50600101611db6565b5050600101611d6a565b50611e2b8160016127ff565b6001600160a01b0383165f81815260026020526040908190209290925590517fb693195b5ff3e376f8b562486abc516e10fe2467b75f0e4165e79cf4ab70dc4190611e799084815260200190565b60405180910390a25050565b5f610a6a836001600160a01b0384166120f6565b611ea1611f5f565b6116765f3361168d565b611eb58282610d24565b6108915760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016118d3565b5f825f018281548110611ef957611ef96127d7565b905f5260205f200154905092915050565b611f1382612142565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115611f5757610a0382826121a5565b610891612217565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff16610eb257604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b038086165f90815260056020908152604080832088845282528083208785168452825280832093861683529290529081208054839290611ff0908490612867565b90915550506001600160a01b038086165f9081526007602090815260408083208884528252808320938716835292905290812080548392906119d1908490612867565b5f61204085858585610ce7565b90505f612059866120528760016127ff565b8686610caa565b9050818111156120665750805b5f6120718284612867565b905061208a876120828860016127ff565b8787856119ed565b61209630858785611a8d565b846001600160a01b031686856001600160a01b03167f3ddb7f725ac69363a1df8296c965af4d268f31b082480dcd8419d284fb7fd34286866040516120e5929190918252602082015260400190565b60405180910390a450505050505050565b5f81815260018301602052604081205461213b57508154600181810184555f84815260208082209093018490558454848252828601909352604090209190915561084a565b505f61084a565b806001600160a01b03163b5f0361217757604051634c9c8ce360e01b81526001600160a01b03821660048201526024016118d3565b5f805160206128b183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516121c1919061287a565b5f60405180830381855af49150503d805f81146121f9576040519150601f19603f3d011682016040523d82523d5f602084013e6121fe565b606091505b509150915061220e858383612236565b95945050505050565b3415610eb25760405163b398979f60e01b815260040160405180910390fd5b60608261224b5761224682612292565b610a6a565b815115801561226257506001600160a01b0384163b155b1561228b57604051639996b31560e01b81526001600160a01b03851660048201526024016118d3565b5080610a6a565b8051156122a25780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b5f602082840312156122cb575f80fd5b81356001600160e01b031981168114610a6a575f80fd5b6001600160a01b0381168114611676575f80fd5b5f60208284031215612306575f80fd5b8135610a6a816122e2565b5f60208284031215612321575f80fd5b5035919050565b602080825282518282018190525f918401906040840190835b818110156123685783516001600160a01b0316835260209384019390920191600101612341565b509095945050505050565b5f8060408385031215612384575f80fd5b823591506020830135612396816122e2565b809150509250929050565b5f80604083850312156123b2575f80fd5b82356123bd816122e2565b91506020830135612396816122e2565b634e487b7160e01b5f52604160045260245ffd5b5f80604083850312156123f2575f80fd5b82356123fd816122e2565b915060208301356001600160401b03811115612417575f80fd5b8301601f81018513612427575f80fd5b80356001600160401b03811115612440576124406123cd565b604051601f8201601f19908116603f011681016001600160401b038111828210171561246e5761246e6123cd565b604052818152828201602001871015612485575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f805f606084860312156124b6575f80fd5b83356124c1816122e2565b92506020840135915060408401356124d8816122e2565b809150509250925092565b5f805f606084860312156124f5575f80fd5b8335612500816122e2565b92506020840135612510816122e2565b929592945050506040919091013590565b5f805f8060808587031215612534575f80fd5b843561253f816122e2565b9350602085013592506040850135612556816122e2565b91506060850135612566816122e2565b939692955090935050565b5f805f60608486031215612583575f80fd5b833561258e816122e2565b9250602084013561259e816122e2565b915060408401356124d8816122e2565b5f8083601f8401126125be575f80fd5b5081356001600160401b038111156125d4575f80fd5b6020830191508360208260051b85010111156125ee575f80fd5b9250929050565b5f805f805f805f806080898b03121561260c575f80fd5b88356001600160401b03811115612621575f80fd5b61262d8b828c016125ae565b90995097505060208901356001600160401b0381111561264b575f80fd5b6126578b828c016125ae565b90975095505060408901356001600160401b03811115612675575f80fd5b6126818b828c016125ae565b90955093505060608901356001600160401b0381111561269f575f80fd5b6126ab8b828c016125ae565b999c989b5096995094979396929594505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f60408486031215612706575f80fd5b8335925060208401356001600160401b03811115612722575f80fd5b61272e868287016125ae565b9497909650939450505050565b5f805f805f8060608789031215612750575f80fd5b86356001600160401b03811115612765575f80fd5b61277189828a016125ae565b90975095505060208701356001600160401b0381111561278f575f80fd5b61279b89828a016125ae565b90955093505060408701356001600160401b038111156127b9575f80fd5b6127c589828a016125ae565b979a9699509497509295939492505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b8082018082111561084a5761084a6127eb565b5f60208284031215612822575f80fd5b5051919050565b5f60208284031215612839575f80fd5b81518015158114610a6a575f80fd5b5f8261286257634e487b7160e01b5f52601260045260245ffd5b500490565b8181038181111561084a5761084a6127eb565b5f82518060208501845e5f92019182525091905056fedc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220f89cd60db1a241d5973d2920b5637bf68cceb132f2c25bc4d7a85f8d1390562e64736f6c634300081a0033","sourceMap":"651:18019:109:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:24;;;;;;;;;;-1:-1:-1;3443:202:24;;;;;:::i;:::-;;:::i;:::-;;;470:14:138;;463:22;445:41;;433:2;418:18;3443:202:24;;;;;;;;612:75:110;;;;;;;;;;-1:-1:-1;612:75:110;;;;;:::i;:::-;;;;;;;;;;;;;;;;;1031:25:138;;;1019:2;1004:18;612:75:110;885:177:138;4759:191:24;;;;;;;;;;-1:-1:-1;4759:191:24;;;;;:::i;:::-;;:::i;18517:151:109:-;;;;;;;;;;-1:-1:-1;18517:151:109;;;;;:::i;:::-;;:::i;:::-;;1841:387;;;;;;;;;;-1:-1:-1;1841:387:109;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;5419:195::-;;;;;;;;;;-1:-1:-1;5419:195:109;;;;;:::i;:::-;;:::i;5246:136:24:-;;;;;;;;;;-1:-1:-1;5246:136:24;;;;;:::i;:::-;;:::i;6348:245::-;;;;;;;;;;-1:-1:-1;6348:245:24;;;;;:::i;:::-;;:::i;529:77:110:-;;;;;;;;;;-1:-1:-1;529:77:110;;;;;:::i;:::-;;;;;;;;;;;;;;18371:140:109;;;;;;;;;;-1:-1:-1;18371:140:109;;;;;:::i;:::-;;:::i;7352:226::-;;;;;;;;;;-1:-1:-1;7352:226:109;;;;;:::i;:::-;;:::i;5103:123::-;;;;;;;;;;-1:-1:-1;5103:123:109;;;;;:::i;:::-;;:::i;4158:214:26:-;;;;;;:::i;:::-;;:::i;3705:134::-;;;;;;;;;;;;;:::i;1457:146:110:-;;;;;;;;;;-1:-1:-1;1457:146:110;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7082:214:109;;;;;;;;;;-1:-1:-1;7082:214:109;;;;;:::i;:::-;-1:-1:-1;;;;;7240:31:109;;;7214:7;7240:31;;;:23;:31;;;;;;;;:38;;;;;;;;;:49;;;;;;;;;;;;7082:214;9342:799;;;;;;;;;;-1:-1:-1;9342:799:109;;;;;:::i;:::-;;:::i;1192:193:110:-;;;;;;;;;;-1:-1:-1;1192:193:110;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5990:326:109;;;;;;;;;;-1:-1:-1;5990:326:109;;;;;:::i;:::-;;:::i;6700:330::-;;;;;;;;;;-1:-1:-1;6700:330:109;;;;;:::i;:::-;;:::i;1727:68:110:-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;1727:68:110;;514:86:111;;;;;;;;;;;;;:::i;5259:154:109:-;;;;;;;;;;-1:-1:-1;5259:154:109;;;;;:::i;:::-;;:::i;6384:244::-;;;;;;;;;;-1:-1:-1;6384:244:109;;;;;:::i;:::-;;:::i;5680:240::-;;;;;;;;;;-1:-1:-1;5680:240:109;;;;;:::i;:::-;;:::i;3732:207:24:-;;;;;;;;;;-1:-1:-1;3732:207:24;;;;;:::i;:::-;;:::i;2234:1200:109:-;;;;;;;;;;;;;:::i;2317:49:24:-;;;;;;;;;;-1:-1:-1;2317:49:24;2362:4;2317:49;;14777:1577:109;;;;;;;;;;-1:-1:-1;14777:1577:109;;;;;:::i;:::-;;:::i;12321:106::-;;;;;;;;;;;;;:::i;1819:58:26:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:26;;;;;;;;;;;;:::i;7617:1674:109:-;;;;;;;;;;-1:-1:-1;7617:1674:109;;;;;:::i;:::-;;:::i;937:191:110:-;;;;;;;;;;-1:-1:-1;937:191:110;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4883:146:109;;;;;;;;;;-1:-1:-1;4883:146:109;;;;;:::i;:::-;;:::i;827:125::-;;;;;;;;;;-1:-1:-1;827:125:109;;;;;:::i;:::-;;:::i;1610:60:110:-;;;;;;;;;;-1:-1:-1;1610:60:110;;;;;:::i;:::-;;;;;;;;;;;;;;;;958:349:109;;;;;;;;;;-1:-1:-1;958:349:109;;;;;:::i;:::-;;:::i;5662:138:24:-;;;;;;;;;;-1:-1:-1;5662:138:24;;;;;:::i;:::-;;:::i;1313:522:109:-;;;;;;;;;;-1:-1:-1;1313:522:109;;;;;:::i;:::-;;:::i;17901:464::-;;;;;;;;;;-1:-1:-1;17901:464:109;;;;;:::i;:::-;;:::i;503:19:110:-;;;;;;;;;;-1:-1:-1;503:19:110;;;;-1:-1:-1;;;;;503:19:110;;;;;;-1:-1:-1;;;;;11186:32:138;;;11168:51;;11156:2;11141:18;503:19:110;11006:219:138;3443:202:24;3528:4;-1:-1:-1;;;;;;3551:47:24;;-1:-1:-1;;;3551:47:24;;:87;;-1:-1:-1;;;;;;;;;;1133:40:32;;;3602:36:24;3544:94;3443:202;-1:-1:-1;;3443:202:24:o;4759:191::-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:24;;;;;:24;;;;4759:191::o;18517:151:109:-;2362:4:24;3191:16;2362:4;3191:10;:16::i;:::-;18629:32:109::1;-1:-1:-1::0;;;;;;;;;;;18656:4:109::1;18629:10;:32::i;:::-;18517:151:::0;;:::o;1841:387::-;-1:-1:-1;;;;;2006:25:109;;1950:26;2006:25;;;:17;:25;;;;;1922:16;;1950:26;2006:34;;:32;:34::i;:::-;-1:-1:-1;;;;;1979:71:109;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1979:71:109;;1950:100;;2065:9;2060:136;-1:-1:-1;;;;;2084:25:109;;;;;;:17;:25;;;;;:34;;:32;:34::i;:::-;2080:1;:38;2060:136;;;-1:-1:-1;;;;;2154:25:109;;;;;;:17;:25;;;;;:31;;2183:1;2154:28;:31::i;:::-;2139:9;2149:1;2139:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2139:46:109;;;:12;;;;;;;;;;;:46;2120:3;;2060:136;;;-1:-1:-1;2212:9:109;1841:387;-1:-1:-1;;1841:387:109:o;5419:195::-;5503:7;5541:23;5557:6;5541:15;:23::i;:::-;:28;:66;;5576:27;5596:6;5576:19;:27::i;:::-;:31;;5606:1;5576:31;:::i;:::-;5541:66;;;5572:1;5522:85;5419:195;-1:-1:-1;;5419:195:109:o;5246:136:24:-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;6348:245::-;-1:-1:-1;;;;;6441:34:24;;966:10:29;6441:34:24;6437:102;;6498:30;;-1:-1:-1;;;6498:30:24;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;18371:140:109:-;2362:4:24;3191:16;2362:4;3191:10;:16::i;:::-;18473:31:109::1;-1:-1:-1::0;;;;;;;;;;;18499:4:109::1;18473:9;:31::i;7352:226::-:0;7468:7;7506:65;7528:6;7536:23;7552:6;7536:15;:23::i;:::-;7561:9;-1:-1:-1;;;;;7240:31:109;;;7214:7;7240:31;;;:23;:31;;;;;;;;:38;;;;;;;;;:49;;;;;;;;;;;;7082:214;7506:65;7487:84;7352:226;-1:-1:-1;;;7352:226:109:o;5103:123::-;-1:-1:-1;;;;;5191:28:109;5165:7;5191:28;;;:20;:28;;;;;;;5103:123::o;4158:214:26:-;2653:13;:11;:13::i;:::-;4273:36:::1;4291:17;4273;:36::i;:::-;4319:46;4341:17;4360:4;4319:21;:46::i;3705:134::-:0;3774:7;2924:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3705:134:26;:::o;9342:799:109:-;-1:-1:-1;;;;;;;;;;;3191:16:24;3202:4;3191:10;:16::i;:::-;2356:21:58::1;:19;:21::i;:::-;9818:153:109::2;9843:6;9863:31;9887:6;9863:23;:31::i;:::-;9908:9;9931:10;9955:6;9818:11;:153::i;:::-;10071:9;-1:-1:-1::0;;;;;9987:147:109::2;10037:20;10050:6;10037:12;:20::i;:::-;9987:147;::::0;;10094:10:::2;11798:51:138::0;;11880:2;11865:18;;11858:34;;;-1:-1:-1;;;;;9987:147:109;::::2;::::0;::::2;::::0;11771:18:138;9987:147:109::2;;;;;;;2398:20:58::1;1713:1:::0;2924:7;:21;2744:208;5990:326:109;6124:7;6162:147;6195:6;6219:23;6235:6;6219:15;:23::i;:::-;6260:9;6287:8;6162:15;:147::i;:::-;6143:166;5990:326;-1:-1:-1;;;;5990:326:109:o;6700:330::-;6836:7;6874:149;6909:6;6933:23;6949:6;6933:15;:23::i;:::-;6974:9;7001:8;6874:17;:149::i;514:86:111:-;8870:21:25;4302:15;;-1:-1:-1;;;4302:15:25;;;;4301:16;;-1:-1:-1;;;;;4348:14:25;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:25;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:25;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:25;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:25;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:25;-1:-1:-1;;;5013:22:25;;;4979:67;573:20:111::1;:18;:20::i;:::-;5070:14:25::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:25;;;5142:14;;-1:-1:-1;12056:50:138;;5142:14:25;;12044:2:138;12029:18;5142:14:25;;;;;;;5066:101;4092:1081;;;;;514:86:111:o;5259:154:109:-;5318:7;5344:23;5360:6;5344:15;:23::i;:::-;:28;:62;;5379:23;5395:6;5379:15;:23::i;6384:244::-;-1:-1:-1;;;;;6564:29:109;;;6538:7;6564:29;;;:21;:29;;;;;;;;:36;;;;;;;;;:47;;;;;;;;;;;:57;;;;;;;;;;;;6384:244::o;5680:240::-;-1:-1:-1;;;;;5858:27:109;;;5832:7;5858:27;;;:19;:27;;;;;;;;:34;;;;;;;;;:45;;;;;;;;;;;:55;;;;;;;;;;;;5680:240::o;3732:207:24:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:24;;;;;;;;-1:-1:-1;;;;;3901:31:24;;;;;;;;;;;;;;;3732:207::o;2234:1200:109:-;2356:21:58;:19;:21::i;:::-;2314:10:109::1;2297:14;2338:29:::0;;;:21:::1;:29;::::0;;;;;::::1;;2334:66;;;2376:24;;-1:-1:-1::0;;;2376:24:109::1;;;;;;;;;;;2334:66;-1:-1:-1::0;;;;;2410:29:109;::::1;;::::0;;;:21:::1;:29;::::0;;;;:36;;-1:-1:-1;;2410:36:109::1;2442:4;2410:36;::::0;;2556:27:::1;2432:6:::0;2556:19:::1;:27::i;:::-;-1:-1:-1::0;;;;;2525:28:109;::::1;;::::0;;;:20:::1;:28;::::0;;;;:58;;;;2594:834:::1;-1:-1:-1::0;;;;;2618:25:109;::::1;;::::0;;;:17:::1;:25;::::0;;;;:34:::1;::::0;:32:::1;:34::i;:::-;2614:1;:38;2594:834;;;-1:-1:-1::0;;;;;2692:25:109;::::1;2673:16;2692:25:::0;;;:17:::1;:25;::::0;;;;:31:::1;::::0;2721:1;2692:28:::1;:31::i;:::-;2673:50;;2743:9;2738:680;-1:-1:-1::0;;;;;2762:26:109;::::1;;::::0;;;:18:::1;:26;::::0;;;;:35:::1;::::0;:33:::1;:35::i;:::-;2758:1;:39;2738:680;;;-1:-1:-1::0;;;;;2842:26:109;::::1;2822:17;2842:26:::0;;;:18:::1;:26;::::0;;;;:32:::1;::::0;2872:1;2842:29:::1;:32::i;:::-;2822:52;;2951:21;2975:145;3012:6;3040:1;3063:9;3094:8;2975:15;:145::i;:::-;2951:169;;3207:196;3238:6;3266:23;3282:6;3266:15;:23::i;:::-;3311:9;3342:8;3372:13;3207:9;:196::i;:::-;-1:-1:-1::0;;2799:3:109::1;;2738:680;;;-1:-1:-1::0;;2654:3:109::1;;2594:834;;;;2287:1147;2398:20:58::0;1713:1;2924:7;:21;2744:208;2398:20;2234:1200:109:o;14777:1577::-;2356:21:58;:19;:21::i;:::-;14988:9:109::1;14983:1365;15003:20:::0;;::::1;14983:1365;;;15271:20;15294:281;15320:185;15357:10;15389:29;15405:9;;15415:1;15405:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;15389:29::-;15440:10;;15451:1;15440:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;15475:9;;15485:1;15475:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;15320:185::-;15523:38;15532:7;;15540:1;15532:10;;;;;;;:::i;:::-;;;;;;;15544:13;;15558:1;15544:16;;;;;;;:::i;:::-;;;;;;;15523:8;:38::i;:::-;15294:8;:281::i;:::-;15271:304;;15589:226;15627:4;15728:9;;15738:1;15728:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;15758:10;;15769:1;15758:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;15789:12;15589;:226::i;:::-;15974:187;16003:10;16031:27;16047:10;16031:15;:27::i;:::-;16076:10;;16087:1;16076:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16107:9;;16117:1;16107:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16137:7;;16145:1;16137:10;;;;;;;:::i;:::-;;;;;;;15974:11;:187::i;:::-;16176:161;16207:10;16235:27;16251:10;16235:15;:27::i;:::-;16280:10;;16291:1;16280:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16311:9;;16321:1;16311:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;16176:13;:161::i;:::-;-1:-1:-1::0;15025:3:109::1;;14983:1365;;;;2398:20:58::0;1713:1;2924:7;:21;2744:208;2398:20;14777:1577:109;;;;;;;;:::o;12321:106::-;12365:55;12380:10;12392:27;12408:10;12392:15;:27::i;:::-;12365:14;:55::i;7617:1674::-;-1:-1:-1;;;;;;;;;;;3191:16:24;3202:4;3191:10;:16::i;:::-;2356:21:58::1;:19;:21::i;:::-;-1:-1:-1::0;;;;;7822:25:109;::::2;;::::0;;;:17:::2;:25;::::0;;;;:41:::2;::::0;7852:10:::2;7822:29;:41::i;:::-;-1:-1:-1::0;8227:21:109::2;8251:5:::0;;:30:::2;::::0;-1:-1:-1;;;8251:30:109;;8275:4:::2;8251:30;::::0;::::2;11168:51:138::0;-1:-1:-1;;;;;8251:5:109;;::::2;::::0;:15:::2;::::0;11141:18:138;;8251:30:109::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8562:57;::::0;-1:-1:-1;;;8562:57:109;;8585:10:::2;8562:57;::::0;::::2;12716:51:138::0;8605:4:109::2;12783:18:138::0;;;12776:60;12852:18;;;12845:34;;;8227:54:109;;-1:-1:-1;;;;;;8562:22:109;::::2;::::0;::::2;::::0;12689:18:138;;8562:57:109::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;8752:22:109::2;8768:6:::0;8752:13;:22:::2;:::i;:::-;8718:5;::::0;:30:::2;::::0;-1:-1:-1;;;8718:30:109;;8742:4:::2;8718:30;::::0;::::2;11168:51:138::0;-1:-1:-1;;;;;8718:5:109;;::::2;::::0;:15:::2;::::0;11141:18:138;;8718:30:109::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;8714:114;;8795:33;;-1:-1:-1::0;;;8795:33:109::2;;;;;;;;;;;8714:114;8895:160;8918:6;8938:31;8962:6;8938:23;:31::i;:::-;8991:9;9015:10;9039:6;8895:9;:160::i;:::-;9220:9;-1:-1:-1::0;;;;;9130:154:109::2;9178:20;9191:6;9178:12;:20::i;:::-;9130:154;::::0;;9244:10:::2;11798:51:138::0;;11880:2;11865:18;;11858:34;;;-1:-1:-1;;;;;9130:154:109;::::2;::::0;::::2;::::0;11771:18:138;9130:154:109::2;;;;;;;7759:1532;2398:20:58::1;1713:1:::0;2924:7;:21;2744:208;4883:146:109;-1:-1:-1;;;;;4993:29:109;;4949:7;4993:29;;;:21;:29;;;;;;4975:47;;:15;:47;:::i;827:125::-;8870:21:25;4302:15;;-1:-1:-1;;;4302:15:25;;;;4301:16;;-1:-1:-1;;;;;4348:14:25;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:25;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:25;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:25;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:25;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:25;-1:-1:-1;;;5013:22:25;;;4979:67;891:30:109::1;:28;:30::i;:::-;931:5;:14:::0;;-1:-1:-1;;;;;;931:14:109::1;-1:-1:-1::0;;;;;931:14:109;::::1;;::::0;;5066:101:25;;;;5100:23;;-1:-1:-1;;;;5100:23:25;;;5142:14;;-1:-1:-1;12056:50:138;;5142:14:25;;12044:2:138;12029:18;5142:14:25;;;;;;;5066:101;4092:1081;;;;;827:125:109;:::o;958:349::-;2356:21:58;:19;:21::i;:::-;1107:10:109::1;1090:14;1127:29:::0;;;:21:::1;:29;::::0;;;;:45;;;1183:118:::1;1203:21:::0;;::::1;1183:118;;;1245:45;1276:10;;1287:1;1276:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1245:26:109;::::1;;::::0;;;:18:::1;:26;::::0;;;;;:30:::1;:45::i;:::-;-1:-1:-1::0;1226:3:109::1;;1183:118;;;;1080:227;2398:20:58::0;1713:1;2924:7;:21;2744:208;5662:138:24;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;1313:522:109:-:0;-1:-1:-1;;;;;1608:26:109;;1551:27;1608:26;;;:18;:26;;;;;1395:16;;1551:27;1608:35;;:33;:35::i;:::-;-1:-1:-1;;;;;1581:72:109;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1581:72:109;;1551:102;;1668:9;1663:139;-1:-1:-1;;;;;1687:26:109;;;;;;:18;:26;;;;;:35;;:33;:35::i;:::-;1683:1;:39;1663:139;;;-1:-1:-1;;;;;1759:26:109;;;;;;:18;:26;;;;;:32;;1789:1;1759:29;:32::i;:::-;1743:10;1754:1;1743:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1743:48:109;;;:13;;;;;;;;;;;:48;1724:3;;1663:139;;17901:464;2356:21:58;:19;:21::i;:::-;18195:9:109::1;18190:169;18210:20:::0;;::::1;18190:169;;;18283:65;18296:10;18308:9;;18318:1;18308:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18322:10;;18333:1;18322:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;18337:7;;18345:1;18337:10;;;;;;;:::i;:::-;;;;;;;18283:12;:65::i;:::-;18232:3;;18190:169;;;;2398:20:58::0;1713:1;2924:7;:21;2744:208;4148:103:24;4214:30;4225:4;966:10:29;4214::24;:30::i;:::-;4148:103;:::o;9117:115:67:-;9180:7;9206:19;9214:3;4556:18;;4474:107;9574:156;9648:7;9698:22;9702:3;9714:5;9698:3;:22::i;7270:387:24:-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:24;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:24;;;;;;;;;:38;;-1:-1:-1;;7475:38:24;7509:4;7475:38;;;7559:12;966:10:29;;887:96;7559:12:24;-1:-1:-1;;;;;7532:40:24;7550:7;-1:-1:-1;;;;;7532:40:24;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7892:388;7970:4;-1:-1:-1;;;;;;;;;;;8059:22:24;8067:4;8073:7;8059;:22::i;:::-;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:24;;;;;;;;;;:39;;-1:-1:-1;;8097:39:24;;;8155:40;966:10:29;;8097:14:24;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;4599:312:26;4679:4;-1:-1:-1;;;;;4688:6:26;4671:23;;;:120;;;4785:6;-1:-1:-1;;;;;4749:42:26;:32;-1:-1:-1;;;;;;;;;;;2035:53:43;-1:-1:-1;;;;;2035:53:43;;1957:138;4749:32:26;-1:-1:-1;;;;;4749:42:26;;;4671:120;4654:251;;;4865:29;;-1:-1:-1;;;4865:29:26;;;;;;;;;;;965:103:111;2362:4:24;3191:16;2362:4;3191:10;:16::i;6052:538:26:-;6169:17;-1:-1:-1;;;;;6151:50:26;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6151:52:26;;;;;;;;-1:-1:-1;;6151:52:26;;;;;;;;;;;;:::i;:::-;;;6147:437;;6513:60;;-1:-1:-1;;;6513:60:26;;-1:-1:-1;;;;;11186:32:138;;6513:60:26;;;11168:51:138;11141:18;;6513:60:26;;;;;;;;6147:437;-1:-1:-1;;;;;;;;;;;6245:40:26;;6241:120;;6312:34;;-1:-1:-1;;;6312:34:26;;;;;1031:25:138;;;1004:18;;6312:34:26;885:177:138;6241:120:26;6374:54;6404:17;6423:4;6374:29;:54::i;5028:213::-;5102:4;-1:-1:-1;;;;;5111:6:26;5094:23;;5090:145;;5195:29;;-1:-1:-1;;;5195:29:26;;;;;;;;;;;2431:307:58;1755:1;2558:7;;:18;2554:86;;2599:30;;-1:-1:-1;;;2599:30:58;;;;;;;;;;;2554:86;1755:1;2714:7;:17;2431:307::o;4073:244:109:-;-1:-1:-1;;;;;4243:29:109;;;;;;;:21;:29;;;;;;;;:36;;;;;;;;:47;;;;;;;;;;:57;;;;;;;;;;;:67;;4304:6;;4243:29;:67;;4304:6;;4243:67;:::i;:::-;;;;-1:-1:-1;;;;;;;4073:244:109:o;606:103:111:-;6931:20:25;:18;:20::i;:::-;672:30:111::1;:28;:30::i;3440:309:109:-:0;-1:-1:-1;;;;;3608:27:109;;;;;;;:19;:27;;;;;;;;:34;;;;;;;;:45;;;;;;;;;;:55;;;;;;;;;;;:65;;3667:6;;3608:27;:65;;3667:6;;3608:65;:::i;:::-;;;;-1:-1:-1;;;;;;;3683:31:109;;;;;;;:23;:31;;;;;;;;:38;;;;;;;;:49;;;;;;;;;;;:59;;3736:6;;3683:31;:59;;3736:6;;3683:59;:::i;2557:104:65:-;2615:7;2645:1;2641;:5;:13;;2653:1;2641:13;;;-1:-1:-1;2649:1:65;;2557:104;-1:-1:-1;2557:104:65:o;16360:1535:109:-;16526:4;-1:-1:-1;;;;;16510:21:109;;;16506:1383;;16611:5;;-1:-1:-1;;;;;16603:27:109;;;16611:5;;16603:27;16599:456;;16699:5;;:32;;-1:-1:-1;;;16699:32:109;;-1:-1:-1;;;;;11816:32:138;;;16699::109;;;11798:51:138;11865:18;;;11858:34;;;16699:5:109;;;;:14;;11771:18:138;;16699:32:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;16506:1383;;16599:456;16862:5;;:32;;-1:-1:-1;;;16862:32:109;;-1:-1:-1;;;;;11816:32:138;;;16862::109;;;11798:51:138;11865:18;;;11858:34;;;16862:5:109;;;;:13;;11771:18:138;;16862:32:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;16978:62:109;;-1:-1:-1;;;16978:62:109;;-1:-1:-1;;;;;11816:32:138;;;16978:62:109;;;11798:51:138;11865:18;;;11858:34;;;16978:44:109;;;;;11771:18:138;;16978:62:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;16506:1383;;;17453:5;;-1:-1:-1;;;;;17445:27:109;;;17453:5;;17445:27;17441:438;;17541:5;;:42;;-1:-1:-1;;;17541:42:109;;-1:-1:-1;;;;;12734:32:138;;;17541:42:109;;;12716:51:138;12803:32;;;12783:18;;;12776:60;12852:18;;;12845:34;;;17541:5:109;;;;:18;;12689::138;;17541:42:109;12514:371:138;17441:438:109;17714:150;;-1:-1:-1;;;17714:150:109;;-1:-1:-1;;;;;12734:32:138;;;17714:150:109;;;12716:51:138;12803:32;;;12783:18;;;12776:60;12852:18;;;12845:34;;;17714:48:109;;;;;12689:18:138;;17714:150:109;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12734:803;12979:5;12957:19;13018:115;13047:6;12979:5;13092:9;13115:8;13018:15;:115::i;:::-;12994:139;;13242:6;13226:13;:22;13222:309;;;13264:163;13294:6;13318:11;13347:9;13374:8;13400:13;13264:12;:163::i;:::-;13222:309;;;13458:62;13471:6;13479:11;13492:9;13503:8;13513:6;13458:12;:62::i;:::-;12894:643;;12734:803;;;;;:::o;13869:902::-;14076:21;14100:109;14129:6;14149:5;14168:9;14191:8;14100:15;:109::i;:::-;14076:133;-1:-1:-1;14219:19:109;14241:9;:5;14249:1;14241:9;:::i;:::-;14219:31;;14260:23;14286:117;14317:6;14337:11;14362:9;14385:8;14286:17;:117::i;:::-;14260:143;;14436:13;14418:15;:31;14414:351;;;-1:-1:-1;;;;;4746:29:109;;;;;;;:21;:29;;;;;;;;:36;;;;;;;;:47;;;;;;;;;;:57;;;;;;;;;:66;;;14592:162;4576:243;11554:761;11783:9;11778:383;-1:-1:-1;;;;;11802:25:109;;;;;;:17;:25;;;;;:34;;:32;:34::i;:::-;11798:1;:38;11778:383;;;-1:-1:-1;;;;;11876:25:109;;11857:16;11876:25;;;:17;:25;;;;;:31;;11905:1;11876:28;:31::i;:::-;11857:50;;11927:9;11922:229;-1:-1:-1;;;;;11946:26:109;;;;;;:18;:26;;;;;:35;;:33;:35::i;:::-;11942:1;:39;11922:229;;;-1:-1:-1;;;;;12026:26:109;;12006:17;12026:26;;;:18;:26;;;;;:32;;12056:1;12026:29;:32::i;:::-;12006:52;;12077:59;12095:6;12103:11;12116:9;12127:8;12077:17;:59::i;:::-;-1:-1:-1;11983:3:109;;11922:229;;;-1:-1:-1;;11838:3:109;;11778:383;;;-1:-1:-1;12241:15:109;:11;12255:1;12241:15;:::i;:::-;-1:-1:-1;;;;;12210:28:109;;;;;;:20;:28;;;;;;;:46;;;;12272:36;;;;;;12296:11;1031:25:138;;1019:2;1004:18;;885:177;12272:36:109;;;;;;;;11554:761;;:::o;8316:150:67:-;8386:4;8409:50;8414:3;-1:-1:-1;;;;;8434:23:67;;8409:4;:50::i;715:125:111:-;6931:20:25;:18;:20::i;:::-;791:42:111::1;2362:4:24;822:10:111;791;:42::i;4381:197:24:-:0;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:24;;-1:-1:-1;;;;;11816:32:138;;4514:47:24;;;11798:51:138;11865:18;;;11858:34;;;11771:18;;4514:47:24;11624:274:138;4923:118:67;4990:7;5016:3;:11;;5028:5;5016:18;;;;;;;;:::i;:::-;;;;;;;;;5009:25;;4923:118;;;;:::o;2779:335:43:-;2870:37;2889:17;2870:18;:37::i;:::-;2922:27;;-1:-1:-1;;;;;2922:27:43;;;;;;;;2964:11;;:15;2960:148;;2995:53;3024:17;3043:4;2995:28;:53::i;2960:148::-;3079:18;:16;:18::i;7084:141:25:-;8870:21;8560:40;-1:-1:-1;;;8560:40:25;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:25;;;;;;;;;;;3755:312:109;-1:-1:-1;;;;;3926:27:109;;;;;;;:19;:27;;;;;;;;:34;;;;;;;;:45;;;;;;;;;;:55;;;;;;;;;;;:65;;3985:6;;3926:27;:65;;3985:6;;3926:65;:::i;:::-;;;;-1:-1:-1;;;;;;;4001:31:109;;;;;;;:23;:31;;;;;;;;:38;;;;;;;;:49;;;;;;;;;;;:59;;4054:6;;4001:31;:59;;4054:6;;4001:59;:::i;10208:1340::-;10453:19;10475:115;10504:6;10524:11;10549:9;10572:8;10475:15;:115::i;:::-;10453:137;-1:-1:-1;10600:21:109;10624:121;10655:6;10675:15;:11;10689:1;10675:15;:::i;:::-;10704:9;10727:8;10624:17;:121::i;:::-;10600:145;;10775:11;10759:13;:27;10755:85;;;-1:-1:-1;10818:11:109;10755:85;10849:17;10869:27;10883:13;10869:11;:27;:::i;:::-;10849:47;-1:-1:-1;10907:66:109;10917:6;10925:15;:11;10939:1;10925:15;:::i;:::-;10942:9;10953:8;10963:9;10907;:66::i;:::-;11307:63;11328:4;11335:8;11345:9;11356:13;11307:12;:63::i;:::-;11470:9;-1:-1:-1;;;;;11386:155:109;11445:11;11423:8;-1:-1:-1;;;;;11386:155:109;;11493:11;11518:13;11386:155;;;;;;14169:25:138;;;14225:2;14210:18;;14203:34;14157:2;14142:18;;13995:248;11386:155:109;;;;;;;;10356:1192;;;10208:1340;;;;:::o;2241:406:67:-;2304:4;4360:21;;;:14;;;:21;;;;;;2320:321;;-1:-1:-1;2362:23:67;;;;;;;;:11;:23;;;;;;;;;;;;;2544:18;;2520:21;;;:14;;;:21;;;;;;:42;;;;2576:11;;2320:321;-1:-1:-1;2625:5:67;2618:12;;2186:281:43;2263:17;-1:-1:-1;;;;;2263:29:43;;2296:1;2263:34;2259:119;;2320:47;;-1:-1:-1;;;2320:47:43;;-1:-1:-1;;;;;11186:32:138;;2320:47:43;;;11168:51:138;11141:18;;2320:47:43;11006:219:138;2259:119:43;-1:-1:-1;;;;;;;;;;;2387:73:43;;-1:-1:-1;;;;;;2387:73:43;-1:-1:-1;;;;;2387:73:43;;;;;;;;;;2186:281::o;4106:253:56:-;4189:12;4214;4228:23;4255:6;-1:-1:-1;;;;;4255:19:56;4275:4;4255:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4213:67;;;;4297:55;4324:6;4332:7;4341:10;4297:26;:55::i;:::-;4290:62;4106:253;-1:-1:-1;;;;;4106:253:56:o;6598:122:43:-;6648:9;:13;6644:70;;6684:19;;-1:-1:-1;;;6684:19:43;;;;;;;;;;;4625:582:56;4769:12;4798:7;4793:408;;4821:19;4829:10;4821:7;:19::i;:::-;4793:408;;;5045:17;;:22;:49;;;;-1:-1:-1;;;;;;5071:18:56;;;:23;5045:49;5041:119;;;5121:24;;-1:-1:-1;;;5121:24:56;;-1:-1:-1;;;;;11186:32:138;;5121:24:56;;;11168:51:138;11141:18;;5121:24:56;11006:219:138;5041:119:56;-1:-1:-1;5180:10:56;5173:17;;5743:516;5874:17;;:21;5870:383;;6102:10;6096:17;6158:15;6145:10;6141:2;6137:19;6130:44;5870:383;6225:17;;-1:-1:-1;;;6225:17:56;;;;;;;;;;;14:286:138;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:138;;209:43;;199:71;;266:1;263;256:12;497:131;-1:-1:-1;;;;;572:31:138;;562:42;;552:70;;618:1;615;608:12;633:247;692:6;745:2;733:9;724:7;720:23;716:32;713:52;;;761:1;758;751:12;713:52;800:9;787:23;819:31;844:5;819:31;:::i;1067:226::-;1126:6;1179:2;1167:9;1158:7;1154:23;1150:32;1147:52;;;1195:1;1192;1185:12;1147:52;-1:-1:-1;1240:23:138;;1067:226;-1:-1:-1;1067:226:138:o;1480:637::-;1670:2;1682:21;;;1752:13;;1655:18;;;1774:22;;;1622:4;;1853:15;;;1827:2;1812:18;;;1622:4;1896:195;1910:6;1907:1;1904:13;1896:195;;;1975:13;;-1:-1:-1;;;;;1971:39:138;1959:52;;2040:2;2066:15;;;;2031:12;;;;2007:1;1925:9;1896:195;;;-1:-1:-1;2108:3:138;;1480:637;-1:-1:-1;;;;;1480:637:138:o;2122:367::-;2190:6;2198;2251:2;2239:9;2230:7;2226:23;2222:32;2219:52;;;2267:1;2264;2257:12;2219:52;2312:23;;;-1:-1:-1;2411:2:138;2396:18;;2383:32;2424:33;2383:32;2424:33;:::i;:::-;2476:7;2466:17;;;2122:367;;;;;:::o;2494:388::-;2562:6;2570;2623:2;2611:9;2602:7;2598:23;2594:32;2591:52;;;2639:1;2636;2629:12;2591:52;2678:9;2665:23;2697:31;2722:5;2697:31;:::i;:::-;2747:5;-1:-1:-1;2804:2:138;2789:18;;2776:32;2817:33;2776:32;2817:33;:::i;2887:127::-;2948:10;2943:3;2939:20;2936:1;2929:31;2979:4;2976:1;2969:15;3003:4;3000:1;2993:15;3019:1079;3096:6;3104;3157:2;3145:9;3136:7;3132:23;3128:32;3125:52;;;3173:1;3170;3163:12;3125:52;3212:9;3199:23;3231:31;3256:5;3231:31;:::i;:::-;3281:5;-1:-1:-1;3337:2:138;3322:18;;3309:32;-1:-1:-1;;;;;3353:30:138;;3350:50;;;3396:1;3393;3386:12;3350:50;3419:22;;3472:4;3464:13;;3460:27;-1:-1:-1;3450:55:138;;3501:1;3498;3491:12;3450:55;3541:2;3528:16;-1:-1:-1;;;;;3559:6:138;3556:30;3553:56;;;3589:18;;:::i;:::-;3638:2;3632:9;3730:2;3692:17;;-1:-1:-1;;3688:31:138;;;3721:2;3684:40;3680:54;3668:67;;-1:-1:-1;;;;;3750:34:138;;3786:22;;;3747:62;3744:88;;;3812:18;;:::i;:::-;3848:2;3841:22;3872;;;3913:15;;;3930:2;3909:24;3906:37;-1:-1:-1;3903:57:138;;;3956:1;3953;3946:12;3903:57;4012:6;4007:2;4003;3999:11;3994:2;3986:6;3982:15;3969:50;4065:1;4060:2;4051:6;4043;4039:19;4035:28;4028:39;4086:6;4076:16;;;;;3019:1079;;;;;:::o;4103:508::-;4180:6;4188;4196;4249:2;4237:9;4228:7;4224:23;4220:32;4217:52;;;4265:1;4262;4255:12;4217:52;4304:9;4291:23;4323:31;4348:5;4323:31;:::i;:::-;4373:5;-1:-1:-1;4451:2:138;4436:18;;4423:32;;-1:-1:-1;4533:2:138;4518:18;;4505:32;4546:33;4505:32;4546:33;:::i;:::-;4598:7;4588:17;;;4103:508;;;;;:::o;4616:::-;4693:6;4701;4709;4762:2;4750:9;4741:7;4737:23;4733:32;4730:52;;;4778:1;4775;4768:12;4730:52;4817:9;4804:23;4836:31;4861:5;4836:31;:::i;:::-;4886:5;-1:-1:-1;4943:2:138;4928:18;;4915:32;4956:33;4915:32;4956:33;:::i;:::-;4616:508;;5008:7;;-1:-1:-1;;;5088:2:138;5073:18;;;;5060:32;;4616:508::o;5129:650::-;5215:6;5223;5231;5239;5292:3;5280:9;5271:7;5267:23;5263:33;5260:53;;;5309:1;5306;5299:12;5260:53;5348:9;5335:23;5367:31;5392:5;5367:31;:::i;:::-;5417:5;-1:-1:-1;5495:2:138;5480:18;;5467:32;;-1:-1:-1;5577:2:138;5562:18;;5549:32;5590:33;5549:32;5590:33;:::i;:::-;5642:7;-1:-1:-1;5701:2:138;5686:18;;5673:32;5714:33;5673:32;5714:33;:::i;:::-;5129:650;;;;-1:-1:-1;5129:650:138;;-1:-1:-1;;5129:650:138:o;5784:529::-;5861:6;5869;5877;5930:2;5918:9;5909:7;5905:23;5901:32;5898:52;;;5946:1;5943;5936:12;5898:52;5985:9;5972:23;6004:31;6029:5;6004:31;:::i;:::-;6054:5;-1:-1:-1;6111:2:138;6096:18;;6083:32;6124:33;6083:32;6124:33;:::i;:::-;6176:7;-1:-1:-1;6235:2:138;6220:18;;6207:32;6248:33;6207:32;6248:33;:::i;6318:367::-;6381:8;6391:6;6445:3;6438:4;6430:6;6426:17;6422:27;6412:55;;6463:1;6460;6453:12;6412:55;-1:-1:-1;6486:20:138;;-1:-1:-1;;;;;6518:30:138;;6515:50;;;6561:1;6558;6551:12;6515:50;6598:4;6590:6;6586:17;6574:29;;6658:3;6651:4;6641:6;6638:1;6634:14;6626:6;6622:27;6618:38;6615:47;6612:67;;;6675:1;6672;6665:12;6612:67;6318:367;;;;;:::o;6690:1431::-;6884:6;6892;6900;6908;6916;6924;6932;6940;6993:3;6981:9;6972:7;6968:23;6964:33;6961:53;;;7010:1;7007;7000:12;6961:53;7050:9;7037:23;-1:-1:-1;;;;;7075:6:138;7072:30;7069:50;;;7115:1;7112;7105:12;7069:50;7154:70;7216:7;7207:6;7196:9;7192:22;7154:70;:::i;:::-;7243:8;;-1:-1:-1;7128:96:138;-1:-1:-1;;7331:2:138;7316:18;;7303:32;-1:-1:-1;;;;;7347:32:138;;7344:52;;;7392:1;7389;7382:12;7344:52;7431:72;7495:7;7484:8;7473:9;7469:24;7431:72;:::i;:::-;7522:8;;-1:-1:-1;7405:98:138;-1:-1:-1;;7610:2:138;7595:18;;7582:32;-1:-1:-1;;;;;7626:32:138;;7623:52;;;7671:1;7668;7661:12;7623:52;7710:72;7774:7;7763:8;7752:9;7748:24;7710:72;:::i;:::-;7801:8;;-1:-1:-1;7684:98:138;-1:-1:-1;;7889:2:138;7874:18;;7861:32;-1:-1:-1;;;;;7905:32:138;;7902:52;;;7950:1;7947;7940:12;7902:52;7989:72;8053:7;8042:8;8031:9;8027:24;7989:72;:::i;:::-;6690:1431;;;;-1:-1:-1;6690:1431:138;;-1:-1:-1;6690:1431:138;;;;;;8080:8;-1:-1:-1;;;6690:1431:138:o;8126:418::-;8275:2;8264:9;8257:21;8238:4;8307:6;8301:13;8350:6;8345:2;8334:9;8330:18;8323:34;8409:6;8404:2;8396:6;8392:15;8387:2;8376:9;8372:18;8366:50;8465:1;8460:2;8451:6;8440:9;8436:22;8432:31;8425:42;8535:2;8528;8524:7;8519:2;8511:6;8507:15;8503:29;8492:9;8488:45;8484:54;8476:62;;;8126:418;;;;:::o;9346:551::-;9441:6;9449;9457;9510:2;9498:9;9489:7;9485:23;9481:32;9478:52;;;9526:1;9523;9516:12;9478:52;9571:23;;;-1:-1:-1;9669:2:138;9654:18;;9641:32;-1:-1:-1;;;;;9685:30:138;;9682:50;;;9728:1;9725;9718:12;9682:50;9767:70;9829:7;9820:6;9809:9;9805:22;9767:70;:::i;:::-;9346:551;;9856:8;;-1:-1:-1;9741:96:138;;-1:-1:-1;;;;9346:551:138:o;9902:1099::-;10060:6;10068;10076;10084;10092;10100;10153:2;10141:9;10132:7;10128:23;10124:32;10121:52;;;10169:1;10166;10159:12;10121:52;10209:9;10196:23;-1:-1:-1;;;;;10234:6:138;10231:30;10228:50;;;10274:1;10271;10264:12;10228:50;10313:70;10375:7;10366:6;10355:9;10351:22;10313:70;:::i;:::-;10402:8;;-1:-1:-1;10287:96:138;-1:-1:-1;;10490:2:138;10475:18;;10462:32;-1:-1:-1;;;;;10506:32:138;;10503:52;;;10551:1;10548;10541:12;10503:52;10590:72;10654:7;10643:8;10632:9;10628:24;10590:72;:::i;:::-;10681:8;;-1:-1:-1;10564:98:138;-1:-1:-1;;10769:2:138;10754:18;;10741:32;-1:-1:-1;;;;;10785:32:138;;10782:52;;;10830:1;10827;10820:12;10782:52;10869:72;10933:7;10922:8;10911:9;10907:24;10869:72;:::i;:::-;9902:1099;;;;-1:-1:-1;9902:1099:138;;-1:-1:-1;9902:1099:138;;10960:8;;9902:1099;-1:-1:-1;;;9902:1099:138:o;11230:127::-;11291:10;11286:3;11282:20;11279:1;11272:31;11322:4;11319:1;11312:15;11346:4;11343:1;11336:15;11362:127;11423:10;11418:3;11414:20;11411:1;11404:31;11454:4;11451:1;11444:15;11478:4;11475:1;11468:15;11494:125;11559:9;;;11580:10;;;11577:36;;;11593:18;;:::i;12325:184::-;12395:6;12448:2;12436:9;12427:7;12423:23;12419:32;12416:52;;;12464:1;12461;12454:12;12416:52;-1:-1:-1;12487:16:138;;12325:184;-1:-1:-1;12325:184:138:o;12890:277::-;12957:6;13010:2;12998:9;12989:7;12985:23;12981:32;12978:52;;;13026:1;13023;13016:12;12978:52;13058:9;13052:16;13111:5;13104:13;13097:21;13090:5;13087:32;13077:60;;13133:1;13130;13123:12;13172:217;13212:1;13238;13228:132;;13282:10;13277:3;13273:20;13270:1;13263:31;13317:4;13314:1;13307:15;13345:4;13342:1;13335:15;13228:132;-1:-1:-1;13374:9:138;;13172:217::o;13862:128::-;13929:9;;;13950:11;;;13947:37;;;13964:18;;:::i;14248:301::-;14377:3;14415:6;14409:13;14461:6;14454:4;14446:6;14442:17;14437:3;14431:37;14523:1;14487:16;;14512:13;;;-1:-1:-1;14487:16:138;14248:301;-1:-1:-1;14248:301:138:o","linkReferences":{},"immutableReferences":{"39659":[{"start":6066,"length":32},{"start":6107,"length":32},{"start":6433,"length":32}]}},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","WHITELIST_ROLE()":"7a997ab7","acceptGenesisCeremony()":"92a2ebf3","currentEpochByDomain(address)":"0a0b1b64","domainGenesisAccepted(address)":"d1ba90ff","epochDurationByDomain(address)":"3bccf635","epochStakesByDomain(address,uint256,address,address)":"c0b95ab8","epochTotalStakeByDomain(address,uint256,address)":"54300d7a","epochUnstakesByDomain(address,uint256,address,address)":"65f1ea20","getAttestersByDomain(address)":"2924b73b","getCurrentEpoch(address)":"4d3223a5","getCurrentEpochStake(address,address,address)":"70224360","getCurrentEpochUnstake(address,address,address)":"7667b76d","getCustodiansByDomain(address)":"d5ca03de","getEpochByBlockTime(address)":"c3471ff8","getNextEpoch(address)":"8489e580","getNextEpochByBlockTime(address)":"2c7785a8","getRoleAdmin(bytes32)":"248a9ca3","getStakeAtEpoch(address,uint256,address,address)":"8d908258","getTotalStakeForCurrentEpoch(address,address)":"44198e4d","getTotalStakeForEpoch(address,uint256,address)":"5cdf3155","getUnstakeAtEpoch(address,uint256,address,address)":"879b938b","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize()":"8129fc1c","initialize(address)":"c4d66de8","proxiableUUID()":"52d1902d","registerDomain(uint256,address[])":"d37304f8","removeAddressFromWhitelist(address)":"286dd3f5","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","reward(address[],uint256[],address[])":"da33ee7f","rollOverEpoch()":"a887b71c","slash(address[],address[],uint256[],uint256[])":"a885c975","stake(address,address,uint256)":"bf6eac2f","supportsInterface(bytes4)":"01ffc9a7","token()":"fc0c546a","unstake(address,address,uint256)":"60829f8a","upgradeToAndCall(address,bytes)":"4f1ef286","whitelistAddress(address)":"41566585"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodianTransferAmountMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedInnerCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GenesisAlreadyAccepted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakeExceedsGenesisStake\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unstake\",\"type\":\"uint256\"}],\"name\":\"AttesterEpochRolledOver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"name\":\"AttesterStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"name\":\"AttesterUnstaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"EpochRolledOver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WHITELIST_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"currentEpochByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentEpoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"domainGenesisAccepted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"epochDurationByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochDuration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"epochStakesByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"epochTotalStakeByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"epochUnstakesByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getAttestersByDomain\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getCurrentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getCurrentEpochStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getCurrentEpochUnstake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getCustodiansByDomain\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getEpochByBlockTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getNextEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getNextEpochByBlockTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStakeAtEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getTotalStakeForCurrentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getTotalStakeForEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getUnstakeAtEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epochDuration\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"}],\"name\":\"registerDomain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"removeAddressFromWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"}],\"name\":\"reward\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollOverEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"refundAmounts\",\"type\":\"uint256[]\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"whitelistAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"ERC1967InvalidImplementation(address)\":[{\"details\":\"The `implementation` of the proxy is invalid.\"}],\"ERC1967NonPayable()\":[{\"details\":\"An upgrade function sees `msg.value > 0` that may be lost.\"}],\"FailedInnerCall()\":[{\"details\":\"A call to an address target failed. The target may have reverted.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call, an admin role bearer except when using {AccessControl-_setupRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize()\":{\"details\":\"Initialize the contract\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/staking/MovementStaking.sol\":\"MovementStaking\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/forge-std/src/console.sol\":{\"keccak256\":\"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194\",\"dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"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/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930\",\"dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040\",\"dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt\"]},\"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/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45\",\"dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26\",\"dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9\",\"dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f\",\"dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a\",\"dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol\":{\"keccak256\":\"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c\",\"dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol\":{\"keccak256\":\"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850\",\"dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol\":{\"keccak256\":\"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d\",\"dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi\"]},\"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol\":{\"keccak256\":\"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0\",\"dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245\",\"dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y\"]},\"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol\":{\"keccak256\":\"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02\",\"dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c\",\"dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df\",\"dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875\",\"dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1\",\"dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA\"]},\"src/staking/MovementStaking.sol\":{\"keccak256\":\"0xa71627f087feb5ef56bb499624a1034769670f11acdc2160a59df9a9b8694bd3\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://20de6db00ce5e3a8b4638f5c25b6fefce15f1fc356221625245d00250056347c\",\"dweb:/ipfs/QmdEodpmEbBMxLeFSB63we5fMkGzdktpwifMU7GJ6Ffwrx\"]},\"src/staking/MovementStakingStorage.sol\":{\"keccak256\":\"0x9ca2df17c7dec2b75cc96453c60ef64a570ae1adf429d1a92e879127616af4af\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0d53c127b022fd35429ea183b0f1882bb03a62ed4e7e8e79f7058421fe49a947\",\"dweb:/ipfs/QmUMhEebucKiE2MedG9B18vcJMozwQ8yQFwV364Lnrjjej\"]},\"src/staking/base/BaseStaking.sol\":{\"keccak256\":\"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46\",\"dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx\"]},\"src/staking/interfaces/IMovementStaking.sol\":{\"keccak256\":\"0x7f4fcc5c5b4a9c21775085061449a7dd6ee98ed46975c8891ccccc2670cc4587\",\"urls\":[\"bzz-raw://46a2d0689394f90426c85b4d260dc00396c4f065d6cddcd01aff8e95742ebbf5\",\"dweb:/ipfs/QmVZihDFeiz6kpo2bS6TBePkARXJPhdvwELZjYjMnnztAQ\"]},\"src/token/base/BaseToken.sol\":{\"keccak256\":\"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e\",\"dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd\"]},\"src/token/base/MintableToken.sol\":{\"keccak256\":\"0x67dcaae55138dda0f6fb9cce7d00b21b1dcf48144d0442073bec83aedbd73ca6\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://009d22618ed30e84b0839edbe7bd1a18afe7073a62477667bf96d765428385b7\",\"dweb:/ipfs/QmNzA9RjM6SxVJYWohq7JbLvyBrhzzjzQQwBfArBQqCNAQ\"]},\"src/token/base/WrappedToken.sol\":{\"keccak256\":\"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885\",\"dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4\"]},\"src/token/base/WrappedTokenStorage.sol\":{\"keccak256\":\"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08\",\"dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj\"]},\"src/token/custodian/CustodianToken.sol\":{\"keccak256\":\"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04\",\"dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"CustodianTransferAmountMismatch"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"FailedInnerCall"},{"inputs":[],"type":"error","name":"GenesisAlreadyAccepted"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[],"type":"error","name":"StakeExceedsGenesisStake"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"address","name":"attester","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false},{"internalType":"uint256","name":"unstake","type":"uint256","indexed":false}],"type":"event","name":"AttesterEpochRolledOver","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"address","name":"attester","type":"address","indexed":false},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false}],"type":"event","name":"AttesterStaked","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"address","name":"attester","type":"address","indexed":false},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false}],"type":"event","name":"AttesterUnstaked","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":false}],"type":"event","name":"EpochRolledOver","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"WHITELIST_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptGenesisCeremony"},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"currentEpochByDomain","outputs":[{"internalType":"uint256","name":"currentEpoch","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"domainGenesisAccepted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"epochDurationByDomain","outputs":[{"internalType":"uint256","name":"epochDuration","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"epochStakesByDomain","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"epochTotalStakeByDomain","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"epochUnstakesByDomain","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getAttestersByDomain","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getCurrentEpochStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getCurrentEpochUnstake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodiansByDomain","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getEpochByBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getNextEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getNextEpochByBlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStakeAtEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getTotalStakeForCurrentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getTotalStakeForEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getUnstakeAtEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epochDuration","type":"uint256"},{"internalType":"address[]","name":"custodians","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"registerDomain"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"removeAddressFromWhitelist"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address[]","name":"custodians","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"reward"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"rollOverEpoch"},{"inputs":[{"internalType":"address[]","name":"custodians","type":"address[]"},{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"refundAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"slash"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"contract IERC20","name":"custodian","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"stake"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"unstake"},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"whitelistAddress"}],"devdoc":{"kind":"dev","methods":{"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize()":{"details":"Initialize the contract"},"proxiableUUID()":{"details":"Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/staking/MovementStaking.sol":"MovementStaking"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/forge-std/src/console.sol":{"keccak256":"0xf61cb43a94d8318049d0a7f567af8c0aa952b5762a43851b130b90b3fcde0c6a","urls":["bzz-raw://53a52c6c3aeb22f7a18f53fca16af590308a8e3e5507e74df9b8e2561c932194","dweb:/ipfs/QmaaXuY8mC66YoE2xyZdWuLHXqAxLjbnNxiofx8BTP1MRn"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"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/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0x3f13b947637c4969c0644cab4ef399cdc4b67f101463b8775c5a43b118558e53","urls":["bzz-raw://c6683e6ade6985d394d32baaef5eea0d8b9ff0b3eca86ae413d6cdde114a9930","dweb:/ipfs/QmdBE8T1BTddZxpdECMsb3KiCFyjNWmxcCddYrWFTXmWPj"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x9a1766b1921bf91b3e61eb53c7a6e70725254befd4bdcbbcd3af40bd9f66856f","urls":["bzz-raw://29bf2fa41a172086a665c9738377b93655aa4b1ffda9fe839c8bdf646f185040","dweb:/ipfs/QmeB21qDuo8WPQSrqXJbQmWHKsdeocGNSUWLhCwniVejrt"],"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/introspection/ERC165Upgradeable.sol":{"keccak256":"0xdaba3f7c42c55b2896353f32bd27d4d5f8bae741b3b05d4c53f67abc4dc47ce8","urls":["bzz-raw://1fa2e61141c602510bcd2cd936ed9561922ac8772a9b9c9a9db091a74e354a45","dweb:/ipfs/QmcHQDDoEBwJmwUbzoVkytvJsBx3KVHYFFnDkvRGWh9Wmh"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xb6b36edd6a2999fd243ff226d6cbf84bd71af2432bbd0dfe19392996a1d9cb41","urls":["bzz-raw://1fd2f35495652e57e3f99bc6c510bc5f7dd398a176ea2e72d8ed730aebc6ca26","dweb:/ipfs/QmTQV6X4gkikTib49cho5iDX3JvSQbdsoEChoDwrk3CbbH"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c","urls":["bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba","dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0x2a1f9944df2015c081d89cd41ba22ffaf10aa6285969f0dc612b235cc448999c","urls":["bzz-raw://ef381843676aec64421200ee85eaa0b1356a35f28b9fc67e746a6bbb832077d9","dweb:/ipfs/QmY8aorMYA2TeTCnu6ejDjzb4rW4t7TCtW4GZ6LoxTFm7v"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol":{"keccak256":"0x60c65f701957fdd6faea1acb0bb45825791d473693ed9ecb34726fdfaa849dd7","urls":["bzz-raw://ea290300e0efc4d901244949dc4d877fd46e6c5e43dc2b26620e8efab3ab803f","dweb:/ipfs/QmcLLJppxKeJWqHxE2CUkcfhuRTgHSn8J4kijcLa5MYhSt"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x06a78f9b3ee3e6d0eb4e4cd635ba49960bea34cac1db8c0a27c75f2319f1fd65","urls":["bzz-raw://547d21aa17f4f3f1a1a7edf7167beff8dd9496a0348d5588f15cc8a4b29d052a","dweb:/ipfs/QmT16JtRQSWNpLo9W23jr6CzaMuTAcQcjJJcdRd8HLJ6cE"],"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/token/ERC20/IERC20.sol":{"keccak256":"0xc6a8ff0ea489379b61faa647490411b80102578440ab9d84e9a957cc12164e70","urls":["bzz-raw://0ea104e577e63faea3b69c415637e99e755dcbf64c5833d7140c35a714d6d90c","dweb:/ipfs/Qmau6x4Ns9XdyynRCNNp3RhLqijJjFm7z5fyZazfYFGYdq"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Metadata.sol":{"keccak256":"0xaa761817f6cd7892fcf158b3c776b34551cde36f48ff9703d53898bc45a94ea2","urls":["bzz-raw://0ad7c8d4d08938c8dfc43d75a148863fb324b80cf53e0a36f7e5a4ac29008850","dweb:/ipfs/QmcrhfPgVNf5mkdhQvy1pMv51TFokD3Y4Wa5WZhFqVh8UV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/extensions/IERC20Permit.sol":{"keccak256":"0x6008dabfe393240d73d7dd7688033f72740d570aa422254d29a7dce8568f3aff","urls":["bzz-raw://f5196ec75139918c6c7bb4251b36395e668f1fa6d206beba7e7520e74913940d","dweb:/ipfs/QmSyqjksXxmm2mCG6qRd1yuwLykypkSVBbnBnGqJRcuJMi"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol":{"keccak256":"0x37bb49513c49c87c4642a891b13b63571bc87013dde806617aa1efb54605f386","urls":["bzz-raw://b3036b3a83b7c48f96641f2a9002b9f2dcb6a5958dd670894ada21ae8229b3d0","dweb:/ipfs/QmUNfSBdoVtjhETaUJCYcaC7pTMgbhht926tJ2uXJbiVd3"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaf28a975a78550e45f65e559a3ad6a5ad43b9b8a37366999abd1b7084eb70721","urls":["bzz-raw://b7bd24e224f67f65bfadf85dc2929fa965456bb2415478bd0125471b5ce35245","dweb:/ipfs/QmRaydGr8BTHs1kvaZfsNU69pKzUAGFrvABn1KiRSbE51y"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol":{"keccak256":"0xf980daa263b661ab8ddee7d4fd833c7da7e7995e2c359ff1f17e67e4112f2236","urls":["bzz-raw://7448ab095d6940130bcf76ba47a2eab14148c83119523b93dd89f6d84edd6c02","dweb:/ipfs/QmawrZ4voKQjH3oomXT3Kuheb3Mnmo2VvVpxg8Ne5UJUrd"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol":{"keccak256":"0x32ba59b4b7299237c8ba56319110989d7978a039faf754793064e967e5894418","urls":["bzz-raw://1ae50c8b562427df610cc4540c9bf104acca7ef8e2dcae567ae7e52272281e9c","dweb:/ipfs/QmTHiadFCSJUPpRjNegc5SahmeU8bAoY8i9Aq6tVscbcKR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x4296879f55019b23e135000eb36896057e7101fb7fb859c5ef690cf14643757b","urls":["bzz-raw://87b3541437c8c443ccd36795e56a338ed12855eec17f8da624511b8d1a7e14df","dweb:/ipfs/QmeJQCtZrQjtJLr6u7ZHWeH3pBnjtLWzvRrKViAi7UZqxL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0x005ec64c6313f0555d59e278f9a7a5ab2db5bdc72a027f255a37c327af1ec02d","urls":["bzz-raw://4ece9f0b9c8daca08c76b6b5405a6446b6f73b3a15fab7ff56e296cbd4a2c875","dweb:/ipfs/QmQyRpyPRL5SQuAgj6SHmbir3foX65FJjbVTTQrA2EFg6L"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol":{"keccak256":"0x86c1470cbfd878491e5de030072b647352d36bd27122cffb928970b1945282aa","urls":["bzz-raw://ad85dd393ee0a1917c57046abc5155f51f77844b2c6a42c05c1b8dd26d6ff3c1","dweb:/ipfs/QmNqYc8To2NdnpP6E1tGz7t6A7beuENde5yovwov5pW1fA"],"license":"MIT"},"src/staking/MovementStaking.sol":{"keccak256":"0xa71627f087feb5ef56bb499624a1034769670f11acdc2160a59df9a9b8694bd3","urls":["bzz-raw://20de6db00ce5e3a8b4638f5c25b6fefce15f1fc356221625245d00250056347c","dweb:/ipfs/QmdEodpmEbBMxLeFSB63we5fMkGzdktpwifMU7GJ6Ffwrx"],"license":"UNLICENSED"},"src/staking/MovementStakingStorage.sol":{"keccak256":"0x9ca2df17c7dec2b75cc96453c60ef64a570ae1adf429d1a92e879127616af4af","urls":["bzz-raw://0d53c127b022fd35429ea183b0f1882bb03a62ed4e7e8e79f7058421fe49a947","dweb:/ipfs/QmUMhEebucKiE2MedG9B18vcJMozwQ8yQFwV364Lnrjjej"],"license":"UNLICENSED"},"src/staking/base/BaseStaking.sol":{"keccak256":"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393","urls":["bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46","dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx"],"license":"MIT"},"src/staking/interfaces/IMovementStaking.sol":{"keccak256":"0x7f4fcc5c5b4a9c21775085061449a7dd6ee98ed46975c8891ccccc2670cc4587","urls":["bzz-raw://46a2d0689394f90426c85b4d260dc00396c4f065d6cddcd01aff8e95742ebbf5","dweb:/ipfs/QmVZihDFeiz6kpo2bS6TBePkARXJPhdvwELZjYjMnnztAQ"],"license":null},"src/token/base/BaseToken.sol":{"keccak256":"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2","urls":["bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e","dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd"],"license":"MIT"},"src/token/base/MintableToken.sol":{"keccak256":"0x67dcaae55138dda0f6fb9cce7d00b21b1dcf48144d0442073bec83aedbd73ca6","urls":["bzz-raw://009d22618ed30e84b0839edbe7bd1a18afe7073a62477667bf96d765428385b7","dweb:/ipfs/QmNzA9RjM6SxVJYWohq7JbLvyBrhzzjzQQwBfArBQqCNAQ"],"license":"MIT"},"src/token/base/WrappedToken.sol":{"keccak256":"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45","urls":["bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885","dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4"],"license":"MIT"},"src/token/base/WrappedTokenStorage.sol":{"keccak256":"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e","urls":["bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08","dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj"],"license":"MIT"},"src/token/custodian/CustodianToken.sol":{"keccak256":"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350","urls":["bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04","dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":56570,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"token","offset":0,"slot":"0","type":"t_contract(IERC20)43663"},{"astId":56574,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochDurationByDomain","offset":0,"slot":"1","type":"t_mapping(t_address,t_uint256)"},{"astId":56578,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"currentEpochByDomain","offset":0,"slot":"2","type":"t_mapping(t_address,t_uint256)"},{"astId":56583,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"attestersByDomain","offset":0,"slot":"3","type":"t_mapping(t_address,t_struct(AddressSet)46720_storage)"},{"astId":56588,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"custodiansByDomain","offset":0,"slot":"4","type":"t_mapping(t_address,t_struct(AddressSet)46720_storage)"},{"astId":56598,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochStakesByDomain","offset":0,"slot":"5","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))"},{"astId":56608,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochUnstakesByDomain","offset":0,"slot":"6","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))"},{"astId":56616,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochTotalStakeByDomain","offset":0,"slot":"7","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_uint256)))"},{"astId":56620,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"domainGenesisAccepted","offset":0,"slot":"8","type":"t_mapping(t_address,t_bool)"},{"astId":44354,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_status","offset":0,"slot":"9","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_bytes32)dyn_storage":{"encoding":"dynamic_array","label":"bytes32[]","numberOfBytes":"32","base":"t_bytes32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IERC20)43663":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))"},"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_uint256)))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => mapping(address => uint256)))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},"t_mapping(t_address,t_struct(AddressSet)46720_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct EnumerableSet.AddressSet)","numberOfBytes":"32","value":"t_struct(AddressSet)46720_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => mapping(address => uint256)))","numberOfBytes":"32","value":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},"t_mapping(t_uint256,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_struct(AddressSet)46720_storage":{"encoding":"inplace","label":"struct EnumerableSet.AddressSet","numberOfBytes":"64","members":[{"astId":46719,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_inner","offset":0,"slot":"0","type":"t_struct(Set)46405_storage"}]},"t_struct(Set)46405_storage":{"encoding":"inplace","label":"struct EnumerableSet.Set","numberOfBytes":"64","members":[{"astId":46400,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_values","offset":0,"slot":"0","type":"t_array(t_bytes32)dyn_storage"},{"astId":46404,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_positions","offset":0,"slot":"1","type":"t_mapping(t_bytes32,t_uint256)"}]},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/staking/MovementStaking.sol","id":56551,"exportedSymbols":{"BaseStaking":[56681],"EnumerableSet":[47007],"ICustodianToken":[57570],"IERC20":[43663],"IMovementStaking":[56904],"Math":[46289],"MovementStaking":[56550],"MovementStakingStorage":[56626],"ReentrancyGuard":[44412],"SafeERC20":[44015],"console":[24306]},"nodeType":"SourceUnit","src":"39:18632:109","nodes":[{"id":55258,"nodeType":"PragmaDirective","src":"39:24:109","nodes":[],"literals":["solidity","^","0.8",".13"]},{"id":55259,"nodeType":"ImportDirective","src":"64:31:109","nodes":[],"absolutePath":"lib/forge-std/src/console.sol","file":"forge-std/console.sol","nameLocation":"-1:-1:-1","scope":56551,"sourceUnit":24307,"symbolAliases":[],"unitAlias":""},{"id":55261,"nodeType":"ImportDirective","src":"96:51:109","nodes":[],"absolutePath":"src/staking/base/BaseStaking.sol","file":"./base/BaseStaking.sol","nameLocation":"-1:-1:-1","scope":56551,"sourceUnit":56682,"symbolAliases":[{"foreign":{"id":55260,"name":"BaseStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56681,"src":"104:11:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":55263,"nodeType":"ImportDirective","src":"148:82:109","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","nameLocation":"-1:-1:-1","scope":56551,"sourceUnit":44016,"symbolAliases":[{"foreign":{"id":55262,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44015,"src":"156:9:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":55265,"nodeType":"ImportDirective","src":"231:69:109","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol","file":"@openzeppelin/contracts/interfaces/IERC20.sol","nameLocation":"-1:-1:-1","scope":56551,"sourceUnit":42721,"symbolAliases":[{"foreign":{"id":55264,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43663,"src":"239:6:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":55267,"nodeType":"ImportDirective","src":"301:70:109","nodes":[],"absolutePath":"src/token/custodian/CustodianToken.sol","file":"../token/custodian/CustodianToken.sol","nameLocation":"-1:-1:-1","scope":56551,"sourceUnit":57906,"symbolAliases":[{"foreign":{"id":55266,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57570,"src":"309:15:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":55269,"nodeType":"ImportDirective","src":"372:65:109","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/math/Math.sol","file":"@openzeppelin/contracts/utils/math/Math.sol","nameLocation":"-1:-1:-1","scope":56551,"sourceUnit":46290,"symbolAliases":[{"foreign":{"id":55268,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46289,"src":"380:4:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":55272,"nodeType":"ImportDirective","src":"438:83:109","nodes":[],"absolutePath":"src/staking/MovementStakingStorage.sol","file":"./MovementStakingStorage.sol","nameLocation":"-1:-1:-1","scope":56551,"sourceUnit":56627,"symbolAliases":[{"foreign":{"id":55270,"name":"MovementStakingStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56626,"src":"446:22:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":55271,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":47007,"src":"470:13:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":55274,"nodeType":"ImportDirective","src":"522:67:109","nodes":[],"absolutePath":"src/staking/interfaces/IMovementStaking.sol","file":"./interfaces/IMovementStaking.sol","nameLocation":"-1:-1:-1","scope":56551,"sourceUnit":56905,"symbolAliases":[{"foreign":{"id":55273,"name":"IMovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56904,"src":"530:16:109","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":55275,"nodeType":"ImportDirective","src":"590:59:109","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","nameLocation":"-1:-1:-1","scope":56551,"sourceUnit":44413,"symbolAliases":[],"unitAlias":""},{"id":56550,"nodeType":"ContractDefinition","src":"651:18019:109","nodes":[{"id":55287,"nodeType":"UsingForDirective","src":"772:49:109","nodes":[],"global":false,"libraryName":{"id":55284,"name":"EnumerableSet","nameLocations":["778:13:109"],"nodeType":"IdentifierPath","referencedDeclaration":47007,"src":"778:13:109"},"typeName":{"id":55286,"nodeType":"UserDefinedTypeName","pathNode":{"id":55285,"name":"EnumerableSet.AddressSet","nameLocations":["796:13:109","810:10:109"],"nodeType":"IdentifierPath","referencedDeclaration":46720,"src":"796:24:109"},"referencedDeclaration":46720,"src":"796:24:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},{"id":55303,"nodeType":"FunctionDefinition","src":"827:125:109","nodes":[],"body":{"id":55302,"nodeType":"Block","src":"881:71:109","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":55295,"name":"__BaseStaking_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56669,"src":"891:28:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":55296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"891:30:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55297,"nodeType":"ExpressionStatement","src":"891:30:109"},{"expression":{"id":55300,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":55298,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56570,"src":"931:5:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55299,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55290,"src":"939:6:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"src":"931:14:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":55301,"nodeType":"ExpressionStatement","src":"931:14:109"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":55293,"kind":"modifierInvocation","modifierName":{"id":55292,"name":"initializer","nameLocations":["869:11:109"],"nodeType":"IdentifierPath","referencedDeclaration":39493,"src":"869:11:109"},"nodeType":"ModifierInvocation","src":"869:11:109"}],"name":"initialize","nameLocation":"836:10:109","parameters":{"id":55291,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55290,"mutability":"mutable","name":"_token","nameLocation":"854:6:109","nodeType":"VariableDeclaration","scope":55303,"src":"847:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"},"typeName":{"id":55289,"nodeType":"UserDefinedTypeName","pathNode":{"id":55288,"name":"IERC20","nameLocations":["847:6:109"],"nodeType":"IdentifierPath","referencedDeclaration":43663,"src":"847:6:109"},"referencedDeclaration":43663,"src":"847:6:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"846:15:109"},"returnParameters":{"id":55294,"nodeType":"ParameterList","parameters":[],"src":"881:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":55347,"nodeType":"FunctionDefinition","src":"958:349:109","nodes":[],"body":{"id":55346,"nodeType":"Block","src":"1080:227:109","nodes":[],"statements":[{"assignments":[55314],"declarations":[{"constant":false,"id":55314,"mutability":"mutable","name":"domain","nameLocation":"1098:6:109","nodeType":"VariableDeclaration","scope":55346,"src":"1090:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55313,"name":"address","nodeType":"ElementaryTypeName","src":"1090:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55317,"initialValue":{"expression":{"id":55315,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1107:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1111:6:109","memberName":"sender","nodeType":"MemberAccess","src":"1107:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1090:27:109"},{"expression":{"id":55322,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55318,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56574,"src":"1127:21:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55320,"indexExpression":{"id":55319,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55314,"src":"1149:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1127:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55321,"name":"epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55305,"src":"1159:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1127:45:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55323,"nodeType":"ExpressionStatement","src":"1127:45:109"},{"body":{"id":55344,"nodeType":"Block","src":"1231:70:109","statements":[{"expression":{"arguments":[{"baseExpression":{"id":55339,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55308,"src":"1276:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55341,"indexExpression":{"id":55340,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55325,"src":"1287:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1276:13:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":55335,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56588,"src":"1245:18:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55337,"indexExpression":{"id":55336,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55314,"src":"1264:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1245:26:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55338,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1272:3:109","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"1245:30:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$46720_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":55342,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1245:45:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55343,"nodeType":"ExpressionStatement","src":"1245:45:109"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55331,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55328,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55325,"src":"1203:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":55329,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55308,"src":"1207:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":55330,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1218:6:109","memberName":"length","nodeType":"MemberAccess","src":"1207:17:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1203:21:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55345,"initializationExpression":{"assignments":[55325],"declarations":[{"constant":false,"id":55325,"mutability":"mutable","name":"i","nameLocation":"1196:1:109","nodeType":"VariableDeclaration","scope":55345,"src":"1188:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55324,"name":"uint256","nodeType":"ElementaryTypeName","src":"1188:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55327,"initialValue":{"hexValue":"30","id":55326,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1200:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1188:13:109"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1226:3:109","subExpression":{"id":55332,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55325,"src":"1226:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55334,"nodeType":"ExpressionStatement","src":"1226:3:109"},"nodeType":"ForStatement","src":"1183:118:109"}]},"baseFunctions":[56693],"functionSelector":"d37304f8","implemented":true,"kind":"function","modifiers":[{"id":55311,"kind":"modifierInvocation","modifierName":{"id":55310,"name":"nonReentrant","nameLocations":["1067:12:109"],"nodeType":"IdentifierPath","referencedDeclaration":44376,"src":"1067:12:109"},"nodeType":"ModifierInvocation","src":"1067:12:109"}],"name":"registerDomain","nameLocation":"967:14:109","parameters":{"id":55309,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55305,"mutability":"mutable","name":"epochDuration","nameLocation":"999:13:109","nodeType":"VariableDeclaration","scope":55347,"src":"991:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55304,"name":"uint256","nodeType":"ElementaryTypeName","src":"991:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55308,"mutability":"mutable","name":"custodians","nameLocation":"1041:10:109","nodeType":"VariableDeclaration","scope":55347,"src":"1022:29:109","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55306,"name":"address","nodeType":"ElementaryTypeName","src":"1022:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55307,"nodeType":"ArrayTypeName","src":"1022:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"981:76:109"},"returnParameters":{"id":55312,"nodeType":"ParameterList","parameters":[],"src":"1080:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":55400,"nodeType":"FunctionDefinition","src":"1313:522:109","nodes":[],"body":{"id":55399,"nodeType":"Block","src":"1413:422:109","nodes":[],"statements":[{"assignments":[55359],"declarations":[{"constant":false,"id":55359,"mutability":"mutable","name":"custodians","nameLocation":"1568:10:109","nodeType":"VariableDeclaration","scope":55399,"src":"1551:27:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55357,"name":"address","nodeType":"ElementaryTypeName","src":"1551:7:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55358,"nodeType":"ArrayTypeName","src":"1551:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":55369,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55363,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56588,"src":"1608:18:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55365,"indexExpression":{"id":55364,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55349,"src":"1627:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1608:26:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55366,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1635:6:109","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46816,"src":"1608:33:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46720_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1608:35:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55362,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1581:13:109","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":55360,"name":"address","nodeType":"ElementaryTypeName","src":"1585:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55361,"nodeType":"ArrayTypeName","src":"1585:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":55368,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1581:72:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1551:102:109"},{"body":{"id":55395,"nodeType":"Block","src":"1729:73:109","statements":[{"expression":{"id":55393,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55384,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55359,"src":"1743:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":55386,"indexExpression":{"id":55385,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55371,"src":"1754:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1743:13:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55391,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55371,"src":"1789:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55387,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56588,"src":"1759:18:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55389,"indexExpression":{"id":55388,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55349,"src":"1778:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1759:26:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55390,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1786:2:109","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46843,"src":"1759:29:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46720_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55392,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1759:32:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1743:48:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55394,"nodeType":"ExpressionStatement","src":"1743:48:109"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55380,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55374,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55371,"src":"1683:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55375,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56588,"src":"1687:18:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55377,"indexExpression":{"id":55376,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55349,"src":"1706:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1687:26:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55378,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1714:6:109","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46816,"src":"1687:33:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46720_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1687:35:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1683:39:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55396,"initializationExpression":{"assignments":[55371],"declarations":[{"constant":false,"id":55371,"mutability":"mutable","name":"i","nameLocation":"1676:1:109","nodeType":"VariableDeclaration","scope":55396,"src":"1668:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55370,"name":"uint256","nodeType":"ElementaryTypeName","src":"1668:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55373,"initialValue":{"hexValue":"30","id":55372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1680:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1668:13:109"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1724:3:109","subExpression":{"id":55381,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55371,"src":"1724:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55383,"nodeType":"ExpressionStatement","src":"1724:3:109"},"nodeType":"ForStatement","src":"1663:139:109"},{"expression":{"id":55397,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55359,"src":"1818:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":55354,"id":55398,"nodeType":"Return","src":"1811:17:109"}]},"baseFunctions":[56819],"functionSelector":"d5ca03de","implemented":true,"kind":"function","modifiers":[],"name":"getCustodiansByDomain","nameLocation":"1322:21:109","parameters":{"id":55350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55349,"mutability":"mutable","name":"domain","nameLocation":"1361:6:109","nodeType":"VariableDeclaration","scope":55400,"src":"1353:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55348,"name":"address","nodeType":"ElementaryTypeName","src":"1353:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1343:30:109"},"returnParameters":{"id":55354,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55353,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55400,"src":"1395:16:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55351,"name":"address","nodeType":"ElementaryTypeName","src":"1395:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55352,"nodeType":"ArrayTypeName","src":"1395:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1394:18:109"},"scope":56550,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55453,"nodeType":"FunctionDefinition","src":"1841:387:109","nodes":[],"body":{"id":55452,"nodeType":"Block","src":"1940:288:109","nodes":[],"statements":[{"assignments":[55412],"declarations":[{"constant":false,"id":55412,"mutability":"mutable","name":"attesters","nameLocation":"1967:9:109","nodeType":"VariableDeclaration","scope":55452,"src":"1950:26:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55410,"name":"address","nodeType":"ElementaryTypeName","src":"1950:7:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55411,"nodeType":"ArrayTypeName","src":"1950:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":55422,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55416,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56583,"src":"2006:17:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55418,"indexExpression":{"id":55417,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55402,"src":"2024:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2006:25:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55419,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2032:6:109","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46816,"src":"2006:32:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46720_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2006:34:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55415,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1979:13:109","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":55413,"name":"address","nodeType":"ElementaryTypeName","src":"1983:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55414,"nodeType":"ArrayTypeName","src":"1983:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":55421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1979:71:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1950:100:109"},{"body":{"id":55448,"nodeType":"Block","src":"2125:71:109","statements":[{"expression":{"id":55446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55437,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55412,"src":"2139:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":55439,"indexExpression":{"id":55438,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55424,"src":"2149:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2139:12:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55444,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55424,"src":"2183:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55440,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56583,"src":"2154:17:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55442,"indexExpression":{"id":55441,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55402,"src":"2172:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2154:25:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55443,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2180:2:109","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46843,"src":"2154:28:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46720_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2154:31:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2139:46:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55447,"nodeType":"ExpressionStatement","src":"2139:46:109"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55427,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55424,"src":"2080:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55428,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56583,"src":"2084:17:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55430,"indexExpression":{"id":55429,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55402,"src":"2102:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2084:25:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55431,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2110:6:109","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46816,"src":"2084:32:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46720_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55432,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2084:34:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2080:38:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55449,"initializationExpression":{"assignments":[55424],"declarations":[{"constant":false,"id":55424,"mutability":"mutable","name":"i","nameLocation":"2073:1:109","nodeType":"VariableDeclaration","scope":55449,"src":"2065:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55423,"name":"uint256","nodeType":"ElementaryTypeName","src":"2065:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55426,"initialValue":{"hexValue":"30","id":55425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2077:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2065:13:109"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55435,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2120:3:109","subExpression":{"id":55434,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55424,"src":"2120:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55436,"nodeType":"ExpressionStatement","src":"2120:3:109"},"nodeType":"ForStatement","src":"2060:136:109"},{"expression":{"id":55450,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55412,"src":"2212:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":55407,"id":55451,"nodeType":"Return","src":"2205:16:109"}]},"baseFunctions":[56827],"functionSelector":"2924b73b","implemented":true,"kind":"function","modifiers":[],"name":"getAttestersByDomain","nameLocation":"1850:20:109","parameters":{"id":55403,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55402,"mutability":"mutable","name":"domain","nameLocation":"1888:6:109","nodeType":"VariableDeclaration","scope":55453,"src":"1880:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55401,"name":"address","nodeType":"ElementaryTypeName","src":"1880:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1870:30:109"},"returnParameters":{"id":55407,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55406,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55453,"src":"1922:16:109","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":55404,"name":"address","nodeType":"ElementaryTypeName","src":"1922:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":55405,"nodeType":"ArrayTypeName","src":"1922:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1921:18:109"},"scope":56550,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55554,"nodeType":"FunctionDefinition","src":"2234:1200:109","nodes":[],"body":{"id":55553,"nodeType":"Block","src":"2287:1147:109","nodes":[],"statements":[{"assignments":[55459],"declarations":[{"constant":false,"id":55459,"mutability":"mutable","name":"domain","nameLocation":"2305:6:109","nodeType":"VariableDeclaration","scope":55553,"src":"2297:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55458,"name":"address","nodeType":"ElementaryTypeName","src":"2297:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55462,"initialValue":{"expression":{"id":55460,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"2314:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55461,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2318:6:109","memberName":"sender","nodeType":"MemberAccess","src":"2314:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2297:27:109"},{"condition":{"baseExpression":{"id":55463,"name":"domainGenesisAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56620,"src":"2338:21:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55465,"indexExpression":{"id":55464,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55459,"src":"2360:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2338:29:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55469,"nodeType":"IfStatement","src":"2334:66:109","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":55466,"name":"GenesisAlreadyAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56903,"src":"2376:22:109","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":55467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2376:24:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":55468,"nodeType":"RevertStatement","src":"2369:31:109"}},{"expression":{"id":55474,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55470,"name":"domainGenesisAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56620,"src":"2410:21:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":55472,"indexExpression":{"id":55471,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55459,"src":"2432:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2410:29:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":55473,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"2442:4:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"2410:36:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55475,"nodeType":"ExpressionStatement","src":"2410:36:109"},{"expression":{"id":55482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":55476,"name":"currentEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56578,"src":"2525:20:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55478,"indexExpression":{"id":55477,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55459,"src":"2546:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2525:28:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":55480,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55459,"src":"2576:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55479,"name":"getEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55719,"src":"2556:19:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55481,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2556:27:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2525:58:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55483,"nodeType":"ExpressionStatement","src":"2525:58:109"},{"body":{"id":55551,"nodeType":"Block","src":"2659:769:109","statements":[{"assignments":[55499],"declarations":[{"constant":false,"id":55499,"mutability":"mutable","name":"attester","nameLocation":"2681:8:109","nodeType":"VariableDeclaration","scope":55551,"src":"2673:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55498,"name":"address","nodeType":"ElementaryTypeName","src":"2673:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55506,"initialValue":{"arguments":[{"id":55504,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55485,"src":"2721:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55500,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56583,"src":"2692:17:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55502,"indexExpression":{"id":55501,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55459,"src":"2710:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2692:25:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55503,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2718:2:109","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46843,"src":"2692:28:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46720_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55505,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2692:31:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2673:50:109"},{"body":{"id":55549,"nodeType":"Block","src":"2804:614:109","statements":[{"assignments":[55522],"declarations":[{"constant":false,"id":55522,"mutability":"mutable","name":"custodian","nameLocation":"2830:9:109","nodeType":"VariableDeclaration","scope":55549,"src":"2822:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55521,"name":"address","nodeType":"ElementaryTypeName","src":"2822:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":55529,"initialValue":{"arguments":[{"id":55527,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55508,"src":"2872:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":55523,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56588,"src":"2842:18:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55525,"indexExpression":{"id":55524,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55459,"src":"2861:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2842:26:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55526,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2869:2:109","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46843,"src":"2842:29:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46720_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":55528,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2842:32:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"2822:52:109"},{"assignments":[55531],"declarations":[{"constant":false,"id":55531,"mutability":"mutable","name":"attesterStake","nameLocation":"2959:13:109","nodeType":"VariableDeclaration","scope":55549,"src":"2951:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55530,"name":"uint256","nodeType":"ElementaryTypeName","src":"2951:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55538,"initialValue":{"arguments":[{"id":55533,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55459,"src":"3012:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":55534,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3040:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":55535,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55522,"src":"3063:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55536,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55499,"src":"3094:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55532,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55797,"src":"2975:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55537,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2975:145:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2951:169:109"},{"expression":{"arguments":[{"id":55540,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55459,"src":"3238:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55542,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55459,"src":"3282:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55541,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55731,"src":"3266:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3266:23:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55544,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55522,"src":"3311:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55545,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55499,"src":"3342:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55546,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55531,"src":"3372:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55539,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55590,"src":"3207:9:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55547,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3207:196:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55548,"nodeType":"ExpressionStatement","src":"3207:196:109"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55511,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55508,"src":"2758:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55512,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56588,"src":"2762:18:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55514,"indexExpression":{"id":55513,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55459,"src":"2781:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2762:26:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55515,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2789:6:109","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46816,"src":"2762:33:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46720_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2762:35:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2758:39:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55550,"initializationExpression":{"assignments":[55508],"declarations":[{"constant":false,"id":55508,"mutability":"mutable","name":"j","nameLocation":"2751:1:109","nodeType":"VariableDeclaration","scope":55550,"src":"2743:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55507,"name":"uint256","nodeType":"ElementaryTypeName","src":"2743:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55510,"initialValue":{"hexValue":"30","id":55509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2755:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2743:13:109"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2799:3:109","subExpression":{"id":55518,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55508,"src":"2799:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55520,"nodeType":"ExpressionStatement","src":"2799:3:109"},"nodeType":"ForStatement","src":"2738:680:109"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55494,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55488,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55485,"src":"2614:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":55489,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56583,"src":"2618:17:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55491,"indexExpression":{"id":55490,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55459,"src":"2636:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2618:25:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55492,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2644:6:109","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46816,"src":"2618:32:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46720_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":55493,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2618:34:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2614:38:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55552,"initializationExpression":{"assignments":[55485],"declarations":[{"constant":false,"id":55485,"mutability":"mutable","name":"i","nameLocation":"2607:1:109","nodeType":"VariableDeclaration","scope":55552,"src":"2599:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55484,"name":"uint256","nodeType":"ElementaryTypeName","src":"2599:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55487,"initialValue":{"hexValue":"30","id":55486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2611:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2599:13:109"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":55496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2654:3:109","subExpression":{"id":55495,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55485,"src":"2654:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55497,"nodeType":"ExpressionStatement","src":"2654:3:109"},"nodeType":"ForStatement","src":"2594:834:109"}]},"baseFunctions":[56696],"functionSelector":"92a2ebf3","implemented":true,"kind":"function","modifiers":[{"id":55456,"kind":"modifierInvocation","modifierName":{"id":55455,"name":"nonReentrant","nameLocations":["2274:12:109"],"nodeType":"IdentifierPath","referencedDeclaration":44376,"src":"2274:12:109"},"nodeType":"ModifierInvocation","src":"2274:12:109"}],"name":"acceptGenesisCeremony","nameLocation":"2243:21:109","parameters":{"id":55454,"nodeType":"ParameterList","parameters":[],"src":"2264:2:109"},"returnParameters":{"id":55457,"nodeType":"ParameterList","parameters":[],"src":"2287:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":55590,"nodeType":"FunctionDefinition","src":"3440:309:109","nodes":[],"body":{"id":55589,"nodeType":"Block","src":"3598:151:109","nodes":[],"statements":[{"expression":{"id":55577,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55567,"name":"epochStakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56598,"src":"3608:19:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55572,"indexExpression":{"id":55568,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55556,"src":"3628:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3608:27:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55573,"indexExpression":{"id":55569,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55558,"src":"3636:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3608:34:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55574,"indexExpression":{"id":55570,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55560,"src":"3643:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3608:45:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55575,"indexExpression":{"id":55571,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55562,"src":"3654:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3608:55:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":55576,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55564,"src":"3667:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3608:65:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55578,"nodeType":"ExpressionStatement","src":"3608:65:109"},{"expression":{"id":55587,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55579,"name":"epochTotalStakeByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56616,"src":"3683:23:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":55583,"indexExpression":{"id":55580,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55556,"src":"3707:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3683:31:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":55584,"indexExpression":{"id":55581,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55558,"src":"3715:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3683:38:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55585,"indexExpression":{"id":55582,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55560,"src":"3722:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3683:49:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":55586,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55564,"src":"3736:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3683:59:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55588,"nodeType":"ExpressionStatement","src":"3683:59:109"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_addStake","nameLocation":"3449:9:109","parameters":{"id":55565,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55556,"mutability":"mutable","name":"domain","nameLocation":"3476:6:109","nodeType":"VariableDeclaration","scope":55590,"src":"3468:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55555,"name":"address","nodeType":"ElementaryTypeName","src":"3468:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55558,"mutability":"mutable","name":"epoch","nameLocation":"3500:5:109","nodeType":"VariableDeclaration","scope":55590,"src":"3492:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55557,"name":"uint256","nodeType":"ElementaryTypeName","src":"3492:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55560,"mutability":"mutable","name":"custodian","nameLocation":"3523:9:109","nodeType":"VariableDeclaration","scope":55590,"src":"3515:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55559,"name":"address","nodeType":"ElementaryTypeName","src":"3515:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55562,"mutability":"mutable","name":"attester","nameLocation":"3550:8:109","nodeType":"VariableDeclaration","scope":55590,"src":"3542:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55561,"name":"address","nodeType":"ElementaryTypeName","src":"3542:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55564,"mutability":"mutable","name":"amount","nameLocation":"3576:6:109","nodeType":"VariableDeclaration","scope":55590,"src":"3568:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55563,"name":"uint256","nodeType":"ElementaryTypeName","src":"3568:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3458:130:109"},"returnParameters":{"id":55566,"nodeType":"ParameterList","parameters":[],"src":"3598:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55626,"nodeType":"FunctionDefinition","src":"3755:312:109","nodes":[],"body":{"id":55625,"nodeType":"Block","src":"3916:151:109","nodes":[],"statements":[{"expression":{"id":55613,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55603,"name":"epochStakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56598,"src":"3926:19:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55608,"indexExpression":{"id":55604,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55592,"src":"3946:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3926:27:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55609,"indexExpression":{"id":55605,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55594,"src":"3954:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3926:34:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55610,"indexExpression":{"id":55606,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55596,"src":"3961:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3926:45:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55611,"indexExpression":{"id":55607,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55598,"src":"3972:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3926:55:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":55612,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55600,"src":"3985:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3926:65:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55614,"nodeType":"ExpressionStatement","src":"3926:65:109"},{"expression":{"id":55623,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55615,"name":"epochTotalStakeByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56616,"src":"4001:23:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":55619,"indexExpression":{"id":55616,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55592,"src":"4025:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4001:31:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":55620,"indexExpression":{"id":55617,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55594,"src":"4033:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4001:38:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55621,"indexExpression":{"id":55618,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55596,"src":"4040:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4001:49:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":55622,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55600,"src":"4054:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4001:59:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55624,"nodeType":"ExpressionStatement","src":"4001:59:109"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeStake","nameLocation":"3764:12:109","parameters":{"id":55601,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55592,"mutability":"mutable","name":"domain","nameLocation":"3794:6:109","nodeType":"VariableDeclaration","scope":55626,"src":"3786:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55591,"name":"address","nodeType":"ElementaryTypeName","src":"3786:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55594,"mutability":"mutable","name":"epoch","nameLocation":"3818:5:109","nodeType":"VariableDeclaration","scope":55626,"src":"3810:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55593,"name":"uint256","nodeType":"ElementaryTypeName","src":"3810:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55596,"mutability":"mutable","name":"custodian","nameLocation":"3841:9:109","nodeType":"VariableDeclaration","scope":55626,"src":"3833:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55595,"name":"address","nodeType":"ElementaryTypeName","src":"3833:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55598,"mutability":"mutable","name":"attester","nameLocation":"3868:8:109","nodeType":"VariableDeclaration","scope":55626,"src":"3860:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55597,"name":"address","nodeType":"ElementaryTypeName","src":"3860:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55600,"mutability":"mutable","name":"amount","nameLocation":"3894:6:109","nodeType":"VariableDeclaration","scope":55626,"src":"3886:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55599,"name":"uint256","nodeType":"ElementaryTypeName","src":"3886:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"3776:130:109"},"returnParameters":{"id":55602,"nodeType":"ParameterList","parameters":[],"src":"3916:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55652,"nodeType":"FunctionDefinition","src":"4073:244:109","nodes":[],"body":{"id":55651,"nodeType":"Block","src":"4233:84:109","nodes":[],"statements":[{"expression":{"id":55649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55639,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56608,"src":"4243:21:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55644,"indexExpression":{"id":55640,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55628,"src":"4265:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4243:29:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55645,"indexExpression":{"id":55641,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55630,"src":"4273:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4243:36:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55646,"indexExpression":{"id":55642,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55632,"src":"4280:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4243:47:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55647,"indexExpression":{"id":55643,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55634,"src":"4291:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4243:57:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":55648,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55636,"src":"4304:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4243:67:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55650,"nodeType":"ExpressionStatement","src":"4243:67:109"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_addUnstake","nameLocation":"4082:11:109","parameters":{"id":55637,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55628,"mutability":"mutable","name":"domain","nameLocation":"4111:6:109","nodeType":"VariableDeclaration","scope":55652,"src":"4103:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55627,"name":"address","nodeType":"ElementaryTypeName","src":"4103:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55630,"mutability":"mutable","name":"epoch","nameLocation":"4135:5:109","nodeType":"VariableDeclaration","scope":55652,"src":"4127:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55629,"name":"uint256","nodeType":"ElementaryTypeName","src":"4127:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55632,"mutability":"mutable","name":"custodian","nameLocation":"4158:9:109","nodeType":"VariableDeclaration","scope":55652,"src":"4150:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55631,"name":"address","nodeType":"ElementaryTypeName","src":"4150:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55634,"mutability":"mutable","name":"attester","nameLocation":"4185:8:109","nodeType":"VariableDeclaration","scope":55652,"src":"4177:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55633,"name":"address","nodeType":"ElementaryTypeName","src":"4177:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55636,"mutability":"mutable","name":"amount","nameLocation":"4211:6:109","nodeType":"VariableDeclaration","scope":55652,"src":"4203:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55635,"name":"uint256","nodeType":"ElementaryTypeName","src":"4203:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4093:130:109"},"returnParameters":{"id":55638,"nodeType":"ParameterList","parameters":[],"src":"4233:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55678,"nodeType":"FunctionDefinition","src":"4323:247:109","nodes":[],"body":{"id":55677,"nodeType":"Block","src":"4486:84:109","nodes":[],"statements":[{"expression":{"id":55675,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55665,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56608,"src":"4496:21:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55670,"indexExpression":{"id":55666,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55654,"src":"4518:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4496:29:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55671,"indexExpression":{"id":55667,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55656,"src":"4526:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4496:36:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55672,"indexExpression":{"id":55668,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55658,"src":"4533:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4496:47:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55673,"indexExpression":{"id":55669,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55660,"src":"4544:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4496:57:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":55674,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55662,"src":"4557:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4496:67:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55676,"nodeType":"ExpressionStatement","src":"4496:67:109"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeUnstake","nameLocation":"4332:14:109","parameters":{"id":55663,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55654,"mutability":"mutable","name":"domain","nameLocation":"4364:6:109","nodeType":"VariableDeclaration","scope":55678,"src":"4356:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55653,"name":"address","nodeType":"ElementaryTypeName","src":"4356:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55656,"mutability":"mutable","name":"epoch","nameLocation":"4388:5:109","nodeType":"VariableDeclaration","scope":55678,"src":"4380:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55655,"name":"uint256","nodeType":"ElementaryTypeName","src":"4380:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55658,"mutability":"mutable","name":"custodian","nameLocation":"4411:9:109","nodeType":"VariableDeclaration","scope":55678,"src":"4403:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55657,"name":"address","nodeType":"ElementaryTypeName","src":"4403:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55660,"mutability":"mutable","name":"attester","nameLocation":"4438:8:109","nodeType":"VariableDeclaration","scope":55678,"src":"4430:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55659,"name":"address","nodeType":"ElementaryTypeName","src":"4430:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55662,"mutability":"mutable","name":"amount","nameLocation":"4464:6:109","nodeType":"VariableDeclaration","scope":55678,"src":"4456:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55661,"name":"uint256","nodeType":"ElementaryTypeName","src":"4456:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4346:130:109"},"returnParameters":{"id":55664,"nodeType":"ParameterList","parameters":[],"src":"4486:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55704,"nodeType":"FunctionDefinition","src":"4576:243:109","nodes":[],"body":{"id":55703,"nodeType":"Block","src":"4736:83:109","nodes":[],"statements":[{"expression":{"id":55701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55691,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56608,"src":"4746:21:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55696,"indexExpression":{"id":55692,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55680,"src":"4768:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4746:29:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55697,"indexExpression":{"id":55693,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55682,"src":"4776:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4746:36:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55698,"indexExpression":{"id":55694,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55684,"src":"4783:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4746:47:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55699,"indexExpression":{"id":55695,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55686,"src":"4794:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4746:57:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":55700,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55688,"src":"4806:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4746:66:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55702,"nodeType":"ExpressionStatement","src":"4746:66:109"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setUnstake","nameLocation":"4585:11:109","parameters":{"id":55689,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55680,"mutability":"mutable","name":"domain","nameLocation":"4614:6:109","nodeType":"VariableDeclaration","scope":55704,"src":"4606:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55679,"name":"address","nodeType":"ElementaryTypeName","src":"4606:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55682,"mutability":"mutable","name":"epoch","nameLocation":"4638:5:109","nodeType":"VariableDeclaration","scope":55704,"src":"4630:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55681,"name":"uint256","nodeType":"ElementaryTypeName","src":"4630:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55684,"mutability":"mutable","name":"custodian","nameLocation":"4661:9:109","nodeType":"VariableDeclaration","scope":55704,"src":"4653:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55683,"name":"address","nodeType":"ElementaryTypeName","src":"4653:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55686,"mutability":"mutable","name":"attester","nameLocation":"4688:8:109","nodeType":"VariableDeclaration","scope":55704,"src":"4680:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55685,"name":"address","nodeType":"ElementaryTypeName","src":"4680:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55688,"mutability":"mutable","name":"amount","nameLocation":"4714:6:109","nodeType":"VariableDeclaration","scope":55704,"src":"4706:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55687,"name":"uint256","nodeType":"ElementaryTypeName","src":"4706:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4596:130:109"},"returnParameters":{"id":55690,"nodeType":"ParameterList","parameters":[],"src":"4736:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":55719,"nodeType":"FunctionDefinition","src":"4883:146:109","nodes":[],"body":{"id":55718,"nodeType":"Block","src":"4958:71:109","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55716,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":55711,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"4975:5:109","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":55712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4981:9:109","memberName":"timestamp","nodeType":"MemberAccess","src":"4975:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"id":55713,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56574,"src":"4993:21:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55715,"indexExpression":{"id":55714,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55706,"src":"5015:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4993:29:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4975:47:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55710,"id":55717,"nodeType":"Return","src":"4968:54:109"}]},"baseFunctions":[56703],"functionSelector":"c3471ff8","implemented":true,"kind":"function","modifiers":[],"name":"getEpochByBlockTime","nameLocation":"4892:19:109","parameters":{"id":55707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55706,"mutability":"mutable","name":"domain","nameLocation":"4920:6:109","nodeType":"VariableDeclaration","scope":55719,"src":"4912:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55705,"name":"address","nodeType":"ElementaryTypeName","src":"4912:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4911:16:109"},"returnParameters":{"id":55710,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55709,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55719,"src":"4949:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55708,"name":"uint256","nodeType":"ElementaryTypeName","src":"4949:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4948:9:109"},"scope":56550,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55731,"nodeType":"FunctionDefinition","src":"5103:123:109","nodes":[],"body":{"id":55730,"nodeType":"Block","src":"5174:52:109","nodes":[],"statements":[{"expression":{"baseExpression":{"id":55726,"name":"currentEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56578,"src":"5191:20:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55728,"indexExpression":{"id":55727,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55721,"src":"5212:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5191:28:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55725,"id":55729,"nodeType":"Return","src":"5184:35:109"}]},"baseFunctions":[56710],"functionSelector":"4d3223a5","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentEpoch","nameLocation":"5112:15:109","parameters":{"id":55722,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55721,"mutability":"mutable","name":"domain","nameLocation":"5136:6:109","nodeType":"VariableDeclaration","scope":55731,"src":"5128:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55720,"name":"address","nodeType":"ElementaryTypeName","src":"5128:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5127:16:109"},"returnParameters":{"id":55725,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55724,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55731,"src":"5165:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55723,"name":"uint256","nodeType":"ElementaryTypeName","src":"5165:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5164:9:109"},"scope":56550,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55752,"nodeType":"FunctionDefinition","src":"5259:154:109","nodes":[],"body":{"id":55751,"nodeType":"Block","src":"5327:86:109","nodes":[],"statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55742,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55739,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55733,"src":"5360:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55738,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55731,"src":"5344:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5344:23:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55741,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5371:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5344:28:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55748,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55745,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55733,"src":"5395:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55744,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55731,"src":"5379:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55746,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5379:23:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55747,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5405:1:109","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5379:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55749,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5344:62:109","trueExpression":{"hexValue":"30","id":55743,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5375:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55737,"id":55750,"nodeType":"Return","src":"5337:69:109"}]},"baseFunctions":[56717],"functionSelector":"8489e580","implemented":true,"kind":"function","modifiers":[],"name":"getNextEpoch","nameLocation":"5268:12:109","parameters":{"id":55734,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55733,"mutability":"mutable","name":"domain","nameLocation":"5289:6:109","nodeType":"VariableDeclaration","scope":55752,"src":"5281:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55732,"name":"address","nodeType":"ElementaryTypeName","src":"5281:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5280:16:109"},"returnParameters":{"id":55737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55736,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55752,"src":"5318:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55735,"name":"uint256","nodeType":"ElementaryTypeName","src":"5318:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5317:9:109"},"scope":56550,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55773,"nodeType":"FunctionDefinition","src":"5419:195:109","nodes":[],"body":{"id":55772,"nodeType":"Block","src":"5512:102:109","nodes":[],"statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55760,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55754,"src":"5557:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55759,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55731,"src":"5541:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55761,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5541:23:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":55762,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5568:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5541:28:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":55766,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55754,"src":"5596:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55765,"name":"getEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55719,"src":"5576:19:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5576:27:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":55768,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5606:1:109","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"5576:31:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":55770,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"5541:66:109","trueExpression":{"hexValue":"30","id":55764,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5572:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55758,"id":55771,"nodeType":"Return","src":"5522:85:109"}]},"baseFunctions":[56724],"functionSelector":"2c7785a8","implemented":true,"kind":"function","modifiers":[],"name":"getNextEpochByBlockTime","nameLocation":"5428:23:109","parameters":{"id":55755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55754,"mutability":"mutable","name":"domain","nameLocation":"5469:6:109","nodeType":"VariableDeclaration","scope":55773,"src":"5461:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55753,"name":"address","nodeType":"ElementaryTypeName","src":"5461:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5451:30:109"},"returnParameters":{"id":55758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55757,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55773,"src":"5503:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55756,"name":"uint256","nodeType":"ElementaryTypeName","src":"5503:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5502:9:109"},"scope":56550,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55797,"nodeType":"FunctionDefinition","src":"5680:240:109","nodes":[],"body":{"id":55796,"nodeType":"Block","src":"5841:79:109","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55786,"name":"epochStakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56598,"src":"5858:19:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55788,"indexExpression":{"id":55787,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55775,"src":"5878:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5858:27:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55790,"indexExpression":{"id":55789,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55777,"src":"5886:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5858:34:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55792,"indexExpression":{"id":55791,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55779,"src":"5893:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5858:45:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55794,"indexExpression":{"id":55793,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55781,"src":"5904:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5858:55:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55785,"id":55795,"nodeType":"Return","src":"5851:62:109"}]},"baseFunctions":[56737],"functionSelector":"8d908258","implemented":true,"kind":"function","modifiers":[],"name":"getStakeAtEpoch","nameLocation":"5689:15:109","parameters":{"id":55782,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55775,"mutability":"mutable","name":"domain","nameLocation":"5722:6:109","nodeType":"VariableDeclaration","scope":55797,"src":"5714:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55774,"name":"address","nodeType":"ElementaryTypeName","src":"5714:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55777,"mutability":"mutable","name":"epoch","nameLocation":"5746:5:109","nodeType":"VariableDeclaration","scope":55797,"src":"5738:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55776,"name":"uint256","nodeType":"ElementaryTypeName","src":"5738:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55779,"mutability":"mutable","name":"custodian","nameLocation":"5769:9:109","nodeType":"VariableDeclaration","scope":55797,"src":"5761:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55778,"name":"address","nodeType":"ElementaryTypeName","src":"5761:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55781,"mutability":"mutable","name":"attester","nameLocation":"5796:8:109","nodeType":"VariableDeclaration","scope":55797,"src":"5788:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55780,"name":"address","nodeType":"ElementaryTypeName","src":"5788:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"5704:106:109"},"returnParameters":{"id":55785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55784,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55797,"src":"5832:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55783,"name":"uint256","nodeType":"ElementaryTypeName","src":"5832:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5831:9:109"},"scope":56550,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55818,"nodeType":"FunctionDefinition","src":"5990:326:109","nodes":[],"body":{"id":55817,"nodeType":"Block","src":"6133:183:109","nodes":[],"statements":[{"expression":{"arguments":[{"id":55809,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55799,"src":"6195:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55811,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55799,"src":"6235:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55810,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55731,"src":"6219:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55812,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6219:23:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55813,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55801,"src":"6260:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55814,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55803,"src":"6287:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55808,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55797,"src":"6162:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6162:147:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55807,"id":55816,"nodeType":"Return","src":"6143:166:109"}]},"baseFunctions":[56748],"functionSelector":"70224360","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentEpochStake","nameLocation":"5999:20:109","parameters":{"id":55804,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55799,"mutability":"mutable","name":"domain","nameLocation":"6037:6:109","nodeType":"VariableDeclaration","scope":55818,"src":"6029:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55798,"name":"address","nodeType":"ElementaryTypeName","src":"6029:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55801,"mutability":"mutable","name":"custodian","nameLocation":"6061:9:109","nodeType":"VariableDeclaration","scope":55818,"src":"6053:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55800,"name":"address","nodeType":"ElementaryTypeName","src":"6053:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55803,"mutability":"mutable","name":"attester","nameLocation":"6088:8:109","nodeType":"VariableDeclaration","scope":55818,"src":"6080:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55802,"name":"address","nodeType":"ElementaryTypeName","src":"6080:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6019:83:109"},"returnParameters":{"id":55807,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55806,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55818,"src":"6124:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55805,"name":"uint256","nodeType":"ElementaryTypeName","src":"6124:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6123:9:109"},"scope":56550,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55842,"nodeType":"FunctionDefinition","src":"6384:244:109","nodes":[],"body":{"id":55841,"nodeType":"Block","src":"6547:81:109","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55831,"name":"epochUnstakesByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56608,"src":"6564:21:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":55833,"indexExpression":{"id":55832,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55820,"src":"6586:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6564:29:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":55835,"indexExpression":{"id":55834,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55822,"src":"6594:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6564:36:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":55837,"indexExpression":{"id":55836,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55824,"src":"6601:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6564:47:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55839,"indexExpression":{"id":55838,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55826,"src":"6612:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6564:57:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55830,"id":55840,"nodeType":"Return","src":"6557:64:109"}]},"baseFunctions":[56761],"functionSelector":"879b938b","implemented":true,"kind":"function","modifiers":[],"name":"getUnstakeAtEpoch","nameLocation":"6393:17:109","parameters":{"id":55827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55820,"mutability":"mutable","name":"domain","nameLocation":"6428:6:109","nodeType":"VariableDeclaration","scope":55842,"src":"6420:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55819,"name":"address","nodeType":"ElementaryTypeName","src":"6420:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55822,"mutability":"mutable","name":"epoch","nameLocation":"6452:5:109","nodeType":"VariableDeclaration","scope":55842,"src":"6444:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55821,"name":"uint256","nodeType":"ElementaryTypeName","src":"6444:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55824,"mutability":"mutable","name":"custodian","nameLocation":"6475:9:109","nodeType":"VariableDeclaration","scope":55842,"src":"6467:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55823,"name":"address","nodeType":"ElementaryTypeName","src":"6467:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55826,"mutability":"mutable","name":"attester","nameLocation":"6502:8:109","nodeType":"VariableDeclaration","scope":55842,"src":"6494:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55825,"name":"address","nodeType":"ElementaryTypeName","src":"6494:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6410:106:109"},"returnParameters":{"id":55830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55842,"src":"6538:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55828,"name":"uint256","nodeType":"ElementaryTypeName","src":"6538:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6537:9:109"},"scope":56550,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55863,"nodeType":"FunctionDefinition","src":"6700:330:109","nodes":[],"body":{"id":55862,"nodeType":"Block","src":"6845:185:109","nodes":[],"statements":[{"expression":{"arguments":[{"id":55854,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55844,"src":"6909:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55856,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55844,"src":"6949:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55855,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55731,"src":"6933:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6933:23:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55858,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55846,"src":"6974:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55859,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55848,"src":"7001:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55853,"name":"getUnstakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55842,"src":"6874:17:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":55860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6874:149:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55852,"id":55861,"nodeType":"Return","src":"6855:168:109"}]},"baseFunctions":[56772],"functionSelector":"7667b76d","implemented":true,"kind":"function","modifiers":[],"name":"getCurrentEpochUnstake","nameLocation":"6709:22:109","parameters":{"id":55849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55844,"mutability":"mutable","name":"domain","nameLocation":"6749:6:109","nodeType":"VariableDeclaration","scope":55863,"src":"6741:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55843,"name":"address","nodeType":"ElementaryTypeName","src":"6741:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55846,"mutability":"mutable","name":"custodian","nameLocation":"6773:9:109","nodeType":"VariableDeclaration","scope":55863,"src":"6765:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55845,"name":"address","nodeType":"ElementaryTypeName","src":"6765:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55848,"mutability":"mutable","name":"attester","nameLocation":"6800:8:109","nodeType":"VariableDeclaration","scope":55863,"src":"6792:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55847,"name":"address","nodeType":"ElementaryTypeName","src":"6792:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"6731:83:109"},"returnParameters":{"id":55852,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55851,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55863,"src":"6836:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55850,"name":"uint256","nodeType":"ElementaryTypeName","src":"6836:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6835:9:109"},"scope":56550,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55883,"nodeType":"FunctionDefinition","src":"7082:214:109","nodes":[],"body":{"id":55882,"nodeType":"Block","src":"7223:73:109","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":55874,"name":"epochTotalStakeByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56616,"src":"7240:23:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":55876,"indexExpression":{"id":55875,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55865,"src":"7264:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7240:31:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":55878,"indexExpression":{"id":55877,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55867,"src":"7272:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7240:38:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":55880,"indexExpression":{"id":55879,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55869,"src":"7279:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7240:49:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55873,"id":55881,"nodeType":"Return","src":"7233:56:109"}]},"baseFunctions":[56783],"functionSelector":"5cdf3155","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStakeForEpoch","nameLocation":"7091:21:109","parameters":{"id":55870,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55865,"mutability":"mutable","name":"domain","nameLocation":"7130:6:109","nodeType":"VariableDeclaration","scope":55883,"src":"7122:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55864,"name":"address","nodeType":"ElementaryTypeName","src":"7122:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55867,"mutability":"mutable","name":"epoch","nameLocation":"7154:5:109","nodeType":"VariableDeclaration","scope":55883,"src":"7146:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55866,"name":"uint256","nodeType":"ElementaryTypeName","src":"7146:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":55869,"mutability":"mutable","name":"custodian","nameLocation":"7177:9:109","nodeType":"VariableDeclaration","scope":55883,"src":"7169:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55868,"name":"address","nodeType":"ElementaryTypeName","src":"7169:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7112:80:109"},"returnParameters":{"id":55873,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55872,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55883,"src":"7214:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55871,"name":"uint256","nodeType":"ElementaryTypeName","src":"7214:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7213:9:109"},"scope":56550,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55901,"nodeType":"FunctionDefinition","src":"7352:226:109","nodes":[],"body":{"id":55900,"nodeType":"Block","src":"7477:101:109","nodes":[],"statements":[{"expression":{"arguments":[{"id":55893,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55885,"src":"7528:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55895,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55885,"src":"7552:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55894,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55731,"src":"7536:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55896,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7536:23:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":55897,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55887,"src":"7561:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":55892,"name":"getTotalStakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55883,"src":"7506:21:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view returns (uint256)"}},"id":55898,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7506:65:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":55891,"id":55899,"nodeType":"Return","src":"7487:84:109"}]},"baseFunctions":[56792],"functionSelector":"44198e4d","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStakeForCurrentEpoch","nameLocation":"7361:28:109","parameters":{"id":55888,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55885,"mutability":"mutable","name":"domain","nameLocation":"7407:6:109","nodeType":"VariableDeclaration","scope":55901,"src":"7399:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55884,"name":"address","nodeType":"ElementaryTypeName","src":"7399:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55887,"mutability":"mutable","name":"custodian","nameLocation":"7431:9:109","nodeType":"VariableDeclaration","scope":55901,"src":"7423:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55886,"name":"address","nodeType":"ElementaryTypeName","src":"7423:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"7389:57:109"},"returnParameters":{"id":55891,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55890,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":55901,"src":"7468:7:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55889,"name":"uint256","nodeType":"ElementaryTypeName","src":"7468:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7467:9:109"},"scope":56550,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":55990,"nodeType":"FunctionDefinition","src":"7617:1674:109","nodes":[],"body":{"id":55989,"nodeType":"Block","src":"7759:1532:109","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":55920,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"7852:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55921,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7856:6:109","memberName":"sender","nodeType":"MemberAccess","src":"7852:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":55916,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56583,"src":"7822:17:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":55918,"indexExpression":{"id":55917,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55903,"src":"7840:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7822:25:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":55919,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"7848:3:109","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":46747,"src":"7822:29:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$46720_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":55922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7822:41:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55923,"nodeType":"ExpressionStatement","src":"7822:41:109"},{"assignments":[55925],"declarations":[{"constant":false,"id":55925,"mutability":"mutable","name":"balanceBefore","nameLocation":"8235:13:109","nodeType":"VariableDeclaration","scope":55989,"src":"8227:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55924,"name":"uint256","nodeType":"ElementaryTypeName","src":"8227:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":55933,"initialValue":{"arguments":[{"arguments":[{"id":55930,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8275:4:109","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56550","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56550","typeString":"contract MovementStaking"}],"id":55929,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8267:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55928,"name":"address","nodeType":"ElementaryTypeName","src":"8267:7:109","typeDescriptions":{}}},"id":55931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8267:13:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":55926,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56570,"src":"8251:5:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":55927,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8257:9:109","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43620,"src":"8251:15:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":55932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8251:30:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8227:54:109"},{"expression":{"arguments":[{"expression":{"id":55937,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"8585:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8589:6:109","memberName":"sender","nodeType":"MemberAccess","src":"8585:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55941,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8605:4:109","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56550","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56550","typeString":"contract MovementStaking"}],"id":55940,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8597:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55939,"name":"address","nodeType":"ElementaryTypeName","src":"8597:7:109","typeDescriptions":{}}},"id":55942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8597:13:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55943,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55908,"src":"8612:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":55934,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55906,"src":"8562:9:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":55936,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8572:12:109","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43662,"src":"8562:22:109","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":55944,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8562:57:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55945,"nodeType":"ExpressionStatement","src":"8562:57:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":55950,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8742:4:109","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56550","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56550","typeString":"contract MovementStaking"}],"id":55949,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8734:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55948,"name":"address","nodeType":"ElementaryTypeName","src":"8734:7:109","typeDescriptions":{}}},"id":55951,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8734:13:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":55946,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56570,"src":"8718:5:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":55947,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8724:9:109","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43620,"src":"8718:15:109","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":55952,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8718:30:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":55955,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":55953,"name":"balanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55925,"src":"8752:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":55954,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55908,"src":"8768:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8752:22:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8718:56:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":55960,"nodeType":"IfStatement","src":"8714:114:109","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":55957,"name":"CustodianTransferAmountMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56901,"src":"8795:31:109","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":55958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8795:33:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":55959,"nodeType":"RevertStatement","src":"8788:40:109"}},{"expression":{"arguments":[{"id":55962,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55903,"src":"8918:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55964,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55903,"src":"8962:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55963,"name":"getNextEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55773,"src":"8938:23:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55965,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8938:31:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":55968,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55906,"src":"8991:9:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":55967,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8983:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55966,"name":"address","nodeType":"ElementaryTypeName","src":"8983:7:109","typeDescriptions":{}}},"id":55969,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8983:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55970,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9015:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9019:6:109","memberName":"sender","nodeType":"MemberAccess","src":"9015:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55972,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55908,"src":"9039:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55961,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55590,"src":"8895:9:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55973,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8895:160:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55974,"nodeType":"ExpressionStatement","src":"8895:160:109"},{"eventCall":{"arguments":[{"id":55976,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55903,"src":"9158:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":55978,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55903,"src":"9191:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":55977,"name":"getNextEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55752,"src":"9178:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":55979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9178:20:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":55982,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55906,"src":"9220:9:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":55981,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9212:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":55980,"name":"address","nodeType":"ElementaryTypeName","src":"9212:7:109","typeDescriptions":{}}},"id":55983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9212:18:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":55984,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9244:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":55985,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9248:6:109","memberName":"sender","nodeType":"MemberAccess","src":"9244:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":55986,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55908,"src":"9268:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":55975,"name":"AttesterStaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56867,"src":"9130:14:109","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":55987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9130:154:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":55988,"nodeType":"EmitStatement","src":"9125:159:109"}]},"baseFunctions":[56802],"functionSelector":"bf6eac2f","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":55911,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56625,"src":"7730:14:109","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":55912,"kind":"modifierInvocation","modifierName":{"id":55910,"name":"onlyRole","nameLocations":["7721:8:109"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"7721:8:109"},"nodeType":"ModifierInvocation","src":"7721:24:109"},{"id":55914,"kind":"modifierInvocation","modifierName":{"id":55913,"name":"nonReentrant","nameLocations":["7746:12:109"],"nodeType":"IdentifierPath","referencedDeclaration":44376,"src":"7746:12:109"},"nodeType":"ModifierInvocation","src":"7746:12:109"}],"name":"stake","nameLocation":"7626:5:109","parameters":{"id":55909,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55903,"mutability":"mutable","name":"domain","nameLocation":"7649:6:109","nodeType":"VariableDeclaration","scope":55990,"src":"7641:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55902,"name":"address","nodeType":"ElementaryTypeName","src":"7641:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55906,"mutability":"mutable","name":"custodian","nameLocation":"7672:9:109","nodeType":"VariableDeclaration","scope":55990,"src":"7665:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"},"typeName":{"id":55905,"nodeType":"UserDefinedTypeName","pathNode":{"id":55904,"name":"IERC20","nameLocations":["7665:6:109"],"nodeType":"IdentifierPath","referencedDeclaration":43663,"src":"7665:6:109"},"referencedDeclaration":43663,"src":"7665:6:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":55908,"mutability":"mutable","name":"amount","nameLocation":"7699:6:109","nodeType":"VariableDeclaration","scope":55990,"src":"7691:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55907,"name":"uint256","nodeType":"ElementaryTypeName","src":"7691:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7631:80:109"},"returnParameters":{"id":55915,"nodeType":"ParameterList","parameters":[],"src":"7759:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":56027,"nodeType":"FunctionDefinition","src":"9342:799:109","nodes":[],"body":{"id":56026,"nodeType":"Block","src":"9487:654:109","nodes":[],"statements":[{"expression":{"arguments":[{"id":56005,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55992,"src":"9843:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":56007,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55992,"src":"9887:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56006,"name":"getNextEpochByBlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55773,"src":"9863:23:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":56008,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9863:31:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56009,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55994,"src":"9908:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":56010,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"9931:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9935:6:109","memberName":"sender","nodeType":"MemberAccess","src":"9931:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56012,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55996,"src":"9955:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56004,"name":"_addUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55652,"src":"9818:11:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":56013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9818:153:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56014,"nodeType":"ExpressionStatement","src":"9818:153:109"},{"eventCall":{"arguments":[{"id":56016,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55992,"src":"10017:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":56018,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55992,"src":"10050:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56017,"name":"getNextEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55752,"src":"10037:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":56019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10037:20:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56020,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55994,"src":"10071:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":56021,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"10094:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56022,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10098:6:109","memberName":"sender","nodeType":"MemberAccess","src":"10094:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56023,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55996,"src":"10118:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56015,"name":"AttesterUnstaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56879,"src":"9987:16:109","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":56024,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9987:147:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56025,"nodeType":"EmitStatement","src":"9982:152:109"}]},"baseFunctions":[56811],"functionSelector":"60829f8a","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":55999,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56625,"src":"9458:14:109","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":56000,"kind":"modifierInvocation","modifierName":{"id":55998,"name":"onlyRole","nameLocations":["9449:8:109"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"9449:8:109"},"nodeType":"ModifierInvocation","src":"9449:24:109"},{"id":56002,"kind":"modifierInvocation","modifierName":{"id":56001,"name":"nonReentrant","nameLocations":["9474:12:109"],"nodeType":"IdentifierPath","referencedDeclaration":44376,"src":"9474:12:109"},"nodeType":"ModifierInvocation","src":"9474:12:109"}],"name":"unstake","nameLocation":"9351:7:109","parameters":{"id":55997,"nodeType":"ParameterList","parameters":[{"constant":false,"id":55992,"mutability":"mutable","name":"domain","nameLocation":"9376:6:109","nodeType":"VariableDeclaration","scope":56027,"src":"9368:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55991,"name":"address","nodeType":"ElementaryTypeName","src":"9368:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55994,"mutability":"mutable","name":"custodian","nameLocation":"9400:9:109","nodeType":"VariableDeclaration","scope":56027,"src":"9392:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":55993,"name":"address","nodeType":"ElementaryTypeName","src":"9392:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":55996,"mutability":"mutable","name":"amount","nameLocation":"9427:6:109","nodeType":"VariableDeclaration","scope":56027,"src":"9419:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":55995,"name":"uint256","nodeType":"ElementaryTypeName","src":"9419:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9358:81:109"},"returnParameters":{"id":56003,"nodeType":"ParameterList","parameters":[],"src":"9487:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":56102,"nodeType":"FunctionDefinition","src":"10208:1340:109","nodes":[],"body":{"id":56101,"nodeType":"Block","src":"10356:1192:109","nodes":[],"statements":[{"assignments":[56039],"declarations":[{"constant":false,"id":56039,"mutability":"mutable","name":"stakeAmount","nameLocation":"10461:11:109","nodeType":"VariableDeclaration","scope":56101,"src":"10453:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56038,"name":"uint256","nodeType":"ElementaryTypeName","src":"10453:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56046,"initialValue":{"arguments":[{"id":56041,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56029,"src":"10504:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56042,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56031,"src":"10524:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56043,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56033,"src":"10549:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56044,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"10572:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56040,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55797,"src":"10475:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":56045,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10475:115:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10453:137:109"},{"assignments":[56048],"declarations":[{"constant":false,"id":56048,"mutability":"mutable","name":"unstakeAmount","nameLocation":"10608:13:109","nodeType":"VariableDeclaration","scope":56101,"src":"10600:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56047,"name":"uint256","nodeType":"ElementaryTypeName","src":"10600:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56057,"initialValue":{"arguments":[{"id":56050,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56029,"src":"10655:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56053,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56051,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56031,"src":"10675:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":56052,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10689:1:109","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10675:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56054,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56033,"src":"10704:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56055,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"10727:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56049,"name":"getUnstakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55842,"src":"10624:17:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":56056,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10624:121:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10600:145:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56060,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56058,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56048,"src":"10759:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":56059,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56039,"src":"10775:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10759:27:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56066,"nodeType":"IfStatement","src":"10755:85:109","trueBody":{"id":56065,"nodeType":"Block","src":"10788:52:109","statements":[{"expression":{"id":56063,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":56061,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56048,"src":"10802:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":56062,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56039,"src":"10818:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10802:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56064,"nodeType":"ExpressionStatement","src":"10802:27:109"}]}},{"assignments":[56068],"declarations":[{"constant":false,"id":56068,"mutability":"mutable","name":"remainder","nameLocation":"10857:9:109","nodeType":"VariableDeclaration","scope":56101,"src":"10849:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56067,"name":"uint256","nodeType":"ElementaryTypeName","src":"10849:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56072,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56069,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56039,"src":"10869:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":56070,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56048,"src":"10883:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10869:27:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10849:47:109"},{"expression":{"arguments":[{"id":56074,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56029,"src":"10917:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56075,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56031,"src":"10925:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":56076,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10939:1:109","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"10925:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56078,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56033,"src":"10942:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56079,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"10953:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56080,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56068,"src":"10963:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56073,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55590,"src":"10907:9:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":56081,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10907:66:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56082,"nodeType":"ExpressionStatement","src":"10907:66:109"},{"expression":{"arguments":[{"arguments":[{"id":56086,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11328:4:109","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56550","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56550","typeString":"contract MovementStaking"}],"id":56085,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11320:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56084,"name":"address","nodeType":"ElementaryTypeName","src":"11320:7:109","typeDescriptions":{}}},"id":56087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11320:13:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56088,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"11335:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56089,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56033,"src":"11345:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56090,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56048,"src":"11356:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56083,"name":"_payAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56479,"src":"11307:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":56091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11307:63:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56092,"nodeType":"ExpressionStatement","src":"11307:63:109"},{"eventCall":{"arguments":[{"id":56094,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56035,"src":"11423:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56095,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56031,"src":"11445:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56096,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56033,"src":"11470:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56097,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56039,"src":"11493:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56098,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56048,"src":"11518:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56093,"name":"AttesterEpochRolledOver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56891,"src":"11386:23:109","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,uint256,uint256)"}},"id":56099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11386:155:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56100,"nodeType":"EmitStatement","src":"11381:160:109"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_rollOverAttester","nameLocation":"10217:17:109","parameters":{"id":56036,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56029,"mutability":"mutable","name":"domain","nameLocation":"10252:6:109","nodeType":"VariableDeclaration","scope":56102,"src":"10244:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56028,"name":"address","nodeType":"ElementaryTypeName","src":"10244:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56031,"mutability":"mutable","name":"epochNumber","nameLocation":"10276:11:109","nodeType":"VariableDeclaration","scope":56102,"src":"10268:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56030,"name":"uint256","nodeType":"ElementaryTypeName","src":"10268:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":56033,"mutability":"mutable","name":"custodian","nameLocation":"10305:9:109","nodeType":"VariableDeclaration","scope":56102,"src":"10297:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56032,"name":"address","nodeType":"ElementaryTypeName","src":"10297:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56035,"mutability":"mutable","name":"attester","nameLocation":"10332:8:109","nodeType":"VariableDeclaration","scope":56102,"src":"10324:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56034,"name":"address","nodeType":"ElementaryTypeName","src":"10324:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10234:112:109"},"returnParameters":{"id":56037,"nodeType":"ParameterList","parameters":[],"src":"10356:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":56180,"nodeType":"FunctionDefinition","src":"11554:761:109","nodes":[],"body":{"id":56179,"nodeType":"Block","src":"11624:691:109","nodes":[],"statements":[{"body":{"id":56164,"nodeType":"Block","src":"11843:318:109","statements":[{"assignments":[56124],"declarations":[{"constant":false,"id":56124,"mutability":"mutable","name":"attester","nameLocation":"11865:8:109","nodeType":"VariableDeclaration","scope":56164,"src":"11857:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56123,"name":"address","nodeType":"ElementaryTypeName","src":"11857:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":56131,"initialValue":{"arguments":[{"id":56129,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56110,"src":"11905:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":56125,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56583,"src":"11876:17:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":56127,"indexExpression":{"id":56126,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56104,"src":"11894:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11876:25:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":56128,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11902:2:109","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46843,"src":"11876:28:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46720_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":56130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11876:31:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"11857:50:109"},{"body":{"id":56162,"nodeType":"Block","src":"11988:163:109","statements":[{"assignments":[56147],"declarations":[{"constant":false,"id":56147,"mutability":"mutable","name":"custodian","nameLocation":"12014:9:109","nodeType":"VariableDeclaration","scope":56162,"src":"12006:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56146,"name":"address","nodeType":"ElementaryTypeName","src":"12006:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":56154,"initialValue":{"arguments":[{"id":56152,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"12056:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":56148,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56588,"src":"12026:18:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":56150,"indexExpression":{"id":56149,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56104,"src":"12045:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12026:26:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":56151,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12053:2:109","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":46843,"src":"12026:29:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46720_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":56153,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12026:32:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"12006:52:109"},{"expression":{"arguments":[{"id":56156,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56104,"src":"12095:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56157,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56106,"src":"12103:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56158,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56147,"src":"12116:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56159,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56124,"src":"12127:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56155,"name":"_rollOverAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56102,"src":"12077:17:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,uint256,address,address)"}},"id":56160,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12077:59:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56161,"nodeType":"ExpressionStatement","src":"12077:59:109"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56136,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"11942:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":56137,"name":"custodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56588,"src":"11946:18:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":56139,"indexExpression":{"id":56138,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56104,"src":"11965:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11946:26:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":56140,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11973:6:109","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46816,"src":"11946:33:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46720_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":56141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11946:35:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11942:39:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56163,"initializationExpression":{"assignments":[56133],"declarations":[{"constant":false,"id":56133,"mutability":"mutable","name":"j","nameLocation":"11935:1:109","nodeType":"VariableDeclaration","scope":56163,"src":"11927:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56132,"name":"uint256","nodeType":"ElementaryTypeName","src":"11927:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56135,"initialValue":{"hexValue":"30","id":56134,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11939:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11927:13:109"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":56144,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11983:3:109","subExpression":{"id":56143,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56133,"src":"11983:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56145,"nodeType":"ExpressionStatement","src":"11983:3:109"},"nodeType":"ForStatement","src":"11922:229:109"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56119,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56113,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56110,"src":"11798:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":56114,"name":"attestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56583,"src":"11802:17:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$46720_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":56116,"indexExpression":{"id":56115,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56104,"src":"11820:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11802:25:109","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$46720_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":56117,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11828:6:109","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":46816,"src":"11802:32:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$46720_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$46720_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":56118,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11802:34:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11798:38:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56165,"initializationExpression":{"assignments":[56110],"declarations":[{"constant":false,"id":56110,"mutability":"mutable","name":"i","nameLocation":"11791:1:109","nodeType":"VariableDeclaration","scope":56165,"src":"11783:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56109,"name":"uint256","nodeType":"ElementaryTypeName","src":"11783:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56112,"initialValue":{"hexValue":"30","id":56111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11795:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11783:13:109"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":56121,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11838:3:109","subExpression":{"id":56120,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56110,"src":"11838:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56122,"nodeType":"ExpressionStatement","src":"11838:3:109"},"nodeType":"ForStatement","src":"11778:383:109"},{"expression":{"id":56172,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":56166,"name":"currentEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56578,"src":"12210:20:109","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":56168,"indexExpression":{"id":56167,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56104,"src":"12231:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"12210:28:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56169,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56106,"src":"12241:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":56170,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12255:1:109","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"12241:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12210:46:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56173,"nodeType":"ExpressionStatement","src":"12210:46:109"},{"eventCall":{"arguments":[{"id":56175,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56104,"src":"12288:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56176,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56106,"src":"12296:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56174,"name":"EpochRolledOver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56897,"src":"12272:15:109","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":56177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12272:36:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56178,"nodeType":"EmitStatement","src":"12267:41:109"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_rollOverEpoch","nameLocation":"11563:14:109","parameters":{"id":56107,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56104,"mutability":"mutable","name":"domain","nameLocation":"11586:6:109","nodeType":"VariableDeclaration","scope":56180,"src":"11578:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56103,"name":"address","nodeType":"ElementaryTypeName","src":"11578:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56106,"mutability":"mutable","name":"epochNumber","nameLocation":"11602:11:109","nodeType":"VariableDeclaration","scope":56180,"src":"11594:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56105,"name":"uint256","nodeType":"ElementaryTypeName","src":"11594:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11577:37:109"},"returnParameters":{"id":56108,"nodeType":"ParameterList","parameters":[],"src":"11624:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":56193,"nodeType":"FunctionDefinition","src":"12321:106:109","nodes":[],"body":{"id":56192,"nodeType":"Block","src":"12355:72:109","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":56184,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12380:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12384:6:109","memberName":"sender","nodeType":"MemberAccess","src":"12380:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":56187,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12408:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12412:6:109","memberName":"sender","nodeType":"MemberAccess","src":"12408:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56186,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55731,"src":"12392:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":56189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12392:27:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56183,"name":"_rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56180,"src":"12365:14:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":56190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12365:55:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56191,"nodeType":"ExpressionStatement","src":"12365:55:109"}]},"baseFunctions":[56830],"functionSelector":"a887b71c","implemented":true,"kind":"function","modifiers":[],"name":"rollOverEpoch","nameLocation":"12330:13:109","parameters":{"id":56181,"nodeType":"ParameterList","parameters":[],"src":"12343:2:109"},"returnParameters":{"id":56182,"nodeType":"ParameterList","parameters":[],"src":"12355:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":56243,"nodeType":"FunctionDefinition","src":"12734:803:109","nodes":[],"body":{"id":56242,"nodeType":"Block","src":"12894:643:109","nodes":[],"statements":[{"assignments":[56208],"declarations":[{"constant":false,"id":56208,"mutability":"mutable","name":"targetEpoch","nameLocation":"12965:11:109","nodeType":"VariableDeclaration","scope":56242,"src":"12957:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56207,"name":"uint256","nodeType":"ElementaryTypeName","src":"12957:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56210,"initialValue":{"id":56209,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56198,"src":"12979:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12957:27:109"},{"assignments":[56212],"declarations":[{"constant":false,"id":56212,"mutability":"mutable","name":"stakeForEpoch","nameLocation":"13002:13:109","nodeType":"VariableDeclaration","scope":56242,"src":"12994:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56211,"name":"uint256","nodeType":"ElementaryTypeName","src":"12994:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56219,"initialValue":{"arguments":[{"id":56214,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56196,"src":"13047:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56215,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56208,"src":"13067:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56216,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56200,"src":"13092:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56217,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56202,"src":"13115:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56213,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55797,"src":"13018:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":56218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13018:115:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12994:139:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56220,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56212,"src":"13226:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":56221,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56204,"src":"13242:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13226:22:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":56240,"nodeType":"Block","src":"13444:87:109","statements":[{"expression":{"arguments":[{"id":56233,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56196,"src":"13471:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56234,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56208,"src":"13479:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56235,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56200,"src":"13492:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56236,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56202,"src":"13503:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56237,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56204,"src":"13513:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56232,"name":"_removeStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55626,"src":"13458:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":56238,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13458:62:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56239,"nodeType":"ExpressionStatement","src":"13458:62:109"}]},"id":56241,"nodeType":"IfStatement","src":"13222:309:109","trueBody":{"id":56231,"nodeType":"Block","src":"13250:188:109","statements":[{"expression":{"arguments":[{"id":56224,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56196,"src":"13294:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56225,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56208,"src":"13318:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56226,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56200,"src":"13347:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56227,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56202,"src":"13374:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56228,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56212,"src":"13400:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56223,"name":"_removeStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55626,"src":"13264:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":56229,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13264:163:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56230,"nodeType":"ExpressionStatement","src":"13264:163:109"}]}}]},"documentation":{"id":56194,"nodeType":"StructuredDocumentation","src":"12433:296:109","text":" @dev Slash an attester's stake\n @param domain The domain of the attester\n @param epoch The epoch in which the slash is attempted\n @param custodian The custodian of the token\n @param attester The attester to slash\n @param amount The amount to slash"},"implemented":true,"kind":"function","modifiers":[],"name":"_slashStake","nameLocation":"12743:11:109","parameters":{"id":56205,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56196,"mutability":"mutable","name":"domain","nameLocation":"12772:6:109","nodeType":"VariableDeclaration","scope":56243,"src":"12764:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56195,"name":"address","nodeType":"ElementaryTypeName","src":"12764:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56198,"mutability":"mutable","name":"epoch","nameLocation":"12796:5:109","nodeType":"VariableDeclaration","scope":56243,"src":"12788:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56197,"name":"uint256","nodeType":"ElementaryTypeName","src":"12788:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":56200,"mutability":"mutable","name":"custodian","nameLocation":"12819:9:109","nodeType":"VariableDeclaration","scope":56243,"src":"12811:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56199,"name":"address","nodeType":"ElementaryTypeName","src":"12811:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56202,"mutability":"mutable","name":"attester","nameLocation":"12846:8:109","nodeType":"VariableDeclaration","scope":56243,"src":"12838:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56201,"name":"address","nodeType":"ElementaryTypeName","src":"12838:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56204,"mutability":"mutable","name":"amount","nameLocation":"12872:6:109","nodeType":"VariableDeclaration","scope":56243,"src":"12864:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56203,"name":"uint256","nodeType":"ElementaryTypeName","src":"12864:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12754:130:109"},"returnParameters":{"id":56206,"nodeType":"ParameterList","parameters":[],"src":"12894:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":56293,"nodeType":"FunctionDefinition","src":"13869:902:109","nodes":[],"body":{"id":56292,"nodeType":"Block","src":"14007:764:109","nodes":[],"statements":[{"assignments":[56256],"declarations":[{"constant":false,"id":56256,"mutability":"mutable","name":"stakeForEpoch","nameLocation":"14084:13:109","nodeType":"VariableDeclaration","scope":56292,"src":"14076:21:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56255,"name":"uint256","nodeType":"ElementaryTypeName","src":"14076:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56263,"initialValue":{"arguments":[{"id":56258,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56246,"src":"14129:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56259,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56248,"src":"14149:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56260,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56250,"src":"14168:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56261,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56252,"src":"14191:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56257,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55797,"src":"14100:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":56262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14100:109:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14076:133:109"},{"assignments":[56265],"declarations":[{"constant":false,"id":56265,"mutability":"mutable","name":"targetEpoch","nameLocation":"14227:11:109","nodeType":"VariableDeclaration","scope":56292,"src":"14219:19:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56264,"name":"uint256","nodeType":"ElementaryTypeName","src":"14219:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56269,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56268,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56266,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56248,"src":"14241:5:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":56267,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14249:1:109","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"14241:9:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14219:31:109"},{"assignments":[56271],"declarations":[{"constant":false,"id":56271,"mutability":"mutable","name":"unstakeForEpoch","nameLocation":"14268:15:109","nodeType":"VariableDeclaration","scope":56292,"src":"14260:23:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56270,"name":"uint256","nodeType":"ElementaryTypeName","src":"14260:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56278,"initialValue":{"arguments":[{"id":56273,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56246,"src":"14317:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56274,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56265,"src":"14337:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56275,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56250,"src":"14362:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56276,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56252,"src":"14385:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56272,"name":"getUnstakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55842,"src":"14286:17:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":56277,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14286:117:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"14260:143:109"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56281,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56279,"name":"unstakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56271,"src":"14418:15:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":56280,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56256,"src":"14436:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14418:31:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56291,"nodeType":"IfStatement","src":"14414:351:109","trueBody":{"id":56290,"nodeType":"Block","src":"14451:314:109","statements":[{"expression":{"arguments":[{"id":56283,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56246,"src":"14621:6:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56284,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56265,"src":"14645:11:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":56285,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56250,"src":"14674:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56286,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56252,"src":"14701:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56287,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56256,"src":"14727:13:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56282,"name":"_setUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55704,"src":"14592:11:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":56288,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14592:162:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56289,"nodeType":"ExpressionStatement","src":"14592:162:109"}]}}]},"documentation":{"id":56244,"nodeType":"StructuredDocumentation","src":"13543:321:109","text":" @dev Slash an attester's unstake\n @param domain The domain of the attester\n @param epoch The epoch in which the slash is attempted, i.e., epoch - 1 of the epoch where the unstake will be removed\n @param custodian The custodian of the token\n @param attester The attester to slash"},"implemented":true,"kind":"function","modifiers":[],"name":"_slashUnstake","nameLocation":"13878:13:109","parameters":{"id":56253,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56246,"mutability":"mutable","name":"domain","nameLocation":"13909:6:109","nodeType":"VariableDeclaration","scope":56293,"src":"13901:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56245,"name":"address","nodeType":"ElementaryTypeName","src":"13901:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56248,"mutability":"mutable","name":"epoch","nameLocation":"13933:5:109","nodeType":"VariableDeclaration","scope":56293,"src":"13925:13:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56247,"name":"uint256","nodeType":"ElementaryTypeName","src":"13925:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":56250,"mutability":"mutable","name":"custodian","nameLocation":"13956:9:109","nodeType":"VariableDeclaration","scope":56293,"src":"13948:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56249,"name":"address","nodeType":"ElementaryTypeName","src":"13948:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56252,"mutability":"mutable","name":"attester","nameLocation":"13983:8:109","nodeType":"VariableDeclaration","scope":56293,"src":"13975:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56251,"name":"address","nodeType":"ElementaryTypeName","src":"13975:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"13891:106:109"},"returnParameters":{"id":56254,"nodeType":"ParameterList","parameters":[],"src":"14007:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":56401,"nodeType":"FunctionDefinition","src":"14777:1577:109","nodes":[],"body":{"id":56400,"nodeType":"Block","src":"14973:1381:109","nodes":[],"statements":[{"body":{"id":56398,"nodeType":"Block","src":"15030:1318:109","statements":[{"assignments":[56322],"declarations":[{"constant":false,"id":56322,"mutability":"mutable","name":"refundAmount","nameLocation":"15279:12:109","nodeType":"VariableDeclaration","scope":56398,"src":"15271:20:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56321,"name":"uint256","nodeType":"ElementaryTypeName","src":"15271:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56350,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":56326,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"15357:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15361:6:109","memberName":"sender","nodeType":"MemberAccess","src":"15357:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":56329,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56299,"src":"15405:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56331,"indexExpression":{"id":56330,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56311,"src":"15415:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15405:12:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56328,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55731,"src":"15389:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":56332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15389:29:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56333,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56296,"src":"15440:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56335,"indexExpression":{"id":56334,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56311,"src":"15451:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15440:13:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56336,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56299,"src":"15475:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56338,"indexExpression":{"id":56337,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56311,"src":"15485:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15475:12:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56325,"name":"getStakeAtEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55797,"src":"15320:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":56339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15320:185:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"baseExpression":{"id":56342,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56302,"src":"15532:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56344,"indexExpression":{"id":56343,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56311,"src":"15540:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15532:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56345,"name":"refundAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56305,"src":"15544:13:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56347,"indexExpression":{"id":56346,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56311,"src":"15558:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15544:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56340,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46289,"src":"15523:4:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$46289_$","typeString":"type(library Math)"}},"id":56341,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15528:3:109","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":45440,"src":"15523:8:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":56348,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15523:38:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56323,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":46289,"src":"15294:4:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$46289_$","typeString":"type(library Math)"}},"id":56324,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15299:3:109","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":45440,"src":"15294:8:109","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":56349,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15294:281:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15271:304:109"},{"expression":{"arguments":[{"arguments":[{"id":56354,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"15627:4:109","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56550","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56550","typeString":"contract MovementStaking"}],"id":56353,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"15619:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56352,"name":"address","nodeType":"ElementaryTypeName","src":"15619:7:109","typeDescriptions":{}}},"id":56355,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15619:13:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56356,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56299,"src":"15728:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56358,"indexExpression":{"id":56357,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56311,"src":"15738:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15728:12:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56359,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56296,"src":"15758:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56361,"indexExpression":{"id":56360,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56311,"src":"15769:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15758:13:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56362,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56322,"src":"15789:12:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56351,"name":"_payAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56479,"src":"15589:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":56363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15589:226:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56364,"nodeType":"ExpressionStatement","src":"15589:226:109"},{"expression":{"arguments":[{"expression":{"id":56366,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16003:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56367,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16007:6:109","memberName":"sender","nodeType":"MemberAccess","src":"16003:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":56369,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16047:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56370,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16051:6:109","memberName":"sender","nodeType":"MemberAccess","src":"16047:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56368,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55731,"src":"16031:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":56371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16031:27:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56372,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56296,"src":"16076:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56374,"indexExpression":{"id":56373,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56311,"src":"16087:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16076:13:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56375,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56299,"src":"16107:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56377,"indexExpression":{"id":56376,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56311,"src":"16117:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16107:12:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56378,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56302,"src":"16137:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56380,"indexExpression":{"id":56379,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56311,"src":"16145:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16137:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56365,"name":"_slashStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56243,"src":"15974:11:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":56381,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15974:187:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56382,"nodeType":"ExpressionStatement","src":"15974:187:109"},{"expression":{"arguments":[{"expression":{"id":56384,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16207:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16211:6:109","memberName":"sender","nodeType":"MemberAccess","src":"16207:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":56387,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"16251:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16255:6:109","memberName":"sender","nodeType":"MemberAccess","src":"16251:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56386,"name":"getCurrentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":55731,"src":"16235:15:109","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":56389,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16235:27:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":56390,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56296,"src":"16280:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56392,"indexExpression":{"id":56391,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56311,"src":"16291:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16280:13:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56393,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56299,"src":"16311:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56395,"indexExpression":{"id":56394,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56311,"src":"16321:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16311:12:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56383,"name":"_slashUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56293,"src":"16176:13:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,uint256,address,address)"}},"id":56396,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16176:161:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56397,"nodeType":"ExpressionStatement","src":"16176:161:109"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56314,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56311,"src":"15003:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":56315,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56299,"src":"15007:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56316,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"15017:6:109","memberName":"length","nodeType":"MemberAccess","src":"15007:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15003:20:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56399,"initializationExpression":{"assignments":[56311],"declarations":[{"constant":false,"id":56311,"mutability":"mutable","name":"i","nameLocation":"14996:1:109","nodeType":"VariableDeclaration","scope":56399,"src":"14988:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56310,"name":"uint256","nodeType":"ElementaryTypeName","src":"14988:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56313,"initialValue":{"hexValue":"30","id":56312,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15000:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"14988:13:109"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":56319,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"15025:3:109","subExpression":{"id":56318,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56311,"src":"15025:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56320,"nodeType":"ExpressionStatement","src":"15025:3:109"},"nodeType":"ForStatement","src":"14983:1365:109"}]},"baseFunctions":[56845],"functionSelector":"a885c975","implemented":true,"kind":"function","modifiers":[{"id":56308,"kind":"modifierInvocation","modifierName":{"id":56307,"name":"nonReentrant","nameLocations":["14960:12:109"],"nodeType":"IdentifierPath","referencedDeclaration":44376,"src":"14960:12:109"},"nodeType":"ModifierInvocation","src":"14960:12:109"}],"name":"slash","nameLocation":"14786:5:109","parameters":{"id":56306,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56296,"mutability":"mutable","name":"custodians","nameLocation":"14820:10:109","nodeType":"VariableDeclaration","scope":56401,"src":"14801:29:109","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56294,"name":"address","nodeType":"ElementaryTypeName","src":"14801:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56295,"nodeType":"ArrayTypeName","src":"14801:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":56299,"mutability":"mutable","name":"attesters","nameLocation":"14859:9:109","nodeType":"VariableDeclaration","scope":56401,"src":"14840:28:109","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56297,"name":"address","nodeType":"ElementaryTypeName","src":"14840:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56298,"nodeType":"ArrayTypeName","src":"14840:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":56302,"mutability":"mutable","name":"amounts","nameLocation":"14897:7:109","nodeType":"VariableDeclaration","scope":56401,"src":"14878:26:109","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":56300,"name":"uint256","nodeType":"ElementaryTypeName","src":"14878:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56301,"nodeType":"ArrayTypeName","src":"14878:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":56305,"mutability":"mutable","name":"refundAmounts","nameLocation":"14933:13:109","nodeType":"VariableDeclaration","scope":56401,"src":"14914:32:109","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":56303,"name":"uint256","nodeType":"ElementaryTypeName","src":"14914:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56304,"nodeType":"ArrayTypeName","src":"14914:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"14791:161:109"},"returnParameters":{"id":56309,"nodeType":"ParameterList","parameters":[],"src":"14973:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56479,"nodeType":"FunctionDefinition","src":"16360:1535:109","nodes":[],"body":{"id":56478,"nodeType":"Block","src":"16496:1399:109","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":56417,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56412,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56403,"src":"16510:4:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":56415,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16526:4:109","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$56550","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$56550","typeString":"contract MovementStaking"}],"id":56414,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16518:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56413,"name":"address","nodeType":"ElementaryTypeName","src":"16518:7:109","typeDescriptions":{}}},"id":56416,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16518:13:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16510:21:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":56476,"nodeType":"Block","src":"17071:818:109","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":56455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":56452,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56570,"src":"17453:5:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":56451,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"17445:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56450,"name":"address","nodeType":"ElementaryTypeName","src":"17445:7:109","typeDescriptions":{}}},"id":56453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17445:14:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":56454,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56407,"src":"17463:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"17445:27:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":56474,"nodeType":"Block","src":"17631:248:109","statements":[{"expression":{"arguments":[{"id":56469,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56403,"src":"17784:4:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56470,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56405,"src":"17810:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56471,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56409,"src":"17840:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":56466,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56407,"src":"17730:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56465,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57570,"src":"17714:15:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICustodianToken_$57570_$","typeString":"type(contract ICustodianToken)"}},"id":56467,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17714:26:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICustodianToken_$57570","typeString":"contract ICustodianToken"}},"id":56468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17741:21:109","memberName":"buyCustodialTokenFrom","nodeType":"MemberAccess","referencedDeclaration":57569,"src":"17714:48:109","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":56472,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17714:150:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56473,"nodeType":"ExpressionStatement","src":"17714:150:109"}]},"id":56475,"nodeType":"IfStatement","src":"17441:438:109","trueBody":{"id":56464,"nodeType":"Block","src":"17474:151:109","statements":[{"expression":{"arguments":[{"id":56459,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56403,"src":"17560:4:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56460,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56405,"src":"17566:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56461,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56409,"src":"17576:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56456,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56570,"src":"17541:5:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":56458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17547:12:109","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43662,"src":"17541:18:109","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":56462,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17541:42:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56463,"nodeType":"ExpressionStatement","src":"17541:42:109"}]}}]},"id":56477,"nodeType":"IfStatement","src":"16506:1383:109","trueBody":{"id":56449,"nodeType":"Block","src":"16533:532:109","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":56423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":56420,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56570,"src":"16611:5:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}],"id":56419,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16603:7:109","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":56418,"name":"address","nodeType":"ElementaryTypeName","src":"16603:7:109","typeDescriptions":{}}},"id":56421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16603:14:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":56422,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56407,"src":"16621:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"16603:27:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":56447,"nodeType":"Block","src":"16779:276:109","statements":[{"expression":{"arguments":[{"id":56435,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56407,"src":"16876:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56436,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56409,"src":"16887:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56432,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56570,"src":"16862:5:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":56434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16868:7:109","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":43650,"src":"16862:13:109","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":56437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16862:32:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56438,"nodeType":"ExpressionStatement","src":"16862:32:109"},{"expression":{"arguments":[{"id":56443,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56405,"src":"17023:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56444,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56409,"src":"17033:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":56440,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56407,"src":"16994:9:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":56439,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":57570,"src":"16978:15:109","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICustodianToken_$57570_$","typeString":"type(contract ICustodianToken)"}},"id":56441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16978:26:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICustodianToken_$57570","typeString":"contract ICustodianToken"}},"id":56442,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17005:17:109","memberName":"buyCustodialToken","nodeType":"MemberAccess","referencedDeclaration":57560,"src":"16978:44:109","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":56445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16978:62:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56446,"nodeType":"ExpressionStatement","src":"16978:62:109"}]},"id":56448,"nodeType":"IfStatement","src":"16599:456:109","trueBody":{"id":56431,"nodeType":"Block","src":"16632:141:109","statements":[{"expression":{"arguments":[{"id":56427,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56405,"src":"16714:8:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":56428,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56409,"src":"16724:6:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":56424,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56570,"src":"16699:5:109","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43663","typeString":"contract IERC20"}},"id":56426,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"16705:8:109","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":43630,"src":"16699:14:109","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":56429,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16699:32:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56430,"nodeType":"ExpressionStatement","src":"16699:32:109"}]}}]}}]},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttester","nameLocation":"16369:12:109","parameters":{"id":56410,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56403,"mutability":"mutable","name":"from","nameLocation":"16399:4:109","nodeType":"VariableDeclaration","scope":56479,"src":"16391:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56402,"name":"address","nodeType":"ElementaryTypeName","src":"16391:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56405,"mutability":"mutable","name":"attester","nameLocation":"16421:8:109","nodeType":"VariableDeclaration","scope":56479,"src":"16413:16:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56404,"name":"address","nodeType":"ElementaryTypeName","src":"16413:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56407,"mutability":"mutable","name":"custodian","nameLocation":"16447:9:109","nodeType":"VariableDeclaration","scope":56479,"src":"16439:17:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56406,"name":"address","nodeType":"ElementaryTypeName","src":"16439:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":56409,"mutability":"mutable","name":"amount","nameLocation":"16474:6:109","nodeType":"VariableDeclaration","scope":56479,"src":"16466:14:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56408,"name":"uint256","nodeType":"ElementaryTypeName","src":"16466:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16381:105:109"},"returnParameters":{"id":56411,"nodeType":"ParameterList","parameters":[],"src":"16496:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":56521,"nodeType":"FunctionDefinition","src":"17901:464:109","nodes":[],"body":{"id":56520,"nodeType":"Block","src":"18056:309:109","nodes":[],"statements":[{"body":{"id":56518,"nodeType":"Block","src":"18237:122:109","statements":[{"expression":{"arguments":[{"expression":{"id":56505,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18296:3:109","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":56506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18300:6:109","memberName":"sender","nodeType":"MemberAccess","src":"18296:10:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56507,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56482,"src":"18308:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56509,"indexExpression":{"id":56508,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56494,"src":"18318:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18308:12:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56510,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56488,"src":"18322:10:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56512,"indexExpression":{"id":56511,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56494,"src":"18333:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18322:13:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":56513,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56485,"src":"18337:7:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":56515,"indexExpression":{"id":56514,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56494,"src":"18345:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18337:10:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":56504,"name":"_payAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56479,"src":"18283:12:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":56516,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18283:65:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56517,"nodeType":"ExpressionStatement","src":"18283:65:109"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":56500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":56497,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56494,"src":"18210:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":56498,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56482,"src":"18214:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":56499,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18224:6:109","memberName":"length","nodeType":"MemberAccess","src":"18214:16:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18210:20:109","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":56519,"initializationExpression":{"assignments":[56494],"declarations":[{"constant":false,"id":56494,"mutability":"mutable","name":"i","nameLocation":"18203:1:109","nodeType":"VariableDeclaration","scope":56519,"src":"18195:9:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":56493,"name":"uint256","nodeType":"ElementaryTypeName","src":"18195:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":56496,"initialValue":{"hexValue":"30","id":56495,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18207:1:109","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"18195:13:109"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":56502,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"18232:3:109","subExpression":{"id":56501,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56494,"src":"18232:1:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56503,"nodeType":"ExpressionStatement","src":"18232:3:109"},"nodeType":"ForStatement","src":"18190:169:109"}]},"functionSelector":"da33ee7f","implemented":true,"kind":"function","modifiers":[{"id":56491,"kind":"modifierInvocation","modifierName":{"id":56490,"name":"nonReentrant","nameLocations":["18043:12:109"],"nodeType":"IdentifierPath","referencedDeclaration":44376,"src":"18043:12:109"},"nodeType":"ModifierInvocation","src":"18043:12:109"}],"name":"reward","nameLocation":"17910:6:109","parameters":{"id":56489,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56482,"mutability":"mutable","name":"attesters","nameLocation":"17945:9:109","nodeType":"VariableDeclaration","scope":56521,"src":"17926:28:109","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56480,"name":"address","nodeType":"ElementaryTypeName","src":"17926:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56481,"nodeType":"ArrayTypeName","src":"17926:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":56485,"mutability":"mutable","name":"amounts","nameLocation":"17983:7:109","nodeType":"VariableDeclaration","scope":56521,"src":"17964:26:109","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":56483,"name":"uint256","nodeType":"ElementaryTypeName","src":"17964:7:109","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":56484,"nodeType":"ArrayTypeName","src":"17964:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":56488,"mutability":"mutable","name":"custodians","nameLocation":"18019:10:109","nodeType":"VariableDeclaration","scope":56521,"src":"18000:29:109","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":56486,"name":"address","nodeType":"ElementaryTypeName","src":"18000:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":56487,"nodeType":"ArrayTypeName","src":"18000:9:109","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"17916:119:109"},"returnParameters":{"id":56492,"nodeType":"ParameterList","parameters":[],"src":"18056:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":56535,"nodeType":"FunctionDefinition","src":"18371:140:109","nodes":[],"body":{"id":56534,"nodeType":"Block","src":"18463:48:109","nodes":[],"statements":[{"expression":{"arguments":[{"id":56530,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56625,"src":"18483:14:109","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":56531,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56523,"src":"18499:4:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56529,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39213,"src":"18473:9:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":56532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18473:31:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56533,"nodeType":"ExpressionStatement","src":"18473:31:109"}]},"baseFunctions":[56850],"functionSelector":"41566585","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":56526,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"18443:18:109","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":56527,"kind":"modifierInvocation","modifierName":{"id":56525,"name":"onlyRole","nameLocations":["18434:8:109"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"18434:8:109"},"nodeType":"ModifierInvocation","src":"18434:28:109"}],"name":"whitelistAddress","nameLocation":"18380:16:109","parameters":{"id":56524,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56523,"mutability":"mutable","name":"addr","nameLocation":"18414:4:109","nodeType":"VariableDeclaration","scope":56535,"src":"18406:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56522,"name":"address","nodeType":"ElementaryTypeName","src":"18406:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18396:28:109"},"returnParameters":{"id":56528,"nodeType":"ParameterList","parameters":[],"src":"18463:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":56549,"nodeType":"FunctionDefinition","src":"18517:151:109","nodes":[],"body":{"id":56548,"nodeType":"Block","src":"18619:49:109","nodes":[],"statements":[{"expression":{"arguments":[{"id":56544,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56625,"src":"18640:14:109","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":56545,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":56537,"src":"18656:4:109","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":56543,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"18629:10:109","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":56546,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18629:32:109","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":56547,"nodeType":"ExpressionStatement","src":"18629:32:109"}]},"baseFunctions":[56855],"functionSelector":"286dd3f5","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":56540,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39051,"src":"18599:18:109","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":56541,"kind":"modifierInvocation","modifierName":{"id":56539,"name":"onlyRole","nameLocations":["18590:8:109"],"nodeType":"IdentifierPath","referencedDeclaration":39080,"src":"18590:8:109"},"nodeType":"ModifierInvocation","src":"18590:28:109"}],"name":"removeAddressFromWhitelist","nameLocation":"18526:26:109","parameters":{"id":56538,"nodeType":"ParameterList","parameters":[{"constant":false,"id":56537,"mutability":"mutable","name":"addr","nameLocation":"18570:4:109","nodeType":"VariableDeclaration","scope":56549,"src":"18562:12:109","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":56536,"name":"address","nodeType":"ElementaryTypeName","src":"18562:7:109","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18552:28:109"},"returnParameters":{"id":56542,"nodeType":"ParameterList","parameters":[],"src":"18619:0:109"},"scope":56550,"stateMutability":"nonpayable","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":55276,"name":"MovementStakingStorage","nameLocations":["683:22:109"],"nodeType":"IdentifierPath","referencedDeclaration":56626,"src":"683:22:109"},"id":55277,"nodeType":"InheritanceSpecifier","src":"683:22:109"},{"baseName":{"id":55278,"name":"IMovementStaking","nameLocations":["711:16:109"],"nodeType":"IdentifierPath","referencedDeclaration":56904,"src":"711:16:109"},"id":55279,"nodeType":"InheritanceSpecifier","src":"711:16:109"},{"baseName":{"id":55280,"name":"BaseStaking","nameLocations":["733:11:109"],"nodeType":"IdentifierPath","referencedDeclaration":56681,"src":"733:11:109"},"id":55281,"nodeType":"InheritanceSpecifier","src":"733:11:109"},{"baseName":{"id":55282,"name":"ReentrancyGuard","nameLocations":["750:15:109"],"nodeType":"IdentifierPath","referencedDeclaration":44412,"src":"750:15:109"},"id":55283,"nodeType":"InheritanceSpecifier","src":"750:15:109"}],"canonicalName":"MovementStaking","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[56550,44412,56681,39821,42755,39385,41148,45235,41527,40653,39639,56904,56626],"name":"MovementStaking","nameLocation":"660:15:109","scope":56551,"usedErrors":[39402,39405,39666,39671,41454,41457,42965,42978,44073,44076,44357,56899,56901,56903],"usedEvents":[39410,41466,41475,41484,42944,56867,56879,56891,56897]}],"license":"UNLICENSED"},"id":109} \ No newline at end of file From 2897679617b604437bb91fce1a54a5217940f6a9 Mon Sep 17 00:00:00 2001 From: apenzk Date: Fri, 21 Mar 2025 11:40:47 +0100 Subject: [PATCH 22/25] update abis --- protocol/pcp/.gitmodules | 15 --------------- protocol/pcp/cli/client/abis/MOVEToken.json | 2 +- protocol/pcp/cli/client/abis/MovementStaking.json | 2 +- protocol/pcp/cli/client/abis/PCP.json | 2 +- 4 files changed, 3 insertions(+), 18 deletions(-) delete mode 100644 protocol/pcp/.gitmodules diff --git a/protocol/pcp/.gitmodules b/protocol/pcp/.gitmodules deleted file mode 100644 index b0ebdef6..00000000 --- a/protocol/pcp/.gitmodules +++ /dev/null @@ -1,15 +0,0 @@ -[submodule "pcp/contracts/lib/forge-std"] - path = pcp/contracts/lib/forge-std - url = https://github.com/foundry-rs/forge-std -[submodule "pcp/contracts/lib/openzeppelin-contracts"] - path = pcp/contracts/lib/openzeppelin-contracts - url = https://github.com/OpenZeppelin/openzeppelin-contracts -[submodule "pcp/contracts/lib/openzeppelin-contracts-upgradeable"] - path = pcp/contracts/lib/openzeppelin-contracts-upgradeable - url = https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable -[submodule "pcp/contracts/lib/safe-smart-account"] - path = pcp/contracts/lib/safe-smart-account - url = https://github.com/safe-global/safe-smart-account -[submodule "pcp/contracts/lib/solmate"] - path = pcp/contracts/lib/solmate - url = https://github.com/transmissions11/solmate diff --git a/protocol/pcp/cli/client/abis/MOVEToken.json b/protocol/pcp/cli/client/abis/MOVEToken.json index 753f2239..a017e415 100644 --- a/protocol/pcp/cli/client/abis/MOVEToken.json +++ b/protocol/pcp/cli/client/abis/MOVEToken.json @@ -1 +1 @@ -{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"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":"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":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_owner","type":"address","internalType":"address"},{"name":"_custody","type":"address","internalType":"address"}],"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":"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":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"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":"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":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","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":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"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":[]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b611823806100d65f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063485cc955116100b457806395d89b411161007957806395d89b4114610283578063a217fddf1461028b578063a9059cbb14610292578063d505accf146102a5578063d547741f146102b8578063dd62ed3e146102cb575f80fd5b8063485cc9551461021c57806370a082311461022f5780637ecebe001461024257806384b0196e1461025557806391d1485414610270575f80fd5b8063248a9ca3116100fa578063248a9ca3146101ca5780632f2ff15d146101dd578063313ce567146101f25780633644e5151461020157806336568abe14610209575f80fd5b806301ffc9a71461013657806306fdde031461015e578063095ea7b31461017357806318160ddd1461018657806323b872dd146101b7575b5f80fd5b61014961014436600461128f565b6102de565b60405190151581526020015b60405180910390f35b610166610314565b60405161015591906112eb565b610149610181366004611318565b6103b9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610155565b6101496101c5366004611340565b6103d0565b6101a96101d836600461137a565b6103f3565b6101f06101eb366004611391565b610413565b005b60405160088152602001610155565b6101a9610435565b6101f0610217366004611391565b610443565b6101f061022a3660046113bb565b61047b565b6101a961023d3660046113e3565b61064c565b6101a96102503660046113e3565b61067c565b61025d610686565b60405161015597969594939291906113fc565b61014961027e366004611391565b610734565b61016661076a565b6101a95f81565b6101496102a0366004611318565b6107a8565b6101f06102b3366004611492565b6107b5565b6101f06102c6366004611391565b61090a565b6101a96102d93660046113bb565b610926565b5f6001600160e01b03198216637965db0b60e01b148061030e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5f8051602061178e8339815191525b9050806003018054610337906114ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610363906114ff565b80156103ae5780601f10610385576101008083540402835291602001916103ae565b820191905f5260205f20905b81548152906001019060200180831161039157829003601f168201915b505050505091505090565b5f336103c681858561096f565b5060019392505050565b5f336103dd85828561097c565b6103e88585856109da565b506001949350505050565b5f9081525f805160206117ce833981519152602052604090206001015490565b61041c826103f3565b61042581610a37565b61042f8383610a44565b50505050565b5f61043e610ae5565b905090565b6001600160a01b038116331461046c5760405163334bd91960e11b815260040160405180910390fd5b6104768282610aee565b505050565b5f610484610b67565b805490915060ff600160401b820416159067ffffffffffffffff165f811580156104ab5750825b90505f8267ffffffffffffffff1660011480156104c75750303b155b9050811580156104d5575080155b156104f35760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561051d57845460ff60401b1916600160401b1785555b6001600160a01b0387161580159061053d57506001600160a01b03861615155b610545575f80fd5b61058b60405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060048152602001634d4f564560e01b815250610b8f565b6105ce60405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060018152602001603160f81b815250610ba5565b6105d85f88610a44565b506105fd866105e96008600a61162e565b6105f8906402540be40061163c565b610c04565b831561064357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f805f8051602061178e8339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b5f61030e82610c38565b5f60608082808083815f805160206117ae83398151915280549091501580156106b157506001810154155b6106fa5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610702610c60565b61070a610c9e565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f9182525f805160206117ce833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061178e83398151915291610337906114ff565b5f336103c68185856109da565b834211156107d95760405163313c898160e11b8152600481018590526024016106f1565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108438c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089d82610cb4565b90505f6108ac82878787610ce0565b9050896001600160a01b0316816001600160a01b0316146108f3576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016106f1565b6108fe8a8a8a61096f565b50505050505050505050565b610913826103f3565b61091c81610a37565b61042f8383610aee565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104768383836001610d0c565b5f6109878484610926565b90505f1981101561042f57818110156109cc57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016106f1565b61042f84848484035f610d0c565b6001600160a01b038316610a0357604051634b637e8f60e11b81525f60048201526024016106f1565b6001600160a01b038216610a2c5760405163ec442f0560e01b81525f60048201526024016106f1565b610476838383610df0565b610a418133610f29565b50565b5f5f805160206117ce833981519152610a5d8484610734565b610adc575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610a923390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061030e565b5f91505061030e565b5f61043e610f62565b5f5f805160206117ce833981519152610b078484610734565b15610adc575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061030e565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061030e565b610b97610fd5565b610ba18282610ffc565b5050565b610bad610fd5565b5f805160206117ae8339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610be684826116ab565b5060038101610bf583826116ab565b505f8082556001909101555050565b6001600160a01b038216610c2d5760405163ec442f0560e01b81525f60048201526024016106f1565b610ba15f8383610df0565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0061065d565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206117ae83398151915291610337906114ff565b60605f5f805160206117ae833981519152610326565b5f61030e610cc0610ae5565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80610cf08888888861104c565b925092509250610d008282611114565b50909695505050505050565b5f8051602061178e8339815191526001600160a01b038516610d435760405163e602df0560e01b81525f60048201526024016106f1565b6001600160a01b038416610d6c57604051634a1406b160e11b81525f60048201526024016106f1565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610de957836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610de091815260200190565b60405180910390a35b5050505050565b5f8051602061178e8339815191526001600160a01b038416610e2a5781816002015f828254610e1f9190611766565b90915550610e9a9050565b6001600160a01b0384165f9081526020829052604090205482811015610e7c5760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016106f1565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610eb8576002810180548390039055610ed6565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f1b91815260200190565b60405180910390a350505050565b610f338282610734565b610ba15760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016106f1565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f8c6111cc565b610f94611234565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b610fdd611276565b610ffa57604051631afcd79f60e31b815260040160405180910390fd5b565b611004610fd5565b5f8051602061178e8339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361103d84826116ab565b506004810161042f83826116ab565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561108557505f9150600390508261110a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156110d6573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661110157505f92506001915082905061110a565b92505f91508190505b9450945094915050565b5f82600381111561112757611127611779565b03611130575050565b600182600381111561114457611144611779565b036111625760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561117657611176611779565b036111975760405163fce698f760e01b8152600481018290526024016106f1565b60038260038111156111ab576111ab611779565b03610ba1576040516335e2f38360e21b8152600481018290526024016106f1565b5f5f805160206117ae833981519152816111e4610c60565b8051909150156111fc57805160209091012092915050565b8154801561120b579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f805160206117ae8339815191528161124c610c9e565b80519091501561126457805160209091012092915050565b6001820154801561120b579392505050565b5f61127f610b67565b54600160401b900460ff16919050565b5f6020828403121561129f575f80fd5b81356001600160e01b0319811681146112b6575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112b660208301846112bd565b80356001600160a01b0381168114611313575f80fd5b919050565b5f8060408385031215611329575f80fd5b611332836112fd565b946020939093013593505050565b5f805f60608486031215611352575f80fd5b61135b846112fd565b9250611369602085016112fd565b929592945050506040919091013590565b5f6020828403121561138a575f80fd5b5035919050565b5f80604083850312156113a2575f80fd5b823591506113b2602084016112fd565b90509250929050565b5f80604083850312156113cc575f80fd5b6113d5836112fd565b91506113b2602084016112fd565b5f602082840312156113f3575f80fd5b6112b6826112fd565b60ff60f81b8816815260e060208201525f61141a60e08301896112bd565b828103604084015261142c81896112bd565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015611481578351835260209384019390920191600101611463565b50909b9a5050505050505050505050565b5f805f805f805f60e0888a0312156114a8575f80fd5b6114b1886112fd565b96506114bf602089016112fd565b95506040880135945060608801359350608088013560ff811681146114e2575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c9082168061151357607f821691505b60208210810361153157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156115865780850481111561156a5761156a611537565b600184161561157857908102905b60019390931c92800261154f565b935093915050565b5f8261159c5750600161030e565b816115a857505f61030e565b81600181146115be57600281146115c8576115e4565b600191505061030e565b60ff8411156115d9576115d9611537565b50506001821b61030e565b5060208310610133831016604e8410600b8410161715611607575081810a61030e565b6116135f19848461154b565b805f190482111561162657611626611537565b029392505050565b5f6112b660ff84168361158e565b808202811582820484141761030e5761030e611537565b634e487b7160e01b5f52604160045260245ffd5b601f82111561047657805f5260205f20601f840160051c8101602085101561168c5750805b601f840160051c820191505b81811015610de9575f8155600101611698565b815167ffffffffffffffff8111156116c5576116c5611653565b6116d9816116d384546114ff565b84611667565b6020601f82116001811461170b575f83156116f45750848201515b5f19600385901b1c1916600184901b178455610de9565b5f84815260208120601f198516915b8281101561173a578785015182556020948501946001909201910161171a565b508482101561175757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561030e5761030e611537565b634e487b7160e01b5f52602160045260245ffdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220ba6737519c4d823bd8173730e98a374cece7f227284185b724401425f8414dfe64736f6c634300081a0033","sourceMap":"299:1259:122:-:0;;;447:39;;;;;;;;;-1:-1:-1;462:22:122;:20;:22::i;:::-;299:1259;;7709:422:21;3147:66;7898:15;;;;;;;7894:76;;;7936:23;;-1:-1:-1;;;7936:23:21;;;;;;;;;;;7894:76;7983:14;;-1:-1:-1;;;;;7983:14:21;;;:34;7979:146;;8033:33;;-1:-1:-1;;;;;;8033:33:21;-1:-1:-1;;;;;8033:33:21;;;;;8085:29;;158:50:147;;;8085:29:21;;146:2:147;131:18;8085:29:21;;;;;;;7979:146;7758:373;7709:422::o;14:200:147:-;299:1259:122;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063485cc955116100b457806395d89b411161007957806395d89b4114610283578063a217fddf1461028b578063a9059cbb14610292578063d505accf146102a5578063d547741f146102b8578063dd62ed3e146102cb575f80fd5b8063485cc9551461021c57806370a082311461022f5780637ecebe001461024257806384b0196e1461025557806391d1485414610270575f80fd5b8063248a9ca3116100fa578063248a9ca3146101ca5780632f2ff15d146101dd578063313ce567146101f25780633644e5151461020157806336568abe14610209575f80fd5b806301ffc9a71461013657806306fdde031461015e578063095ea7b31461017357806318160ddd1461018657806323b872dd146101b7575b5f80fd5b61014961014436600461128f565b6102de565b60405190151581526020015b60405180910390f35b610166610314565b60405161015591906112eb565b610149610181366004611318565b6103b9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610155565b6101496101c5366004611340565b6103d0565b6101a96101d836600461137a565b6103f3565b6101f06101eb366004611391565b610413565b005b60405160088152602001610155565b6101a9610435565b6101f0610217366004611391565b610443565b6101f061022a3660046113bb565b61047b565b6101a961023d3660046113e3565b61064c565b6101a96102503660046113e3565b61067c565b61025d610686565b60405161015597969594939291906113fc565b61014961027e366004611391565b610734565b61016661076a565b6101a95f81565b6101496102a0366004611318565b6107a8565b6101f06102b3366004611492565b6107b5565b6101f06102c6366004611391565b61090a565b6101a96102d93660046113bb565b610926565b5f6001600160e01b03198216637965db0b60e01b148061030e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5f8051602061178e8339815191525b9050806003018054610337906114ff565b80601f0160208091040260200160405190810160405280929190818152602001828054610363906114ff565b80156103ae5780601f10610385576101008083540402835291602001916103ae565b820191905f5260205f20905b81548152906001019060200180831161039157829003601f168201915b505050505091505090565b5f336103c681858561096f565b5060019392505050565b5f336103dd85828561097c565b6103e88585856109da565b506001949350505050565b5f9081525f805160206117ce833981519152602052604090206001015490565b61041c826103f3565b61042581610a37565b61042f8383610a44565b50505050565b5f61043e610ae5565b905090565b6001600160a01b038116331461046c5760405163334bd91960e11b815260040160405180910390fd5b6104768282610aee565b505050565b5f610484610b67565b805490915060ff600160401b820416159067ffffffffffffffff165f811580156104ab5750825b90505f8267ffffffffffffffff1660011480156104c75750303b155b9050811580156104d5575080155b156104f35760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561051d57845460ff60401b1916600160401b1785555b6001600160a01b0387161580159061053d57506001600160a01b03861615155b610545575f80fd5b61058b60405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060048152602001634d4f564560e01b815250610b8f565b6105ce60405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060018152602001603160f81b815250610ba5565b6105d85f88610a44565b506105fd866105e96008600a61162e565b6105f8906402540be40061163c565b610c04565b831561064357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f805f8051602061178e8339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b5f61030e82610c38565b5f60608082808083815f805160206117ae83398151915280549091501580156106b157506001810154155b6106fa5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610702610c60565b61070a610c9e565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f9182525f805160206117ce833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061178e83398151915291610337906114ff565b5f336103c68185856109da565b834211156107d95760405163313c898160e11b8152600481018590526024016106f1565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108438c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f61089d82610cb4565b90505f6108ac82878787610ce0565b9050896001600160a01b0316816001600160a01b0316146108f3576040516325c0072360e11b81526001600160a01b0380831660048301528b1660248201526044016106f1565b6108fe8a8a8a61096f565b50505050505050505050565b610913826103f3565b61091c81610a37565b61042f8383610aee565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104768383836001610d0c565b5f6109878484610926565b90505f1981101561042f57818110156109cc57604051637dc7a0d960e11b81526001600160a01b038416600482015260248101829052604481018390526064016106f1565b61042f84848484035f610d0c565b6001600160a01b038316610a0357604051634b637e8f60e11b81525f60048201526024016106f1565b6001600160a01b038216610a2c5760405163ec442f0560e01b81525f60048201526024016106f1565b610476838383610df0565b610a418133610f29565b50565b5f5f805160206117ce833981519152610a5d8484610734565b610adc575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610a923390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061030e565b5f91505061030e565b5f61043e610f62565b5f5f805160206117ce833981519152610b078484610734565b15610adc575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061030e565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0061030e565b610b97610fd5565b610ba18282610ffc565b5050565b610bad610fd5565b5f805160206117ae8339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610be684826116ab565b5060038101610bf583826116ab565b505f8082556001909101555050565b6001600160a01b038216610c2d5760405163ec442f0560e01b81525f60048201526024016106f1565b610ba15f8383610df0565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb0061065d565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206117ae83398151915291610337906114ff565b60605f5f805160206117ae833981519152610326565b5f61030e610cc0610ae5565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80610cf08888888861104c565b925092509250610d008282611114565b50909695505050505050565b5f8051602061178e8339815191526001600160a01b038516610d435760405163e602df0560e01b81525f60048201526024016106f1565b6001600160a01b038416610d6c57604051634a1406b160e11b81525f60048201526024016106f1565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610de957836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610de091815260200190565b60405180910390a35b5050505050565b5f8051602061178e8339815191526001600160a01b038416610e2a5781816002015f828254610e1f9190611766565b90915550610e9a9050565b6001600160a01b0384165f9081526020829052604090205482811015610e7c5760405163391434e360e21b81526001600160a01b038616600482015260248101829052604481018490526064016106f1565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610eb8576002810180548390039055610ed6565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f1b91815260200190565b60405180910390a350505050565b610f338282610734565b610ba15760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016106f1565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f8c6111cc565b610f94611234565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b610fdd611276565b610ffa57604051631afcd79f60e31b815260040160405180910390fd5b565b611004610fd5565b5f8051602061178e8339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361103d84826116ab565b506004810161042f83826116ab565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561108557505f9150600390508261110a565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156110d6573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661110157505f92506001915082905061110a565b92505f91508190505b9450945094915050565b5f82600381111561112757611127611779565b03611130575050565b600182600381111561114457611144611779565b036111625760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561117657611176611779565b036111975760405163fce698f760e01b8152600481018290526024016106f1565b60038260038111156111ab576111ab611779565b03610ba1576040516335e2f38360e21b8152600481018290526024016106f1565b5f5f805160206117ae833981519152816111e4610c60565b8051909150156111fc57805160209091012092915050565b8154801561120b579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f805160206117ae8339815191528161124c610c9e565b80519091501561126457805160209091012092915050565b6001820154801561120b579392505050565b5f61127f610b67565b54600160401b900460ff16919050565b5f6020828403121561129f575f80fd5b81356001600160e01b0319811681146112b6575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112b660208301846112bd565b80356001600160a01b0381168114611313575f80fd5b919050565b5f8060408385031215611329575f80fd5b611332836112fd565b946020939093013593505050565b5f805f60608486031215611352575f80fd5b61135b846112fd565b9250611369602085016112fd565b929592945050506040919091013590565b5f6020828403121561138a575f80fd5b5035919050565b5f80604083850312156113a2575f80fd5b823591506113b2602084016112fd565b90509250929050565b5f80604083850312156113cc575f80fd5b6113d5836112fd565b91506113b2602084016112fd565b5f602082840312156113f3575f80fd5b6112b6826112fd565b60ff60f81b8816815260e060208201525f61141a60e08301896112bd565b828103604084015261142c81896112bd565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b81811015611481578351835260209384019390920191600101611463565b50909b9a5050505050505050505050565b5f805f805f805f60e0888a0312156114a8575f80fd5b6114b1886112fd565b96506114bf602089016112fd565b95506040880135945060608801359350608088013560ff811681146114e2575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c9082168061151357607f821691505b60208210810361153157634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b60018411156115865780850481111561156a5761156a611537565b600184161561157857908102905b60019390931c92800261154f565b935093915050565b5f8261159c5750600161030e565b816115a857505f61030e565b81600181146115be57600281146115c8576115e4565b600191505061030e565b60ff8411156115d9576115d9611537565b50506001821b61030e565b5060208310610133831016604e8410600b8410161715611607575081810a61030e565b6116135f19848461154b565b805f190482111561162657611626611537565b029392505050565b5f6112b660ff84168361158e565b808202811582820484141761030e5761030e611537565b634e487b7160e01b5f52604160045260245ffd5b601f82111561047657805f5260205f20601f840160051c8101602085101561168c5750805b601f840160051c820191505b81811015610de9575f8155600101611698565b815167ffffffffffffffff8111156116c5576116c5611653565b6116d9816116d384546114ff565b84611667565b6020601f82116001811461170b575f83156116f45750848201515b5f19600385901b1c1916600184901b178455610de9565b5f84815260208120601f198516915b8281101561173a578785015182556020948501946001909201910161171a565b508482101561175757868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561030e5761030e611537565b634e487b7160e01b5f52602160045260245ffdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220ba6737519c4d823bd8173730e98a374cece7f227284185b724401425f8414dfe64736f6c634300081a0033","sourceMap":"299:1259:122:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:20;;;;;;:::i;:::-;;:::i;:::-;;;470:14:147;;463:22;445:41;;433:2;418:18;3443:202:20;;;;;;;;2716:144:23;;;:::i;:::-;;;;;;;:::i;5210:186::-;;;;;;:::i;:::-;;:::i;3896:152::-;4027:14;;3896:152;;;1645:25:147;;;1633:2;1618:18;3896:152:23;1499:177:147;5988:244:23;;;;;;:::i;:::-;;:::i;4759:191:20:-;;;;;;:::i;:::-;;:::i;5246:136::-;;;;;;:::i;:::-;;:::i;:::-;;1474:82:122;;;1548:1;2920:36:147;;2908:2;2893:18;1474:82:122;2778:184:147;3085:112:24;;;:::i;6348:245:20:-;;;;;;:::i;:::-;;:::i;981:342:122:-;;;;;;:::i;:::-;;:::i;4106:171:23:-;;;;;;:::i;:::-;;:::i;2824:154:24:-;;;;;;:::i;:::-;;:::i;5172:903:27:-;;;:::i;:::-;;;;;;;;;;;;;:::i;3732:207:20:-;;;;;;:::i;:::-;;:::i;2973:148:23:-;;;:::i;2317:49:20:-;;2362:4;2317:49;;4472:178:23;;;;;;:::i;:::-;;:::i;2098:672:24:-;;;;;;:::i;:::-;;:::i;5662:138:20:-;;;;;;:::i;:::-;;:::i;4708:195:23:-;;;;;;:::i;:::-;;:::i;3443:202:20:-;3528:4;-1:-1:-1;;;;;;3551:47:20;;-1:-1:-1;;;3551:47:20;;:87;;-1:-1:-1;;;;;;;;;;1134:40:28;;;3602:36:20;3544:94;3443:202;-1:-1:-1;;3443:202:20:o;2716:144:23:-;2761:13;2786:22;-1:-1:-1;;;;;;;;;;;2811:18:23;2786:43;;2846:1;:7;;2839:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2716:144;:::o;5210:186::-;5283:4;966:10:25;5337:31:23;966:10:25;5353:7:23;5362:5;5337:8;:31::i;:::-;-1:-1:-1;5385:4:23;;5210:186;-1:-1:-1;;;5210:186:23:o;5988:244::-;6075:4;966:10:25;6131:37:23;6147:4;966:10:25;6162:5:23;6131:15;:37::i;:::-;6178:26;6188:4;6194:2;6198:5;6178:9;:26::i;:::-;-1:-1:-1;6221:4:23;;5988:244;-1:-1:-1;;;;5988:244:23:o;4759:191:20:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:20;;;;;:24;;;;4759:191::o;5246:136::-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;3085:112:24:-;3144:7;3170:20;:18;:20::i;:::-;3163:27;;3085:112;:::o;6348:245:20:-;-1:-1:-1;;;;;6441:34:20;;966:10:25;6441:34:20;6437:102;;6498:30;;-1:-1:-1;;;6498:30:20;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;981:342:122:-;4158:30:21;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:21;-1:-1:-1;;;4302:15:21;;;4301:16;;4348:14;;4279:19;4724:16;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4788:11;:16;;4803:1;4788:16;:50;;;;-1:-1:-1;4816:4:21;4808:25;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;-1:-1:-1;;;4906:23:21;;;;;;;;;;;4849:91;4949:18;;-1:-1:-1;;4949:18:21;4966:1;4949:18;;;4977:67;;;;5011:22;;-1:-1:-1;;;;5011:22:21;-1:-1:-1;;;5011:22:21;;;4977:67;-1:-1:-1;;;;;1072:20:122;::::1;::::0;;::::1;::::0;:46:::1;;-1:-1:-1::0;;;;;;1096:22:122;::::1;::::0;::::1;1072:46;1064:55;;;::::0;::::1;;1129:32;;;;;;;;;;;;;;-1:-1:-1::0;;;1129:32:122::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1129:32:122::1;;::::0;:12:::1;:32::i;:::-;1171:40;;;;;;;;;;;;;;-1:-1:-1::0;;;1171:40:122::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1171:40:122::1;;::::0;:23:::1;:40::i;:::-;1221:38;2362:4:20;1252:6:122::0;1221:10:::1;:38::i;:::-;-1:-1:-1::0;1269:47:122::1;1275:8:::0;1299:16:::1;1548:1:::0;1299:2:::1;:16;:::i;:::-;1285:30;::::0;:11:::1;:30;:::i;:::-;1269:5;:47::i;:::-;5068:14:21::0;5064:101;;;5098:23;;-1:-1:-1;;;;5098:23:21;;;5140:14;;-1:-1:-1;7849:50:147;;5140:14:21;;7837:2:147;7822:18;5140:14:21;;;;;;;5064:101;4092:1079;;;;;981:342:122;;:::o;4106:171:23:-;4171:7;;-1:-1:-1;;;;;;;;;;;4215:18:23;-1:-1:-1;;;;;4250:20:23;;;:11;:20;;;;;;;;-1:-1:-1;;4250:20:23;;;;;4106:171::o;2824:154:24:-;2926:7;2952:19;2965:5;2952:12;:19::i;5172:903:27:-;5270:13;5297:18;;5270:13;;;5297:18;5270:13;-1:-1:-1;;;;;;;;;;;5776:13:27;;5510:45;;-1:-1:-1;5776:18:27;:43;;;;-1:-1:-1;5798:16:27;;;;:21;5776:43;5768:77;;;;-1:-1:-1;;;5768:77:27;;8112:2:147;5768:77:27;;;8094:21:147;8151:2;8131:18;;;8124:30;-1:-1:-1;;;8170:18:147;;;8163:51;8231:18;;5768:77:27;;;;;;;;;5907:13;:11;:13::i;:::-;5934:16;:14;:16::i;:::-;6042;;;6026:1;6042:16;;;;;;;;;-1:-1:-1;;;5856:212:27;;;-1:-1:-1;5856:212:27;;-1:-1:-1;5964:13:27;;-1:-1:-1;5999:4:27;;-1:-1:-1;6026:1:27;-1:-1:-1;6042:16:27;-1:-1:-1;5856:212:27;-1:-1:-1;;5172:903:27:o;3732:207:20:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:20;;;;;;;;-1:-1:-1;;;;;3901:31:20;;;;;;;;;;;;;;;3732:207::o;2973:148:23:-;3105:9;3098:16;;3020:13;;-1:-1:-1;;;;;;;;;;;2064:20:23;3098:16;;;:::i;4472:178::-;4541:4;966:10:25;4595:27:23;966:10:25;4612:2:23;4616:5;4595:9;:27::i;2098:672:24:-;2319:8;2301:15;:26;2297:97;;;2350:33;;-1:-1:-1;;;2350:33:24;;;;;1645:25:147;;;1618:18;;2350:33:24;1499:177:147;2297:97:24;2404:18;1279:95;2463:5;2470:7;2479:5;2486:16;2496:5;-1:-1:-1;;;;;1954:16:26;1597:7;1954:16;;;1005:21;1954:16;;;;;:18;;;;;;;;;1537:452;2486:16:24;2435:78;;;;;;8679:25:147;;;;-1:-1:-1;;;;;8740:32:147;;;8720:18;;;8713:60;8809:32;;;;8789:18;;;8782:60;8858:18;;;8851:34;8901:19;;;8894:35;8945:19;;;8938:35;;;8651:19;;2435:78:24;;;;;;;;;;;;2425:89;;;;;;2404:110;;2525:12;2540:28;2557:10;2540:16;:28::i;:::-;2525:43;;2579:14;2596:28;2610:4;2616:1;2619;2622;2596:13;:28::i;:::-;2579:45;;2648:5;-1:-1:-1;;;;;2638:15:24;:6;-1:-1:-1;;;;;2638:15:24;;2634:88;;2676:35;;-1:-1:-1;;;2676:35:24;;-1:-1:-1;;;;;9176:32:147;;;2676:35:24;;;9158:51:147;9245:32;;9225:18;;;9218:60;9131:18;;2676:35:24;8984:300:147;2634:88:24;2732:31;2741:5;2748:7;2757:5;2732:8;:31::i;:::-;2287:483;;;2098:672;;;;;;;:::o;5662:138:20:-;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;4708:195:23:-:0;-1:-1:-1;;;;;4867:20:23;;;4788:7;4867:20;;;:13;:20;;;;;;;;:29;;;;;;;;;;;;;4708:195::o;10001:128::-;10085:37;10094:5;10101:7;10110:5;10117:4;10085:8;:37::i;11745:476::-;11844:24;11871:25;11881:5;11888:7;11871:9;:25::i;:::-;11844:52;;-1:-1:-1;;11910:16:23;:36;11906:309;;;11985:5;11966:16;:24;11962:130;;;12017:60;;-1:-1:-1;;;12017:60:23;;-1:-1:-1;;;;;9509:32:147;;12017:60:23;;;9491:51:147;9558:18;;;9551:34;;;9601:18;;;9594:34;;;9464:18;;12017:60:23;9289:345:147;11962:130:23;12133:57;12142:5;12149:7;12177:5;12158:16;:24;12184:5;12133:8;:57::i;6605:300::-;-1:-1:-1;;;;;6688:18:23;;6684:86;;6729:30;;-1:-1:-1;;;6729:30:23;;6756:1;6729:30;;;9785:51:147;9758:18;;6729:30:23;9639:203:147;6684:86:23;-1:-1:-1;;;;;6783:16:23;;6779:86;;6822:32;;-1:-1:-1;;;6822:32:23;;6851:1;6822:32;;;9785:51:147;9758:18;;6822:32:23;9639:203:147;6779:86:23;6874:24;6882:4;6888:2;6892:5;6874:7;:24::i;4148:103:20:-;4214:30;4225:4;966:10:25;4214::20;:30::i;:::-;4148:103;:::o;7270:387::-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:20;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:20;;;;;;;;;:38;;-1:-1:-1;;7475:38:20;7509:4;7475:38;;;7559:12;966:10:25;;887:96;7559:12:20;-1:-1:-1;;;;;7532:40:20;7550:7;-1:-1:-1;;;;;7532:40:20;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;4015:109:27;4068:7;4094:23;:21;:23::i;7894:388:20:-;7972:4;-1:-1:-1;;;;;;;;;;;8061:22:20;8069:4;8075:7;8061;:22::i;:::-;8057:219;;;8133:5;8099:14;;;;;;;;;;;-1:-1:-1;;;;;8099:31:20;;;;;;;;;;:39;;-1:-1:-1;;8099:39:20;;;8157:40;966:10:25;;8099:14:20;;8157:40;;8133:5;8157:40;8218:4;8211:11;;;;;9071:205:21;9129:30;;3147:66;9186:27;8819:122;2282:147:23;6929:20:21;:18;:20::i;:::-;2384:38:23::1;2407:5;2414:7;2384:22;:38::i;:::-;2282:147:::0;;:::o;3599:330:27:-;6929:20:21;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;3766:7:27;:14:::1;3776:4:::0;3766:7;:14:::1;:::i;:::-;-1:-1:-1::0;3790:10:27::1;::::0;::::1;:20;3803:7:::0;3790:10;:20:::1;:::i;:::-;-1:-1:-1::0;3891:1:27::1;3875:17:::0;;;3902:16:::1;::::0;;::::1;:20:::0;-1:-1:-1;;3599:330:27:o;8733:208:23:-;-1:-1:-1;;;;;8803:21:23;;8799:91;;8847:32;;-1:-1:-1;;;8847:32:23;;8876:1;8847:32;;;9785:51:147;9758:18;;8847:32:23;9639:203:147;8799:91:23;8899:35;8915:1;8919:7;8928:5;8899:7;:35::i;1259:164:26:-;1319:7;;1005:21;1364:19;886:156;6299:155:27;6440:7;6433:14;;6353:13;;-1:-1:-1;;;;;;;;;;;2839:21:27;6433:14;;;:::i;6681:161::-;6738:13;6763:23;-1:-1:-1;;;;;;;;;;;6789:19:27;2720:156;4946:176;5023:7;5049:66;5082:20;:18;:20::i;:::-;5104:10;4049:4:65;4043:11;-1:-1:-1;;;4067:23:65;;4119:4;4110:14;;4103:39;;;;4171:4;4162:14;;4155:34;4227:4;4212:20;;;3874:374;6887:260:64;6972:7;6992:17;7011:18;7031:16;7051:25;7062:4;7068:1;7071;7074;7051:10;:25::i;:::-;6991:85;;;;;;7086:28;7098:5;7105:8;7086:11;:28::i;:::-;-1:-1:-1;7131:9:64;;6887:260;-1:-1:-1;;;;;;6887:260:64:o;10976:487:23:-;-1:-1:-1;;;;;;;;;;;;;;;;11141:19:23;;11137:89;;11183:32;;-1:-1:-1;;;11183:32:23;;11212:1;11183:32;;;9785:51:147;9758:18;;11183:32:23;9639:203:147;11137:89:23;-1:-1:-1;;;;;11239:21:23;;11235:90;;11283:31;;-1:-1:-1;;;11283:31:23;;11311:1;11283:31;;;9785:51:147;9758:18;;11283:31:23;9639:203:147;11235:90:23;-1:-1:-1;;;;;11334:20:23;;;;;;;:13;;;:20;;;;;;;;:29;;;;;;;;;:37;;;11381:76;;;;11431:7;-1:-1:-1;;;;;11415:31:23;11424:5;-1:-1:-1;;;;;11415:31:23;;11440:5;11415:31;;;;1645:25:147;;1633:2;1618:18;;1499:177;11415:31:23;;;;;;;;11381:76;11074:389;10976:487;;;;:::o;7220:1170::-;-1:-1:-1;;;;;;;;;;;;;;;;7362:18:23;;7358:546;;7516:5;7498:1;:14;;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;7358:546:23;;-1:-1:-1;7358:546:23;;-1:-1:-1;;;;;7574:17:23;;7552:19;7574:17;;;;;;;;;;;7609:19;;;7605:115;;;7655:50;;-1:-1:-1;;;7655:50:23;;-1:-1:-1;;;;;9509:32:147;;7655:50:23;;;9491:51:147;9558:18;;;9551:34;;;9601:18;;;9594:34;;;9464:18;;7655:50:23;9289:345:147;7605:115:23;-1:-1:-1;;;;;7840:17:23;;:11;:17;;;;;;;;;;7860:19;;;;7840:39;;7358:546;-1:-1:-1;;;;;7918:16:23;;7914:429;;8081:14;;;:23;;;;;;;7914:429;;;-1:-1:-1;;;;;8294:15:23;;:11;:15;;;;;;;;;;:24;;;;;;7914:429;8373:2;-1:-1:-1;;;;;8358:25:23;8367:4;-1:-1:-1;;;;;8358:25:23;;8377:5;8358:25;;;;1645::147;;1633:2;1618:18;;1499:177;8358:25:23;;;;;;;;7295:1095;7220:1170;;;:::o;4381:197:20:-;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:20;;-1:-1:-1;;;;;12293:32:147;;4514:47:20;;;12275:51:147;12342:18;;;12335:34;;;12248:18;;4514:47:20;12101:274:147;4130:191:27;4185:7;2073:95;4243:17;:15;:17::i;:::-;4262:20;:18;:20::i;:::-;4221:92;;;;;;12639:25:147;;;;12680:18;;12673:34;;;;12723:18;;;12716:34;4284:13:27;12766:18:147;;;12759:34;4307:4:27;12809:19:147;;;12802:61;12611:19;;4221:92:27;;;;;;;;;;;;4211:103;;;;;;4204:110;;4130:191;:::o;7082:141:21:-;7149:17;:15;:17::i;:::-;7144:73;;7189:17;;-1:-1:-1;;;7189:17:21;;;;;;;;;;;7144:73;7082:141::o;2435:216:23:-;6929:20:21;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;2600:7:23;:15:::1;2610:5:::0;2600:7;:15:::1;:::i;:::-;-1:-1:-1::0;2625:9:23::1;::::0;::::1;:19;2637:7:::0;2625:9;:19:::1;:::i;5203:1551:64:-:0;5329:17;;;6283:66;6270:79;;6266:164;;;-1:-1:-1;6381:1:64;;-1:-1:-1;6385:30:64;;-1:-1:-1;6417:1:64;6365:54;;6266:164;6541:24;;;6524:14;6541:24;;;;;;;;;13101:25:147;;;13174:4;13162:17;;13142:18;;;13135:45;;;;13196:18;;;13189:34;;;13239:18;;;13232:34;;;6541:24:64;;13073:19:147;;6541:24:64;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6541:24:64;;-1:-1:-1;;6541:24:64;;;-1:-1:-1;;;;;;;6579:20:64;;6575:113;;-1:-1:-1;6631:1:64;;-1:-1:-1;6635:29:64;;-1:-1:-1;6631:1:64;;-1:-1:-1;6615:62:64;;6575:113;6706:6;-1:-1:-1;6714:20:64;;-1:-1:-1;6714:20:64;;-1:-1:-1;5203:1551:64;;;;;;;;;:::o;7280:532::-;7375:20;7366:5;:29;;;;;;;;:::i;:::-;;7362:444;;7280:532;;:::o;7362:444::-;7471:29;7462:5;:38;;;;;;;;:::i;:::-;;7458:348;;7523:23;;-1:-1:-1;;;7523:23:64;;;;;;;;;;;7458:348;7576:35;7567:5;:44;;;;;;;;:::i;:::-;;7563:243;;7634:46;;-1:-1:-1;;;7634:46:64;;;;;1645:25:147;;;1618:18;;7634:46:64;1499:177:147;7563:243:64;7710:30;7701:5;:39;;;;;;;;:::i;:::-;;7697:109;;7763:32;;-1:-1:-1;;;7763:32:64;;;;;1645:25:147;;;1618:18;;7763:32:64;1499:177:147;7057:687:27;7107:7;-1:-1:-1;;;;;;;;;;;7107:7:27;7202:13;:11;:13::i;:::-;7229:18;;7181:34;;-1:-1:-1;7229:22:27;7225:513;;7274:22;;;;;;;;7057:687;-1:-1:-1;;7057:687:27:o;7225:513::-;7571:13;;7602:15;;7598:130;;7644:10;7057:687;-1:-1:-1;;;7057:687:27:o;7598:130::-;7700:13;7693:20;;;;;7057:687;:::o;7965:723::-;8018:7;-1:-1:-1;;;;;;;;;;;8018:7:27;8116:16;:14;:16::i;:::-;8146:21;;8092:40;;-1:-1:-1;8146:25:27;8142:540;;8194:25;;;;;;;;7965:723;-1:-1:-1;;7965:723:27:o;8142:540::-;8506:16;;;;8540:18;;8536:136;;8585:13;7965:723;-1:-1:-1;;;7965:723:27:o;8485:120:21:-;8535:4;8558:26;:24;:26::i;:::-;:40;-1:-1:-1;;;8558:40:21;;;;;;-1:-1:-1;8485:120:21:o;14:286:147:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:147;;209:43;;199:71;;266:1;263;256:12;199:71;289:5;14:286;-1:-1:-1;;;14:286:147:o;497:289::-;539:3;577:5;571:12;604:6;599:3;592:19;660:6;653:4;646:5;642:16;635:4;630:3;626:14;620:47;712:1;705:4;696:6;691:3;687:16;683:27;676:38;775:4;768:2;764:7;759:2;751:6;747:15;743:29;738:3;734:39;730:50;723:57;;;497:289;;;;:::o;791:220::-;940:2;929:9;922:21;903:4;960:45;1001:2;990:9;986:18;978:6;960:45;:::i;1016:173::-;1084:20;;-1:-1:-1;;;;;1133:31:147;;1123:42;;1113:70;;1179:1;1176;1169:12;1113:70;1016:173;;;:::o;1194:300::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1362:29;1381:9;1362:29;:::i;:::-;1352:39;1460:2;1445:18;;;;1432:32;;-1:-1:-1;;;1194:300:147:o;1681:374::-;1758:6;1766;1774;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;1866:29;1885:9;1866:29;:::i;:::-;1856:39;;1914:38;1948:2;1937:9;1933:18;1914:38;:::i;:::-;1681:374;;1904:48;;-1:-1:-1;;;2021:2:147;2006:18;;;;1993:32;;1681:374::o;2060:226::-;2119:6;2172:2;2160:9;2151:7;2147:23;2143:32;2140:52;;;2188:1;2185;2178:12;2140:52;-1:-1:-1;2233:23:147;;2060:226;-1:-1:-1;2060:226:147:o;2473:300::-;2541:6;2549;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2663:23;;;-1:-1:-1;2729:38:147;2763:2;2748:18;;2729:38;:::i;:::-;2719:48;;2473:300;;;;;:::o;2967:260::-;3035:6;3043;3096:2;3084:9;3075:7;3071:23;3067:32;3064:52;;;3112:1;3109;3102:12;3064:52;3135:29;3154:9;3135:29;:::i;:::-;3125:39;;3183:38;3217:2;3206:9;3202:18;3183:38;:::i;3232:186::-;3291:6;3344:2;3332:9;3323:7;3319:23;3315:32;3312:52;;;3360:1;3357;3350:12;3312:52;3383:29;3402:9;3383:29;:::i;3423:1238::-;3829:3;3824;3820:13;3812:6;3808:26;3797:9;3790:45;3871:3;3866:2;3855:9;3851:18;3844:31;3771:4;3898:46;3939:3;3928:9;3924:19;3916:6;3898:46;:::i;:::-;3992:9;3984:6;3980:22;3975:2;3964:9;3960:18;3953:50;4026:33;4052:6;4044;4026:33;:::i;:::-;4090:2;4075:18;;4068:34;;;-1:-1:-1;;;;;4139:32:147;;4133:3;4118:19;;4111:61;4159:3;4188:19;;4181:35;;;4253:22;;;4247:3;4232:19;;4225:51;4325:13;;4347:22;;;4397:2;4423:15;;;;-1:-1:-1;4385:15:147;;;;-1:-1:-1;4466:169:147;4480:6;4477:1;4474:13;4466:169;;;4541:13;;4529:26;;4584:2;4610:15;;;;4575:12;;;;4502:1;4495:9;4466:169;;;-1:-1:-1;4652:3:147;;3423:1238;-1:-1:-1;;;;;;;;;;;3423:1238:147:o;4666:903::-;4777:6;4785;4793;4801;4809;4817;4825;4878:3;4866:9;4857:7;4853:23;4849:33;4846:53;;;4895:1;4892;4885:12;4846:53;4918:29;4937:9;4918:29;:::i;:::-;4908:39;;4966:38;5000:2;4989:9;4985:18;4966:38;:::i;:::-;4956:48;-1:-1:-1;5073:2:147;5058:18;;5045:32;;-1:-1:-1;5174:2:147;5159:18;;5146:32;;-1:-1:-1;5256:3:147;5241:19;;5228:33;5305:4;5292:18;;5280:31;;5270:59;;5325:1;5322;5315:12;5270:59;4666:903;;;;-1:-1:-1;4666:903:147;;;;5348:7;5428:3;5413:19;;5400:33;;-1:-1:-1;5532:3:147;5517:19;;;5504:33;;4666:903;-1:-1:-1;;4666:903:147:o;5574:380::-;5653:1;5649:12;;;;5696;;;5717:61;;5771:4;5763:6;5759:17;5749:27;;5717:61;5824:2;5816:6;5813:14;5793:18;5790:38;5787:161;;5870:10;5865:3;5861:20;5858:1;5851:31;5905:4;5902:1;5895:15;5933:4;5930:1;5923:15;5787:161;;5574:380;;;:::o;5959:127::-;6020:10;6015:3;6011:20;6008:1;6001:31;6051:4;6048:1;6041:15;6075:4;6072:1;6065:15;6091:375;6179:1;6197:5;6211:249;6232:1;6222:8;6219:15;6211:249;;;6282:4;6277:3;6273:14;6267:4;6264:24;6261:50;;;6291:18;;:::i;:::-;6341:1;6331:8;6327:16;6324:49;;;6355:16;;;;6324:49;6438:1;6434:16;;;;;6394:15;;6211:249;;;6091:375;;;;;;:::o;6471:902::-;6520:5;6550:8;6540:80;;-1:-1:-1;6591:1:147;6605:5;;6540:80;6639:4;6629:76;;-1:-1:-1;6676:1:147;6690:5;;6629:76;6721:4;6739:1;6734:59;;;;6807:1;6802:174;;;;6714:262;;6734:59;6764:1;6755:10;;6778:5;;;6802:174;6839:3;6829:8;6826:17;6823:43;;;6846:18;;:::i;:::-;-1:-1:-1;;6902:1:147;6888:16;;6961:5;;6714:262;;7060:2;7050:8;7047:16;7041:3;7035:4;7032:13;7028:36;7022:2;7012:8;7009:16;7004:2;6998:4;6995:12;6991:35;6988:77;6985:203;;;-1:-1:-1;7097:19:147;;;7173:5;;6985:203;7220:42;-1:-1:-1;;7245:8:147;7239:4;7220:42;:::i;:::-;7298:6;7294:1;7290:6;7286:19;7277:7;7274:32;7271:58;;;7309:18;;:::i;:::-;7347:20;;6471:902;-1:-1:-1;;;6471:902:147:o;7378:140::-;7436:5;7465:47;7506:4;7496:8;7492:19;7486:4;7465:47;:::i;7523:168::-;7596:9;;;7627;;7644:15;;;7638:22;;7624:37;7614:71;;7665:18;;:::i;8260:127::-;8321:10;8316:3;8312:20;8309:1;8302:31;8352:4;8349:1;8342:15;8376:4;8373:1;8366:15;9973:518;10075:2;10070:3;10067:11;10064:421;;;10111:5;10108:1;10101:16;10155:4;10152:1;10142:18;10225:2;10213:10;10209:19;10206:1;10202:27;10196:4;10192:38;10261:4;10249:10;10246:20;10243:47;;;-1:-1:-1;10284:4:147;10243:47;10339:2;10334:3;10330:12;10327:1;10323:20;10317:4;10313:31;10303:41;;10394:81;10412:2;10405:5;10402:13;10394:81;;;10471:1;10457:16;;10438:1;10427:13;10394:81;;10667:1299;10793:3;10787:10;10820:18;10812:6;10809:30;10806:56;;;10842:18;;:::i;:::-;10871:97;10961:6;10921:38;10953:4;10947:11;10921:38;:::i;:::-;10915:4;10871:97;:::i;:::-;11017:4;11048:2;11037:14;;11065:1;11060:649;;;;11753:1;11770:6;11767:89;;;-1:-1:-1;11822:19:147;;;11816:26;11767:89;-1:-1:-1;;10624:1:147;10620:11;;;10616:24;10612:29;10602:40;10648:1;10644:11;;;10599:57;11869:81;;11030:930;;11060:649;9920:1;9913:14;;;9957:4;9944:18;;-1:-1:-1;;11096:20:147;;;11214:222;11228:7;11225:1;11222:14;11214:222;;;11310:19;;;11304:26;11289:42;;11417:4;11402:20;;;;11370:1;11358:14;;;;11244:12;11214:222;;;11218:3;11464:6;11455:7;11452:19;11449:201;;;11525:19;;;11519:26;-1:-1:-1;;11608:1:147;11604:14;;;11620:3;11600:24;11596:37;11592:42;11577:58;11562:74;;11449:201;-1:-1:-1;;;;11696:1:147;11680:14;;;11676:22;11663:36;;-1:-1:-1;10667:1299:147:o;11971:125::-;12036:9;;;12057:10;;;12054:36;;;12070:18;;:::i;13277:127::-;13338:10;13333:3;13329:20;13326:1;13319:31;13369:4;13366:1;13359:15;13393:4;13390:1;13383:15","linkReferences":{}},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","eip712Domain()":"84b0196e","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize(address,address)":"485cc955","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"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\"},{\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"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\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"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\":[],\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_custody\",\"type\":\"address\"}],\"name\":\"initialize\",\"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\":[{\"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\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"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.\"}]},\"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.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"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}.\"},\"constructor\":{\"details\":\"Disables potential implementation exploit\"},\"decimals()\":{\"details\":\"Returns the number of decimals\"},\"eip712Domain()\":{\"details\":\"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize(address,address)\":{\"details\":\"Initializes the contract with initial parameters.\",\"params\":{\"_custody\":\"The address of the custody account.\",\"_owner\":\"The address of the owner who receives default admin role.\"}},\"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.\"},\"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.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"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`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"decimals()\":{\"notice\":\"decimals is set to 8, following the Movement network standard decimals\"},\"initialize(address,address)\":{\"notice\":\"The ERC20 token is named \\\"Movement\\\" with symbol \\\"MOVE\\\".EIP712 domain version is set to \\\"1\\\" for signatures.The owner is granted the `DEFAULT_ADMIN_ROLE`.10 billion MOVE tokens are minted to the owner's address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/MOVEToken.sol\":\"MOVEToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x949f1b87232ce60ae1d7651dfc4272f258a388448e08b4d624b1acbe05d8b39b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://469b7e1cab4c319957fddef8ad610ce347e2494d15389f3d3f689c4be66c1f7d\",\"dweb:/ipfs/QmdC9UdUZAYzjyZ2ULJgJ5QxhDHRtVJ8MJhHKjiotNfCeY\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x13c2d19041c51b246233f96874a66c0094b8a5ff78af3b85ea27867f302dcbbb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f1bc47de2e6e12b3680e47a4dd5b6e3c1e85b65851378aa1d617309edbc1200d\",\"dweb:/ipfs/QmSPcJ9HmkmsSDvMS4KZijnxoGMAEn8HbQuY4fe8DroZEE\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x37b2d71a3d12d55076e87942fb75e80ec8b6bacecd19b6562474952f6973d87b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4261c708ec31ae8764d242089617dc60c5e54a20ec781a42704886eda988a37a\",\"dweb:/ipfs/QmQqFiotrcCfB36B2pSfwGz4Bi4zhRgwwGAJ8VFBaEtzQ1\"]},\"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\":\"0xc42e24f0285994caee3bc6c916d41fefb36a618b319c611bfe9d35a3d3ae99a5\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ed0b53cab18c57c95baf6a0a905720c0b689bbfb5d0bcd0e839bdfd2c94a4dc1\",\"dweb:/ipfs/QmNP63qE5U7KoTcG3SNj1Gwoa6pHsXxtNeidYzojfUBof6\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89\",\"dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xccb9b54747f3733f9ca435191745881587b2b48a12d6903358b59bc8ae39ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://021b637b39bddc68e1beed71677cb52919d27880804b1c7160d53064342786bc\",\"dweb:/ipfs/QmV3wgNQmoi9d6U3P7xwHAEKDoaQzGqGGjcSXsyWMf9rsK\"]},\"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\":\"0x967996585c54704fd501d06738b0dc2463207929f6f9d8e5193770ca88035130\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://c22d1c0daf76538514f93f524c1a6dca7bf5a97992537122ef3a7f8632fb3375\",\"dweb:/ipfs/QmYpjvU5LV3HsQRvoCzy9CHzQMWxEro4mHYGvcgWkCPSPw\"]},\"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\":\"0x7ae21669569f436e69e064814c8b8986e1936972bdd9ad559b859f3abe7251ae\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ad6d66b7acf76e9ad8703c2a04c1e62c0394cba2ad8f0fbd98cf06b3d9dbb403\",\"dweb:/ipfs/QmSrJChs3MKqG6EFAi585MPJ1FyUvMxK66Bi7Pxm4e3qxU\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xc240f71206795cead02e49f999b3523414c230cec53423298d8457a7ce9d3ea4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d5813c665d5ea1b73e27844800eb45831b9ba608b2a9216ead318e246fd5e8f\",\"dweb:/ipfs/QmNStA3tbwHZm1tXgdmY4wB3NbYKJtzYWADjKmDMhYHjyA\"]},\"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/token/MOVEToken.sol\":{\"keccak256\":\"0x907babd7e2db7867a9401ab8edcecd579ad7db099ae4693a27e052887d91eb22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a87e3b44d5e5409f0695ca2057be132b02b12a6cfa3d95a1a69382458e16b20a\",\"dweb:/ipfs/QmPNA8kiRGr3jR4ngz8UeKLUM7QitN4J5xNbxxWYNncV9H\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"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","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":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","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":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"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":[],"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":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_custody","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"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":[{"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":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"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"}]}],"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}."},"constructor":{"details":"Disables potential implementation exploit"},"decimals()":{"details":"Returns the number of decimals"},"eip712Domain()":{"details":"returns the fields and values that describe the domain separator used by this contract for EIP-712 signature."},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize(address,address)":{"details":"Initializes the contract with initial parameters.","params":{"_custody":"The address of the custody account.","_owner":"The address of the owner who receives default admin role."}},"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."},"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."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"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`."}},"version":1},"userdoc":{"kind":"user","methods":{"decimals()":{"notice":"decimals is set to 8, following the Movement network standard decimals"},"initialize(address,address)":{"notice":"The ERC20 token is named \"Movement\" with symbol \"MOVE\".EIP712 domain version is set to \"1\" for signatures.The owner is granted the `DEFAULT_ADMIN_ROLE`.10 billion MOVE tokens are minted to the owner's address."}},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/token/MOVEToken.sol":"MOVEToken"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x949f1b87232ce60ae1d7651dfc4272f258a388448e08b4d624b1acbe05d8b39b","urls":["bzz-raw://469b7e1cab4c319957fddef8ad610ce347e2494d15389f3d3f689c4be66c1f7d","dweb:/ipfs/QmdC9UdUZAYzjyZ2ULJgJ5QxhDHRtVJ8MJhHKjiotNfCeY"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x13c2d19041c51b246233f96874a66c0094b8a5ff78af3b85ea27867f302dcbbb","urls":["bzz-raw://f1bc47de2e6e12b3680e47a4dd5b6e3c1e85b65851378aa1d617309edbc1200d","dweb:/ipfs/QmSPcJ9HmkmsSDvMS4KZijnxoGMAEn8HbQuY4fe8DroZEE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x37b2d71a3d12d55076e87942fb75e80ec8b6bacecd19b6562474952f6973d87b","urls":["bzz-raw://4261c708ec31ae8764d242089617dc60c5e54a20ec781a42704886eda988a37a","dweb:/ipfs/QmQqFiotrcCfB36B2pSfwGz4Bi4zhRgwwGAJ8VFBaEtzQ1"],"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":"0xc42e24f0285994caee3bc6c916d41fefb36a618b319c611bfe9d35a3d3ae99a5","urls":["bzz-raw://ed0b53cab18c57c95baf6a0a905720c0b689bbfb5d0bcd0e839bdfd2c94a4dc1","dweb:/ipfs/QmNP63qE5U7KoTcG3SNj1Gwoa6pHsXxtNeidYzojfUBof6"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol":{"keccak256":"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab","urls":["bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89","dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xccb9b54747f3733f9ca435191745881587b2b48a12d6903358b59bc8ae39ea6b","urls":["bzz-raw://021b637b39bddc68e1beed71677cb52919d27880804b1c7160d53064342786bc","dweb:/ipfs/QmV3wgNQmoi9d6U3P7xwHAEKDoaQzGqGGjcSXsyWMf9rsK"],"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":"0x967996585c54704fd501d06738b0dc2463207929f6f9d8e5193770ca88035130","urls":["bzz-raw://c22d1c0daf76538514f93f524c1a6dca7bf5a97992537122ef3a7f8632fb3375","dweb:/ipfs/QmYpjvU5LV3HsQRvoCzy9CHzQMWxEro4mHYGvcgWkCPSPw"],"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":"0x7ae21669569f436e69e064814c8b8986e1936972bdd9ad559b859f3abe7251ae","urls":["bzz-raw://ad6d66b7acf76e9ad8703c2a04c1e62c0394cba2ad8f0fbd98cf06b3d9dbb403","dweb:/ipfs/QmSrJChs3MKqG6EFAi585MPJ1FyUvMxK66Bi7Pxm4e3qxU"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xc240f71206795cead02e49f999b3523414c230cec53423298d8457a7ce9d3ea4","urls":["bzz-raw://7d5813c665d5ea1b73e27844800eb45831b9ba608b2a9216ead318e246fd5e8f","dweb:/ipfs/QmNStA3tbwHZm1tXgdmY4wB3NbYKJtzYWADjKmDMhYHjyA"],"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/token/MOVEToken.sol":{"keccak256":"0x907babd7e2db7867a9401ab8edcecd579ad7db099ae4693a27e052887d91eb22","urls":["bzz-raw://a87e3b44d5e5409f0695ca2057be132b02b12a6cfa3d95a1a69382458e16b20a","dweb:/ipfs/QmPNA8kiRGr3jR4ngz8UeKLUM7QitN4J5xNbxxWYNncV9H"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/token/MOVEToken.sol","id":64430,"exportedSymbols":{"AccessControlUpgradeable":[39478],"ERC20PermitUpgradeable":[40714],"MOVEToken":[64429]},"nodeType":"SourceUnit","src":"32:1526:122","nodes":[{"id":64350,"nodeType":"PragmaDirective","src":"32:24:122","nodes":[],"literals":["solidity","^","0.8",".19"]},{"id":64352,"nodeType":"ImportDirective","src":"58:125:122","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":64430,"sourceUnit":40715,"symbolAliases":[{"foreign":{"id":64351,"name":"ERC20PermitUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40714,"src":"66:22:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":64354,"nodeType":"ImportDirective","src":"184:113:122","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol","nameLocation":"-1:-1:-1","scope":64430,"sourceUnit":39479,"symbolAliases":[{"foreign":{"id":64353,"name":"AccessControlUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39478,"src":"192:24:122","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":64429,"nodeType":"ContractDefinition","src":"299:1259:122","nodes":[{"id":64366,"nodeType":"FunctionDefinition","src":"447:39:122","nodes":[],"body":{"id":64365,"nodeType":"Block","src":"461:25:122","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":64362,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39700,"src":"462:20:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":64363,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"462:22:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":64364,"nodeType":"ExpressionStatement","src":"462:22:122"}]},"documentation":{"id":64359,"nodeType":"StructuredDocumentation","src":"377:65:122","text":" @dev Disables potential implementation exploit"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":64360,"nodeType":"ParameterList","parameters":[],"src":"458:2:122"},"returnParameters":{"id":64361,"nodeType":"ParameterList","parameters":[],"src":"461:0:122"},"scope":64429,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":64418,"nodeType":"FunctionDefinition","src":"981:342:122","nodes":[],"body":{"id":64417,"nodeType":"Block","src":"1054:269:122","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":64389,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":64382,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":64377,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64369,"src":"1072:6:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":64380,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1090:1:122","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":64379,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1082:7:122","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":64378,"name":"address","nodeType":"ElementaryTypeName","src":"1082:7:122","typeDescriptions":{}}},"id":64381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1082:10:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1072:20:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":64388,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":64383,"name":"_custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64371,"src":"1096:8:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":64386,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1116:1:122","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":64385,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1108:7:122","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":64384,"name":"address","nodeType":"ElementaryTypeName","src":"1108:7:122","typeDescriptions":{}}},"id":64387,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1108:10:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1096:22:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1072:46:122","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":64376,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1064:7:122","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":64390,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1064:55:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":64391,"nodeType":"ExpressionStatement","src":"1064:55:122"},{"expression":{"arguments":[{"hexValue":"4d6f76656d656e74","id":64393,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1142:10:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},"value":"Movement"},{"hexValue":"4d4f5645","id":64394,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1154:6:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_94304e8d07ec49123c30284d16c4a1082e90258cc0faf510314d9c3808edcda0","typeString":"literal_string \"MOVE\""},"value":"MOVE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},{"typeIdentifier":"t_stringliteral_94304e8d07ec49123c30284d16c4a1082e90258cc0faf510314d9c3808edcda0","typeString":"literal_string \"MOVE\""}],"id":64392,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39996,"src":"1129:12:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":64395,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1129:32:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":64396,"nodeType":"ExpressionStatement","src":"1129:32:122"},{"expression":{"arguments":[{"hexValue":"4d6f76656d656e74","id":64398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1195:10:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},"value":"Movement"},{"hexValue":"31","id":64399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1207:3:122","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""}],"id":64397,"name":"__EIP712_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40968,"src":"1171:23:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":64400,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1171:40:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":64401,"nodeType":"ExpressionStatement","src":"1171:40:122"},{"expression":{"arguments":[{"id":64403,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39144,"src":"1232:18:122","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":64404,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64369,"src":"1252:6:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":64402,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39431,"src":"1221:10:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":64405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1221:38:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":64406,"nodeType":"ExpressionStatement","src":"1221:38:122"},{"expression":{"arguments":[{"id":64408,"name":"_custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64371,"src":"1275:8:122","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":64414,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130303030303030303030","id":64409,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1285:11:122","typeDescriptions":{"typeIdentifier":"t_rational_10000000000_by_1","typeString":"int_const 10000000000"},"value":"10000000000"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":64413,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":64410,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1299:2:122","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":64411,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[64428],"referencedDeclaration":64428,"src":"1305:8:122","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint8_$","typeString":"function () pure returns (uint8)"}},"id":64412,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1305:10:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1299:16:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1285:30:122","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":64407,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40377,"src":"1269:5:122","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":64415,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1269:47:122","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":64416,"nodeType":"ExpressionStatement","src":"1269:47:122"}]},"documentation":{"id":64367,"nodeType":"StructuredDocumentation","src":"492:484:122","text":" @dev Initializes the contract with initial parameters.\n @param _owner The address of the owner who receives default admin role.\n @param _custody The address of the custody account.\n @notice The ERC20 token is named \"Movement\" with symbol \"MOVE\".\n @notice EIP712 domain version is set to \"1\" for signatures.\n @notice The owner is granted the `DEFAULT_ADMIN_ROLE`.\n @notice 10 billion MOVE tokens are minted to the owner's address."},"functionSelector":"485cc955","implemented":true,"kind":"function","modifiers":[{"id":64374,"kind":"modifierInvocation","modifierName":{"id":64373,"name":"initializer","nameLocations":["1042:11:122"],"nodeType":"IdentifierPath","referencedDeclaration":39586,"src":"1042:11:122"},"nodeType":"ModifierInvocation","src":"1042:11:122"}],"name":"initialize","nameLocation":"990:10:122","parameters":{"id":64372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":64369,"mutability":"mutable","name":"_owner","nameLocation":"1009:6:122","nodeType":"VariableDeclaration","scope":64418,"src":"1001:14:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":64368,"name":"address","nodeType":"ElementaryTypeName","src":"1001:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":64371,"mutability":"mutable","name":"_custody","nameLocation":"1025:8:122","nodeType":"VariableDeclaration","scope":64418,"src":"1017:16:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":64370,"name":"address","nodeType":"ElementaryTypeName","src":"1017:7:122","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1000:34:122"},"returnParameters":{"id":64375,"nodeType":"ParameterList","parameters":[],"src":"1054:0:122"},"scope":64429,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":64428,"nodeType":"FunctionDefinition","src":"1474:82:122","nodes":[],"body":{"id":64427,"nodeType":"Block","src":"1531:25:122","nodes":[],"statements":[{"expression":{"hexValue":"38","id":64425,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1548:1:122","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"functionReturnParameters":64424,"id":64426,"nodeType":"Return","src":"1541:8:122"}]},"baseFunctions":[40065],"documentation":{"id":64419,"nodeType":"StructuredDocumentation","src":"1329:140:122","text":" @dev Returns the number of decimals\n @notice decimals is set to 8, following the Movement network standard decimals"},"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"1483:8:122","overrides":{"id":64421,"nodeType":"OverrideSpecifier","overrides":[],"src":"1506:8:122"},"parameters":{"id":64420,"nodeType":"ParameterList","parameters":[],"src":"1491:2:122"},"returnParameters":{"id":64424,"nodeType":"ParameterList","parameters":[{"constant":false,"id":64423,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":64428,"src":"1524:5:122","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":64422,"name":"uint8","nodeType":"ElementaryTypeName","src":"1524:5:122","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1523:7:122"},"scope":64429,"stateMutability":"pure","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":64355,"name":"ERC20PermitUpgradeable","nameLocations":["321:22:122"],"nodeType":"IdentifierPath","referencedDeclaration":40714,"src":"321:22:122"},"id":64356,"nodeType":"InheritanceSpecifier","src":"321:22:122"},{"baseName":{"id":64357,"name":"AccessControlUpgradeable","nameLocations":["345:24:122"],"nodeType":"IdentifierPath","referencedDeclaration":39478,"src":"345:24:122"},"id":64358,"nodeType":"InheritanceSpecifier","src":"345:24:122"}],"canonicalName":"MOVEToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[64429,39478,41255,47988,41634,40714,40871,41215,42938,43910,40545,42990,43874,43848,40760,39746],"name":"MOVEToken","nameLocation":"308:9:122","scope":64430,"usedErrors":[39495,39498,40580,40587,40774,41561,41564,42960,42965,42970,42979,42984,42989,47529,47534,47539],"usedEvents":[39503,41573,41582,41591,42918,43782,43791]}],"license":"MIT"},"id":122} \ No newline at end of file +{"abi":[{"type":"constructor","inputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"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":"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":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_owner","type":"address","internalType":"address"},{"name":"_custody","type":"address","internalType":"address"}],"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":"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":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"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":"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":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","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":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"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":[]}],"bytecode":{"object":"0x6080604052348015600e575f80fd5b5060156019565b60c9565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00805468010000000000000000900460ff161560685760405163f92ee8a960e01b815260040160405180910390fd5b80546001600160401b039081161460c65780546001600160401b0319166001600160401b0390811782556040519081527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50565b61181b806100d65f395ff3fe608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063485cc955116100b457806395d89b411161007957806395d89b4114610283578063a217fddf1461028b578063a9059cbb14610292578063d505accf146102a5578063d547741f146102b8578063dd62ed3e146102cb575f80fd5b8063485cc9551461021c57806370a082311461022f5780637ecebe001461024257806384b0196e1461025557806391d1485414610270575f80fd5b8063248a9ca3116100fa578063248a9ca3146101ca5780632f2ff15d146101dd578063313ce567146101f25780633644e5151461020157806336568abe14610209575f80fd5b806301ffc9a71461013657806306fdde031461015e578063095ea7b31461017357806318160ddd1461018657806323b872dd146101b7575b5f80fd5b610149610144366004611287565b6102de565b60405190151581526020015b60405180910390f35b610166610314565b60405161015591906112e3565b610149610181366004611310565b6103b9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610155565b6101496101c5366004611338565b6103d0565b6101a96101d8366004611372565b6103f3565b6101f06101eb366004611389565b610413565b005b60405160088152602001610155565b6101a9610435565b6101f0610217366004611389565b610443565b6101f061022a3660046113b3565b61047b565b6101a961023d3660046113db565b610661565b6101a96102503660046113db565b610691565b61025d61069b565b60405161015597969594939291906113f4565b61014961027e366004611389565b610749565b61016661077f565b6101a95f81565b6101496102a0366004611310565b6107bd565b6101f06102b336600461148a565b6107ca565b6101f06102c6366004611389565b61091f565b6101a96102d93660046113b3565b61093b565b5f6001600160e01b03198216637965db0b60e01b148061030e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5f805160206117868339815191525b9050806003018054610337906114f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610363906114f7565b80156103ae5780601f10610385576101008083540402835291602001916103ae565b820191905f5260205f20905b81548152906001019060200180831161039157829003601f168201915b505050505091505090565b5f336103c6818585610984565b5060019392505050565b5f336103dd858285610991565b6103e88585856109ef565b506001949350505050565b5f9081525f805160206117c6833981519152602052604090206001015490565b61041c826103f3565b61042581610a4c565b61042f8383610a59565b50505050565b5f61043e610afa565b905090565b6001600160a01b038116331461046c5760405163334bd91960e11b815260040160405180910390fd5b6104768282610b03565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156104c05750825b90505f8267ffffffffffffffff1660011480156104dc5750303b155b9050811580156104ea575080155b156105085760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053257845460ff60401b1916600160401b1785555b6001600160a01b0387161580159061055257506001600160a01b03861615155b61055a575f80fd5b6105a060405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060048152602001634d4f564560e01b815250610b7c565b6105e360405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060018152602001603160f81b815250610b92565b6105ed5f88610a59565b50610612866105fe6008600a611626565b61060d906402540be400611634565b610bf1565b831561065857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f805f805160206117868339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b5f61030e82610c25565b5f60608082808083815f805160206117a683398151915280549091501580156106c657506001810154155b61070f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610717610c4d565b61071f610c8b565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f9182525f805160206117c6833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061178683398151915291610337906114f7565b5f336103c68185856109ef565b834211156107ee5760405163313c898160e11b815260048101859052602401610706565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108588c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6108b282610ca1565b90505f6108c182878787610ccd565b9050896001600160a01b0316816001600160a01b031614610908576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610706565b6109138a8a8a610984565b50505050505050505050565b610928826103f3565b61093181610a4c565b61042f8383610b03565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104768383836001610cf9565b5f61099c848461093b565b90505f1981101561042f57818110156109e157604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610706565b61042f84848484035f610cf9565b6001600160a01b038316610a1857604051634b637e8f60e11b81525f6004820152602401610706565b6001600160a01b038216610a415760405163ec442f0560e01b81525f6004820152602401610706565b610476838383610ddd565b610a568133610f16565b50565b5f5f805160206117c6833981519152610a728484610749565b610af1575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610aa73390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061030e565b5f91505061030e565b5f61043e610f4f565b5f5f805160206117c6833981519152610b1c8484610749565b15610af1575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061030e565b610b84610fc2565b610b8e828261100d565b5050565b610b9a610fc2565b5f805160206117a68339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610bd384826116a3565b5060038101610be283826116a3565b505f8082556001909101555050565b6001600160a01b038216610c1a5760405163ec442f0560e01b81525f6004820152602401610706565b610b8e5f8383610ddd565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610672565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206117a683398151915291610337906114f7565b60605f5f805160206117a6833981519152610326565b5f61030e610cad610afa565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80610cdd8888888861105d565b925092509250610ced8282611125565b50909695505050505050565b5f805160206117868339815191526001600160a01b038516610d305760405163e602df0560e01b81525f6004820152602401610706565b6001600160a01b038416610d5957604051634a1406b160e11b81525f6004820152602401610706565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610dd657836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610dcd91815260200190565b60405180910390a35b5050505050565b5f805160206117868339815191526001600160a01b038416610e175781816002015f828254610e0c919061175e565b90915550610e879050565b6001600160a01b0384165f9081526020829052604090205482811015610e695760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610706565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610ea5576002810180548390039055610ec3565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f0891815260200190565b60405180910390a350505050565b610f208282610749565b610b8e5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610706565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f796111dd565b610f81611245565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661100b57604051631afcd79f60e31b815260040160405180910390fd5b565b611015610fc2565b5f805160206117868339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361104e84826116a3565b506004810161042f83826116a3565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561109657505f9150600390508261111b565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156110e7573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661111257505f92506001915082905061111b565b92505f91508190505b9450945094915050565b5f82600381111561113857611138611771565b03611141575050565b600182600381111561115557611155611771565b036111735760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561118757611187611771565b036111a85760405163fce698f760e01b815260048101829052602401610706565b60038260038111156111bc576111bc611771565b03610b8e576040516335e2f38360e21b815260048101829052602401610706565b5f5f805160206117a6833981519152816111f5610c4d565b80519091501561120d57805160209091012092915050565b8154801561121c579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f805160206117a68339815191528161125d610c8b565b80519091501561127557805160209091012092915050565b6001820154801561121c579392505050565b5f60208284031215611297575f80fd5b81356001600160e01b0319811681146112ae575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112ae60208301846112b5565b80356001600160a01b038116811461130b575f80fd5b919050565b5f8060408385031215611321575f80fd5b61132a836112f5565b946020939093013593505050565b5f805f6060848603121561134a575f80fd5b611353846112f5565b9250611361602085016112f5565b929592945050506040919091013590565b5f60208284031215611382575f80fd5b5035919050565b5f806040838503121561139a575f80fd5b823591506113aa602084016112f5565b90509250929050565b5f80604083850312156113c4575f80fd5b6113cd836112f5565b91506113aa602084016112f5565b5f602082840312156113eb575f80fd5b6112ae826112f5565b60ff60f81b8816815260e060208201525f61141260e08301896112b5565b828103604084015261142481896112b5565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561147957835183526020938401939092019160010161145b565b50909b9a5050505050505050505050565b5f805f805f805f60e0888a0312156114a0575f80fd5b6114a9886112f5565b96506114b7602089016112f5565b95506040880135945060608801359350608088013560ff811681146114da575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c9082168061150b57607f821691505b60208210810361152957634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561157e578085048111156115625761156261152f565b600184161561157057908102905b60019390931c928002611547565b935093915050565b5f826115945750600161030e565b816115a057505f61030e565b81600181146115b657600281146115c0576115dc565b600191505061030e565b60ff8411156115d1576115d161152f565b50506001821b61030e565b5060208310610133831016604e8410600b84101617156115ff575081810a61030e565b61160b5f198484611543565b805f190482111561161e5761161e61152f565b029392505050565b5f6112ae60ff841683611586565b808202811582820484141761030e5761030e61152f565b634e487b7160e01b5f52604160045260245ffd5b601f82111561047657805f5260205f20601f840160051c810160208510156116845750805b601f840160051c820191505b81811015610dd6575f8155600101611690565b815167ffffffffffffffff8111156116bd576116bd61164b565b6116d1816116cb84546114f7565b8461165f565b6020601f821160018114611703575f83156116ec5750848201515b5f19600385901b1c1916600184901b178455610dd6565b5f84815260208120601f198516915b828110156117325787850151825560209485019460019092019101611712565b508482101561174f57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561030e5761030e61152f565b634e487b7160e01b5f52602160045260245ffdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212203dd31e1ad88f47a21c7b07b3f4b62a4fb23cac54ad8408caf213d1eca21745b764736f6c634300081a0033","sourceMap":"299:1259:118:-:0;;;447:39;;;;;;;;;-1:-1:-1;462:22:118;:20;:22::i;:::-;299:1259;;7711:422:20;8870:21;7900:15;;;;;;;7896:76;;;7938:23;;-1:-1:-1;;;7938:23:20;;;;;;;;;;;7896:76;7985:14;;-1:-1:-1;;;;;7985:14:20;;;:34;7981:146;;8035:33;;-1:-1:-1;;;;;;8035:33:20;-1:-1:-1;;;;;8035:33:20;;;;;8087:29;;158:50:143;;;8087:29:20;;146:2:143;131:18;8087:29:20;;;;;;;7981:146;7760:373;7711:422::o;14:200:143:-;299:1259:118;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x608060405234801561000f575f80fd5b5060043610610132575f3560e01c8063485cc955116100b457806395d89b411161007957806395d89b4114610283578063a217fddf1461028b578063a9059cbb14610292578063d505accf146102a5578063d547741f146102b8578063dd62ed3e146102cb575f80fd5b8063485cc9551461021c57806370a082311461022f5780637ecebe001461024257806384b0196e1461025557806391d1485414610270575f80fd5b8063248a9ca3116100fa578063248a9ca3146101ca5780632f2ff15d146101dd578063313ce567146101f25780633644e5151461020157806336568abe14610209575f80fd5b806301ffc9a71461013657806306fdde031461015e578063095ea7b31461017357806318160ddd1461018657806323b872dd146101b7575b5f80fd5b610149610144366004611287565b6102de565b60405190151581526020015b60405180910390f35b610166610314565b60405161015591906112e3565b610149610181366004611310565b6103b9565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace02545b604051908152602001610155565b6101496101c5366004611338565b6103d0565b6101a96101d8366004611372565b6103f3565b6101f06101eb366004611389565b610413565b005b60405160088152602001610155565b6101a9610435565b6101f0610217366004611389565b610443565b6101f061022a3660046113b3565b61047b565b6101a961023d3660046113db565b610661565b6101a96102503660046113db565b610691565b61025d61069b565b60405161015597969594939291906113f4565b61014961027e366004611389565b610749565b61016661077f565b6101a95f81565b6101496102a0366004611310565b6107bd565b6101f06102b336600461148a565b6107ca565b6101f06102c6366004611389565b61091f565b6101a96102d93660046113b3565b61093b565b5f6001600160e01b03198216637965db0b60e01b148061030e57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f5f805160206117868339815191525b9050806003018054610337906114f7565b80601f0160208091040260200160405190810160405280929190818152602001828054610363906114f7565b80156103ae5780601f10610385576101008083540402835291602001916103ae565b820191905f5260205f20905b81548152906001019060200180831161039157829003601f168201915b505050505091505090565b5f336103c6818585610984565b5060019392505050565b5f336103dd858285610991565b6103e88585856109ef565b506001949350505050565b5f9081525f805160206117c6833981519152602052604090206001015490565b61041c826103f3565b61042581610a4c565b61042f8383610a59565b50505050565b5f61043e610afa565b905090565b6001600160a01b038116331461046c5760405163334bd91960e11b815260040160405180910390fd5b6104768282610b03565b505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff16159067ffffffffffffffff165f811580156104c05750825b90505f8267ffffffffffffffff1660011480156104dc5750303b155b9050811580156104ea575080155b156105085760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561053257845460ff60401b1916600160401b1785555b6001600160a01b0387161580159061055257506001600160a01b03861615155b61055a575f80fd5b6105a060405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060048152602001634d4f564560e01b815250610b7c565b6105e360405180604001604052806008815260200167135bdd995b595b9d60c21b815250604051806040016040528060018152602001603160f81b815250610b92565b6105ed5f88610a59565b50610612866105fe6008600a611626565b61060d906402540be400611634565b610bf1565b831561065857845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b50505050505050565b5f805f805160206117868339815191525b6001600160a01b039093165f9081526020939093525050604090205490565b5f61030e82610c25565b5f60608082808083815f805160206117a683398151915280549091501580156106c657506001810154155b61070f5760405162461bcd60e51b81526020600482015260156024820152741152540dcc4c8e88155b9a5b9a5d1a585b1a5e9959605a1b60448201526064015b60405180910390fd5b610717610c4d565b61071f610c8b565b604080515f80825260208201909252600f60f81b9c939b5091995046985030975095509350915050565b5f9182525f805160206117c6833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b7f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0480546060915f8051602061178683398151915291610337906114f7565b5f336103c68185856109ef565b834211156107ee5760405163313c898160e11b815260048101859052602401610706565b5f7f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c98888886108588c6001600160a01b03165f9081527f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb006020526040902080546001810190915590565b6040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810186905260e0016040516020818303038152906040528051906020012090505f6108b282610ca1565b90505f6108c182878787610ccd565b9050896001600160a01b0316816001600160a01b031614610908576040516325c0072360e11b81526001600160a01b0380831660048301528b166024820152604401610706565b6109138a8a8a610984565b50505050505050505050565b610928826103f3565b61093181610a4c565b61042f8383610b03565b6001600160a01b039182165f9081527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace016020908152604080832093909416825291909152205490565b6104768383836001610cf9565b5f61099c848461093b565b90505f1981101561042f57818110156109e157604051637dc7a0d960e11b81526001600160a01b03841660048201526024810182905260448101839052606401610706565b61042f84848484035f610cf9565b6001600160a01b038316610a1857604051634b637e8f60e11b81525f6004820152602401610706565b6001600160a01b038216610a415760405163ec442f0560e01b81525f6004820152602401610706565b610476838383610ddd565b610a568133610f16565b50565b5f5f805160206117c6833981519152610a728484610749565b610af1575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055610aa73390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a4600191505061030e565b5f91505061030e565b5f61043e610f4f565b5f5f805160206117c6833981519152610b1c8484610749565b15610af1575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a4600191505061030e565b610b84610fc2565b610b8e828261100d565b5050565b610b9a610fc2565b5f805160206117a68339815191527fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d102610bd384826116a3565b5060038101610be283826116a3565b505f8082556001909101555050565b6001600160a01b038216610c1a5760405163ec442f0560e01b81525f6004820152602401610706565b610b8e5f8383610ddd565b5f807f5ab42ced628888259c08ac98db1eb0cf702fc1501344311d8b100cd1bfe4bb00610672565b7fa16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10280546060915f805160206117a683398151915291610337906114f7565b60605f5f805160206117a6833981519152610326565b5f61030e610cad610afa565b8360405161190160f01b8152600281019290925260228201526042902090565b5f805f80610cdd8888888861105d565b925092509250610ced8282611125565b50909695505050505050565b5f805160206117868339815191526001600160a01b038516610d305760405163e602df0560e01b81525f6004820152602401610706565b6001600160a01b038416610d5957604051634a1406b160e11b81525f6004820152602401610706565b6001600160a01b038086165f90815260018301602090815260408083209388168352929052208390558115610dd657836001600160a01b0316856001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92585604051610dcd91815260200190565b60405180910390a35b5050505050565b5f805160206117868339815191526001600160a01b038416610e175781816002015f828254610e0c919061175e565b90915550610e879050565b6001600160a01b0384165f9081526020829052604090205482811015610e695760405163391434e360e21b81526001600160a01b03861660048201526024810182905260448101849052606401610706565b6001600160a01b0385165f9081526020839052604090209083900390555b6001600160a01b038316610ea5576002810180548390039055610ec3565b6001600160a01b0383165f9081526020829052604090208054830190555b826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051610f0891815260200190565b60405180910390a350505050565b610f208282610749565b610b8e5760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610706565b5f7f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f610f796111dd565b610f81611245565b60408051602081019490945283019190915260608201524660808201523060a082015260c00160405160208183030381529060405280519060200120905090565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661100b57604051631afcd79f60e31b815260040160405180910390fd5b565b611015610fc2565b5f805160206117868339815191527f52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace0361104e84826116a3565b506004810161042f83826116a3565b5f80807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a084111561109657505f9150600390508261111b565b604080515f808252602082018084528a905260ff891692820192909252606081018790526080810186905260019060a0016020604051602081039080840390855afa1580156110e7573d5f803e3d5ffd5b5050604051601f1901519150506001600160a01b03811661111257505f92506001915082905061111b565b92505f91508190505b9450945094915050565b5f82600381111561113857611138611771565b03611141575050565b600182600381111561115557611155611771565b036111735760405163f645eedf60e01b815260040160405180910390fd5b600282600381111561118757611187611771565b036111a85760405163fce698f760e01b815260048101829052602401610706565b60038260038111156111bc576111bc611771565b03610b8e576040516335e2f38360e21b815260048101829052602401610706565b5f5f805160206117a6833981519152816111f5610c4d565b80519091501561120d57805160209091012092915050565b8154801561121c579392505050565b7fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470935050505090565b5f5f805160206117a68339815191528161125d610c8b565b80519091501561127557805160209091012092915050565b6001820154801561121c579392505050565b5f60208284031215611297575f80fd5b81356001600160e01b0319811681146112ae575f80fd5b9392505050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f6112ae60208301846112b5565b80356001600160a01b038116811461130b575f80fd5b919050565b5f8060408385031215611321575f80fd5b61132a836112f5565b946020939093013593505050565b5f805f6060848603121561134a575f80fd5b611353846112f5565b9250611361602085016112f5565b929592945050506040919091013590565b5f60208284031215611382575f80fd5b5035919050565b5f806040838503121561139a575f80fd5b823591506113aa602084016112f5565b90509250929050565b5f80604083850312156113c4575f80fd5b6113cd836112f5565b91506113aa602084016112f5565b5f602082840312156113eb575f80fd5b6112ae826112f5565b60ff60f81b8816815260e060208201525f61141260e08301896112b5565b828103604084015261142481896112b5565b606084018890526001600160a01b038716608085015260a0840186905283810360c0850152845180825260208087019350909101905f5b8181101561147957835183526020938401939092019160010161145b565b50909b9a5050505050505050505050565b5f805f805f805f60e0888a0312156114a0575f80fd5b6114a9886112f5565b96506114b7602089016112f5565b95506040880135945060608801359350608088013560ff811681146114da575f80fd5b9699959850939692959460a0840135945060c09093013592915050565b600181811c9082168061150b57607f821691505b60208210810361152957634e487b7160e01b5f52602260045260245ffd5b50919050565b634e487b7160e01b5f52601160045260245ffd5b6001815b600184111561157e578085048111156115625761156261152f565b600184161561157057908102905b60019390931c928002611547565b935093915050565b5f826115945750600161030e565b816115a057505f61030e565b81600181146115b657600281146115c0576115dc565b600191505061030e565b60ff8411156115d1576115d161152f565b50506001821b61030e565b5060208310610133831016604e8410600b84101617156115ff575081810a61030e565b61160b5f198484611543565b805f190482111561161e5761161e61152f565b029392505050565b5f6112ae60ff841683611586565b808202811582820484141761030e5761030e61152f565b634e487b7160e01b5f52604160045260245ffd5b601f82111561047657805f5260205f20601f840160051c810160208510156116845750805b601f840160051c820191505b81811015610dd6575f8155600101611690565b815167ffffffffffffffff8111156116bd576116bd61164b565b6116d1816116cb84546114f7565b8461165f565b6020601f821160018114611703575f83156116ec5750848201515b5f19600385901b1c1916600184901b178455610dd6565b5f84815260208120601f198516915b828110156117325787850151825560209485019460019092019101611712565b508482101561174f57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b8082018082111561030e5761030e61152f565b634e487b7160e01b5f52602160045260245ffdfe52c63247e1f47db19d5ce0460030c497f067ca4cebf71ba98eeadabe20bace00a16a46d94261c7517cc8ff89f61c0ce93598e3c849801011dee649a6a557d10002dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212203dd31e1ad88f47a21c7b07b3f4b62a4fb23cac54ad8408caf213d1eca21745b764736f6c634300081a0033","sourceMap":"299:1259:118:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:19;;;;;;:::i;:::-;;:::i;:::-;;;470:14:143;;463:22;445:41;;433:2;418:18;3443:202:19;;;;;;;;2716:144:22;;;:::i;:::-;;;;;;;:::i;5210:186::-;;;;;;:::i;:::-;;:::i;3896:152::-;4027:14;;3896:152;;;1645:25:143;;;1633:2;1618:18;3896:152:22;1499:177:143;5988:244:22;;;;;;:::i;:::-;;:::i;4759:191:19:-;;;;;;:::i;:::-;;:::i;5246:136::-;;;;;;:::i;:::-;;:::i;:::-;;1474:82:118;;;1548:1;2920:36:143;;2908:2;2893:18;1474:82:118;2778:184:143;3085:112:23;;;:::i;6348:245:19:-;;;;;;:::i;:::-;;:::i;981:342:118:-;;;;;;:::i;:::-;;:::i;4106:171:22:-;;;;;;:::i;:::-;;:::i;2824:154:23:-;;;;;;:::i;:::-;;:::i;5173:903:26:-;;;:::i;:::-;;;;;;;;;;;;;:::i;3732:207:19:-;;;;;;:::i;:::-;;:::i;2973:148:22:-;;;:::i;2317:49:19:-;;2362:4;2317:49;;4472:178:22;;;;;;:::i;:::-;;:::i;2098:672:23:-;;;;;;:::i;:::-;;:::i;5662:138:19:-;;;;;;:::i;:::-;;:::i;4708:195:22:-;;;;;;:::i;:::-;;:::i;3443:202:19:-;3528:4;-1:-1:-1;;;;;;3551:47:19;;-1:-1:-1;;;3551:47:19;;:87;;-1:-1:-1;;;;;;;;;;1134:40:27;;;3602:36:19;3544:94;3443:202;-1:-1:-1;;3443:202:19:o;2716:144:22:-;2761:13;2786:22;-1:-1:-1;;;;;;;;;;;2811:18:22;2786:43;;2846:1;:7;;2839:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2716:144;:::o;5210:186::-;5283:4;966:10:24;5337:31:22;966:10:24;5353:7:22;5362:5;5337:8;:31::i;:::-;-1:-1:-1;5385:4:22;;5210:186;-1:-1:-1;;;5210:186:22:o;5988:244::-;6075:4;966:10:24;6131:37:22;6147:4;966:10:24;6162:5:22;6131:15;:37::i;:::-;6178:26;6188:4;6194:2;6198:5;6178:9;:26::i;:::-;-1:-1:-1;6221:4:22;;5988:244;-1:-1:-1;;;;5988:244:22:o;4759:191:19:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:19;;;;;:24;;;;4759:191::o;5246:136::-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;3085:112:23:-;3144:7;3170:20;:18;:20::i;:::-;3163:27;;3085:112;:::o;6348:245:19:-;-1:-1:-1;;;;;6441:34:19;;966:10:24;6441:34:19;6437:102;;6498:30;;-1:-1:-1;;;6498:30:19;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;981:342:118:-;8870:21:20;4302:15;;-1:-1:-1;;;4302:15:20;;;;4301:16;;4348:14;;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;:16;;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:20;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:20;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:20;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:20;-1:-1:-1;;;5013:22:20;;;4979:67;-1:-1:-1;;;;;1072:20:118;::::1;::::0;;::::1;::::0;:46:::1;;-1:-1:-1::0;;;;;;1096:22:118;::::1;::::0;::::1;1072:46;1064:55;;;::::0;::::1;;1129:32;;;;;;;;;;;;;;-1:-1:-1::0;;;1129:32:118::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1129:32:118::1;;::::0;:12:::1;:32::i;:::-;1171:40;;;;;;;;;;;;;;-1:-1:-1::0;;;1171:40:118::1;;::::0;::::1;;;;;;;;;;;;;-1:-1:-1::0;;;1171:40:118::1;;::::0;:23:::1;:40::i;:::-;1221:38;2362:4:19;1252:6:118::0;1221:10:::1;:38::i;:::-;-1:-1:-1::0;1269:47:118::1;1275:8:::0;1299:16:::1;1548:1:::0;1299:2:::1;:16;:::i;:::-;1285:30;::::0;:11:::1;:30;:::i;:::-;1269:5;:47::i;:::-;5070:14:20::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:20;;;5142:14;;-1:-1:-1;7849:50:143;;5142:14:20;;7837:2:143;7822:18;5142:14:20;;;;;;;5066:101;4092:1081;;;;;981:342:118;;:::o;4106:171:22:-;4171:7;;-1:-1:-1;;;;;;;;;;;4215:18:22;-1:-1:-1;;;;;4250:20:22;;;:11;:20;;;;;;;;-1:-1:-1;;4250:20:22;;;;;4106:171::o;2824:154:23:-;2926:7;2952:19;2965:5;2952:12;:19::i;5173:903:26:-;5271:13;5298:18;;5271:13;;;5298:18;5271:13;-1:-1:-1;;;;;;;;;;;5777:13:26;;5511:45;;-1:-1:-1;5777:18:26;:43;;;;-1:-1:-1;5799:16:26;;;;:21;5777:43;5769:77;;;;-1:-1:-1;;;5769:77:26;;8112:2:143;5769:77:26;;;8094:21:143;8151:2;8131:18;;;8124:30;-1:-1:-1;;;8170:18:143;;;8163:51;8231:18;;5769:77:26;;;;;;;;;5908:13;:11;:13::i;:::-;5935:16;:14;:16::i;:::-;6043;;;6027:1;6043:16;;;;;;;;;-1:-1:-1;;;5857:212:26;;;-1:-1:-1;5857:212:26;;-1:-1:-1;5965:13:26;;-1:-1:-1;6000:4:26;;-1:-1:-1;6027:1:26;-1:-1:-1;6043:16:26;-1:-1:-1;5857:212:26;-1:-1:-1;;5173:903:26:o;3732:207:19:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:19;;;;;;;;-1:-1:-1;;;;;3901:31:19;;;;;;;;;;;;;;;3732:207::o;2973:148:22:-;3105:9;3098:16;;3020:13;;-1:-1:-1;;;;;;;;;;;2064:20:22;3098:16;;;:::i;4472:178::-;4541:4;966:10:24;4595:27:22;966:10:24;4612:2:22;4616:5;4595:9;:27::i;2098:672:23:-;2319:8;2301:15;:26;2297:97;;;2350:33;;-1:-1:-1;;;2350:33:23;;;;;1645:25:143;;;1618:18;;2350:33:23;1499:177:143;2297:97:23;2404:18;1279:95;2463:5;2470:7;2479:5;2486:16;2496:5;-1:-1:-1;;;;;1954:16:25;1597:7;1954:16;;;1005:21;1954:16;;;;;:18;;;;;;;;;1537:452;2486:16:23;2435:78;;;;;;8679:25:143;;;;-1:-1:-1;;;;;8740:32:143;;;8720:18;;;8713:60;8809:32;;;;8789:18;;;8782:60;8858:18;;;8851:34;8901:19;;;8894:35;8945:19;;;8938:35;;;8651:19;;2435:78:23;;;;;;;;;;;;2425:89;;;;;;2404:110;;2525:12;2540:28;2557:10;2540:16;:28::i;:::-;2525:43;;2579:14;2596:28;2610:4;2616:1;2619;2622;2596:13;:28::i;:::-;2579:45;;2648:5;-1:-1:-1;;;;;2638:15:23;:6;-1:-1:-1;;;;;2638:15:23;;2634:88;;2676:35;;-1:-1:-1;;;2676:35:23;;-1:-1:-1;;;;;9176:32:143;;;2676:35:23;;;9158:51:143;9245:32;;9225:18;;;9218:60;9131:18;;2676:35:23;8984:300:143;2634:88:23;2732:31;2741:5;2748:7;2757:5;2732:8;:31::i;:::-;2287:483;;;2098:672;;;;;;;:::o;5662:138:19:-;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;4708:195:22:-:0;-1:-1:-1;;;;;4867:20:22;;;4788:7;4867:20;;;:13;:20;;;;;;;;:29;;;;;;;;;;;;;4708:195::o;10001:128::-;10085:37;10094:5;10101:7;10110:5;10117:4;10085:8;:37::i;11745:476::-;11844:24;11871:25;11881:5;11888:7;11871:9;:25::i;:::-;11844:52;;-1:-1:-1;;11910:16:22;:36;11906:309;;;11985:5;11966:16;:24;11962:130;;;12017:60;;-1:-1:-1;;;12017:60:22;;-1:-1:-1;;;;;9509:32:143;;12017:60:22;;;9491:51:143;9558:18;;;9551:34;;;9601:18;;;9594:34;;;9464:18;;12017:60:22;9289:345:143;11962:130:22;12133:57;12142:5;12149:7;12177:5;12158:16;:24;12184:5;12133:8;:57::i;6605:300::-;-1:-1:-1;;;;;6688:18:22;;6684:86;;6729:30;;-1:-1:-1;;;6729:30:22;;6756:1;6729:30;;;9785:51:143;9758:18;;6729:30:22;9639:203:143;6684:86:22;-1:-1:-1;;;;;6783:16:22;;6779:86;;6822:32;;-1:-1:-1;;;6822:32:22;;6851:1;6822:32;;;9785:51:143;9758:18;;6822:32:22;9639:203:143;6779:86:22;6874:24;6882:4;6888:2;6892:5;6874:7;:24::i;4148:103:19:-;4214:30;4225:4;966:10:24;4214::19;:30::i;:::-;4148:103;:::o;7270:387::-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:19;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:19;;;;;;;;;:38;;-1:-1:-1;;7475:38:19;7509:4;7475:38;;;7559:12;966:10:24;;887:96;7559:12:19;-1:-1:-1;;;;;7532:40:19;7550:7;-1:-1:-1;;;;;7532:40:19;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;4015:109:26;4068:7;4094:23;:21;:23::i;7892:388:19:-;7970:4;-1:-1:-1;;;;;;;;;;;8059:22:19;8067:4;8073:7;8059;:22::i;:::-;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:19;;;;;;;;;;:39;;-1:-1:-1;;8097:39:19;;;8155:40;966:10:24;;8097:14:19;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;2282:147:22;6931:20:20;:18;:20::i;:::-;2384:38:22::1;2407:5;2414:7;2384:22;:38::i;:::-;2282:147:::0;;:::o;3599:330:26:-;6931:20:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;3766:7:26;:14:::1;3776:4:::0;3766:7;:14:::1;:::i;:::-;-1:-1:-1::0;3790:10:26::1;::::0;::::1;:20;3803:7:::0;3790:10;:20:::1;:::i;:::-;-1:-1:-1::0;3891:1:26::1;3875:17:::0;;;3902:16:::1;::::0;;::::1;:20:::0;-1:-1:-1;;3599:330:26:o;8733:208:22:-;-1:-1:-1;;;;;8803:21:22;;8799:91;;8847:32;;-1:-1:-1;;;8847:32:22;;8876:1;8847:32;;;9785:51:143;9758:18;;8847:32:22;9639:203:143;8799:91:22;8899:35;8915:1;8919:7;8928:5;8899:7;:35::i;1259:164:25:-;1319:7;;1005:21;1364:19;886:156;6300:155:26;6441:7;6434:14;;6354:13;;-1:-1:-1;;;;;;;;;;;2839:21:26;6434:14;;;:::i;6682:161::-;6739:13;6764:23;-1:-1:-1;;;;;;;;;;;6790:19:26;2720:156;4946:176;5023:7;5049:66;5082:20;:18;:20::i;:::-;5104:10;3501:4:61;3495:11;-1:-1:-1;;;3519:23:61;;3571:4;3562:14;;3555:39;;;;3623:4;3614:14;;3607:34;3679:4;3664:20;;;3326:374;6887:260:60;6972:7;6992:17;7011:18;7031:16;7051:25;7062:4;7068:1;7071;7074;7051:10;:25::i;:::-;6991:85;;;;;;7086:28;7098:5;7105:8;7086:11;:28::i;:::-;-1:-1:-1;7131:9:60;;6887:260;-1:-1:-1;;;;;;6887:260:60:o;10976:487:22:-;-1:-1:-1;;;;;;;;;;;;;;;;11141:19:22;;11137:89;;11183:32;;-1:-1:-1;;;11183:32:22;;11212:1;11183:32;;;9785:51:143;9758:18;;11183:32:22;9639:203:143;11137:89:22;-1:-1:-1;;;;;11239:21:22;;11235:90;;11283:31;;-1:-1:-1;;;11283:31:22;;11311:1;11283:31;;;9785:51:143;9758:18;;11283:31:22;9639:203:143;11235:90:22;-1:-1:-1;;;;;11334:20:22;;;;;;;:13;;;:20;;;;;;;;:29;;;;;;;;;:37;;;11381:76;;;;11431:7;-1:-1:-1;;;;;11415:31:22;11424:5;-1:-1:-1;;;;;11415:31:22;;11440:5;11415:31;;;;1645:25:143;;1633:2;1618:18;;1499:177;11415:31:22;;;;;;;;11381:76;11074:389;10976:487;;;;:::o;7220:1170::-;-1:-1:-1;;;;;;;;;;;;;;;;7362:18:22;;7358:546;;7516:5;7498:1;:14;;;:23;;;;;;;:::i;:::-;;;;-1:-1:-1;7358:546:22;;-1:-1:-1;7358:546:22;;-1:-1:-1;;;;;7574:17:22;;7552:19;7574:17;;;;;;;;;;;7609:19;;;7605:115;;;7655:50;;-1:-1:-1;;;7655:50:22;;-1:-1:-1;;;;;9509:32:143;;7655:50:22;;;9491:51:143;9558:18;;;9551:34;;;9601:18;;;9594:34;;;9464:18;;7655:50:22;9289:345:143;7605:115:22;-1:-1:-1;;;;;7840:17:22;;:11;:17;;;;;;;;;;7860:19;;;;7840:39;;7358:546;-1:-1:-1;;;;;7918:16:22;;7914:429;;8081:14;;;:23;;;;;;;7914:429;;;-1:-1:-1;;;;;8294:15:22;;:11;:15;;;;;;;;;;:24;;;;;;7914:429;8373:2;-1:-1:-1;;;;;8358:25:22;8367:4;-1:-1:-1;;;;;8358:25:22;;8377:5;8358:25;;;;1645::143;;1633:2;1618:18;;1499:177;8358:25:22;;;;;;;;7295:1095;7220:1170;;;:::o;4381:197:19:-;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:19;;-1:-1:-1;;;;;12293:32:143;;4514:47:19;;;12275:51:143;12342:18;;;12335:34;;;12248:18;;4514:47:19;12101:274:143;4130:191:26;4185:7;2073:95;4243:17;:15;:17::i;:::-;4262:20;:18;:20::i;:::-;4221:92;;;;;;12639:25:143;;;;12680:18;;12673:34;;;;12723:18;;;12716:34;4284:13:26;12766:18:143;;;12759:34;4307:4:26;12809:19:143;;;12802:61;12611:19;;4221:92:26;;;;;;;;;;;;4211:103;;;;;;4204:110;;4130:191;:::o;7084:141:20:-;8870:21;8560:40;-1:-1:-1;;;8560:40:20;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:20;;;;;;;;;;;7146:73;7084:141::o;2435:216:22:-;6931:20:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;2600:7:22;:15:::1;2610:5:::0;2600:7;:15:::1;:::i;:::-;-1:-1:-1::0;2625:9:22::1;::::0;::::1;:19;2637:7:::0;2625:9;:19:::1;:::i;5203:1551:60:-:0;5329:17;;;6283:66;6270:79;;6266:164;;;-1:-1:-1;6381:1:60;;-1:-1:-1;6385:30:60;;-1:-1:-1;6417:1:60;6365:54;;6266:164;6541:24;;;6524:14;6541:24;;;;;;;;;13101:25:143;;;13174:4;13162:17;;13142:18;;;13135:45;;;;13196:18;;;13189:34;;;13239:18;;;13232:34;;;6541:24:60;;13073:19:143;;6541:24:60;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6541:24:60;;-1:-1:-1;;6541:24:60;;;-1:-1:-1;;;;;;;6579:20:60;;6575:113;;-1:-1:-1;6631:1:60;;-1:-1:-1;6635:29:60;;-1:-1:-1;6631:1:60;;-1:-1:-1;6615:62:60;;6575:113;6706:6;-1:-1:-1;6714:20:60;;-1:-1:-1;6714:20:60;;-1:-1:-1;5203:1551:60;;;;;;;;;:::o;7280:532::-;7375:20;7366:5;:29;;;;;;;;:::i;:::-;;7362:444;;7280:532;;:::o;7362:444::-;7471:29;7462:5;:38;;;;;;;;:::i;:::-;;7458:348;;7523:23;;-1:-1:-1;;;7523:23:60;;;;;;;;;;;7458:348;7576:35;7567:5;:44;;;;;;;;:::i;:::-;;7563:243;;7634:46;;-1:-1:-1;;;7634:46:60;;;;;1645:25:143;;;1618:18;;7634:46:60;1499:177:143;7563:243:60;7710:30;7701:5;:39;;;;;;;;:::i;:::-;;7697:109;;7763:32;;-1:-1:-1;;;7763:32:60;;;;;1645:25:143;;;1618:18;;7763:32:60;1499:177:143;7058:687:26;7108:7;-1:-1:-1;;;;;;;;;;;7108:7:26;7203:13;:11;:13::i;:::-;7230:18;;7182:34;;-1:-1:-1;7230:22:26;7226:513;;7275:22;;;;;;;;7058:687;-1:-1:-1;;7058:687:26:o;7226:513::-;7572:13;;7603:15;;7599:130;;7645:10;7058:687;-1:-1:-1;;;7058:687:26:o;7599:130::-;7701:13;7694:20;;;;;7058:687;:::o;7966:723::-;8019:7;-1:-1:-1;;;;;;;;;;;8019:7:26;8117:16;:14;:16::i;:::-;8147:21;;8093:40;;-1:-1:-1;8147:25:26;8143:540;;8195:25;;;;;;;;7966:723;-1:-1:-1;;7966:723:26:o;8143:540::-;8507:16;;;;8541:18;;8537:136;;8586:13;7966:723;-1:-1:-1;;;7966:723:26:o;14:286:143:-;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:143;;209:43;;199:71;;266:1;263;256:12;199:71;289:5;14:286;-1:-1:-1;;;14:286:143:o;497:289::-;539:3;577:5;571:12;604:6;599:3;592:19;660:6;653:4;646:5;642:16;635:4;630:3;626:14;620:47;712:1;705:4;696:6;691:3;687:16;683:27;676:38;775:4;768:2;764:7;759:2;751:6;747:15;743:29;738:3;734:39;730:50;723:57;;;497:289;;;;:::o;791:220::-;940:2;929:9;922:21;903:4;960:45;1001:2;990:9;986:18;978:6;960:45;:::i;1016:173::-;1084:20;;-1:-1:-1;;;;;1133:31:143;;1123:42;;1113:70;;1179:1;1176;1169:12;1113:70;1016:173;;;:::o;1194:300::-;1262:6;1270;1323:2;1311:9;1302:7;1298:23;1294:32;1291:52;;;1339:1;1336;1329:12;1291:52;1362:29;1381:9;1362:29;:::i;:::-;1352:39;1460:2;1445:18;;;;1432:32;;-1:-1:-1;;;1194:300:143:o;1681:374::-;1758:6;1766;1774;1827:2;1815:9;1806:7;1802:23;1798:32;1795:52;;;1843:1;1840;1833:12;1795:52;1866:29;1885:9;1866:29;:::i;:::-;1856:39;;1914:38;1948:2;1937:9;1933:18;1914:38;:::i;:::-;1681:374;;1904:48;;-1:-1:-1;;;2021:2:143;2006:18;;;;1993:32;;1681:374::o;2060:226::-;2119:6;2172:2;2160:9;2151:7;2147:23;2143:32;2140:52;;;2188:1;2185;2178:12;2140:52;-1:-1:-1;2233:23:143;;2060:226;-1:-1:-1;2060:226:143:o;2473:300::-;2541:6;2549;2602:2;2590:9;2581:7;2577:23;2573:32;2570:52;;;2618:1;2615;2608:12;2570:52;2663:23;;;-1:-1:-1;2729:38:143;2763:2;2748:18;;2729:38;:::i;:::-;2719:48;;2473:300;;;;;:::o;2967:260::-;3035:6;3043;3096:2;3084:9;3075:7;3071:23;3067:32;3064:52;;;3112:1;3109;3102:12;3064:52;3135:29;3154:9;3135:29;:::i;:::-;3125:39;;3183:38;3217:2;3206:9;3202:18;3183:38;:::i;3232:186::-;3291:6;3344:2;3332:9;3323:7;3319:23;3315:32;3312:52;;;3360:1;3357;3350:12;3312:52;3383:29;3402:9;3383:29;:::i;3423:1238::-;3829:3;3824;3820:13;3812:6;3808:26;3797:9;3790:45;3871:3;3866:2;3855:9;3851:18;3844:31;3771:4;3898:46;3939:3;3928:9;3924:19;3916:6;3898:46;:::i;:::-;3992:9;3984:6;3980:22;3975:2;3964:9;3960:18;3953:50;4026:33;4052:6;4044;4026:33;:::i;:::-;4090:2;4075:18;;4068:34;;;-1:-1:-1;;;;;4139:32:143;;4133:3;4118:19;;4111:61;4159:3;4188:19;;4181:35;;;4253:22;;;4247:3;4232:19;;4225:51;4325:13;;4347:22;;;4397:2;4423:15;;;;-1:-1:-1;4385:15:143;;;;-1:-1:-1;4466:169:143;4480:6;4477:1;4474:13;4466:169;;;4541:13;;4529:26;;4584:2;4610:15;;;;4575:12;;;;4502:1;4495:9;4466:169;;;-1:-1:-1;4652:3:143;;3423:1238;-1:-1:-1;;;;;;;;;;;3423:1238:143:o;4666:903::-;4777:6;4785;4793;4801;4809;4817;4825;4878:3;4866:9;4857:7;4853:23;4849:33;4846:53;;;4895:1;4892;4885:12;4846:53;4918:29;4937:9;4918:29;:::i;:::-;4908:39;;4966:38;5000:2;4989:9;4985:18;4966:38;:::i;:::-;4956:48;-1:-1:-1;5073:2:143;5058:18;;5045:32;;-1:-1:-1;5174:2:143;5159:18;;5146:32;;-1:-1:-1;5256:3:143;5241:19;;5228:33;5305:4;5292:18;;5280:31;;5270:59;;5325:1;5322;5315:12;5270:59;4666:903;;;;-1:-1:-1;4666:903:143;;;;5348:7;5428:3;5413:19;;5400:33;;-1:-1:-1;5532:3:143;5517:19;;;5504:33;;4666:903;-1:-1:-1;;4666:903:143:o;5574:380::-;5653:1;5649:12;;;;5696;;;5717:61;;5771:4;5763:6;5759:17;5749:27;;5717:61;5824:2;5816:6;5813:14;5793:18;5790:38;5787:161;;5870:10;5865:3;5861:20;5858:1;5851:31;5905:4;5902:1;5895:15;5933:4;5930:1;5923:15;5787:161;;5574:380;;;:::o;5959:127::-;6020:10;6015:3;6011:20;6008:1;6001:31;6051:4;6048:1;6041:15;6075:4;6072:1;6065:15;6091:375;6179:1;6197:5;6211:249;6232:1;6222:8;6219:15;6211:249;;;6282:4;6277:3;6273:14;6267:4;6264:24;6261:50;;;6291:18;;:::i;:::-;6341:1;6331:8;6327:16;6324:49;;;6355:16;;;;6324:49;6438:1;6434:16;;;;;6394:15;;6211:249;;;6091:375;;;;;;:::o;6471:902::-;6520:5;6550:8;6540:80;;-1:-1:-1;6591:1:143;6605:5;;6540:80;6639:4;6629:76;;-1:-1:-1;6676:1:143;6690:5;;6629:76;6721:4;6739:1;6734:59;;;;6807:1;6802:174;;;;6714:262;;6734:59;6764:1;6755:10;;6778:5;;;6802:174;6839:3;6829:8;6826:17;6823:43;;;6846:18;;:::i;:::-;-1:-1:-1;;6902:1:143;6888:16;;6961:5;;6714:262;;7060:2;7050:8;7047:16;7041:3;7035:4;7032:13;7028:36;7022:2;7012:8;7009:16;7004:2;6998:4;6995:12;6991:35;6988:77;6985:203;;;-1:-1:-1;7097:19:143;;;7173:5;;6985:203;7220:42;-1:-1:-1;;7245:8:143;7239:4;7220:42;:::i;:::-;7298:6;7294:1;7290:6;7286:19;7277:7;7274:32;7271:58;;;7309:18;;:::i;:::-;7347:20;;6471:902;-1:-1:-1;;;6471:902:143:o;7378:140::-;7436:5;7465:47;7506:4;7496:8;7492:19;7486:4;7465:47;:::i;7523:168::-;7596:9;;;7627;;7644:15;;;7638:22;;7624:37;7614:71;;7665:18;;:::i;8260:127::-;8321:10;8316:3;8312:20;8309:1;8302:31;8352:4;8349:1;8342:15;8376:4;8373:1;8366:15;9973:518;10075:2;10070:3;10067:11;10064:421;;;10111:5;10108:1;10101:16;10155:4;10152:1;10142:18;10225:2;10213:10;10209:19;10206:1;10202:27;10196:4;10192:38;10261:4;10249:10;10246:20;10243:47;;;-1:-1:-1;10284:4:143;10243:47;10339:2;10334:3;10330:12;10327:1;10323:20;10317:4;10313:31;10303:41;;10394:81;10412:2;10405:5;10402:13;10394:81;;;10471:1;10457:16;;10438:1;10427:13;10394:81;;10667:1299;10793:3;10787:10;10820:18;10812:6;10809:30;10806:56;;;10842:18;;:::i;:::-;10871:97;10961:6;10921:38;10953:4;10947:11;10921:38;:::i;:::-;10915:4;10871:97;:::i;:::-;11017:4;11048:2;11037:14;;11065:1;11060:649;;;;11753:1;11770:6;11767:89;;;-1:-1:-1;11822:19:143;;;11816:26;11767:89;-1:-1:-1;;10624:1:143;10620:11;;;10616:24;10612:29;10602:40;10648:1;10644:11;;;10599:57;11869:81;;11030:930;;11060:649;9920:1;9913:14;;;9957:4;9944:18;;-1:-1:-1;;11096:20:143;;;11214:222;11228:7;11225:1;11222:14;11214:222;;;11310:19;;;11304:26;11289:42;;11417:4;11402:20;;;;11370:1;11358:14;;;;11244:12;11214:222;;;11218:3;11464:6;11455:7;11452:19;11449:201;;;11525:19;;;11519:26;-1:-1:-1;;11608:1:143;11604:14;;;11620:3;11600:24;11596:37;11592:42;11577:58;11562:74;;11449:201;-1:-1:-1;;;;11696:1:143;11680:14;;;11676:22;11663:36;;-1:-1:-1;10667:1299:143:o;11971:125::-;12036:9;;;12057:10;;;12054:36;;;12070:18;;:::i;13277:127::-;13338:10;13333:3;13329:20;13326:1;13319:31;13369:4;13366:1;13359:15;13393:4;13390:1;13383:15","linkReferences":{}},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","DOMAIN_SEPARATOR()":"3644e515","allowance(address,address)":"dd62ed3e","approve(address,uint256)":"095ea7b3","balanceOf(address)":"70a08231","decimals()":"313ce567","eip712Domain()":"84b0196e","getRoleAdmin(bytes32)":"248a9ca3","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize(address,address)":"485cc955","name()":"06fdde03","nonces(address)":"7ecebe00","permit(address,address,uint256,uint256,uint8,bytes32,bytes32)":"d505accf","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","supportsInterface(bytes4)":"01ffc9a7","symbol()":"95d89b41","totalSupply()":"18160ddd","transfer(address,uint256)":"a9059cbb","transferFrom(address,address,uint256)":"23b872dd"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"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\"},{\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"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\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"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\":[],\"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\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_owner\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"_custody\",\"type\":\"address\"}],\"name\":\"initialize\",\"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\":[{\"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\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"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\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"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.\"}]},\"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.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"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}.\"},\"constructor\":{\"details\":\"Disables potential implementation exploit\"},\"decimals()\":{\"details\":\"Returns the number of decimals\"},\"eip712Domain()\":{\"details\":\"See {IERC-5267}.\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize(address,address)\":{\"details\":\"Initializes the contract with initial parameters.\",\"params\":{\"_custody\":\"The address of the custody account.\",\"_owner\":\"The address of the owner who receives default admin role.\"}},\"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.\"},\"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.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"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`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{\"decimals()\":{\"notice\":\"decimals is set to 8, following the Movement network standard decimals\"},\"initialize(address,address)\":{\"notice\":\"The ERC20 token is named \\\"Movement\\\" with symbol \\\"MOVE\\\".EIP712 domain version is set to \\\"1\\\" for signatures.The owner is granted the `DEFAULT_ADMIN_ROLE`.10 billion MOVE tokens are minted to the owner's address.\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/token/MOVEToken.sol\":\"MOVEToken\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"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\":\"0x5c54228bbb2f1f8616179c51bdb90b7960f4a3414c390ad5c6ead6763eb55a59\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://745fe72596bb8fde5f294d9d6b943db942202e4445536ee00da3ba011f876e86\",\"dweb:/ipfs/QmcjeESkk4rbhUVaSBfyq5f8rY56Jms1TwcJXaRD55K3UH\"]},\"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-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89\",\"dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"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\":\"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251\",\"dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d\"]},\"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/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"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/token/MOVEToken.sol\":{\"keccak256\":\"0x907babd7e2db7867a9401ab8edcecd579ad7db099ae4693a27e052887d91eb22\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a87e3b44d5e5409f0695ca2057be132b02b12a6cfa3d95a1a69382458e16b20a\",\"dweb:/ipfs/QmPNA8kiRGr3jR4ngz8UeKLUM7QitN4J5xNbxxWYNncV9H\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"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","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":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","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":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"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":[],"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":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"_owner","type":"address"},{"internalType":"address","name":"_custody","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"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":[{"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":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"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"}]}],"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}."},"constructor":{"details":"Disables potential implementation exploit"},"decimals()":{"details":"Returns the number of decimals"},"eip712Domain()":{"details":"See {IERC-5267}."},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize(address,address)":{"details":"Initializes the contract with initial parameters.","params":{"_custody":"The address of the custody account.","_owner":"The address of the owner who receives default admin role."}},"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."},"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."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"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`."}},"version":1},"userdoc":{"kind":"user","methods":{"decimals()":{"notice":"decimals is set to 8, following the Movement network standard decimals"},"initialize(address,address)":{"notice":"The ERC20 token is named \"Movement\" with symbol \"MOVE\".EIP712 domain version is set to \"1\" for signatures.The owner is granted the `DEFAULT_ADMIN_ROLE`.10 billion MOVE tokens are minted to the owner's address."}},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/token/MOVEToken.sol":"MOVEToken"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"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":"0x5c54228bbb2f1f8616179c51bdb90b7960f4a3414c390ad5c6ead6763eb55a59","urls":["bzz-raw://745fe72596bb8fde5f294d9d6b943db942202e4445536ee00da3ba011f876e86","dweb:/ipfs/QmcjeESkk4rbhUVaSBfyq5f8rY56Jms1TwcJXaRD55K3UH"],"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-upgradeable/contracts/utils/introspection/ERC165Upgradeable.sol":{"keccak256":"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab","urls":["bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89","dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606","urls":["bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1","dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX"],"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":"0x44f87e91783e88415bde66f1a63f6c7f0076f2d511548820407d5c95643ac56c","urls":["bzz-raw://13a51bc2b23827744dcf5bad10c69e72528cf015a6fe48c93632cdb2c0eb1251","dweb:/ipfs/QmZwPA47Yqgje1qtkdEFEja8ntTahMStYzKf5q3JRnaR7d"],"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/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"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/token/MOVEToken.sol":{"keccak256":"0x907babd7e2db7867a9401ab8edcecd579ad7db099ae4693a27e052887d91eb22","urls":["bzz-raw://a87e3b44d5e5409f0695ca2057be132b02b12a6cfa3d95a1a69382458e16b20a","dweb:/ipfs/QmPNA8kiRGr3jR4ngz8UeKLUM7QitN4J5xNbxxWYNncV9H"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[],"types":{}},"ast":{"absolutePath":"src/token/MOVEToken.sol","id":62878,"exportedSymbols":{"AccessControlUpgradeable":[39448],"ERC20PermitUpgradeable":[40670],"MOVEToken":[62877]},"nodeType":"SourceUnit","src":"32:1526:118","nodes":[{"id":62798,"nodeType":"PragmaDirective","src":"32:24:118","nodes":[],"literals":["solidity","^","0.8",".19"]},{"id":62800,"nodeType":"ImportDirective","src":"58:125:118","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":62878,"sourceUnit":40671,"symbolAliases":[{"foreign":{"id":62799,"name":"ERC20PermitUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40670,"src":"66:22:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62802,"nodeType":"ImportDirective","src":"184:113:118","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol","file":"@openzeppelin/contracts-upgradeable/access/AccessControlUpgradeable.sol","nameLocation":"-1:-1:-1","scope":62878,"sourceUnit":39449,"symbolAliases":[{"foreign":{"id":62801,"name":"AccessControlUpgradeable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39448,"src":"192:24:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62877,"nodeType":"ContractDefinition","src":"299:1259:118","nodes":[{"id":62814,"nodeType":"FunctionDefinition","src":"447:39:118","nodes":[],"body":{"id":62813,"nodeType":"Block","src":"461:25:118","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":62810,"name":"_disableInitializers","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39670,"src":"462:20:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":62811,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"462:22:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62812,"nodeType":"ExpressionStatement","src":"462:22:118"}]},"documentation":{"id":62807,"nodeType":"StructuredDocumentation","src":"377:65:118","text":" @dev Disables potential implementation exploit"},"implemented":true,"kind":"constructor","modifiers":[],"name":"","nameLocation":"-1:-1:-1","parameters":{"id":62808,"nodeType":"ParameterList","parameters":[],"src":"458:2:118"},"returnParameters":{"id":62809,"nodeType":"ParameterList","parameters":[],"src":"461:0:118"},"scope":62877,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":62866,"nodeType":"FunctionDefinition","src":"981:342:118","nodes":[],"body":{"id":62865,"nodeType":"Block","src":"1054:269:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":62837,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":62830,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62825,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62817,"src":"1072:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":62828,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1090: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":62827,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1082:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":62826,"name":"address","nodeType":"ElementaryTypeName","src":"1082:7:118","typeDescriptions":{}}},"id":62829,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1082:10:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1072:20:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":62836,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62831,"name":"_custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62819,"src":"1096:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"hexValue":"30","id":62834,"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"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"}],"id":62833,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"1108:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":62832,"name":"address","nodeType":"ElementaryTypeName","src":"1108:7:118","typeDescriptions":{}}},"id":62835,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1108:10:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"1096:22:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"1072:46:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":62824,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1064:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":62838,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1064:55:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62839,"nodeType":"ExpressionStatement","src":"1064:55:118"},{"expression":{"arguments":[{"hexValue":"4d6f76656d656e74","id":62841,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1142:10:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},"value":"Movement"},{"hexValue":"4d4f5645","id":62842,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1154:6:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_94304e8d07ec49123c30284d16c4a1082e90258cc0faf510314d9c3808edcda0","typeString":"literal_string \"MOVE\""},"value":"MOVE"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},{"typeIdentifier":"t_stringliteral_94304e8d07ec49123c30284d16c4a1082e90258cc0faf510314d9c3808edcda0","typeString":"literal_string \"MOVE\""}],"id":62840,"name":"__ERC20_init","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39952,"src":"1129:12:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":62843,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1129:32:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62844,"nodeType":"ExpressionStatement","src":"1129:32:118"},{"expression":{"arguments":[{"hexValue":"4d6f76656d656e74","id":62846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1195:10:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},"value":"Movement"},{"hexValue":"31","id":62847,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1207:3:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""},"value":"1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_76cd1e2e4e245339bcdd0e0d14f4067a3f0952012fc7c5331fdec600bb235252","typeString":"literal_string \"Movement\""},{"typeIdentifier":"t_stringliteral_c89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc6","typeString":"literal_string \"1\""}],"id":62845,"name":"__EIP712_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40924,"src":"1171:23:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_string_memory_ptr_$_t_string_memory_ptr_$returns$__$","typeString":"function (string memory,string memory)"}},"id":62848,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1171:40:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62849,"nodeType":"ExpressionStatement","src":"1171:40:118"},{"expression":{"arguments":[{"id":62851,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39114,"src":"1232:18:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":62852,"name":"_owner","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62817,"src":"1252:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62850,"name":"_grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39401,"src":"1221:10:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) returns (bool)"}},"id":62853,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1221:38:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62854,"nodeType":"ExpressionStatement","src":"1221:38:118"},{"expression":{"arguments":[{"id":62856,"name":"_custody","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62819,"src":"1275:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62862,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130303030303030303030","id":62857,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1285:11:118","typeDescriptions":{"typeIdentifier":"t_rational_10000000000_by_1","typeString":"int_const 10000000000"},"value":"10000000000"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62861,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"3130","id":62858,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1299:2:118","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"nodeType":"BinaryOperation","operator":"**","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":62859,"name":"decimals","nodeType":"Identifier","overloadedDeclarations":[62876],"referencedDeclaration":62876,"src":"1305:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$__$returns$_t_uint8_$","typeString":"function () pure returns (uint8)"}},"id":62860,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1305:10:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"src":"1299:16:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1285:30:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":62855,"name":"_mint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":40333,"src":"1269:5:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":62863,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1269:47:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62864,"nodeType":"ExpressionStatement","src":"1269:47:118"}]},"documentation":{"id":62815,"nodeType":"StructuredDocumentation","src":"492:484:118","text":" @dev Initializes the contract with initial parameters.\n @param _owner The address of the owner who receives default admin role.\n @param _custody The address of the custody account.\n @notice The ERC20 token is named \"Movement\" with symbol \"MOVE\".\n @notice EIP712 domain version is set to \"1\" for signatures.\n @notice The owner is granted the `DEFAULT_ADMIN_ROLE`.\n @notice 10 billion MOVE tokens are minted to the owner's address."},"functionSelector":"485cc955","implemented":true,"kind":"function","modifiers":[{"id":62822,"kind":"modifierInvocation","modifierName":{"id":62821,"name":"initializer","nameLocations":["1042:11:118"],"nodeType":"IdentifierPath","referencedDeclaration":39556,"src":"1042:11:118"},"nodeType":"ModifierInvocation","src":"1042:11:118"}],"name":"initialize","nameLocation":"990:10:118","parameters":{"id":62820,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62817,"mutability":"mutable","name":"_owner","nameLocation":"1009:6:118","nodeType":"VariableDeclaration","scope":62866,"src":"1001:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62816,"name":"address","nodeType":"ElementaryTypeName","src":"1001:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62819,"mutability":"mutable","name":"_custody","nameLocation":"1025:8:118","nodeType":"VariableDeclaration","scope":62866,"src":"1017:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62818,"name":"address","nodeType":"ElementaryTypeName","src":"1017:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1000:34:118"},"returnParameters":{"id":62823,"nodeType":"ParameterList","parameters":[],"src":"1054:0:118"},"scope":62877,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":62876,"nodeType":"FunctionDefinition","src":"1474:82:118","nodes":[],"body":{"id":62875,"nodeType":"Block","src":"1531:25:118","nodes":[],"statements":[{"expression":{"hexValue":"38","id":62873,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1548:1:118","typeDescriptions":{"typeIdentifier":"t_rational_8_by_1","typeString":"int_const 8"},"value":"8"},"functionReturnParameters":62872,"id":62874,"nodeType":"Return","src":"1541:8:118"}]},"baseFunctions":[40021],"documentation":{"id":62867,"nodeType":"StructuredDocumentation","src":"1329:140:118","text":" @dev Returns the number of decimals\n @notice decimals is set to 8, following the Movement network standard decimals"},"functionSelector":"313ce567","implemented":true,"kind":"function","modifiers":[],"name":"decimals","nameLocation":"1483:8:118","overrides":{"id":62869,"nodeType":"OverrideSpecifier","overrides":[],"src":"1506:8:118"},"parameters":{"id":62868,"nodeType":"ParameterList","parameters":[],"src":"1491:2:118"},"returnParameters":{"id":62872,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62871,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62876,"src":"1524:5:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"},"typeName":{"id":62870,"name":"uint8","nodeType":"ElementaryTypeName","src":"1524:5:118","typeDescriptions":{"typeIdentifier":"t_uint8","typeString":"uint8"}},"visibility":"internal"}],"src":"1523:7:118"},"scope":62877,"stateMutability":"pure","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":62803,"name":"ERC20PermitUpgradeable","nameLocations":["321:22:118"],"nodeType":"IdentifierPath","referencedDeclaration":40670,"src":"321:22:118"},"id":62804,"nodeType":"InheritanceSpecifier","src":"321:22:118"},{"baseName":{"id":62805,"name":"AccessControlUpgradeable","nameLocations":["345:24:118"],"nodeType":"IdentifierPath","referencedDeclaration":39448,"src":"345:24:118"},"id":62806,"nodeType":"InheritanceSpecifier","src":"345:24:118"}],"canonicalName":"MOVEToken","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[62877,39448,41211,46535,41590,40670,40827,41171,42894,43866,40501,42946,43830,43804,40716,39702],"name":"MOVEToken","nameLocation":"308:9:118","scope":62878,"usedErrors":[39465,39468,40536,40543,40730,41517,41520,42916,42921,42926,42935,42940,42945,46088,46093,46098],"usedEvents":[39473,41529,41538,41547,42874,43738,43747]}],"license":"MIT"},"id":118} \ No newline at end of file diff --git a/protocol/pcp/cli/client/abis/MovementStaking.json b/protocol/pcp/cli/client/abis/MovementStaking.json index 35f663ee..b42a4a59 100644 --- a/protocol/pcp/cli/client/abis/MovementStaking.json +++ b/protocol/pcp/cli/client/abis/MovementStaking.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"WHITELIST_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"acceptGenesisCeremony","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"computeAllStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"computeAllStakeForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"currentAcceptingEpochByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"currentAcceptingEpoch","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"domainGenesisAccepted","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"epochDurationByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"epochDuration","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStakeForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStakeForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochByL1BlockTime","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochDuration","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextAcceptingEpochWithException","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextPresentEpochWithException","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRegisteredAttesters","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRegisteredCustodians","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakeForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakedAttestersForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getUnstake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUnstakeForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"_token","type":"address","internalType":"contract IERC20"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"registerDomain","inputs":[{"name":"epochDuration","type":"uint256","internalType":"uint256"},{"name":"custodians","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeAddressFromWhitelist","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardArray","inputs":[{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"amounts","type":"uint256[]","internalType":"uint256[]"},{"name":"custodians","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardFromDomain","inputs":[{"name":"attester","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rollOverEpoch","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"newEpoch","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"slash","inputs":[{"name":"custodians","type":"address[]","internalType":"address[]"},{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"amounts","type":"uint256[]","internalType":"uint256[]"},{"name":"refundAmounts","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"contract IERC20"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakesByDomainEpochCustodian","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"stakesByDomainEpochCustodianAttester","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"unstake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unstakesByDomainEpochCustodianAttester","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"whitelistAddress","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AttesterEpochRolledOver","inputs":[{"name":"attester","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"unstake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AttesterStaked","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":false,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AttesterUnstaked","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":false,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EpochRolledOver","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"CustodianTransferAmountMismatch","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"EpochDurationNotSet","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"GenesisAlreadyAccepted","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"StakeExceedsGenesisStake","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a0604052306080523480156012575f80fd5b50600160095560805161319661003e5f395f8181611e5901528181611e820152611fc301526131965ff3fe6080604052600436106102a5575f3560e01c80635e00bf461161016f578063a78d1fef116100d8578063c4d66de811610092578063d547741f1161006d578063d547741f146108a8578063d980b40d146108c7578063e6e3fb3a146108e6578063fc0c546a1461092b575f80fd5b8063c4d66de81461083c578063d1ba90ff1461085b578063d37304f814610889575f80fd5b8063a78d1fef14610763578063a885c97514610782578063a887b71c146107a1578063ad3cb1cc146107b5578063b1de97f7146107f2578063bf6eac2f1461081d575f80fd5b806386af70d11161012957806386af70d1146106a357806391d14854146106df57806392a2ebf3146106fe57806393dfb85c146107125780639db92f6814610731578063a217fddf14610750575f80fd5b80635e00bf46146105f357806360829f8a14610612578063771fcfc4146106315780637a997ab7146106505780637d93768b146106705780638129fc1c1461068f575f80fd5b806336568abe116102115780634f1ef286116101cb5780634f1ef2861461053b57806352d1902d1461054e57806355bdbe4c14610562578063574663a91461058157806357dd6a94146105a05780635c534359146105bf575f80fd5b806336568abe146104755780633bccf635146104945780633debeadc146104bf57806341566585146104de5780634234a479146104fd5780634e76a1391461051c575f80fd5b8063248a9ca311610262578063248a9ca3146103bb57806324fdfddf146103da578063286dd3f5146103f95780632f2ff15d14610418578063341d5ef51461043757806334eada3a14610456575f80fd5b806301ffc9a7146102a95780630c8f522f146102dd5780630ce52af5146103305780631789aeb41461034f5780631dc8b9491461037b57806322fceb751461039c575b5f80fd5b3480156102b4575f80fd5b506102c86102c3366004612ae0565b610961565b60405190151581526020015b60405180910390f35b3480156102e8575f80fd5b506103226102f7366004612b1b565b600560209081525f948552604080862082529385528385208152918452828420909152825290205481565b6040519081526020016102d4565b34801561033b575f80fd5b5061032261034a366004612b6b565b610997565b34801561035a575f80fd5b5061036e610369366004612baa565b6109cc565b6040516102d49190612bc5565b348015610386575f80fd5b5061039a610395366004612c05565b610ab6565b005b3480156103a7575f80fd5b506103226103b6366004612baa565b610bf2565b3480156103c6575f80fd5b506103226103d5366004612c2f565b610c0c565b3480156103e5575f80fd5b506103226103f4366004612b6b565b610c2c565b348015610404575f80fd5b5061039a610413366004612baa565b610ca3565b348015610423575f80fd5b5061039a610432366004612c46565b610cc8565b348015610442575f80fd5b5061036e610451366004612baa565b610cea565b348015610461575f80fd5b50610322610470366004612c74565b610dcd565b348015610480575f80fd5b5061039a61048f366004612c46565b610dea565b34801561049f575f80fd5b506103226104ae366004612baa565b60016020525f908152604090205481565b3480156104ca575f80fd5b506103226104d9366004612cb1565b610e22565b3480156104e9575f80fd5b5061039a6104f8366004612baa565b610e36565b348015610508575f80fd5b5061036e610517366004612baa565b610e57565b348015610527575f80fd5b5061039a610536366004612d24565b610fa5565b61039a610549366004612dd4565b611042565b348015610559575f80fd5b5061032261105d565b34801561056d575f80fd5b5061032261057c366004612c05565b611078565b34801561058c575f80fd5b5061032261059b366004612baa565b61110d565b3480156105ab575f80fd5b506103226105ba366004612baa565b61111b565b3480156105ca575f80fd5b506103226105d9366004612baa565b6001600160a01b03165f9081526001602052604090205490565b3480156105fe575f80fd5b5061039a61060d366004612b6b565b61114a565b34801561061d575f80fd5b5061039a61062c366004612e97565b611168565b34801561063c575f80fd5b5061032261064b366004612baa565b6111fd565b34801561065b575f80fd5b506103225f8051602061310183398151915281565b34801561067b575f80fd5b5061032261068a366004612b1b565b611215565b34801561069a575f80fd5b5061039a611252565b3480156106ae575f80fd5b506103226106bd366004612b6b565b600760209081525f938452604080852082529284528284209052825290205481565b3480156106ea575f80fd5b506102c86106f9366004612c46565b611347565b348015610709575f80fd5b5061039a61137d565b34801561071d575f80fd5b5061032261072c366004612b1b565b61150f565b34801561073c575f80fd5b5061032261074b366004612cb1565b61154c565b34801561075b575f80fd5b506103225f81565b34801561076e575f80fd5b5061032261077d366004612c74565b611560565b34801561078d575f80fd5b5061039a61079c366004612ed5565b611575565b3480156107ac575f80fd5b5061039a611797565b3480156107c0575f80fd5b506107e5604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102d49190612f9f565b3480156107fd575f80fd5b5061032261080c366004612baa565b60026020525f908152604090205481565b348015610828575f80fd5b5061039a610837366004612e97565b6117a9565b348015610847575f80fd5b5061039a610856366004612baa565b6119d4565b348015610866575f80fd5b506102c8610875366004612baa565b60086020525f908152604090205460ff1681565b348015610894575f80fd5b5061039a6108a3366004612fd4565b611ae3565b3480156108b3575f80fd5b5061039a6108c2366004612c46565b611b61565b3480156108d2575f80fd5b506103226108e1366004612baa565b611b7d565b3480156108f1575f80fd5b50610322610900366004612b1b565b600660209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610936575f80fd5b505f54610949906001600160a01b031681565b6040516001600160a01b0390911681526020016102d4565b5f6001600160e01b03198216637965db0b60e01b148061099157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001600160a01b038084165f9081526007602090815260408083208684528252808320938516835292905220545b9392505050565b6001600160a01b0381165f908152600360205260408120606091906109f090611bd6565b6001600160401b03811115610a0757610a07612dc0565b604051908082528060200260200182016040528015610a30578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600360205260409020610a5590611bd6565b811015610aaf576001600160a01b0384165f908152600360205260409020610a7d9082611bdf565b828281518110610a8f57610a8f61301b565b6001600160a01b0390921660209283029190910190910152600101610a35565b5092915050565b610abf82611b7d565b811115610b255760405162461bcd60e51b815260206004820152602960248201527f4e45575f45504f43485f4d5553545f42455f4c4553535f5448414e5f5052455360448201526808a9ca8be8aa09e86960bb1b60648201526084015b60405180910390fd5b610b2e82610bf2565b8111610b905760405162461bcd60e51b815260206004820152602b60248201527f4e45575f45504f43485f4d5553545f42455f4849474845525f5448414e5f435560448201526a0a4a48a9ca8be8aa09e86960ab1b6064820152608401610b1c565b336001600160a01b03831614610bd75760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610b1c565b6001600160a01b039091165f90815260026020526040902055565b6001600160a01b03165f9081526002602052604090205490565b5f9081525f80516020613141833981519152602052604090206001015490565b5f80805b6001600160a01b0386165f908152600460205260409020610c5090611bd6565b811015610c9a576001600160a01b0386165f908152600460205260409020610c869087908790610c809085611bdf565b8761150f565b610c909083613043565b9150600101610c30565b50949350505050565b5f610cad81611bea565b610cc45f8051602061310183398151915283611b61565b5050565b610cd182610c0c565b610cda81611bea565b610ce48383611bf7565b50505050565b6001600160a01b0381165f90815260046020526040812060609190610d0e90611bd6565b6001600160401b03811115610d2557610d25612dc0565b604051908082528060200260200182016040528015610d4e578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600460205260409020610d7390611bd6565b811015610aaf576001600160a01b0384165f908152600460205260409020610d9b9082611bdf565b828281518110610dad57610dad61301b565b6001600160a01b0390921660209283029190910190910152600101610d53565b5f610de284610ddb86610bf2565b8585611215565b949350505050565b6001600160a01b0381163314610e135760405163334bd91960e11b815260040160405180910390fd5b610e1d8282611c98565b505050565b5f6109c583610e3085610bf2565b84610c2c565b5f610e4081611bea565b610cc45f8051602061310183398151915283610cc8565b6001600160a01b0381165f90815260036020526040812060609190610e7b90611bd6565b90505f805b82811015610ed3576001600160a01b0385165f908152600360205260408120610ea99083611bdf565b90505f610eb68783610e22565b1115610eca5782610ec681613056565b9350505b50600101610e80565b505f816001600160401b03811115610eed57610eed612dc0565b604051908082528060200260200182016040528015610f16578160200160208202803683370190505b5090505f805b84811015610f9a576001600160a01b0387165f908152600360205260408120610f459083611bdf565b90505f610f528983610e22565b1115610f915780848481518110610f6b57610f6b61301b565b6001600160a01b039092166020928302919091019091015282610f8d81613056565b9350505b50600101610f1c565b509095945050505050565b610fad611d11565b5f5b8581101561102f5761102733888884818110610fcd57610fcd61301b565b9050602002016020810190610fe29190612baa565b858585818110610ff457610ff461301b565b90506020020160208101906110099190612baa565b88888681811061101b5761101b61301b565b90506020020135611d3b565b600101610faf565b5061103a6001600955565b505050505050565b61104a611e4e565b61105382611ef2565b610cc48282611efc565b5f611066611fb8565b505f8051602061312183398151915290565b5f8061108384610cea565b90505f61108f856109cc565b90505f805b8351811015611103575f5b83518110156110fa576110e688888785815181106110bf576110bf61301b565b60200260200101518785815181106110d9576110d961301b565b602002602001015161150f565b6110f09084613043565b925060010161109f565b50600101611094565b5095945050505050565b5f6109918261057c84610bf2565b5f61112582610bf2565b156111435761113382611b7d565b61113e906001613043565b610991565b5f92915050565b611152611d11565b61115e33848385611d3b565b610e1d6001600955565b5f8051602061310183398151915261117f81611bea565b611187611d11565b61119c84611194866111fd565b853386612001565b826001600160a01b03166111af856111fd565b60408051338152602081018690526001600160a01b038816917fd41c64546a5c34c283150998874c7ee0412c8954f57aef484c681f6e137827df910160405180910390a4610ce46001600955565b5f61120782610bf2565b156111435761113382610bf2565b6001600160a01b039384165f9081526006602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f61125b612055565b805490915060ff600160401b82041615906001600160401b03165f811580156112815750825b90505f826001600160401b0316600114801561129c5750303b155b9050811580156112aa575080155b156112c85760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156112f257845460ff60401b1916600160401b1785555b6112fa61207d565b831561134057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f9182525f80516020613141833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611385611d11565b335f8181526008602052604090205460ff16156113b45760405162fe178760e01b815260040160405180910390fd5b6001600160a01b0381165f908152600860209081526040808320805460ff191660019081179091559091529020546113ee576113ee61306e565b6113f781611b7d565b6001600160a01b0382165f908152600260205260408120919091555b6001600160a01b0382165f90815260036020526040902061143390611bd6565b811015611501576001600160a01b0382165f90815260036020526040812061145b9083611bdf565b90505f5b6001600160a01b0384165f90815260046020526040902061147f90611bd6565b8110156114f7576001600160a01b0384165f9081526004602052604081206114a79083611bdf565b90505f6114b6865f848761150f565b90505f6114c287610bf2565b11156114ed575f6114d287610bf2565b11156114ed576114ed866114e588610bf2565b84878561208d565b505060010161145f565b5050600101611413565b505061150d6001600955565b565b6001600160a01b039384165f9081526005602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f6109c58361155a85610bf2565b84610997565b5f610de28461156e86610bf2565b858561150f565b61157d611d11565b5f5b85811015611782575f611646611607336115b98b8b878181106115a4576115a461301b565b90506020020160208101906103b69190612baa565b8d8d878181106115cb576115cb61301b565b90506020020160208101906115e09190612baa565b8c8c888181106115f2576115f261301b565b905060200201602081019061072c9190612baa565b61164188888681811061161c5761161c61301b565b905060200201358787878181106116355761163561301b565b90506020020135612118565b612118565b90506116a03089898581811061165e5761165e61301b565b90506020020160208101906116739190612baa565b8c8c868181106116855761168561301b565b905060200201602081019061169a9190612baa565b84612127565b611719336116ad33610bf2565b8c8c868181106116bf576116bf61301b565b90506020020160208101906116d49190612baa565b8b8b878181106116e6576116e661301b565b90506020020160208101906116fb9190612baa565b8a8a8881811061170d5761170d61301b565b90506020020135612194565b6117793361172633610bf2565b8c8c868181106117385761173861301b565b905060200201602081019061174d9190612baa565b8b8b8781811061175f5761175f61301b565b90506020020160208101906117749190612baa565b6121d4565b5060010161157f565b5061178d6001600955565b5050505050505050565b61150d336117a433610bf2565b612246565b5f805160206131018339815191526117c081611bea565b6117c8611d11565b6001600160a01b0384165f9081526003602052604090206117e99033612363565b505f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611830573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118549190613082565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303815f875af11580156118a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118cb9190613099565b506118d68382613043565b5f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561191b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193f9190613082565b1461195d57604051631910d68360e21b815260040160405180910390fd5b6119728561196a876111fd565b86338761208d565b836001600160a01b0316611985866111fd565b60408051338152602081018790526001600160a01b038916917f7be65c2ae4d3c544de23b1db5bea4d541c02b93a5f4302852f4dc9880e0cb554910160405180910390a450610ce46001600955565b5f6119dd612055565b805490915060ff600160401b82041615906001600160401b03165f81158015611a035750825b90505f826001600160401b03166001148015611a1e5750303b155b905081158015611a2c575080155b15611a4a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611a7457845460ff60401b1916600160401b1785555b611a7c612377565b5f80546001600160a01b0319166001600160a01b038816179055831561103a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b611aeb611d11565b335f8181526001602052604081208590555b82811015611b5557611b4c848483818110611b1a57611b1a61301b565b9050602002016020810190611b2f9190612baa565b6001600160a01b0384165f90815260046020526040902090612363565b50600101611afd565b5050610e1d6001600955565b611b6a82610c0c565b611b7381611bea565b610ce48383611c98565b6001600160a01b0381165f908152600160205260408120548103611bb45760405163143c378b60e01b815260040160405180910390fd5b6001600160a01b0382165f9081526001602052604090205461099190426130b8565b5f610991825490565b5f6109c58383612389565b611bf481336123af565b50565b5f5f80516020613141833981519152611c108484611347565b611c8f575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611c453390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610991565b5f915050610991565b5f5f80516020613141833981519152611cb18484611347565b15611c8f575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610991565b600260095403611d3457604051633ee5aeb560e01b815260040160405180910390fd5b6002600955565b303303611d805760405162461bcd60e51b81526020600482015260136024820152724f6e6c792065787465726e616c2063616c6c7360681b6044820152606401610b1c565b5f546001600160a01b03838116911614611dd25760405162461bcd60e51b815260206004820152601360248201527226bab9ba103ab9b2903130b9b2903a37b5b2b760691b6044820152606401610b1c565b5f546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201849052909116906323b872dd906064015b6020604051808303815f875af1158015611e2a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113409190613099565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611ed457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ec85f80516020613121833981519152546001600160a01b031690565b6001600160a01b031614155b1561150d5760405163703e46dd60e11b815260040160405180910390fd5b5f610cc481611bea565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611f56575060408051601f3d908101601f19168201909252611f5391810190613082565b60015b611f7e57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610b1c565b5f805160206131218339815191528114611fae57604051632a87526960e21b815260048101829052602401610b1c565b610e1d83836123e8565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461150d5760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b038086165f90815260066020908152604080832088845282528083208785168452825280832093861683529290529081208054839290612049908490613043565b90915550505050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610991565b61208561243d565b61150d612377565b6001600160a01b038086165f908152600560209081526040808320888452825280832087851684528252808320938616835292905290812080548392906120d5908490613043565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290612049908490613043565b5f8282188284100282186109c5565b306001600160a01b03851603612168575f546001600160a01b0380841691160361215c5761215784848484612462565b610ce4565b6121578484848461254e565b5f546001600160a01b038084169116036121885761215784848484611d3b565b610ce4848484846126d5565b835f6121a28783878761150f565b9050828110156121be576121b987838787856127ae565b6121cb565b6121cb87838787876127ae565b50505050505050565b5f6121e18585858561150f565b90505f6121ef856001613043565b90505f6121fe87838787611215565b9050828111156121cb576001600160a01b038088165f9081526006602090815260408083208684528252808320848a16845282528083209388168352929052208390556121cb565b5f5b6001600160a01b0383165f90815260036020526040902061226890611bd6565b8110156122fd576001600160a01b0383165f9081526003602052604081206122909083611bdf565b90505f5b6001600160a01b0385165f9081526004602052604090206122b490611bd6565b8110156122f3576001600160a01b0385165f9081526004602052604081206122dc9083611bdf565b90506122ea86868386612839565b50600101612294565b5050600101612248565b50612309816001613043565b6001600160a01b0383165f81815260026020526040908190209290925590517fb693195b5ff3e376f8b562486abc516e10fe2467b75f0e4165e79cf4ab70dc41906123579084815260200190565b60405180910390a25050565b5f6109c5836001600160a01b038416612902565b61237f61243d565b611bf45f33611bf7565b5f825f01828154811061239e5761239e61301b565b905f5260205f200154905092915050565b6123b98282611347565b610cc45760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610b1c565b6123f18261294e565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561243557610e1d82826129b1565b610cc4612a23565b612445612a42565b61150d57604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b03841630146124c45760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c79206044820152603160f81b6064820152608401610b1c565b5f546001600160a01b038381169116146125165760405162461bcd60e51b815260206004820152601360248201527226bab9ba103ab9b2903130b9b2903a37b5b2b760691b6044820152606401610b1c565b5f5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb90604401611e0e565b6001600160a01b03841630146125b05760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c79206044820152601960f91b6064820152608401610b1c565b5f546001600160a01b038084169116036126075760405162461bcd60e51b815260206004820152601860248201527726bab9ba103ab9b29031bab9ba37b234b0b7103a37b5b2b760411b6044820152606401610b1c565b5f5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015612656573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267a9190613099565b506040516318950c7160e01b81526001600160a01b038481166004830152602482018390528316906318950c71906044015b5f604051808303815f87803b1580156126c3575f80fd5b505af115801561178d573d5f803e3d5ffd5b30330361271a5760405162461bcd60e51b81526020600482015260136024820152724f6e6c792065787465726e616c2063616c6c7360681b6044820152606401610b1c565b5f546001600160a01b038084169116036127715760405162461bcd60e51b815260206004820152601860248201527726bab9ba103ab9b29031bab9ba37b234b0b7103a37b5b2b760411b6044820152606401610b1c565b60405163c4652d8360e01b81526001600160a01b03858116600483015284811660248301526044820183905283169063c4652d83906064016126ac565b6001600160a01b038086165f908152600560209081526040808320888452825280832087851684528252808320938616835292905290812080548392906127f69084906130d7565b90915550506001600160a01b038086165f9081526007602090815260408083208884528252808320938716835292905290812080548392906120499084906130d7565b5f6128468585858561150f565b90505f61285f86612858876001613043565b8686611215565b90508181111561286c5750805b5f61287782846130d7565b905061289087612888886001613043565b87878561208d565b81156128a2576128a230858785612462565b846001600160a01b031686856001600160a01b03167f3ddb7f725ac69363a1df8296c965af4d268f31b082480dcd8419d284fb7fd34286866040516128f1929190918252602082015260400190565b60405180910390a450505050505050565b5f81815260018301602052604081205461294757508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610991565b505f610991565b806001600160a01b03163b5f0361298357604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610b1c565b5f8051602061312183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516129cd91906130ea565b5f60405180830381855af49150503d805f8114612a05576040519150601f19603f3d011682016040523d82523d5f602084013e612a0a565b606091505b5091509150612a1a858383612a5b565b95945050505050565b341561150d5760405163b398979f60e01b815260040160405180910390fd5b5f612a4b612055565b54600160401b900460ff16919050565b606082612a7057612a6b82612ab7565b6109c5565b8151158015612a8757506001600160a01b0384163b155b15612ab057604051639996b31560e01b81526001600160a01b0385166004820152602401610b1c565b50806109c5565b805115612ac75780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215612af0575f80fd5b81356001600160e01b0319811681146109c5575f80fd5b6001600160a01b0381168114611bf4575f80fd5b5f805f8060808587031215612b2e575f80fd5b8435612b3981612b07565b9350602085013592506040850135612b5081612b07565b91506060850135612b6081612b07565b939692955090935050565b5f805f60608486031215612b7d575f80fd5b8335612b8881612b07565b9250602084013591506040840135612b9f81612b07565b809150509250925092565b5f60208284031215612bba575f80fd5b81356109c581612b07565b602080825282518282018190525f918401906040840190835b81811015610f9a5783516001600160a01b0316835260209384019390920191600101612bde565b5f8060408385031215612c16575f80fd5b8235612c2181612b07565b946020939093013593505050565b5f60208284031215612c3f575f80fd5b5035919050565b5f8060408385031215612c57575f80fd5b823591506020830135612c6981612b07565b809150509250929050565b5f805f60608486031215612c86575f80fd5b8335612c9181612b07565b92506020840135612ca181612b07565b91506040840135612b9f81612b07565b5f8060408385031215612cc2575f80fd5b8235612ccd81612b07565b91506020830135612c6981612b07565b5f8083601f840112612ced575f80fd5b5081356001600160401b03811115612d03575f80fd5b6020830191508360208260051b8501011115612d1d575f80fd5b9250929050565b5f805f805f8060608789031215612d39575f80fd5b86356001600160401b03811115612d4e575f80fd5b612d5a89828a01612cdd565b90975095505060208701356001600160401b03811115612d78575f80fd5b612d8489828a01612cdd565b90955093505060408701356001600160401b03811115612da2575f80fd5b612dae89828a01612cdd565b979a9699509497509295939492505050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612de5575f80fd5b8235612df081612b07565b915060208301356001600160401b03811115612e0a575f80fd5b8301601f81018513612e1a575f80fd5b80356001600160401b03811115612e3357612e33612dc0565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612e6157612e61612dc0565b604052818152828201602001871015612e78575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f805f60608486031215612ea9575f80fd5b8335612eb481612b07565b92506020840135612ec481612b07565b929592945050506040919091013590565b5f805f805f805f806080898b031215612eec575f80fd5b88356001600160401b03811115612f01575f80fd5b612f0d8b828c01612cdd565b90995097505060208901356001600160401b03811115612f2b575f80fd5b612f378b828c01612cdd565b90975095505060408901356001600160401b03811115612f55575f80fd5b612f618b828c01612cdd565b90955093505060608901356001600160401b03811115612f7f575f80fd5b612f8b8b828c01612cdd565b999c989b5096995094979396929594505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f60408486031215612fe6575f80fd5b8335925060208401356001600160401b03811115613002575f80fd5b61300e86828701612cdd565b9497909650939450505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156109915761099161302f565b5f600182016130675761306761302f565b5060010190565b634e487b7160e01b5f52600160045260245ffd5b5f60208284031215613092575f80fd5b5051919050565b5f602082840312156130a9575f80fd5b815180151581146109c5575f80fd5b5f826130d257634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156109915761099161302f565b5f82518060208501845e5f92019182525091905056fedc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212205571cc039e7ccc6c1aa4d5cd15eca00c52dcb54a09336b63667b5653e3e51d0264736f6c634300081a0033","sourceMap":"766:27108:118:-:0;;;1171:4:22;1128:48;;766:27108:118;;;;;;;;;-1:-1:-1;1857:1:60;2061:7;:21;766:27108:118;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106102a5575f3560e01c80635e00bf461161016f578063a78d1fef116100d8578063c4d66de811610092578063d547741f1161006d578063d547741f146108a8578063d980b40d146108c7578063e6e3fb3a146108e6578063fc0c546a1461092b575f80fd5b8063c4d66de81461083c578063d1ba90ff1461085b578063d37304f814610889575f80fd5b8063a78d1fef14610763578063a885c97514610782578063a887b71c146107a1578063ad3cb1cc146107b5578063b1de97f7146107f2578063bf6eac2f1461081d575f80fd5b806386af70d11161012957806386af70d1146106a357806391d14854146106df57806392a2ebf3146106fe57806393dfb85c146107125780639db92f6814610731578063a217fddf14610750575f80fd5b80635e00bf46146105f357806360829f8a14610612578063771fcfc4146106315780637a997ab7146106505780637d93768b146106705780638129fc1c1461068f575f80fd5b806336568abe116102115780634f1ef286116101cb5780634f1ef2861461053b57806352d1902d1461054e57806355bdbe4c14610562578063574663a91461058157806357dd6a94146105a05780635c534359146105bf575f80fd5b806336568abe146104755780633bccf635146104945780633debeadc146104bf57806341566585146104de5780634234a479146104fd5780634e76a1391461051c575f80fd5b8063248a9ca311610262578063248a9ca3146103bb57806324fdfddf146103da578063286dd3f5146103f95780632f2ff15d14610418578063341d5ef51461043757806334eada3a14610456575f80fd5b806301ffc9a7146102a95780630c8f522f146102dd5780630ce52af5146103305780631789aeb41461034f5780631dc8b9491461037b57806322fceb751461039c575b5f80fd5b3480156102b4575f80fd5b506102c86102c3366004612ae0565b610961565b60405190151581526020015b60405180910390f35b3480156102e8575f80fd5b506103226102f7366004612b1b565b600560209081525f948552604080862082529385528385208152918452828420909152825290205481565b6040519081526020016102d4565b34801561033b575f80fd5b5061032261034a366004612b6b565b610997565b34801561035a575f80fd5b5061036e610369366004612baa565b6109cc565b6040516102d49190612bc5565b348015610386575f80fd5b5061039a610395366004612c05565b610ab6565b005b3480156103a7575f80fd5b506103226103b6366004612baa565b610bf2565b3480156103c6575f80fd5b506103226103d5366004612c2f565b610c0c565b3480156103e5575f80fd5b506103226103f4366004612b6b565b610c2c565b348015610404575f80fd5b5061039a610413366004612baa565b610ca3565b348015610423575f80fd5b5061039a610432366004612c46565b610cc8565b348015610442575f80fd5b5061036e610451366004612baa565b610cea565b348015610461575f80fd5b50610322610470366004612c74565b610dcd565b348015610480575f80fd5b5061039a61048f366004612c46565b610dea565b34801561049f575f80fd5b506103226104ae366004612baa565b60016020525f908152604090205481565b3480156104ca575f80fd5b506103226104d9366004612cb1565b610e22565b3480156104e9575f80fd5b5061039a6104f8366004612baa565b610e36565b348015610508575f80fd5b5061036e610517366004612baa565b610e57565b348015610527575f80fd5b5061039a610536366004612d24565b610fa5565b61039a610549366004612dd4565b611042565b348015610559575f80fd5b5061032261105d565b34801561056d575f80fd5b5061032261057c366004612c05565b611078565b34801561058c575f80fd5b5061032261059b366004612baa565b61110d565b3480156105ab575f80fd5b506103226105ba366004612baa565b61111b565b3480156105ca575f80fd5b506103226105d9366004612baa565b6001600160a01b03165f9081526001602052604090205490565b3480156105fe575f80fd5b5061039a61060d366004612b6b565b61114a565b34801561061d575f80fd5b5061039a61062c366004612e97565b611168565b34801561063c575f80fd5b5061032261064b366004612baa565b6111fd565b34801561065b575f80fd5b506103225f8051602061310183398151915281565b34801561067b575f80fd5b5061032261068a366004612b1b565b611215565b34801561069a575f80fd5b5061039a611252565b3480156106ae575f80fd5b506103226106bd366004612b6b565b600760209081525f938452604080852082529284528284209052825290205481565b3480156106ea575f80fd5b506102c86106f9366004612c46565b611347565b348015610709575f80fd5b5061039a61137d565b34801561071d575f80fd5b5061032261072c366004612b1b565b61150f565b34801561073c575f80fd5b5061032261074b366004612cb1565b61154c565b34801561075b575f80fd5b506103225f81565b34801561076e575f80fd5b5061032261077d366004612c74565b611560565b34801561078d575f80fd5b5061039a61079c366004612ed5565b611575565b3480156107ac575f80fd5b5061039a611797565b3480156107c0575f80fd5b506107e5604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102d49190612f9f565b3480156107fd575f80fd5b5061032261080c366004612baa565b60026020525f908152604090205481565b348015610828575f80fd5b5061039a610837366004612e97565b6117a9565b348015610847575f80fd5b5061039a610856366004612baa565b6119d4565b348015610866575f80fd5b506102c8610875366004612baa565b60086020525f908152604090205460ff1681565b348015610894575f80fd5b5061039a6108a3366004612fd4565b611ae3565b3480156108b3575f80fd5b5061039a6108c2366004612c46565b611b61565b3480156108d2575f80fd5b506103226108e1366004612baa565b611b7d565b3480156108f1575f80fd5b50610322610900366004612b1b565b600660209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610936575f80fd5b505f54610949906001600160a01b031681565b6040516001600160a01b0390911681526020016102d4565b5f6001600160e01b03198216637965db0b60e01b148061099157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001600160a01b038084165f9081526007602090815260408083208684528252808320938516835292905220545b9392505050565b6001600160a01b0381165f908152600360205260408120606091906109f090611bd6565b6001600160401b03811115610a0757610a07612dc0565b604051908082528060200260200182016040528015610a30578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600360205260409020610a5590611bd6565b811015610aaf576001600160a01b0384165f908152600360205260409020610a7d9082611bdf565b828281518110610a8f57610a8f61301b565b6001600160a01b0390921660209283029190910190910152600101610a35565b5092915050565b610abf82611b7d565b811115610b255760405162461bcd60e51b815260206004820152602960248201527f4e45575f45504f43485f4d5553545f42455f4c4553535f5448414e5f5052455360448201526808a9ca8be8aa09e86960bb1b60648201526084015b60405180910390fd5b610b2e82610bf2565b8111610b905760405162461bcd60e51b815260206004820152602b60248201527f4e45575f45504f43485f4d5553545f42455f4849474845525f5448414e5f435560448201526a0a4a48a9ca8be8aa09e86960ab1b6064820152608401610b1c565b336001600160a01b03831614610bd75760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610b1c565b6001600160a01b039091165f90815260026020526040902055565b6001600160a01b03165f9081526002602052604090205490565b5f9081525f80516020613141833981519152602052604090206001015490565b5f80805b6001600160a01b0386165f908152600460205260409020610c5090611bd6565b811015610c9a576001600160a01b0386165f908152600460205260409020610c869087908790610c809085611bdf565b8761150f565b610c909083613043565b9150600101610c30565b50949350505050565b5f610cad81611bea565b610cc45f8051602061310183398151915283611b61565b5050565b610cd182610c0c565b610cda81611bea565b610ce48383611bf7565b50505050565b6001600160a01b0381165f90815260046020526040812060609190610d0e90611bd6565b6001600160401b03811115610d2557610d25612dc0565b604051908082528060200260200182016040528015610d4e578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600460205260409020610d7390611bd6565b811015610aaf576001600160a01b0384165f908152600460205260409020610d9b9082611bdf565b828281518110610dad57610dad61301b565b6001600160a01b0390921660209283029190910190910152600101610d53565b5f610de284610ddb86610bf2565b8585611215565b949350505050565b6001600160a01b0381163314610e135760405163334bd91960e11b815260040160405180910390fd5b610e1d8282611c98565b505050565b5f6109c583610e3085610bf2565b84610c2c565b5f610e4081611bea565b610cc45f8051602061310183398151915283610cc8565b6001600160a01b0381165f90815260036020526040812060609190610e7b90611bd6565b90505f805b82811015610ed3576001600160a01b0385165f908152600360205260408120610ea99083611bdf565b90505f610eb68783610e22565b1115610eca5782610ec681613056565b9350505b50600101610e80565b505f816001600160401b03811115610eed57610eed612dc0565b604051908082528060200260200182016040528015610f16578160200160208202803683370190505b5090505f805b84811015610f9a576001600160a01b0387165f908152600360205260408120610f459083611bdf565b90505f610f528983610e22565b1115610f915780848481518110610f6b57610f6b61301b565b6001600160a01b039092166020928302919091019091015282610f8d81613056565b9350505b50600101610f1c565b509095945050505050565b610fad611d11565b5f5b8581101561102f5761102733888884818110610fcd57610fcd61301b565b9050602002016020810190610fe29190612baa565b858585818110610ff457610ff461301b565b90506020020160208101906110099190612baa565b88888681811061101b5761101b61301b565b90506020020135611d3b565b600101610faf565b5061103a6001600955565b505050505050565b61104a611e4e565b61105382611ef2565b610cc48282611efc565b5f611066611fb8565b505f8051602061312183398151915290565b5f8061108384610cea565b90505f61108f856109cc565b90505f805b8351811015611103575f5b83518110156110fa576110e688888785815181106110bf576110bf61301b565b60200260200101518785815181106110d9576110d961301b565b602002602001015161150f565b6110f09084613043565b925060010161109f565b50600101611094565b5095945050505050565b5f6109918261057c84610bf2565b5f61112582610bf2565b156111435761113382611b7d565b61113e906001613043565b610991565b5f92915050565b611152611d11565b61115e33848385611d3b565b610e1d6001600955565b5f8051602061310183398151915261117f81611bea565b611187611d11565b61119c84611194866111fd565b853386612001565b826001600160a01b03166111af856111fd565b60408051338152602081018690526001600160a01b038816917fd41c64546a5c34c283150998874c7ee0412c8954f57aef484c681f6e137827df910160405180910390a4610ce46001600955565b5f61120782610bf2565b156111435761113382610bf2565b6001600160a01b039384165f9081526006602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f61125b612055565b805490915060ff600160401b82041615906001600160401b03165f811580156112815750825b90505f826001600160401b0316600114801561129c5750303b155b9050811580156112aa575080155b156112c85760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff1916600117855583156112f257845460ff60401b1916600160401b1785555b6112fa61207d565b831561134057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f9182525f80516020613141833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611385611d11565b335f8181526008602052604090205460ff16156113b45760405162fe178760e01b815260040160405180910390fd5b6001600160a01b0381165f908152600860209081526040808320805460ff191660019081179091559091529020546113ee576113ee61306e565b6113f781611b7d565b6001600160a01b0382165f908152600260205260408120919091555b6001600160a01b0382165f90815260036020526040902061143390611bd6565b811015611501576001600160a01b0382165f90815260036020526040812061145b9083611bdf565b90505f5b6001600160a01b0384165f90815260046020526040902061147f90611bd6565b8110156114f7576001600160a01b0384165f9081526004602052604081206114a79083611bdf565b90505f6114b6865f848761150f565b90505f6114c287610bf2565b11156114ed575f6114d287610bf2565b11156114ed576114ed866114e588610bf2565b84878561208d565b505060010161145f565b5050600101611413565b505061150d6001600955565b565b6001600160a01b039384165f9081526005602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f6109c58361155a85610bf2565b84610997565b5f610de28461156e86610bf2565b858561150f565b61157d611d11565b5f5b85811015611782575f611646611607336115b98b8b878181106115a4576115a461301b565b90506020020160208101906103b69190612baa565b8d8d878181106115cb576115cb61301b565b90506020020160208101906115e09190612baa565b8c8c888181106115f2576115f261301b565b905060200201602081019061072c9190612baa565b61164188888681811061161c5761161c61301b565b905060200201358787878181106116355761163561301b565b90506020020135612118565b612118565b90506116a03089898581811061165e5761165e61301b565b90506020020160208101906116739190612baa565b8c8c868181106116855761168561301b565b905060200201602081019061169a9190612baa565b84612127565b611719336116ad33610bf2565b8c8c868181106116bf576116bf61301b565b90506020020160208101906116d49190612baa565b8b8b878181106116e6576116e661301b565b90506020020160208101906116fb9190612baa565b8a8a8881811061170d5761170d61301b565b90506020020135612194565b6117793361172633610bf2565b8c8c868181106117385761173861301b565b905060200201602081019061174d9190612baa565b8b8b8781811061175f5761175f61301b565b90506020020160208101906117749190612baa565b6121d4565b5060010161157f565b5061178d6001600955565b5050505050505050565b61150d336117a433610bf2565b612246565b5f805160206131018339815191526117c081611bea565b6117c8611d11565b6001600160a01b0384165f9081526003602052604090206117e99033612363565b505f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611830573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118549190613082565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303815f875af11580156118a7573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118cb9190613099565b506118d68382613043565b5f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa15801561191b573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061193f9190613082565b1461195d57604051631910d68360e21b815260040160405180910390fd5b6119728561196a876111fd565b86338761208d565b836001600160a01b0316611985866111fd565b60408051338152602081018790526001600160a01b038916917f7be65c2ae4d3c544de23b1db5bea4d541c02b93a5f4302852f4dc9880e0cb554910160405180910390a450610ce46001600955565b5f6119dd612055565b805490915060ff600160401b82041615906001600160401b03165f81158015611a035750825b90505f826001600160401b03166001148015611a1e5750303b155b905081158015611a2c575080155b15611a4a5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611a7457845460ff60401b1916600160401b1785555b611a7c612377565b5f80546001600160a01b0319166001600160a01b038816179055831561103a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b611aeb611d11565b335f8181526001602052604081208590555b82811015611b5557611b4c848483818110611b1a57611b1a61301b565b9050602002016020810190611b2f9190612baa565b6001600160a01b0384165f90815260046020526040902090612363565b50600101611afd565b5050610e1d6001600955565b611b6a82610c0c565b611b7381611bea565b610ce48383611c98565b6001600160a01b0381165f908152600160205260408120548103611bb45760405163143c378b60e01b815260040160405180910390fd5b6001600160a01b0382165f9081526001602052604090205461099190426130b8565b5f610991825490565b5f6109c58383612389565b611bf481336123af565b50565b5f5f80516020613141833981519152611c108484611347565b611c8f575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611c453390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610991565b5f915050610991565b5f5f80516020613141833981519152611cb18484611347565b15611c8f575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610991565b600260095403611d3457604051633ee5aeb560e01b815260040160405180910390fd5b6002600955565b303303611d805760405162461bcd60e51b81526020600482015260136024820152724f6e6c792065787465726e616c2063616c6c7360681b6044820152606401610b1c565b5f546001600160a01b03838116911614611dd25760405162461bcd60e51b815260206004820152601360248201527226bab9ba103ab9b2903130b9b2903a37b5b2b760691b6044820152606401610b1c565b5f546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201849052909116906323b872dd906064015b6020604051808303815f875af1158015611e2a573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906113409190613099565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611ed457507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ec85f80516020613121833981519152546001600160a01b031690565b6001600160a01b031614155b1561150d5760405163703e46dd60e11b815260040160405180910390fd5b5f610cc481611bea565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611f56575060408051601f3d908101601f19168201909252611f5391810190613082565b60015b611f7e57604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610b1c565b5f805160206131218339815191528114611fae57604051632a87526960e21b815260048101829052602401610b1c565b610e1d83836123e8565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461150d5760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b038086165f90815260066020908152604080832088845282528083208785168452825280832093861683529290529081208054839290612049908490613043565b90915550505050505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00610991565b61208561243d565b61150d612377565b6001600160a01b038086165f908152600560209081526040808320888452825280832087851684528252808320938616835292905290812080548392906120d5908490613043565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290612049908490613043565b5f8282188284100282186109c5565b306001600160a01b03851603612168575f546001600160a01b0380841691160361215c5761215784848484612462565b610ce4565b6121578484848461254e565b5f546001600160a01b038084169116036121885761215784848484611d3b565b610ce4848484846126d5565b835f6121a28783878761150f565b9050828110156121be576121b987838787856127ae565b6121cb565b6121cb87838787876127ae565b50505050505050565b5f6121e18585858561150f565b90505f6121ef856001613043565b90505f6121fe87838787611215565b9050828111156121cb576001600160a01b038088165f9081526006602090815260408083208684528252808320848a16845282528083209388168352929052208390556121cb565b5f5b6001600160a01b0383165f90815260036020526040902061226890611bd6565b8110156122fd576001600160a01b0383165f9081526003602052604081206122909083611bdf565b90505f5b6001600160a01b0385165f9081526004602052604090206122b490611bd6565b8110156122f3576001600160a01b0385165f9081526004602052604081206122dc9083611bdf565b90506122ea86868386612839565b50600101612294565b5050600101612248565b50612309816001613043565b6001600160a01b0383165f81815260026020526040908190209290925590517fb693195b5ff3e376f8b562486abc516e10fe2467b75f0e4165e79cf4ab70dc41906123579084815260200190565b60405180910390a25050565b5f6109c5836001600160a01b038416612902565b61237f61243d565b611bf45f33611bf7565b5f825f01828154811061239e5761239e61301b565b905f5260205f200154905092915050565b6123b98282611347565b610cc45760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610b1c565b6123f18261294e565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561243557610e1d82826129b1565b610cc4612a23565b612445612a42565b61150d57604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b03841630146124c45760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c79206044820152603160f81b6064820152608401610b1c565b5f546001600160a01b038381169116146125165760405162461bcd60e51b815260206004820152601360248201527226bab9ba103ab9b2903130b9b2903a37b5b2b760691b6044820152606401610b1c565b5f5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb90604401611e0e565b6001600160a01b03841630146125b05760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c79206044820152601960f91b6064820152608401610b1c565b5f546001600160a01b038084169116036126075760405162461bcd60e51b815260206004820152601860248201527726bab9ba103ab9b29031bab9ba37b234b0b7103a37b5b2b760411b6044820152606401610b1c565b5f5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af1158015612656573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061267a9190613099565b506040516318950c7160e01b81526001600160a01b038481166004830152602482018390528316906318950c71906044015b5f604051808303815f87803b1580156126c3575f80fd5b505af115801561178d573d5f803e3d5ffd5b30330361271a5760405162461bcd60e51b81526020600482015260136024820152724f6e6c792065787465726e616c2063616c6c7360681b6044820152606401610b1c565b5f546001600160a01b038084169116036127715760405162461bcd60e51b815260206004820152601860248201527726bab9ba103ab9b29031bab9ba37b234b0b7103a37b5b2b760411b6044820152606401610b1c565b60405163c4652d8360e01b81526001600160a01b03858116600483015284811660248301526044820183905283169063c4652d83906064016126ac565b6001600160a01b038086165f908152600560209081526040808320888452825280832087851684528252808320938616835292905290812080548392906127f69084906130d7565b90915550506001600160a01b038086165f9081526007602090815260408083208884528252808320938716835292905290812080548392906120499084906130d7565b5f6128468585858561150f565b90505f61285f86612858876001613043565b8686611215565b90508181111561286c5750805b5f61287782846130d7565b905061289087612888886001613043565b87878561208d565b81156128a2576128a230858785612462565b846001600160a01b031686856001600160a01b03167f3ddb7f725ac69363a1df8296c965af4d268f31b082480dcd8419d284fb7fd34286866040516128f1929190918252602082015260400190565b60405180910390a450505050505050565b5f81815260018301602052604081205461294757508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610991565b505f610991565b806001600160a01b03163b5f0361298357604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610b1c565b5f8051602061312183398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516129cd91906130ea565b5f60405180830381855af49150503d805f8114612a05576040519150601f19603f3d011682016040523d82523d5f602084013e612a0a565b606091505b5091509150612a1a858383612a5b565b95945050505050565b341561150d5760405163b398979f60e01b815260040160405180910390fd5b5f612a4b612055565b54600160401b900460ff16919050565b606082612a7057612a6b82612ab7565b6109c5565b8151158015612a8757506001600160a01b0384163b155b15612ab057604051639996b31560e01b81526001600160a01b0385166004820152602401610b1c565b50806109c5565b805115612ac75780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215612af0575f80fd5b81356001600160e01b0319811681146109c5575f80fd5b6001600160a01b0381168114611bf4575f80fd5b5f805f8060808587031215612b2e575f80fd5b8435612b3981612b07565b9350602085013592506040850135612b5081612b07565b91506060850135612b6081612b07565b939692955090935050565b5f805f60608486031215612b7d575f80fd5b8335612b8881612b07565b9250602084013591506040840135612b9f81612b07565b809150509250925092565b5f60208284031215612bba575f80fd5b81356109c581612b07565b602080825282518282018190525f918401906040840190835b81811015610f9a5783516001600160a01b0316835260209384019390920191600101612bde565b5f8060408385031215612c16575f80fd5b8235612c2181612b07565b946020939093013593505050565b5f60208284031215612c3f575f80fd5b5035919050565b5f8060408385031215612c57575f80fd5b823591506020830135612c6981612b07565b809150509250929050565b5f805f60608486031215612c86575f80fd5b8335612c9181612b07565b92506020840135612ca181612b07565b91506040840135612b9f81612b07565b5f8060408385031215612cc2575f80fd5b8235612ccd81612b07565b91506020830135612c6981612b07565b5f8083601f840112612ced575f80fd5b5081356001600160401b03811115612d03575f80fd5b6020830191508360208260051b8501011115612d1d575f80fd5b9250929050565b5f805f805f8060608789031215612d39575f80fd5b86356001600160401b03811115612d4e575f80fd5b612d5a89828a01612cdd565b90975095505060208701356001600160401b03811115612d78575f80fd5b612d8489828a01612cdd565b90955093505060408701356001600160401b03811115612da2575f80fd5b612dae89828a01612cdd565b979a9699509497509295939492505050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612de5575f80fd5b8235612df081612b07565b915060208301356001600160401b03811115612e0a575f80fd5b8301601f81018513612e1a575f80fd5b80356001600160401b03811115612e3357612e33612dc0565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612e6157612e61612dc0565b604052818152828201602001871015612e78575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f805f60608486031215612ea9575f80fd5b8335612eb481612b07565b92506020840135612ec481612b07565b929592945050506040919091013590565b5f805f805f805f806080898b031215612eec575f80fd5b88356001600160401b03811115612f01575f80fd5b612f0d8b828c01612cdd565b90995097505060208901356001600160401b03811115612f2b575f80fd5b612f378b828c01612cdd565b90975095505060408901356001600160401b03811115612f55575f80fd5b612f618b828c01612cdd565b90955093505060608901356001600160401b03811115612f7f575f80fd5b612f8b8b828c01612cdd565b999c989b5096995094979396929594505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f60408486031215612fe6575f80fd5b8335925060208401356001600160401b03811115613002575f80fd5b61300e86828701612cdd565b9497909650939450505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156109915761099161302f565b5f600182016130675761306761302f565b5060010190565b634e487b7160e01b5f52600160045260245ffd5b5f60208284031215613092575f80fd5b5051919050565b5f602082840312156130a9575f80fd5b815180151581146109c5575f80fd5b5f826130d257634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156109915761099161302f565b5f82518060208501845e5f92019182525091905056fedc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a26469706673582212205571cc039e7ccc6c1aa4d5cd15eca00c52dcb54a09336b63667b5653e3e51d0264736f6c634300081a0033","sourceMap":"766:27108:118:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:20;;;;;;;;;;-1:-1:-1;3443:202:20;;;;;:::i;:::-;;:::i;:::-;;;470:14:147;;463:22;445:41;;433:2;418:18;3443:202:20;;;;;;;;1474:208:119;;;;;;;;;;-1:-1:-1;1474:208:119;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1434:25:147;;;1422:2;1407:18;1474:208:119;1288:177:147;10872:215:118;;;;;;;;;;-1:-1:-1;10872:215:118;;;;;:::i;:::-;;:::i;2321:419::-;;;;;;;;;;-1:-1:-1;2321:419:118;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4287:406::-;;;;;;;;;;-1:-1:-1;4287:406:118;;;;;:::i;:::-;;:::i;:::-;;8307:134;;;;;;;;;;-1:-1:-1;8307:134:118;;;;;:::i;:::-;;:::i;4759:191:20:-;;;;;;;;;;-1:-1:-1;4759:191:20;;;;;:::i;:::-;;:::i;11409:381:118:-;;;;;;;;;;-1:-1:-1;11409:381:118;;;;;:::i;:::-;;:::i;26739:151::-;;;;;;;;;;-1:-1:-1;26739:151:118;;;;;:::i;:::-;;:::i;5246:136:20:-;;;;;;;;;;-1:-1:-1;5246:136:20;;;;;:::i;:::-;;:::i;1686:554:118:-;;;;;;;;;;-1:-1:-1;1686:554:118;;;;;:::i;:::-;;:::i;10462:330::-;;;;;;;;;;-1:-1:-1;10462:330:118;;;;;:::i;:::-;;:::i;6348:245:20:-;;;;;;;;;;-1:-1:-1;6348:245:20;;;;;:::i;:::-;;:::i;650:77:119:-;;;;;;;;;;-1:-1:-1;650:77:119;;;;;:::i;:::-;;;;;;;;;;;;;;11796:192:118;;;;;;;;;;-1:-1:-1;11796:192:118;;;;;:::i;:::-;;:::i;26593:140::-;;;;;;;;;;-1:-1:-1;26593:140:118;;;;;:::i;:::-;;:::i;2827:1107::-;;;;;;;;;;-1:-1:-1;2827:1107:118;;;;;:::i;:::-;;:::i;25966:457::-;;;;;;;;;;-1:-1:-1;25966:457:118;;;;;:::i;:::-;;:::i;4161:214:22:-;;;;;;:::i;:::-;;:::i;3708:134::-;;;;;;;;;;;;;:::i;26982:542:118:-;;;;;;;;;;-1:-1:-1;26982:542:118;;;;;:::i;:::-;;:::i;27695:176::-;;;;;;;;;;-1:-1:-1;27695:176:118;;;;;:::i;:::-;;:::i;9069:182::-;;;;;;;;;;-1:-1:-1;9069:182:118;;;;;:::i;:::-;;:::i;4001:125::-;;;;;;;;;;-1:-1:-1;4001:125:118;;;;;:::i;:::-;-1:-1:-1;;;;;4090:29:118;4064:7;4090:29;;;:21;:29;;;;;;;4001:125;25461:244;;;;;;;;;;-1:-1:-1;25461:244:118;;;;;:::i;:::-;;:::i;13972:972::-;;;;;;;;;;-1:-1:-1;13972:972:118;;;;;:::i;:::-;;:::i;8661:180::-;;;;;;;;;;-1:-1:-1;8661:180:118;;;;;:::i;:::-;;:::i;2462:68:119:-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2462:68:119;;10109:254:118;;;;;;;;;;-1:-1:-1;10109:254:118;;;;;:::i;:::-;;:::i;514:86:120:-;;;;;;;;;;;;;:::i;2186:152:119:-;;;;;;;;;;-1:-1:-1;2186:152:119;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3732:207:20;;;;;;;;;;-1:-1:-1;3732:207:20;;;;;:::i;:::-;;:::i;4699:1563:118:-;;;;;;;;;;;;;:::i;9342:250::-;;;;;;;;;;-1:-1:-1;9342:250:118;;;;;:::i;:::-;;:::i;11173:230::-;;;;;;;;;;-1:-1:-1;11173:230:118;;;;;:::i;:::-;;:::i;2317:49:20:-;;;;;;;;;;-1:-1:-1;2317:49:20;2362:4;2317:49;;9689:326:118;;;;;;;;;;-1:-1:-1;9689:326:118;;;;;:::i;:::-;;:::i;19744:1588::-;;;;;;;;;;-1:-1:-1;19744:1588:118;;;;;:::i;:::-;;:::i;17307:108::-;;;;;;;;;;;;;:::i;1819:58:22:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:22;;;;;;;;;;;;:::i;977:93:119:-;;;;;;;;;;-1:-1:-1;977:93:119;;;;;:::i;:::-;;;;;;;;;;;;;;12036:1885:118;;;;;;;;;;-1:-1:-1;12036:1885:118;;;;;:::i;:::-;;:::i;1051:125::-;;;;;;;;;;-1:-1:-1;1051:125:118;;;;;:::i;:::-;;:::i;2345:60:119:-;;;;;;;;;;-1:-1:-1;2345:60:119;;;;;:::i;:::-;;;;;;;;;;;;;;;;1245:359:118;;;;;;;;;;-1:-1:-1;1245:359:118;;;;;:::i;:::-;;:::i;5662:138:20:-;;;;;;;;;;-1:-1:-1;5662:138:20;;;;;:::i;:::-;;:::i;8002:226:118:-;;;;;;;;;;-1:-1:-1;8002:226:118;;;;;:::i;:::-;;:::i;1832:210:119:-;;;;;;;;;;-1:-1:-1;1832:210:119;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;471:19;;;;;;;;;;-1:-1:-1;471:19:119;;;;-1:-1:-1;;;;;471:19:119;;;;;;-1:-1:-1;;;;;11558:32:147;;;11540:51;;11528:2;11513:18;471:19:119;11378:219:147;3443:202:20;3528:4;-1:-1:-1;;;;;;3551:47:20;;-1:-1:-1;;;3551:47:20;;:87;;-1:-1:-1;;;;;;;;;;1134:40:28;;;3602:36:20;3544:94;3443:202;-1:-1:-1;;3443:202:20:o;10872:215:118:-;-1:-1:-1;;;;;11026:36:118;;;11000:7;11026:36;;;:28;:36;;;;;;;;:43;;;;;;;;:54;;;;;;;;;;10872:215;;;;;;:::o;2321:419::-;-1:-1:-1;;;;;2488:35:118;;2432:26;2488:35;;;:27;:35;;;;;2404:16;;2432:26;2488:44;;:42;:44::i;:::-;-1:-1:-1;;;;;2461:81:118;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2461:81:118;;2432:110;;2557:9;2552:156;-1:-1:-1;;;;;2576:35:118;;;;;;:27;:35;;;;;:44;;:42;:44::i;:::-;2572:1;:48;2552:156;;;-1:-1:-1;;;;;2656:35:118;;;;;;:27;:35;;;;;:41;;2695:1;2656:38;:41::i;:::-;2641:9;2651:1;2641:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2641:56:118;;;:12;;;;;;;;;;;:56;2622:3;;2552:156;;;-1:-1:-1;2724:9:118;2321:419;-1:-1:-1;;2321:419:118:o;4287:406::-;4387:38;4417:6;4387:21;:38::i;:::-;4375:8;:50;;4367:104;;;;-1:-1:-1;;;4367:104:118;;11936:2:147;4367:104:118;;;11918:21:147;11975:2;11955:18;;;11948:30;12014:34;11994:18;;;11987:62;-1:-1:-1;;;12065:18:147;;;12058:39;12114:19;;4367:104:118;;;;;;;;;4500:25;4518:6;4500:17;:25::i;:::-;4489:8;:36;4481:92;;;;-1:-1:-1;;;4481:92:118;;12346:2:147;4481:92:118;;;12328:21:147;12385:2;12365:18;;;12358:30;12424:34;12404:18;;;12397:62;-1:-1:-1;;;12475:18:147;;;12468:41;12526:19;;4481:92:118;12144:407:147;4481:92:118;4591:10;-1:-1:-1;;;;;4591:20:118;;;4583:45;;;;-1:-1:-1;;;4583:45:118;;12758:2:147;4583:45:118;;;12740:21:147;12797:2;12777:18;;;12770:30;-1:-1:-1;;;12816:18:147;;;12809:42;12868:18;;4583:45:118;12556:336:147;4583:45:118;-1:-1:-1;;;;;4638:37:118;;;;;;;:29;:37;;;;;:48;4287:406::o;8307:134::-;-1:-1:-1;;;;;8397:37:118;8371:7;8397:37;;;:29;:37;;;;;;;8307:134::o;4759:191:20:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:20;;;;;:24;;;;4759:191::o;11409:381:118:-;11505:7;;;11559:195;-1:-1:-1;;;;;11583:36:118;;;;;;:28;:36;;;;;:45;;:43;:45::i;:::-;11579:1;:49;11559:195;;;-1:-1:-1;;;;;11690:36:118;;;;;;:28;:36;;;;;11666:77;;11675:6;;11683:5;;11690:42;;11730:1;11690:39;:42::i;:::-;11734:8;11666;:77::i;:::-;11649:94;;;;:::i;:::-;;-1:-1:-1;11630:3:118;;11559:195;;;-1:-1:-1;11770:13:118;11409:381;-1:-1:-1;;;;11409:381:118:o;26739:151::-;2362:4:20;3191:16;2362:4;3191:10;:16::i;:::-;26851:32:118::1;-1:-1:-1::0;;;;;;;;;;;26878:4:118::1;26851:10;:32::i;:::-;26739:151:::0;;:::o;5246:136:20:-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;1686:554:118:-;-1:-1:-1;;;;;1983:36:118;;1926:27;1983:36;;;:28;:36;;;;;1770:16;;1926:27;1983:45;;:43;:45::i;:::-;-1:-1:-1;;;;;1956:82:118;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1956:82:118;;1926:112;;2053:9;2048:159;-1:-1:-1;;;;;2072:36:118;;;;;;:28;:36;;;;;:45;;:43;:45::i;:::-;2068:1;:49;2048:159;;;-1:-1:-1;;;;;2154:36:118;;;;;;:28;:36;;;;;:42;;2194:1;2154:39;:42::i;:::-;2138:10;2149:1;2138:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2138:58:118;;;:13;;;;;;;;;;;:58;2119:3;;2048:159;;10462:330;10603:7;10641:144;10669:6;10693:25;10711:6;10693:17;:25::i;:::-;10736:9;10763:8;10641:10;:144::i;:::-;10622:163;10462:330;-1:-1:-1;;;;10462:330:118:o;6348:245:20:-;-1:-1:-1;;;;;6441:34:20;;966:10:25;6441:34:20;6437:102;;6498:30;;-1:-1:-1;;;6498:30:20;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;11796:192:118:-;11894:7;11920:61;11937:6;11945:25;11963:6;11945:17;:25::i;:::-;11972:8;11920:16;:61::i;26593:140::-;2362:4:20;3191:16;2362:4;3191:10;:16::i;:::-;26695:31:118::1;-1:-1:-1::0;;;;;;;;;;;26721:4:118::1;26695:9;:31::i;2827:1107::-:0;-1:-1:-1;;;;;3022:35:118;;2997:22;3022:35;;;:27;:35;;;;;2923:16;;2997:22;3022:44;;:42;:44::i;:::-;2997:69;;3123:27;3169:9;3164:258;3188:14;3184:1;:18;3164:258;;;-1:-1:-1;;;;;3242:35:118;;3223:16;3242:35;;;:27;:35;;;;;:41;;3281:1;3242:38;:41::i;:::-;3223:60;;3355:1;3301:51;3335:6;3343:8;3301:33;:51::i;:::-;:55;3297:115;;;3376:21;;;;:::i;:::-;;;;3297:115;-1:-1:-1;3204:3:118;;3164:258;;;;3476:32;3525:19;-1:-1:-1;;;;;3511:34:118;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3511:34:118;;3476:69;;3555:19;3593:9;3588:307;3612:14;3608:1;:18;3588:307;;;-1:-1:-1;;;;;3666:35:118;;3647:16;3666:35;;;:27;:35;;;;;:41;;3705:1;3666:38;:41::i;:::-;3647:60;;3779:1;3725:51;3759:6;3767:8;3725:33;:51::i;:::-;:55;3721:164;;;3831:8;3800:15;3816:11;3800:28;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3800:39:118;;;:28;;;;;;;;;;;:39;3857:13;;;;:::i;:::-;;;;3721:164;-1:-1:-1;3628:3:118;;3588:307;;;-1:-1:-1;3912:15:118;;2827:1107;-1:-1:-1;;;;;2827:1107:118:o;25966:457::-;2500:21:60;:19;:21::i;:::-;26265:9:118::1;26260:157;26280:20:::0;;::::1;26260:157;;;26321:85;26354:10;26366:9;;26376:1;26366:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26380:10;;26391:1;26380:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26395:7;;26403:1;26395:10;;;;;;;:::i;:::-;;;;;;;26321:32;:85::i;:::-;26302:3;;26260:157;;;;2542:20:60::0;1857:1;3068:7;:21;2888:208;2542:20;25966:457:118;;;;;;:::o;4161:214:22:-;2655:13;:11;:13::i;:::-;4276:36:::1;4294:17;4276;:36::i;:::-;4322:46;4344:17;4363:4;4322:21;:46::i;3708:134::-:0;3777:7;2926:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3708:134:22;:::o;26982:542:118:-;27081:7;27100:27;27130:31;27154:6;27130:23;:31::i;:::-;27100:61;;27171:26;27200:30;27223:6;27200:22;:30::i;:::-;27171:59;;27240:18;27278:9;27273:218;27297:10;:17;27293:1;:21;27273:218;;;27340:9;27335:146;27359:9;:16;27355:1;:20;27335:146;;;27414:52;27423:6;27431:5;27438:10;27449:1;27438:13;;;;;;;;:::i;:::-;;;;;;;27453:9;27463:1;27453:12;;;;;;;;:::i;:::-;;;;;;;27414:8;:52::i;:::-;27400:66;;;;:::i;:::-;;-1:-1:-1;27377:3:118;;27335:146;;;-1:-1:-1;27316:3:118;;27273:218;;;-1:-1:-1;27507:10:118;26982:542;-1:-1:-1;;;;;26982:542:118:o;27695:176::-;27788:7;27814:50;27830:6;27838:25;27856:6;27838:17;:25::i;9069:182::-;9148:7;9174:25;9192:6;9174:17;:25::i;:::-;:30;:70;;9211:29;9233:6;9211:21;:29::i;:::-;:33;;9243:1;9211:33;:::i;:::-;9174:70;;;9207:1;9167:77;9069:182;-1:-1:-1;;9069:182:118:o;25461:244::-;2500:21:60;:19;:21::i;:::-;25625:73:118::1;25658:10;25670:8;25680:9;25691:6;25625:32;:73::i;:::-;2542:20:60::0;1857:1;3068:7;:21;2888:208;13972:972:118;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;2500:21:60::1;:19;:21::i;:::-;14448:304:118::2;14473:6;14633:42;14668:6;14633:34;:42::i;:::-;14689:9;14712:10;14736:6;14448:11;:304::i;:::-;14874:9;-1:-1:-1::0;;;;;14768:169:118::2;14818:42;14853:6;14818:34;:42::i;:::-;14768:169;::::0;;14897:10:::2;13473:51:147::0;;13555:2;13540:18;;13533:34;;;-1:-1:-1;;;;;14768:169:118;::::2;::::0;::::2;::::0;13446:18:147;14768:169:118::2;;;;;;;2542:20:60::1;1857:1:::0;3068:7;:21;2888:208;8661:180:118;8742:7;8768:25;8786:6;8768:17;:25::i;:::-;:30;:66;;8805:25;8823:6;8805:17;:25::i;10109:254::-;-1:-1:-1;;;;;10282:46:118;;;10256:7;10282:46;;;:38;:46;;;;;;;;:53;;;;;;;;;:64;;;;;;;;;;;:74;;;;;;;;;;;;10109:254::o;514:86:120:-;4158:30:21;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:21;-1:-1:-1;;;4302:15:21;;;4301:16;;-1:-1:-1;;;;;4348:14:21;4279:19;4724:16;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4788:11;-1:-1:-1;;;;;4788:16:21;4803:1;4788:16;:50;;;;-1:-1:-1;4816:4:21;4808:25;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;-1:-1:-1;;;4906:23:21;;;;;;;;;;;4849:91;4949:18;;-1:-1:-1;;4949:18:21;4966:1;4949:18;;;4977:67;;;;5011:22;;-1:-1:-1;;;;5011:22:21;-1:-1:-1;;;5011:22:21;;;4977:67;573:20:120::1;:18;:20::i;:::-;5068:14:21::0;5064:101;;;5098:23;;-1:-1:-1;;;;5098:23:21;;;5140:14;;-1:-1:-1;13731:50:147;;5140:14:21;;13719:2:147;13704:18;5140:14:21;;;;;;;5064:101;4092:1079;;;;;514:86:120:o;3732:207:20:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:20;;;;;;;;-1:-1:-1;;;;;3901:31:20;;;;;;;;;;;;;;;3732:207::o;4699:1563:118:-;2500:21:60;:19;:21::i;:::-;4779:10:118::1;4762:14;4804:29:::0;;;:21:::1;:29;::::0;;;;;::::1;;4800:66;;;4842:24;;-1:-1:-1::0;;;4842:24:118::1;;;;;;;;;;;4800:66;-1:-1:-1::0;;;;;4876:29:118;::::1;;::::0;;;:21:::1;:29;::::0;;;;;;;:36;;-1:-1:-1;;4876:36:118::1;4908:4;4876:36:::0;;::::1;::::0;;;4938:29;;;;;;4931:41:::1;;;;:::i;:::-;5094:29;5116:6;5094:21;:29::i;:::-;-1:-1:-1::0;;;;;5054:37:118;::::1;;::::0;;;:29:::1;:37;::::0;;;;:69;;;;5134:1122:::1;-1:-1:-1::0;;;;;5158:35:118;::::1;;::::0;;;:27:::1;:35;::::0;;;;:44:::1;::::0;:42:::1;:44::i;:::-;5154:1;:48;5134:1122;;;-1:-1:-1::0;;;;;5242:35:118;::::1;5223:16;5242:35:::0;;;:27:::1;:35;::::0;;;;:41:::1;::::0;5281:1;5242:38:::1;:41::i;:::-;5223:60;;5303:9;5298:952;-1:-1:-1::0;;;;;5322:36:118;::::1;;::::0;;;:28:::1;:36;::::0;;;;:45:::1;::::0;:43:::1;:45::i;:::-;5318:1;:49;5298:952;;;-1:-1:-1::0;;;;;5412:36:118;::::1;5392:17;5412:36:::0;;;:28:::1;:36;::::0;;;;:42:::1;::::0;5452:1;5412:39:::1;:42::i;:::-;5392:62;;5531:21;5555:138;5585:6;5613:1;5636:9;5667:8;5555;:138::i;:::-;5531:162;;5907:1;5879:25;5897:6;5879:17;:25::i;:::-;:29;5875:365;;;5960:1;5932:25;5950:6;5932:17;:25::i;:::-;:29;5928:298;;;5985:222;6020:6;6052:25;6070:6;6052:17;:25::i;:::-;6103:9;6138:8;6172:13;5985:9;:222::i;:::-;-1:-1:-1::0;;5369:3:118::1;;5298:952;;;-1:-1:-1::0;;5204:3:118::1;;5134:1122;;;;4752:1510;2542:20:60::0;1857:1;3068:7;:21;2888:208;2542:20;4699:1563:118:o;9342:250::-;-1:-1:-1;;;;;9513:44:118;;;9487:7;9513:44;;;:36;:44;;;;;;;;:51;;;;;;;;;:62;;;;;;;;;;;:72;;;;;;;;;;;;9342:250::o;11173:230::-;11295:7;11333:63;11351:6;11359:25;11377:6;11359:17;:25::i;:::-;11386:9;11333:17;:63::i;9689:326::-;9828:7;9866:142;9892:6;9916:25;9934:6;9916:17;:25::i;:::-;9959:9;9986:8;9866;:142::i;19744:1588::-;2500:21:60;:19;:21::i;:::-;19955:9:118::1;19950:1376;19970:20:::0;;::::1;19950:1376;;;20238:20;20261:276;20287:180;20317:10;20349:31;20367:9;;20377:1;20367:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;20349:31::-;20402:10;;20413:1;20402:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20437:9;;20447:1;20437:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;20287:180::-;20485:38;20494:7;;20502:1;20494:10;;;;;;;:::i;:::-;;;;;;;20506:13;;20520:1;20506:16;;;;;;;:::i;:::-;;;;;;;20485:8;:38::i;:::-;20261:8;:276::i;:::-;20238:299;;20551:238;20601:4;20702:9;;20712:1;20702:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20732:10;;20743:1;20732:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20763:12;20551:24;:238::i;:::-;20948:189;20977:10;21005:29;21023:10;21005:17;:29::i;:::-;21052:10;;21063:1;21052:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21083:9;;21093:1;21083:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21113:7;;21121:1;21113:10;;;;;;;:::i;:::-;;;;;;;20948:11;:189::i;:::-;21152:163;21183:10;21211:29;21229:10;21211:17;:29::i;:::-;21258:10;;21269:1;21258:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21289:9;;21299:1;21289:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21152:13;:163::i;:::-;-1:-1:-1::0;19992:3:118::1;;19950:1376;;;;2542:20:60::0;1857:1;3068:7;:21;2888:208;2542:20;19744:1588:118;;;;;;;;:::o;17307:108::-;17351:57;17366:10;17378:29;17396:10;17378:17;:29::i;:::-;17351:14;:57::i;12036:1885::-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;2500:21:60::1;:19;:21::i;:::-;-1:-1:-1::0;;;;;12241:35:118;::::2;;::::0;;;:27:::2;:35;::::0;;;;:51:::2;::::0;12281:10:::2;12241:39;:51::i;:::-;-1:-1:-1::0;12666:21:118::2;12690:5:::0;;:30:::2;::::0;-1:-1:-1;;;12690:30:118;;12714:4:::2;12690:30;::::0;::::2;11540:51:147::0;-1:-1:-1;;;;;12690:5:118;;::::2;::::0;:15:::2;::::0;11513:18:147;;12690:30:118::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13009:57;::::0;-1:-1:-1;;;13009:57:118;;13032:10:::2;13009:57;::::0;::::2;14523:51:147::0;13052:4:118::2;14590:18:147::0;;;14583:60;14659:18;;;14652:34;;;12666:54:118;;-1:-1:-1;;;;;;13009:22:118;::::2;::::0;::::2;::::0;14496:18:147;;13009:57:118::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;13199:22:118::2;13215:6:::0;13199:13;:22:::2;:::i;:::-;13165:5;::::0;:30:::2;::::0;-1:-1:-1;;;13165:30:118;;13189:4:::2;13165:30;::::0;::::2;11540:51:147::0;-1:-1:-1;;;;;13165:5:118;;::::2;::::0;:15:::2;::::0;11513:18:147;;13165:30:118::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;13161:114;;13242:33;;-1:-1:-1::0;;;13242:33:118::2;;;;;;;;;;;13161:114;13352:311;13375:6;13535:42;13570:6;13535:34;:42::i;:::-;13599:9;13623:10;13647:6;13352:9;:311::i;:::-;13850:9;-1:-1:-1::0;;;;;13738:176:118::2;13786:42;13821:6;13786:34;:42::i;:::-;13738:176;::::0;;13874:10:::2;13473:51:147::0;;13555:2;13540:18;;13533:34;;;-1:-1:-1;;;;;13738:176:118;::::2;::::0;::::2;::::0;13446:18:147;13738:176:118::2;;;;;;;12178:1743;2542:20:60::1;1857:1:::0;3068:7;:21;2888:208;1051:125:118;4158:30:21;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:21;-1:-1:-1;;;4302:15:21;;;4301:16;;-1:-1:-1;;;;;4348:14:21;4279:19;4724:16;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4788:11;-1:-1:-1;;;;;4788:16:21;4803:1;4788:16;:50;;;;-1:-1:-1;4816:4:21;4808:25;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;-1:-1:-1;;;4906:23:21;;;;;;;;;;;4849:91;4949:18;;-1:-1:-1;;4949:18:21;4966:1;4949:18;;;4977:67;;;;5011:22;;-1:-1:-1;;;;5011:22:21;-1:-1:-1;;;5011:22:21;;;4977:67;1115:30:118::1;:28;:30::i;:::-;1155:5;:14:::0;;-1:-1:-1;;;;;;1155:14:118::1;-1:-1:-1::0;;;;;1155:14:118;::::1;;::::0;;5064:101:21;;;;5098:23;;-1:-1:-1;;;;5098:23:21;;;5140:14;;-1:-1:-1;13731:50:147;;5140:14:21;;13719:2:147;13704:18;5140:14:21;;;;;;;4092:1079;;;;;1051:125:118;:::o;1245:359::-;2500:21:60;:19;:21::i;:::-;1394:10:118::1;1377:14;1414:29:::0;;;:21:::1;:29;::::0;;;;:45;;;1470:128:::1;1490:21:::0;;::::1;1470:128;;;1532:55;1573:10;;1584:1;1573:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1532:36:118;::::1;;::::0;;;:28:::1;:36;::::0;;;;;:40:::1;:55::i;:::-;-1:-1:-1::0;1513:3:118::1;;1470:128;;;;1367:237;2542:20:60::0;1857:1;3068:7;:21;2888:208;5662:138:20;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;8002:226:118:-:0;-1:-1:-1;;;;;8093:29:118;;8070:7;8093:29;;;:21;:29;;;;;;:34;;8089:68;;8136:21;;-1:-1:-1;;;8136:21:118;;;;;;;;;;;8089:68;-1:-1:-1;;;;;8192:29:118;;;;;;:21;:29;;;;;;8174:47;;:15;:47;:::i;10530:115:71:-;10593:7;10619:19;10627:3;5202:18;;5120:107;10987:156;11061:7;11111:22;11115:3;11127:5;11111:3;:22::i;4148:103:20:-;4214:30;4225:4;966:10:25;4214::20;:30::i;:::-;4148:103;:::o;7270:387::-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:20;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:20;;;;;;;;;:38;;-1:-1:-1;;7475:38:20;7509:4;7475:38;;;7559:12;966:10:25;;887:96;7559:12:20;-1:-1:-1;;;;;7532:40:20;7550:7;-1:-1:-1;;;;;7532:40:20;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7894:388;7972:4;-1:-1:-1;;;;;;;;;;;8061:22:20;8069:4;8075:7;8061;:22::i;:::-;8057:219;;;8133:5;8099:14;;;;;;;;;;;-1:-1:-1;;;;;8099:31:20;;;;;;;;;;:39;;-1:-1:-1;;8099:39:20;;;8157:40;966:10:25;;8099:14:20;;8157:40;;8133:5;8157:40;8218:4;8211:11;;;;;2575:307:60;1899:1;2702:7;;:18;2698:86;;2743:30;;-1:-1:-1;;;2743:30:60;;;;;;;;;;;2698:86;1899:1;2858:7;:17;2575:307::o;24467:315:118:-;24625:4;24603:10;:27;24595:59;;;;-1:-1:-1;;;24595:59:118;;15403:2:147;24595:59:118;;;15385:21:147;15442:2;15422:18;;;15415:30;-1:-1:-1;;;15461:18:147;;;15454:49;15520:18;;24595:59:118;15201:343:147;24595:59:118;24680:5;;-1:-1:-1;;;;;24672:27:118;;;24680:5;;24672:27;24664:59;;;;-1:-1:-1;;;24664:59:118;;15751:2:147;24664:59:118;;;15733:21:147;15790:2;15770:18;;;15763:30;-1:-1:-1;;;15809:18:147;;;15802:49;15868:18;;24664:59:118;15549:343:147;24664:59:118;24733:5;;:42;;-1:-1:-1;;;24733:42:118;;-1:-1:-1;;;;;14541:32:147;;;24733:42:118;;;14523:51:147;14610:32;;;14590:18;;;14583:60;14659:18;;;14652:34;;;24733:5:118;;;;:18;;14496::147;;24733:42:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4578:312:22:-;4658:4;-1:-1:-1;;;;;4667:6:22;4650:23;;;:120;;;4764:6;-1:-1:-1;;;;;4728:42:22;:32;-1:-1:-1;;;;;;;;;;;1519:53:41;-1:-1:-1;;;;;1519:53:41;;1441:138;4728:32:22;-1:-1:-1;;;;;4728:42:22;;;4650:120;4633:251;;;4844:29;;-1:-1:-1;;;4844:29:22;;;;;;;;;;;965:103:120;2362:4:20;3191:16;2362:4;3191:10;:16::i;6032:538:22:-;6149:17;-1:-1:-1;;;;;6131:50:22;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6131:52:22;;;;;;;;-1:-1:-1;;6131:52:22;;;;;;;;;;;;:::i;:::-;;;6127:437;;6493:60;;-1:-1:-1;;;6493:60:22;;-1:-1:-1;;;;;11558:32:147;;6493:60:22;;;11540:51:147;11513:18;;6493:60:22;11378:219:147;6127:437:22;-1:-1:-1;;;;;;;;;;;6225:40:22;;6221:120;;6292:34;;-1:-1:-1;;;6292:34:22;;;;;1434:25:147;;;1407:18;;6292:34:22;1288:177:147;6221:120:22;6354:54;6384:17;6403:4;6354:29;:54::i;5007:213::-;5081:4;-1:-1:-1;;;;;5090:6:22;5073:23;;5069:145;;5174:29;;-1:-1:-1;;;5174:29:22;;;;;;;;;;;6945:261:118;-1:-1:-1;;;;;7115:46:118;;;;;;;:38;:46;;;;;;;;:53;;;;;;;;:64;;;;;;;;;;:74;;;;;;;;;;;:84;;7193:6;;7115:46;:84;;7193:6;;7115:84;:::i;:::-;;;;-1:-1:-1;;;;;;;6945:261:118:o;9071:205:21:-;9129:30;;3147:66;9186:27;8819:122;606:103:120;6929:20:21;:18;:20::i;:::-;672:30:120::1;:28;:30::i;6268:331:118:-:0;-1:-1:-1;;;;;6436:44:118;;;;;;;:36;:44;;;;;;;;:51;;;;;;;;:62;;;;;;;;;;:72;;;;;;;;;;;:82;;6512:6;;6436:44;:82;;6512:6;;6436:82;:::i;:::-;;;;-1:-1:-1;;;;;;;6528:36:118;;;;;;;:28;:36;;;;;;;;:43;;;;;;;;:54;;;;;;;;;;;:64;;6586:6;;6528:36;:64;;6586:6;;6528:64;:::i;5617:111:68:-;5675:7;5312:5;;;5709;;;5311:36;5306:42;;5701:20;5071:294;21690:1458:118;21868:4;-1:-1:-1;;;;;21852:21:118;;;21848:1294;;21953:5;;-1:-1:-1;;;;;21945:27:118;;;21953:5;;21945:27;21941:413;;22068:67;22101:4;22107:8;22117:9;22128:6;22068:32;:67::i;:::-;21848:1294;;21941:413;22268:71;22305:4;22311:8;22321:9;22332:6;22268:36;:71::i;21848:1294::-;22752:5;;-1:-1:-1;;;;;22744:27:118;;;22752:5;;22744:27;22740:392;;22863:67;22896:4;22902:8;22912:9;22923:6;22863:32;:67::i;22740:392::-;23046:71;23083:4;23089:8;23099:9;23110:6;23046:36;:71::i;17722:796::-;17967:5;17945:19;18006:108;18028:6;17967:5;18073:9;18096:8;18006;:108::i;:::-;17982:132;;18223:6;18207:13;:22;18203:309;;;18245:163;18275:6;18299:11;18328:9;18355:8;18381:13;18245:12;:163::i;:::-;18203:309;;;18439:62;18452:6;18460:11;18473:9;18484:8;18494:6;18439:12;:62::i;:::-;17882:636;;17722:796;;;;;:::o;18850:888::-;19057:21;19081:102;19103:6;19123:5;19142:9;19165:8;19081;:102::i;:::-;19057:126;-1:-1:-1;19193:19:118;19215:9;:5;19223:1;19215:9;:::i;:::-;19193:31;;19234:23;19260:110;19284:6;19304:11;19329:9;19352:8;19260:10;:110::i;:::-;19234:136;;19403:13;19385:15;:31;19381:351;;;-1:-1:-1;;;;;7652:46:118;;;;;;;:38;:46;;;;;;;;:53;;;;;;;;:64;;;;;;;;;;:74;;;;;;;;;:83;;;19559:162;7482:260;16491:810;16720:9;16715:423;-1:-1:-1;;;;;16739:35:118;;;;;;:27;:35;;;;;:44;;:42;:44::i;:::-;16735:1;:48;16715:423;;;-1:-1:-1;;;;;16823:35:118;;16804:16;16823:35;;;:27;:35;;;;;:41;;16862:1;16823:38;:41::i;:::-;16804:60;;16884:9;16879:249;-1:-1:-1;;;;;16903:36:118;;;;;;:28;:36;;;;;:45;;:43;:45::i;:::-;16899:1;:49;16879:249;;;-1:-1:-1;;;;;16993:36:118;;16973:17;16993:36;;;:28;:36;;;;;:42;;17033:1;16993:39;:42::i;:::-;16973:62;;17054:59;17072:6;17080:11;17093:9;17104:8;17054:17;:59::i;:::-;-1:-1:-1;16950:3:118;;16879:249;;;-1:-1:-1;;16785:3:118;;16715:423;;;-1:-1:-1;17227:15:118;:11;17241:1;17227:15;:::i;:::-;-1:-1:-1;;;;;17187:37:118;;;;;;:29;:37;;;;;;;:55;;;;17258:36;;;;;;17282:11;1434:25:147;;1422:2;1407:18;;1288:177;17258:36:118;;;;;;;;16491:810;;:::o;9332:150:71:-;9402:4;9425:50;9430:3;-1:-1:-1;;;;;9450:23:71;;9425:4;:50::i;715:125:120:-;6929:20:21;:18;:20::i;:::-;791:42:120::1;2362:4:20;822:10:120;791;:42::i;5569:118:71:-:0;5636:7;5662:3;:11;;5674:5;5662:18;;;;;;;;:::i;:::-;;;;;;;;;5655:25;;5569:118;;;;:::o;4381:197:20:-;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:20;;-1:-1:-1;;;;;13491:32:147;;4514:47:20;;;13473:51:147;13540:18;;;13533:34;;;13446:18;;4514:47:20;13299:274:147;2264:344:41;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:41;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;2454:148::-;2573:18;:16;:18::i;7082:141:21:-;7149:17;:15;:17::i;:::-;7144:73;;7189:17;;-1:-1:-1;;;7189:17:21;;;;;;;;;;;23282:313:118;-1:-1:-1;;;;;23418:21:118;;23434:4;23418:21;23410:67;;;;-1:-1:-1;;;23410:67:118;;16567:2:147;23410:67:118;;;16549:21:147;16606:2;16586:18;;;16579:30;16645:34;16625:18;;;16618:62;-1:-1:-1;;;16696:18:147;;;16689:31;16737:19;;23410:67:118;16365:397:147;23410:67:118;23503:5;;-1:-1:-1;;;;;23495:27:118;;;23503:5;;23495:27;23487:59;;;;-1:-1:-1;;;23487:59:118;;15751:2:147;23487:59:118;;;15733:21:147;15790:2;15770:18;;;15763:30;-1:-1:-1;;;15809:18:147;;;15802:49;15868:18;;23487:59:118;15549:343:147;23487:59:118;23556:5;;:32;;-1:-1:-1;;;23556:32:118;;-1:-1:-1;;;;;13491:32:147;;;23556::118;;;13473:51:147;13540:18;;;13533:34;;;23556:5:118;;;;:14;;13446:18:147;;23556:32:118;13299:274:147;23664:394:118;-1:-1:-1;;;;;23804:21:118;;23820:4;23804:21;23796:67;;;;-1:-1:-1;;;23796:67:118;;16969:2:147;23796:67:118;;;16951:21:147;17008:2;16988:18;;;16981:30;17047:34;17027:18;;;17020:62;-1:-1:-1;;;17098:18:147;;;17091:31;17139:19;;23796:67:118;16767:397:147;23796:67:118;23889:5;;-1:-1:-1;;;;;23881:27:118;;;23889:5;;23881:27;23873:64;;;;-1:-1:-1;;;23873:64:118;;17371:2:147;23873:64:118;;;17353:21:147;17410:2;17390:18;;;17383:30;-1:-1:-1;;;17429:18:147;;;17422:54;17493:18;;23873:64:118;17169:348:147;23873:64:118;23947:5;;:32;;-1:-1:-1;;;23947:32:118;;-1:-1:-1;;;;;13491:32:147;;;23947::118;;;13473:51:147;13540:18;;;13533:34;;;23947:5:118;;;;:13;;13446:18:147;;23947:32:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;23989:62:118;;-1:-1:-1;;;23989:62:118;;-1:-1:-1;;;;;13491:32:147;;;23989:62:118;;;13473:51:147;13540:18;;;13533:34;;;23989:44:118;;;;;13446:18:147;;23989:62:118;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24859:354;25021:4;24999:10;:27;24991:59;;;;-1:-1:-1;;;24991:59:118;;15403:2:147;24991:59:118;;;15385:21:147;15442:2;15422:18;;;15415:30;-1:-1:-1;;;15461:18:147;;;15454:49;15520:18;;24991:59:118;15201:343:147;24991:59:118;25076:5;;-1:-1:-1;;;;;25068:27:118;;;25076:5;;25068:27;25060:64;;;;-1:-1:-1;;;25060:64:118;;17371:2:147;25060:64:118;;;17353:21:147;17410:2;17390:18;;;17383:30;-1:-1:-1;;;17429:18:147;;;17422:54;17493:18;;25060:64:118;17169:348:147;25060:64:118;25134:72;;-1:-1:-1;;;25134:72:118;;-1:-1:-1;;;;;14541:32:147;;;25134:72:118;;;14523:51:147;14610:32;;;14590:18;;;14583:60;14659:18;;;14652:34;;;25134:48:118;;;;;14496:18:147;;25134:72:118;14321:371:147;6605:334:118;-1:-1:-1;;;;;6776:44:118;;;;;;;:36;:44;;;;;;;;:51;;;;;;;;:62;;;;;;;;;;:72;;;;;;;;;;;:82;;6852:6;;6776:44;:82;;6852:6;;6776:82;:::i;:::-;;;;-1:-1:-1;;;;;;;6868:36:118;;;;;;;:28;:36;;;;;;;;:43;;;;;;;;:54;;;;;;;;;;;:64;;6926:6;;6868:36;:64;;6926:6;;6868:64;:::i;15011:1474::-;15265:19;15287:108;15309:6;15329:11;15354:9;15377:8;15287;:108::i;:::-;15265:130;-1:-1:-1;15405:21:118;15429:114;15453:6;15473:15;:11;15487:1;15473:15;:::i;:::-;15502:9;15525:8;15429:10;:114::i;:::-;15405:138;;15573:11;15557:13;:27;15553:85;;;-1:-1:-1;15616:11:118;15553:85;15647:17;15667:27;15681:13;15667:11;:27;:::i;:::-;15647:47;-1:-1:-1;15705:66:118;15715:6;15723:15;:11;15737:1;15723:15;:::i;:::-;15740:9;15751:8;15761:9;15705;:66::i;:::-;16181:17;;16177:131;;16214:83;16255:4;16262:8;16272:9;16283:13;16214:32;:83::i;:::-;16407:9;-1:-1:-1;;;;;16323:155:118;16382:11;16360:8;-1:-1:-1;;;;;16323:155:118;;16430:11;16455:13;16323:155;;;;;;17829:25:147;;;17885:2;17870:18;;17863:34;17817:2;17802:18;;17655:248;16323:155:118;;;;;;;;15159:1326;;;15011:1474;;;;:::o;2336:406:71:-;2399:4;5006:21;;;:14;;;:21;;;;;;2415:321;;-1:-1:-1;2457:23:71;;;;;;;;:11;:23;;;;;;;;;;;;;2639:18;;2615:21;;;:14;;;:21;;;;;;:42;;;;2671:11;;2415:321;-1:-1:-1;2720:5:71;2713:12;;1671:281:41;1748:17;-1:-1:-1;;;;;1748:29:41;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:41;;-1:-1:-1;;;;;11558:32:147;;1805:47:41;;;11540:51:147;11513:18;;1805:47:41;11378:219:147;1744:119:41;-1:-1:-1;;;;;;;;;;;1872:73:41;;-1:-1:-1;;;;;;1872:73:41;-1:-1:-1;;;;;1872:73:41;;;;;;;;;;1671:281::o;3916:253:54:-;3999:12;4024;4038:23;4065:6;-1:-1:-1;;;;;4065:19:54;4085:4;4065:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4023:67;;;;4107:55;4134:6;4142:7;4151:10;4107:26;:55::i;:::-;4100:62;3916:253;-1:-1:-1;;;;;3916:253:54:o;6113:122:41:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:41;;;;;;;;;;;8485:120:21;8535:4;8558:26;:24;:26::i;:::-;:40;-1:-1:-1;;;8558:40:21;;;;;;-1:-1:-1;8485:120:21:o;4437:582:54:-;4581:12;4610:7;4605:408;;4633:19;4641:10;4633:7;:19::i;:::-;4605:408;;;4857:17;;:22;:49;;;;-1:-1:-1;;;;;;4883:18:54;;;:23;4857:49;4853:119;;;4933:24;;-1:-1:-1;;;4933:24:54;;-1:-1:-1;;;;;11558:32:147;;4933:24:54;;;11540:51:147;11513:18;;4933:24:54;11378:219:147;4853:119:54;-1:-1:-1;4992:10:54;4985:17;;5559:487;5690:17;;:21;5686:354;;5887:10;5881:17;5943:15;5930:10;5926:2;5922:19;5915:44;5686:354;6010:19;;-1:-1:-1;;;6010:19:54;;;;;;;;;;;14:286:147;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:147;;209:43;;199:71;;266:1;263;256:12;497:131;-1:-1:-1;;;;;572:31:147;;562:42;;552:70;;618:1;615;608:12;633:650;719:6;727;735;743;796:3;784:9;775:7;771:23;767:33;764:53;;;813:1;810;803:12;764:53;852:9;839:23;871:31;896:5;871:31;:::i;:::-;921:5;-1:-1:-1;999:2:147;984:18;;971:32;;-1:-1:-1;1081:2:147;1066:18;;1053:32;1094:33;1053:32;1094:33;:::i;:::-;1146:7;-1:-1:-1;1205:2:147;1190:18;;1177:32;1218:33;1177:32;1218:33;:::i;:::-;633:650;;;;-1:-1:-1;633:650:147;;-1:-1:-1;;633:650:147:o;1470:508::-;1547:6;1555;1563;1616:2;1604:9;1595:7;1591:23;1587:32;1584:52;;;1632:1;1629;1622:12;1584:52;1671:9;1658:23;1690:31;1715:5;1690:31;:::i;:::-;1740:5;-1:-1:-1;1818:2:147;1803:18;;1790:32;;-1:-1:-1;1900:2:147;1885:18;;1872:32;1913:33;1872:32;1913:33;:::i;:::-;1965:7;1955:17;;;1470:508;;;;;:::o;1983:247::-;2042:6;2095:2;2083:9;2074:7;2070:23;2066:32;2063:52;;;2111:1;2108;2101:12;2063:52;2150:9;2137:23;2169:31;2194:5;2169:31;:::i;2235:637::-;2425:2;2437:21;;;2507:13;;2410:18;;;2529:22;;;2377:4;;2608:15;;;2582:2;2567:18;;;2377:4;2651:195;2665:6;2662:1;2659:13;2651:195;;;2730:13;;-1:-1:-1;;;;;2726:39:147;2714:52;;2795:2;2821:15;;;;2786:12;;;;2762:1;2680:9;2651:195;;2877:367;2945:6;2953;3006:2;2994:9;2985:7;2981:23;2977:32;2974:52;;;3022:1;3019;3012:12;2974:52;3061:9;3048:23;3080:31;3105:5;3080:31;:::i;:::-;3130:5;3208:2;3193:18;;;;3180:32;;-1:-1:-1;;;2877:367:147:o;3249:226::-;3308:6;3361:2;3349:9;3340:7;3336:23;3332:32;3329:52;;;3377:1;3374;3367:12;3329:52;-1:-1:-1;3422:23:147;;3249:226;-1:-1:-1;3249:226:147:o;3662:367::-;3730:6;3738;3791:2;3779:9;3770:7;3766:23;3762:32;3759:52;;;3807:1;3804;3797:12;3759:52;3852:23;;;-1:-1:-1;3951:2:147;3936:18;;3923:32;3964:33;3923:32;3964:33;:::i;:::-;4016:7;4006:17;;;3662:367;;;;;:::o;4034:529::-;4111:6;4119;4127;4180:2;4168:9;4159:7;4155:23;4151:32;4148:52;;;4196:1;4193;4186:12;4148:52;4235:9;4222:23;4254:31;4279:5;4254:31;:::i;:::-;4304:5;-1:-1:-1;4361:2:147;4346:18;;4333:32;4374:33;4333:32;4374:33;:::i;:::-;4426:7;-1:-1:-1;4485:2:147;4470:18;;4457:32;4498:33;4457:32;4498:33;:::i;4568:388::-;4636:6;4644;4697:2;4685:9;4676:7;4672:23;4668:32;4665:52;;;4713:1;4710;4703:12;4665:52;4752:9;4739:23;4771:31;4796:5;4771:31;:::i;:::-;4821:5;-1:-1:-1;4878:2:147;4863:18;;4850:32;4891:33;4850:32;4891:33;:::i;4961:367::-;5024:8;5034:6;5088:3;5081:4;5073:6;5069:17;5065:27;5055:55;;5106:1;5103;5096:12;5055:55;-1:-1:-1;5129:20:147;;-1:-1:-1;;;;;5161:30:147;;5158:50;;;5204:1;5201;5194:12;5158:50;5241:4;5233:6;5229:17;5217:29;;5301:3;5294:4;5284:6;5281:1;5277:14;5269:6;5265:27;5261:38;5258:47;5255:67;;;5318:1;5315;5308:12;5255:67;4961:367;;;;;:::o;5333:1099::-;5491:6;5499;5507;5515;5523;5531;5584:2;5572:9;5563:7;5559:23;5555:32;5552:52;;;5600:1;5597;5590:12;5552:52;5640:9;5627:23;-1:-1:-1;;;;;5665:6:147;5662:30;5659:50;;;5705:1;5702;5695:12;5659:50;5744:70;5806:7;5797:6;5786:9;5782:22;5744:70;:::i;:::-;5833:8;;-1:-1:-1;5718:96:147;-1:-1:-1;;5921:2:147;5906:18;;5893:32;-1:-1:-1;;;;;5937:32:147;;5934:52;;;5982:1;5979;5972:12;5934:52;6021:72;6085:7;6074:8;6063:9;6059:24;6021:72;:::i;:::-;6112:8;;-1:-1:-1;5995:98:147;-1:-1:-1;;6200:2:147;6185:18;;6172:32;-1:-1:-1;;;;;6216:32:147;;6213:52;;;6261:1;6258;6251:12;6213:52;6300:72;6364:7;6353:8;6342:9;6338:24;6300:72;:::i;:::-;5333:1099;;;;-1:-1:-1;5333:1099:147;;-1:-1:-1;5333:1099:147;;6391:8;;5333:1099;-1:-1:-1;;;5333:1099:147:o;6437:127::-;6498:10;6493:3;6489:20;6486:1;6479:31;6529:4;6526:1;6519:15;6553:4;6550:1;6543:15;6569:1079;6646:6;6654;6707:2;6695:9;6686:7;6682:23;6678:32;6675:52;;;6723:1;6720;6713:12;6675:52;6762:9;6749:23;6781:31;6806:5;6781:31;:::i;:::-;6831:5;-1:-1:-1;6887:2:147;6872:18;;6859:32;-1:-1:-1;;;;;6903:30:147;;6900:50;;;6946:1;6943;6936:12;6900:50;6969:22;;7022:4;7014:13;;7010:27;-1:-1:-1;7000:55:147;;7051:1;7048;7041:12;7000:55;7091:2;7078:16;-1:-1:-1;;;;;7109:6:147;7106:30;7103:56;;;7139:18;;:::i;:::-;7188:2;7182:9;7280:2;7242:17;;-1:-1:-1;;7238:31:147;;;7271:2;7234:40;7230:54;7218:67;;-1:-1:-1;;;;;7300:34:147;;7336:22;;;7297:62;7294:88;;;7362:18;;:::i;:::-;7398:2;7391:22;7422;;;7463:15;;;7480:2;7459:24;7456:37;-1:-1:-1;7453:57:147;;;7506:1;7503;7496:12;7453:57;7562:6;7557:2;7553;7549:11;7544:2;7536:6;7532:15;7519:50;7615:1;7610:2;7601:6;7593;7589:19;7585:28;7578:39;7636:6;7626:16;;;;;6569:1079;;;;;:::o;7653:508::-;7730:6;7738;7746;7799:2;7787:9;7778:7;7774:23;7770:32;7767:52;;;7815:1;7812;7805:12;7767:52;7854:9;7841:23;7873:31;7898:5;7873:31;:::i;:::-;7923:5;-1:-1:-1;7980:2:147;7965:18;;7952:32;7993:33;7952:32;7993:33;:::i;:::-;7653:508;;8045:7;;-1:-1:-1;;;8125:2:147;8110:18;;;;8097:32;;7653:508::o;8166:1431::-;8360:6;8368;8376;8384;8392;8400;8408;8416;8469:3;8457:9;8448:7;8444:23;8440:33;8437:53;;;8486:1;8483;8476:12;8437:53;8526:9;8513:23;-1:-1:-1;;;;;8551:6:147;8548:30;8545:50;;;8591:1;8588;8581:12;8545:50;8630:70;8692:7;8683:6;8672:9;8668:22;8630:70;:::i;:::-;8719:8;;-1:-1:-1;8604:96:147;-1:-1:-1;;8807:2:147;8792:18;;8779:32;-1:-1:-1;;;;;8823:32:147;;8820:52;;;8868:1;8865;8858:12;8820:52;8907:72;8971:7;8960:8;8949:9;8945:24;8907:72;:::i;:::-;8998:8;;-1:-1:-1;8881:98:147;-1:-1:-1;;9086:2:147;9071:18;;9058:32;-1:-1:-1;;;;;9102:32:147;;9099:52;;;9147:1;9144;9137:12;9099:52;9186:72;9250:7;9239:8;9228:9;9224:24;9186:72;:::i;:::-;9277:8;;-1:-1:-1;9160:98:147;-1:-1:-1;;9365:2:147;9350:18;;9337:32;-1:-1:-1;;;;;9381:32:147;;9378:52;;;9426:1;9423;9416:12;9378:52;9465:72;9529:7;9518:8;9507:9;9503:24;9465:72;:::i;:::-;8166:1431;;;;-1:-1:-1;8166:1431:147;;-1:-1:-1;8166:1431:147;;;;;;9556:8;-1:-1:-1;;;8166:1431:147:o;9602:418::-;9751:2;9740:9;9733:21;9714:4;9783:6;9777:13;9826:6;9821:2;9810:9;9806:18;9799:34;9885:6;9880:2;9872:6;9868:15;9863:2;9852:9;9848:18;9842:50;9941:1;9936:2;9927:6;9916:9;9912:22;9908:31;9901:42;10011:2;10004;10000:7;9995:2;9987:6;9983:15;9979:29;9968:9;9964:45;9960:54;9952:62;;;9602:418;;;;:::o;10822:551::-;10917:6;10925;10933;10986:2;10974:9;10965:7;10961:23;10957:32;10954:52;;;11002:1;10999;10992:12;10954:52;11047:23;;;-1:-1:-1;11145:2:147;11130:18;;11117:32;-1:-1:-1;;;;;11161:30:147;;11158:50;;;11204:1;11201;11194:12;11158:50;11243:70;11305:7;11296:6;11285:9;11281:22;11243:70;:::i;:::-;10822:551;;11332:8;;-1:-1:-1;11217:96:147;;-1:-1:-1;;;;10822:551:147:o;11602:127::-;11663:10;11658:3;11654:20;11651:1;11644:31;11694:4;11691:1;11684:15;11718:4;11715:1;11708:15;12897:127;12958:10;12953:3;12949:20;12946:1;12939:31;12989:4;12986:1;12979:15;13013:4;13010:1;13003:15;13029:125;13094:9;;;13115:10;;;13112:36;;;13128:18;;:::i;13159:135::-;13198:3;13219:17;;;13216:43;;13239:18;;:::i;:::-;-1:-1:-1;13286:1:147;13275:13;;13159:135::o;13792:127::-;13853:10;13848:3;13844:20;13841:1;13834:31;13884:4;13881:1;13874:15;13908:4;13905:1;13898:15;14132:184;14202:6;14255:2;14243:9;14234:7;14230:23;14226:32;14223:52;;;14271:1;14268;14261:12;14223:52;-1:-1:-1;14294:16:147;;14132:184;-1:-1:-1;14132:184:147:o;14697:277::-;14764:6;14817:2;14805:9;14796:7;14792:23;14788:32;14785:52;;;14833:1;14830;14823:12;14785:52;14865:9;14859:16;14918:5;14911:13;14904:21;14897:5;14894:32;14884:60;;14940:1;14937;14930:12;14979:217;15019:1;15045;15035:132;;15089:10;15084:3;15080:20;15077:1;15070:31;15124:4;15121:1;15114:15;15152:4;15149:1;15142:15;15035:132;-1:-1:-1;15181:9:147;;14979:217::o;17522:128::-;17589:9;;;17610:11;;;17607:37;;;17624:18;;:::i;17908:301::-;18037:3;18075:6;18069:13;18121:6;18114:4;18106:6;18102:17;18097:3;18091:37;18183:1;18147:16;;18172:13;;;-1:-1:-1;18147:16:147;17908:301;-1:-1:-1;17908:301:147:o","linkReferences":{},"immutableReferences":{"39766":[{"start":7769,"length":32},{"start":7810,"length":32},{"start":8131,"length":32}]}},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","WHITELIST_ROLE()":"7a997ab7","acceptGenesisCeremony()":"92a2ebf3","computeAllStake(address,uint256)":"55bdbe4c","computeAllStakeForAcceptingEpoch(address)":"574663a9","currentAcceptingEpochByDomain(address)":"b1de97f7","domainGenesisAccepted(address)":"d1ba90ff","epochDurationByDomain(address)":"3bccf635","getAcceptingEpoch(address)":"22fceb75","getAttesterStake(address,uint256,address)":"24fdfddf","getAttesterStakeForAcceptingEpoch(address,address)":"3debeadc","getCustodianStake(address,uint256,address)":"0ce52af5","getCustodianStakeForAcceptingEpoch(address,address)":"9db92f68","getEpochByL1BlockTime(address)":"d980b40d","getEpochDuration(address)":"5c534359","getNextAcceptingEpochWithException(address)":"771fcfc4","getNextPresentEpochWithException(address)":"57dd6a94","getRegisteredAttesters(address)":"1789aeb4","getRegisteredCustodians(address)":"341d5ef5","getRoleAdmin(bytes32)":"248a9ca3","getStake(address,uint256,address,address)":"93dfb85c","getStakeForAcceptingEpoch(address,address,address)":"a78d1fef","getStakedAttestersForAcceptingEpoch(address)":"4234a479","getUnstake(address,uint256,address,address)":"7d93768b","getUnstakeForAcceptingEpoch(address,address,address)":"34eada3a","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize()":"8129fc1c","initialize(address)":"c4d66de8","proxiableUUID()":"52d1902d","registerDomain(uint256,address[])":"d37304f8","removeAddressFromWhitelist(address)":"286dd3f5","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","rewardArray(address[],uint256[],address[])":"4e76a139","rewardFromDomain(address,uint256,address)":"5e00bf46","rollOverEpoch()":"a887b71c","setAcceptingEpoch(address,uint256)":"1dc8b949","slash(address[],address[],uint256[],uint256[])":"a885c975","stake(address,address,uint256)":"bf6eac2f","stakesByDomainEpochCustodian(address,uint256,address)":"86af70d1","stakesByDomainEpochCustodianAttester(address,uint256,address,address)":"0c8f522f","supportsInterface(bytes4)":"01ffc9a7","token()":"fc0c546a","unstake(address,address,uint256)":"60829f8a","unstakesByDomainEpochCustodianAttester(address,uint256,address,address)":"e6e3fb3a","upgradeToAndCall(address,bytes)":"4f1ef286","whitelistAddress(address)":"41566585"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodianTransferAmountMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EpochDurationNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GenesisAlreadyAccepted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakeExceedsGenesisStake\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unstake\",\"type\":\"uint256\"}],\"name\":\"AttesterEpochRolledOver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"name\":\"AttesterStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"name\":\"AttesterUnstaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"EpochRolledOver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WHITELIST_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"computeAllStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"computeAllStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"currentAcceptingEpochByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentAcceptingEpoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"domainGenesisAccepted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"epochDurationByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochDuration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getEpochByL1BlockTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getEpochDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getNextAcceptingEpochWithException\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getNextPresentEpochWithException\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getRegisteredAttesters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getRegisteredCustodians\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getStakedAttestersForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getUnstake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getUnstakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epochDuration\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"}],\"name\":\"registerDomain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"removeAddressFromWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"}],\"name\":\"rewardArray\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"rewardFromDomain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollOverEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newEpoch\",\"type\":\"uint256\"}],\"name\":\"setAcceptingEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"refundAmounts\",\"type\":\"uint256[]\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"stakesByDomainEpochCustodian\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"stakesByDomainEpochCustodianAttester\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"unstakesByDomainEpochCustodianAttester\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"whitelistAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"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.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"computeAllStakeForAcceptingEpoch(address)\":{\"params\":{\"domain\":\"The domain to compute total stake for\"}},\"getCustodianStake(address,uint256,address)\":{\"details\":\"gets the total stake for a given epoch for a given custodian\"},\"getCustodianStakeForAcceptingEpoch(address,address)\":{\"details\":\"gets the total stake for the accepting epoch for a given custodian\"},\"getNextAcceptingEpochWithException(address)\":{\"details\":\"Special handling for genesis state (epoch 0):If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes\"},\"getNextPresentEpochWithException(address)\":{\"details\":\"Special handling for genesis state (accepting epoch 0):If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getStake(address,uint256,address,address)\":{\"details\":\"gets the stake for a given epoch for a given {attester,custodian} tuple\"},\"getStakeForAcceptingEpoch(address,address,address)\":{\"details\":\"gets the stake for the accepting epoch for a given {attester,custodian} tuple\"},\"getUnstake(address,uint256,address,address)\":{\"details\":\"gets the unstake for a given epoch for a given {attester,custodian} tuple\"},\"getUnstakeForAcceptingEpoch(address,address,address)\":{\"details\":\"gets the unstake for the accepting epoch for a given {attester,custodian} tuple\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize()\":{\"details\":\"Initialize the contract\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"rewardArray(address[],uint256[],address[])\":{\"params\":{\"amounts\":\"The amounts to reward\",\"attesters\":\"The attesters to reward\",\"custodians\":\"The custodians of the token from which to reward the attesters \"}},\"rewardFromDomain(address,uint256,address)\":{\"params\":{\"amount\":\"The amount to reward\",\"attester\":\"The attester to reward\",\"custodian\":\"The custodian of the token from which to reward the attester, here it is the domain\"}},\"setAcceptingEpoch(address,uint256)\":{\"params\":{\"domain\":\"The domain address\",\"newEpoch\":\"The new accepting epoch value\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"EpochDurationNotSet()\":[{\"notice\":\"Error thrown when trying to get epoch but duration not set\"}]},\"kind\":\"user\",\"methods\":{\"computeAllStake(address,uint256)\":{\"notice\":\"Computes total stake across all custodians and attesters for an epoch\"},\"computeAllStakeForAcceptingEpoch(address)\":{\"notice\":\"Computes total stake across all custodians and attesters for the current accepting epoch\"},\"getEpochDuration(address)\":{\"notice\":\"Gets the epoch duration for the given domain\"},\"getNextAcceptingEpochWithException(address)\":{\"notice\":\"Gets the next accepting epoch number\"},\"getNextPresentEpochWithException(address)\":{\"notice\":\"Gets the next present epoch number\"},\"getRegisteredAttesters(address)\":{\"notice\":\"Gets all attesters who are registered for the given domain\"},\"getRegisteredCustodians(address)\":{\"notice\":\"Gets all custodians who are registered for the given domain\"},\"getStakedAttestersForAcceptingEpoch(address)\":{\"notice\":\"Gets all attesters who have stake in the current accepting epoch\"},\"registerDomain(uint256,address[])\":{\"notice\":\"Registers a domain and sets the epoch duration\"},\"rewardArray(address[],uint256[],address[])\":{\"notice\":\"An array of custodians reward an array of attesters\"},\"rewardFromDomain(address,uint256,address)\":{\"notice\":\"Domain rewards an attester\"},\"setAcceptingEpoch(address,uint256)\":{\"notice\":\"Sets the accepting epoch for a given domain\"},\"stake(address,address,uint256)\":{\"notice\":\"Stakes for the next epoch\"},\"whitelistAddress(address)\":{\"notice\":\"Whitelist an address to be used as an attester or custodian. Whitelisting means that the address is allowed to stake and unstake\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/staking/MovementStaking.sol\":\"MovementStaking\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x949f1b87232ce60ae1d7651dfc4272f258a388448e08b4d624b1acbe05d8b39b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://469b7e1cab4c319957fddef8ad610ce347e2494d15389f3d3f689c4be66c1f7d\",\"dweb:/ipfs/QmdC9UdUZAYzjyZ2ULJgJ5QxhDHRtVJ8MJhHKjiotNfCeY\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x13c2d19041c51b246233f96874a66c0094b8a5ff78af3b85ea27867f302dcbbb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f1bc47de2e6e12b3680e47a4dd5b6e3c1e85b65851378aa1d617309edbc1200d\",\"dweb:/ipfs/QmSPcJ9HmkmsSDvMS4KZijnxoGMAEn8HbQuY4fe8DroZEE\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0xe1448f559716952220b5c696a5cc34d1f11f958bfbfcd05988543f6fd8bfff96\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ebd19cec65d3998dad25dc9beecd33055b1900f26c3f61377c78926ca0637c9a\",\"dweb:/ipfs/QmUda1jFjWf2ptQrahTgU6953SZY7ZWksRaTo2dKGX4BMK\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x37b2d71a3d12d55076e87942fb75e80ec8b6bacecd19b6562474952f6973d87b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4261c708ec31ae8764d242089617dc60c5e54a20ec781a42704886eda988a37a\",\"dweb:/ipfs/QmQqFiotrcCfB36B2pSfwGz4Bi4zhRgwwGAJ8VFBaEtzQ1\"]},\"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/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89\",\"dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xccb9b54747f3733f9ca435191745881587b2b48a12d6903358b59bc8ae39ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://021b637b39bddc68e1beed71677cb52919d27880804b1c7160d53064342786bc\",\"dweb:/ipfs/QmV3wgNQmoi9d6U3P7xwHAEKDoaQzGqGGjcSXsyWMf9rsK\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70\",\"dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"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/utils/SafeERC20.sol\":{\"keccak256\":\"0x6dd0cb67846da3fa1241c520faaa215d6bec8226e37beac6056c51e8af44d24e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://650e533e62b30dcc6edea2b6c91358d5659da3bde42e56adf7316c493b916a15\",\"dweb:/ipfs/QmYkmK2vPE6FjdAoQVpZSJxamTLGno9wzGS495TcMNFViV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e\",\"dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR\"]},\"lib/openzeppelin-contracts/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xb4d040e2cc1d4a66d08b174b97332aa3dbf330bc74f91c725d7ff653efca7eb1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da205f459aac15cadd00538691b525eef81f098a95bc3eedea12968bcb70706\",\"dweb:/ipfs/QmcqTJET3rNsXMGT3UvqLgFS3RrKaHe5x97m4dcfUCWMoW\"]},\"lib/openzeppelin-contracts/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"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/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x91832f9744a308318ef3344caf2122345d6a949e25017461322d13a4ede53f10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77f5fa6ce1145a3637406a77940cd1ab50523187c8ac7281805b3fc2bd6ffd5e\",\"dweb:/ipfs/QmewJyTg2SoBee1bKwks3vktT2wTQhB7TtzZg9xKvzvfUf\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xc240f71206795cead02e49f999b3523414c230cec53423298d8457a7ce9d3ea4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d5813c665d5ea1b73e27844800eb45831b9ba608b2a9216ead318e246fd5e8f\",\"dweb:/ipfs/QmNStA3tbwHZm1tXgdmY4wB3NbYKJtzYWADjKmDMhYHjyA\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x804753930b59f27c3a6747a4cf58b4d291f2c942a2a76edd43d4571a5f6b02bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f05286cf2babfc5bf1c347c447477ca24147bea09bb4f5ba01fe9afd98ab409\",\"dweb:/ipfs/QmUcTFzF4y2U9VoBbv7kx3PDTACdNMoYQuTe89ot2pAqqA\"]},\"src/staking/MovementStaking.sol\":{\"keccak256\":\"0xb61e04fbc6fce5f3d2e64269f2adccea1f27060f714259634ec20eab1cff468f\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0bf80557c4c9156a247c44cc476c5747028fddd392f9d3e3c7cea1a7fac1f670\",\"dweb:/ipfs/QmQ6A6bPUsm2b7yy5eSsJ7MXgQGAF8zWEkJf7uL7sZNXi9\"]},\"src/staking/MovementStakingStorage.sol\":{\"keccak256\":\"0xcb909fbdd31da45891f983aca5387eff88693b31c60d304b6ab7c1128c814225\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fcfd3aadf8c9e714c6e0f5b8b7f6000b54a1a0eeb219d25cb23848411ae17edb\",\"dweb:/ipfs/QmTKyTFmGKHKWk1wKncaAvXBZH9MwJfkdhFbmTUAwTX7UP\"]},\"src/staking/base/BaseStaking.sol\":{\"keccak256\":\"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46\",\"dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx\"]},\"src/staking/interfaces/IMovementStaking.sol\":{\"keccak256\":\"0x250f5a72809b363ebefe5fbcdce50b62a9ff49672a863c8273e0fbe4d59f8933\",\"urls\":[\"bzz-raw://5a4385f838da317ce90fb84cdd83a724d132f7e6c287191673f4e2ce1a486bbe\",\"dweb:/ipfs/Qmbwq1kBumZDyREvc4ryHMNMQ4sgT39fNAK4bUNRoXqchj\"]},\"src/token/base/BaseToken.sol\":{\"keccak256\":\"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e\",\"dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd\"]},\"src/token/base/MintableToken.sol\":{\"keccak256\":\"0xba4c9b5e900564cb3abb081d11b95f23e5f39a5ee799cda54c9f1a49a7aa8a13\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://94ca441f7acc6b312fc3d1d6ce4dab9971fd1cdf176ae5251fe2f28c4c52a35a\",\"dweb:/ipfs/QmXAuDzaJqydZho7CFyKKKtyYATHedyAUHTKAS839oji3o\"]},\"src/token/base/WrappedToken.sol\":{\"keccak256\":\"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885\",\"dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4\"]},\"src/token/base/WrappedTokenStorage.sol\":{\"keccak256\":\"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08\",\"dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj\"]},\"src/token/custodian/CustodianToken.sol\":{\"keccak256\":\"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04\",\"dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"CustodianTransferAmountMismatch"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"EpochDurationNotSet"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[],"type":"error","name":"GenesisAlreadyAccepted"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[],"type":"error","name":"StakeExceedsGenesisStake"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"address","name":"attester","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false},{"internalType":"uint256","name":"unstake","type":"uint256","indexed":false}],"type":"event","name":"AttesterEpochRolledOver","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"address","name":"attester","type":"address","indexed":false},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false}],"type":"event","name":"AttesterStaked","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"address","name":"attester","type":"address","indexed":false},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false}],"type":"event","name":"AttesterUnstaked","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":false}],"type":"event","name":"EpochRolledOver","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"WHITELIST_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptGenesisCeremony"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"}],"stateMutability":"view","type":"function","name":"computeAllStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"computeAllStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"currentAcceptingEpochByDomain","outputs":[{"internalType":"uint256","name":"currentAcceptingEpoch","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"domainGenesisAccepted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"epochDurationByDomain","outputs":[{"internalType":"uint256","name":"epochDuration","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getEpochByL1BlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getEpochDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getNextAcceptingEpochWithException","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getNextPresentEpochWithException","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getRegisteredAttesters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getRegisteredCustodians","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getStakedAttestersForAcceptingEpoch","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getUnstake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getUnstakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epochDuration","type":"uint256"},{"internalType":"address[]","name":"custodians","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"registerDomain"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"removeAddressFromWhitelist"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address[]","name":"custodians","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"rewardArray"},{"inputs":[{"internalType":"address","name":"attester","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"rewardFromDomain"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"rollOverEpoch"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"newEpoch","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setAcceptingEpoch"},{"inputs":[{"internalType":"address[]","name":"custodians","type":"address[]"},{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"refundAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"slash"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"contract IERC20","name":"custodian","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"stake"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"stakesByDomainEpochCustodian","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"stakesByDomainEpochCustodianAttester","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"unstake"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"unstakesByDomainEpochCustodianAttester","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"whitelistAddress"}],"devdoc":{"kind":"dev","methods":{"computeAllStakeForAcceptingEpoch(address)":{"params":{"domain":"The domain to compute total stake for"}},"getCustodianStake(address,uint256,address)":{"details":"gets the total stake for a given epoch for a given custodian"},"getCustodianStakeForAcceptingEpoch(address,address)":{"details":"gets the total stake for the accepting epoch for a given custodian"},"getNextAcceptingEpochWithException(address)":{"details":"Special handling for genesis state (epoch 0):If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes"},"getNextPresentEpochWithException(address)":{"details":"Special handling for genesis state (accepting epoch 0):If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes"},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"getStake(address,uint256,address,address)":{"details":"gets the stake for a given epoch for a given {attester,custodian} tuple"},"getStakeForAcceptingEpoch(address,address,address)":{"details":"gets the stake for the accepting epoch for a given {attester,custodian} tuple"},"getUnstake(address,uint256,address,address)":{"details":"gets the unstake for a given epoch for a given {attester,custodian} tuple"},"getUnstakeForAcceptingEpoch(address,address,address)":{"details":"gets the unstake for the accepting epoch for a given {attester,custodian} tuple"},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize()":{"details":"Initialize the contract"},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"rewardArray(address[],uint256[],address[])":{"params":{"amounts":"The amounts to reward","attesters":"The attesters to reward","custodians":"The custodians of the token from which to reward the attesters "}},"rewardFromDomain(address,uint256,address)":{"params":{"amount":"The amount to reward","attester":"The attester to reward","custodian":"The custodian of the token from which to reward the attester, here it is the domain"}},"setAcceptingEpoch(address,uint256)":{"params":{"domain":"The domain address","newEpoch":"The new accepting epoch value"}},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"computeAllStake(address,uint256)":{"notice":"Computes total stake across all custodians and attesters for an epoch"},"computeAllStakeForAcceptingEpoch(address)":{"notice":"Computes total stake across all custodians and attesters for the current accepting epoch"},"getEpochDuration(address)":{"notice":"Gets the epoch duration for the given domain"},"getNextAcceptingEpochWithException(address)":{"notice":"Gets the next accepting epoch number"},"getNextPresentEpochWithException(address)":{"notice":"Gets the next present epoch number"},"getRegisteredAttesters(address)":{"notice":"Gets all attesters who are registered for the given domain"},"getRegisteredCustodians(address)":{"notice":"Gets all custodians who are registered for the given domain"},"getStakedAttestersForAcceptingEpoch(address)":{"notice":"Gets all attesters who have stake in the current accepting epoch"},"registerDomain(uint256,address[])":{"notice":"Registers a domain and sets the epoch duration"},"rewardArray(address[],uint256[],address[])":{"notice":"An array of custodians reward an array of attesters"},"rewardFromDomain(address,uint256,address)":{"notice":"Domain rewards an attester"},"setAcceptingEpoch(address,uint256)":{"notice":"Sets the accepting epoch for a given domain"},"stake(address,address,uint256)":{"notice":"Stakes for the next epoch"},"whitelistAddress(address)":{"notice":"Whitelist an address to be used as an attester or custodian. Whitelisting means that the address is allowed to stake and unstake"}},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/staking/MovementStaking.sol":"MovementStaking"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x949f1b87232ce60ae1d7651dfc4272f258a388448e08b4d624b1acbe05d8b39b","urls":["bzz-raw://469b7e1cab4c319957fddef8ad610ce347e2494d15389f3d3f689c4be66c1f7d","dweb:/ipfs/QmdC9UdUZAYzjyZ2ULJgJ5QxhDHRtVJ8MJhHKjiotNfCeY"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x13c2d19041c51b246233f96874a66c0094b8a5ff78af3b85ea27867f302dcbbb","urls":["bzz-raw://f1bc47de2e6e12b3680e47a4dd5b6e3c1e85b65851378aa1d617309edbc1200d","dweb:/ipfs/QmSPcJ9HmkmsSDvMS4KZijnxoGMAEn8HbQuY4fe8DroZEE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0xe1448f559716952220b5c696a5cc34d1f11f958bfbfcd05988543f6fd8bfff96","urls":["bzz-raw://ebd19cec65d3998dad25dc9beecd33055b1900f26c3f61377c78926ca0637c9a","dweb:/ipfs/QmUda1jFjWf2ptQrahTgU6953SZY7ZWksRaTo2dKGX4BMK"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x37b2d71a3d12d55076e87942fb75e80ec8b6bacecd19b6562474952f6973d87b","urls":["bzz-raw://4261c708ec31ae8764d242089617dc60c5e54a20ec781a42704886eda988a37a","dweb:/ipfs/QmQqFiotrcCfB36B2pSfwGz4Bi4zhRgwwGAJ8VFBaEtzQ1"],"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/introspection/ERC165Upgradeable.sol":{"keccak256":"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab","urls":["bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89","dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xccb9b54747f3733f9ca435191745881587b2b48a12d6903358b59bc8ae39ea6b","urls":["bzz-raw://021b637b39bddc68e1beed71677cb52919d27880804b1c7160d53064342786bc","dweb:/ipfs/QmV3wgNQmoi9d6U3P7xwHAEKDoaQzGqGGjcSXsyWMf9rsK"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol":{"keccak256":"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7","urls":["bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b","dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"keccak256":"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724","urls":["bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a","dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486","urls":["bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d","dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c","urls":["bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba","dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d","urls":["bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196","dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA"],"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/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898","urls":["bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70","dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2"],"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/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/utils/SafeERC20.sol":{"keccak256":"0x6dd0cb67846da3fa1241c520faaa215d6bec8226e37beac6056c51e8af44d24e","urls":["bzz-raw://650e533e62b30dcc6edea2b6c91358d5659da3bde42e56adf7316c493b916a15","dweb:/ipfs/QmYkmK2vPE6FjdAoQVpZSJxamTLGno9wzGS495TcMNFViV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c","urls":["bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e","dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Arrays.sol":{"keccak256":"0xb4d040e2cc1d4a66d08b174b97332aa3dbf330bc74f91c725d7ff653efca7eb1","urls":["bzz-raw://9da205f459aac15cadd00538691b525eef81f098a95bc3eedea12968bcb70706","dweb:/ipfs/QmcqTJET3rNsXMGT3UvqLgFS3RrKaHe5x97m4dcfUCWMoW"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Comparators.sol":{"keccak256":"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58","urls":["bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd","dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC"],"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/ReentrancyGuard.sol":{"keccak256":"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3","urls":["bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a","dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x91832f9744a308318ef3344caf2122345d6a949e25017461322d13a4ede53f10","urls":["bzz-raw://77f5fa6ce1145a3637406a77940cd1ab50523187c8ac7281805b3fc2bd6ffd5e","dweb:/ipfs/QmewJyTg2SoBee1bKwks3vktT2wTQhB7TtzZg9xKvzvfUf"],"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/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xc240f71206795cead02e49f999b3523414c230cec53423298d8457a7ce9d3ea4","urls":["bzz-raw://7d5813c665d5ea1b73e27844800eb45831b9ba608b2a9216ead318e246fd5e8f","dweb:/ipfs/QmNStA3tbwHZm1tXgdmY4wB3NbYKJtzYWADjKmDMhYHjyA"],"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/structs/EnumerableSet.sol":{"keccak256":"0x804753930b59f27c3a6747a4cf58b4d291f2c942a2a76edd43d4571a5f6b02bc","urls":["bzz-raw://6f05286cf2babfc5bf1c347c447477ca24147bea09bb4f5ba01fe9afd98ab409","dweb:/ipfs/QmUcTFzF4y2U9VoBbv7kx3PDTACdNMoYQuTe89ot2pAqqA"],"license":"MIT"},"src/staking/MovementStaking.sol":{"keccak256":"0xb61e04fbc6fce5f3d2e64269f2adccea1f27060f714259634ec20eab1cff468f","urls":["bzz-raw://0bf80557c4c9156a247c44cc476c5747028fddd392f9d3e3c7cea1a7fac1f670","dweb:/ipfs/QmQ6A6bPUsm2b7yy5eSsJ7MXgQGAF8zWEkJf7uL7sZNXi9"],"license":"UNLICENSED"},"src/staking/MovementStakingStorage.sol":{"keccak256":"0xcb909fbdd31da45891f983aca5387eff88693b31c60d304b6ab7c1128c814225","urls":["bzz-raw://fcfd3aadf8c9e714c6e0f5b8b7f6000b54a1a0eeb219d25cb23848411ae17edb","dweb:/ipfs/QmTKyTFmGKHKWk1wKncaAvXBZH9MwJfkdhFbmTUAwTX7UP"],"license":"UNLICENSED"},"src/staking/base/BaseStaking.sol":{"keccak256":"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393","urls":["bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46","dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx"],"license":"MIT"},"src/staking/interfaces/IMovementStaking.sol":{"keccak256":"0x250f5a72809b363ebefe5fbcdce50b62a9ff49672a863c8273e0fbe4d59f8933","urls":["bzz-raw://5a4385f838da317ce90fb84cdd83a724d132f7e6c287191673f4e2ce1a486bbe","dweb:/ipfs/Qmbwq1kBumZDyREvc4ryHMNMQ4sgT39fNAK4bUNRoXqchj"],"license":null},"src/token/base/BaseToken.sol":{"keccak256":"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2","urls":["bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e","dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd"],"license":"MIT"},"src/token/base/MintableToken.sol":{"keccak256":"0xba4c9b5e900564cb3abb081d11b95f23e5f39a5ee799cda54c9f1a49a7aa8a13","urls":["bzz-raw://94ca441f7acc6b312fc3d1d6ce4dab9971fd1cdf176ae5251fe2f28c4c52a35a","dweb:/ipfs/QmXAuDzaJqydZho7CFyKKKtyYATHedyAUHTKAS839oji3o"],"license":"MIT"},"src/token/base/WrappedToken.sol":{"keccak256":"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45","urls":["bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885","dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4"],"license":"MIT"},"src/token/base/WrappedTokenStorage.sol":{"keccak256":"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e","urls":["bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08","dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj"],"license":"MIT"},"src/token/custodian/CustodianToken.sol":{"keccak256":"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350","urls":["bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04","dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":63950,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"token","offset":0,"slot":"0","type":"t_contract(IERC20)43848"},{"astId":63955,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochDurationByDomain","offset":0,"slot":"1","type":"t_mapping(t_address,t_uint256)"},{"astId":63960,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"currentAcceptingEpochByDomain","offset":0,"slot":"2","type":"t_mapping(t_address,t_uint256)"},{"astId":63965,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"registeredAttestersByDomain","offset":0,"slot":"3","type":"t_mapping(t_address,t_struct(AddressSet)51902_storage)"},{"astId":63970,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"registeredCustodiansByDomain","offset":0,"slot":"4","type":"t_mapping(t_address,t_struct(AddressSet)51902_storage)"},{"astId":63981,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"stakesByDomainEpochCustodianAttester","offset":0,"slot":"5","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))"},{"astId":63992,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"unstakesByDomainEpochCustodianAttester","offset":0,"slot":"6","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))"},{"astId":64001,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"stakesByDomainEpochCustodian","offset":0,"slot":"7","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_uint256)))"},{"astId":64005,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"domainGenesisAccepted","offset":0,"slot":"8","type":"t_mapping(t_address,t_bool)"},{"astId":45804,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_status","offset":0,"slot":"9","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_bytes32)dyn_storage":{"encoding":"dynamic_array","label":"bytes32[]","numberOfBytes":"32","base":"t_bytes32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IERC20)43848":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))"},"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_uint256)))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => mapping(address => uint256)))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},"t_mapping(t_address,t_struct(AddressSet)51902_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct EnumerableSet.AddressSet)","numberOfBytes":"32","value":"t_struct(AddressSet)51902_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => mapping(address => uint256)))","numberOfBytes":"32","value":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},"t_mapping(t_uint256,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_struct(AddressSet)51902_storage":{"encoding":"inplace","label":"struct EnumerableSet.AddressSet","numberOfBytes":"64","members":[{"astId":51901,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_inner","offset":0,"slot":"0","type":"t_struct(Set)51531_storage"}]},"t_struct(Set)51531_storage":{"encoding":"inplace","label":"struct EnumerableSet.Set","numberOfBytes":"64","members":[{"astId":51526,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_values","offset":0,"slot":"0","type":"t_array(t_bytes32)dyn_storage"},{"astId":51530,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_positions","offset":0,"slot":"1","type":"t_mapping(t_bytes32,t_uint256)"}]},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/staking/MovementStaking.sol","id":63932,"exportedSymbols":{"Address":[44679],"BaseStaking":[64066],"EnumerableSet":[52215],"ICustodianToken":[65013],"IERC20":[43848],"IMovementStaking":[64348],"Math":[49609],"MovementStaking":[63931],"MovementStakingStorage":[64011],"ReentrancyGuard":[45862],"SafeERC20":[44374]},"nodeType":"SourceUnit","src":"39:27836:118","nodes":[{"id":62079,"nodeType":"PragmaDirective","src":"39:24:118","nodes":[],"literals":["solidity","^","0.8",".13"]},{"id":62081,"nodeType":"ImportDirective","src":"64:51:118","nodes":[],"absolutePath":"src/staking/base/BaseStaking.sol","file":"./base/BaseStaking.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":64067,"symbolAliases":[{"foreign":{"id":62080,"name":"BaseStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64066,"src":"72:11:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62083,"nodeType":"ImportDirective","src":"116:82:118","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":44375,"symbolAliases":[{"foreign":{"id":62082,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44374,"src":"124:9:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62085,"nodeType":"ImportDirective","src":"199:69:118","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol","file":"@openzeppelin/contracts/interfaces/IERC20.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":42914,"symbolAliases":[{"foreign":{"id":62084,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43848,"src":"207:6:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62087,"nodeType":"ImportDirective","src":"269:66:118","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":44680,"symbolAliases":[{"foreign":{"id":62086,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44679,"src":"277:7:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62089,"nodeType":"ImportDirective","src":"336:70:118","nodes":[],"absolutePath":"src/token/custodian/CustodianToken.sol","file":"../token/custodian/CustodianToken.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":65349,"symbolAliases":[{"foreign":{"id":62088,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65013,"src":"344:15:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62091,"nodeType":"ImportDirective","src":"407:65:118","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/math/Math.sol","file":"@openzeppelin/contracts/utils/math/Math.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":49610,"symbolAliases":[{"foreign":{"id":62090,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49609,"src":"415:4:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62094,"nodeType":"ImportDirective","src":"473:83:118","nodes":[],"absolutePath":"src/staking/MovementStakingStorage.sol","file":"./MovementStakingStorage.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":64012,"symbolAliases":[{"foreign":{"id":62092,"name":"MovementStakingStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64011,"src":"481:22:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":62093,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52215,"src":"505:13:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62096,"nodeType":"ImportDirective","src":"557:67:118","nodes":[],"absolutePath":"src/staking/interfaces/IMovementStaking.sol","file":"./interfaces/IMovementStaking.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":64349,"symbolAliases":[{"foreign":{"id":62095,"name":"IMovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64348,"src":"565:16:118","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":62097,"nodeType":"ImportDirective","src":"625:59:118","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","nameLocation":"-1:-1:-1","scope":63932,"sourceUnit":45863,"symbolAliases":[],"unitAlias":""},{"id":63931,"nodeType":"ContractDefinition","src":"766:27108:118","nodes":[{"id":62109,"nodeType":"UsingForDirective","src":"887:49:118","nodes":[],"global":false,"libraryName":{"id":62106,"name":"EnumerableSet","nameLocations":["893:13:118"],"nodeType":"IdentifierPath","referencedDeclaration":52215,"src":"893:13:118"},"typeName":{"id":62108,"nodeType":"UserDefinedTypeName","pathNode":{"id":62107,"name":"EnumerableSet.AddressSet","nameLocations":["911:13:118","925:10:118"],"nodeType":"IdentifierPath","referencedDeclaration":51902,"src":"911:24:118"},"referencedDeclaration":51902,"src":"911:24:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},{"id":62112,"nodeType":"ErrorDefinition","src":"1017:28:118","nodes":[],"documentation":{"id":62110,"nodeType":"StructuredDocumentation","src":"942:70:118","text":"@notice Error thrown when trying to get epoch but duration not set"},"errorSelector":"143c378b","name":"EpochDurationNotSet","nameLocation":"1023:19:118","parameters":{"id":62111,"nodeType":"ParameterList","parameters":[],"src":"1042:2:118"}},{"id":62128,"nodeType":"FunctionDefinition","src":"1051:125:118","nodes":[],"body":{"id":62127,"nodeType":"Block","src":"1105:71:118","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":62120,"name":"__BaseStaking_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64054,"src":"1115:28:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":62121,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1115:30:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62122,"nodeType":"ExpressionStatement","src":"1115:30:118"},{"expression":{"id":62125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":62123,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"1155:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":62124,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62115,"src":"1163:6:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"src":"1155:14:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"id":62126,"nodeType":"ExpressionStatement","src":"1155:14:118"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":62118,"kind":"modifierInvocation","modifierName":{"id":62117,"name":"initializer","nameLocations":["1093:11:118"],"nodeType":"IdentifierPath","referencedDeclaration":39586,"src":"1093:11:118"},"nodeType":"ModifierInvocation","src":"1093:11:118"}],"name":"initialize","nameLocation":"1060:10:118","parameters":{"id":62116,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62115,"mutability":"mutable","name":"_token","nameLocation":"1078:6:118","nodeType":"VariableDeclaration","scope":62128,"src":"1071:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"},"typeName":{"id":62114,"nodeType":"UserDefinedTypeName","pathNode":{"id":62113,"name":"IERC20","nameLocations":["1071:6:118"],"nodeType":"IdentifierPath","referencedDeclaration":43848,"src":"1071:6:118"},"referencedDeclaration":43848,"src":"1071:6:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1070:15:118"},"returnParameters":{"id":62119,"nodeType":"ParameterList","parameters":[],"src":"1105:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":62173,"nodeType":"FunctionDefinition","src":"1245:359:118","nodes":[],"body":{"id":62172,"nodeType":"Block","src":"1367:237:118","nodes":[],"statements":[{"assignments":[62140],"declarations":[{"constant":false,"id":62140,"mutability":"mutable","name":"domain","nameLocation":"1385:6:118","nodeType":"VariableDeclaration","scope":62172,"src":"1377:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62139,"name":"address","nodeType":"ElementaryTypeName","src":"1377:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":62143,"initialValue":{"expression":{"id":62141,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1394:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":62142,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1398:6:118","memberName":"sender","nodeType":"MemberAccess","src":"1394:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1377:27:118"},{"expression":{"id":62148,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":62144,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63955,"src":"1414:21:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62146,"indexExpression":{"id":62145,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62140,"src":"1436:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1414:29:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":62147,"name":"epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62131,"src":"1446:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1414:45:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62149,"nodeType":"ExpressionStatement","src":"1414:45:118"},{"body":{"id":62170,"nodeType":"Block","src":"1518:80:118","statements":[{"expression":{"arguments":[{"baseExpression":{"id":62165,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62134,"src":"1573:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":62167,"indexExpression":{"id":62166,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62151,"src":"1584:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1573:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":62161,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"1532:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62163,"indexExpression":{"id":62162,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62140,"src":"1561:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1532:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62164,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1569:3:118","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":51929,"src":"1532:40:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$51902_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":62168,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1532:55:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62169,"nodeType":"ExpressionStatement","src":"1532:55:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62157,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62154,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62151,"src":"1490:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":62155,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62134,"src":"1494:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":62156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1505:6:118","memberName":"length","nodeType":"MemberAccess","src":"1494:17:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1490:21:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62171,"initializationExpression":{"assignments":[62151],"declarations":[{"constant":false,"id":62151,"mutability":"mutable","name":"i","nameLocation":"1483:1:118","nodeType":"VariableDeclaration","scope":62171,"src":"1475:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62150,"name":"uint256","nodeType":"ElementaryTypeName","src":"1475:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62153,"initialValue":{"hexValue":"30","id":62152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1487:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1475:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1513:3:118","subExpression":{"id":62158,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62151,"src":"1513:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62160,"nodeType":"ExpressionStatement","src":"1513:3:118"},"nodeType":"ForStatement","src":"1470:128:118"}]},"baseFunctions":[64078],"documentation":{"id":62129,"nodeType":"StructuredDocumentation","src":"1182:58:118","text":"@notice Registers a domain and sets the epoch duration"},"functionSelector":"d37304f8","implemented":true,"kind":"function","modifiers":[{"id":62137,"kind":"modifierInvocation","modifierName":{"id":62136,"name":"nonReentrant","nameLocations":["1354:12:118"],"nodeType":"IdentifierPath","referencedDeclaration":45826,"src":"1354:12:118"},"nodeType":"ModifierInvocation","src":"1354:12:118"}],"name":"registerDomain","nameLocation":"1254:14:118","parameters":{"id":62135,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62131,"mutability":"mutable","name":"epochDuration","nameLocation":"1286:13:118","nodeType":"VariableDeclaration","scope":62173,"src":"1278:21:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62130,"name":"uint256","nodeType":"ElementaryTypeName","src":"1278:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62134,"mutability":"mutable","name":"custodians","nameLocation":"1328:10:118","nodeType":"VariableDeclaration","scope":62173,"src":"1309:29:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62132,"name":"address","nodeType":"ElementaryTypeName","src":"1309:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62133,"nodeType":"ArrayTypeName","src":"1309:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1268:76:118"},"returnParameters":{"id":62138,"nodeType":"ParameterList","parameters":[],"src":"1367:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":62227,"nodeType":"FunctionDefinition","src":"1686:554:118","nodes":[],"body":{"id":62226,"nodeType":"Block","src":"1788:452:118","nodes":[],"statements":[{"assignments":[62186],"declarations":[{"constant":false,"id":62186,"mutability":"mutable","name":"custodians","nameLocation":"1943:10:118","nodeType":"VariableDeclaration","scope":62226,"src":"1926:27:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62184,"name":"address","nodeType":"ElementaryTypeName","src":"1926:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62185,"nodeType":"ArrayTypeName","src":"1926:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":62196,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62190,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"1983:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62192,"indexExpression":{"id":62191,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62176,"src":"2012:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1983:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62193,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2020:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"1983:43:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1983:45:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":62189,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1956:13:118","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":62187,"name":"address","nodeType":"ElementaryTypeName","src":"1960:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62188,"nodeType":"ArrayTypeName","src":"1960:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":62195,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1956:82:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1926:112:118"},{"body":{"id":62222,"nodeType":"Block","src":"2124:83:118","statements":[{"expression":{"id":62220,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":62211,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62186,"src":"2138:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":62213,"indexExpression":{"id":62212,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62198,"src":"2149:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2138:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":62218,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62198,"src":"2194:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":62214,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"2154:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62216,"indexExpression":{"id":62215,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62176,"src":"2183:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2154:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62217,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2191:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"2154:39:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":62219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2154:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2138:58:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62221,"nodeType":"ExpressionStatement","src":"2138:58:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62207,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62201,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62198,"src":"2068:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62202,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"2072:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62204,"indexExpression":{"id":62203,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62176,"src":"2101:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2072:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62205,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2109:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"2072:43:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62206,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2072:45:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2068:49:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62223,"initializationExpression":{"assignments":[62198],"declarations":[{"constant":false,"id":62198,"mutability":"mutable","name":"i","nameLocation":"2061:1:118","nodeType":"VariableDeclaration","scope":62223,"src":"2053:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62197,"name":"uint256","nodeType":"ElementaryTypeName","src":"2053:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62200,"initialValue":{"hexValue":"30","id":62199,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2065:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2053:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2119:3:118","subExpression":{"id":62208,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62198,"src":"2119:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62210,"nodeType":"ExpressionStatement","src":"2119:3:118"},"nodeType":"ForStatement","src":"2048:159:118"},{"expression":{"id":62224,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62186,"src":"2223:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":62181,"id":62225,"nodeType":"Return","src":"2216:17:118"}]},"baseFunctions":[64204],"documentation":{"id":62174,"nodeType":"StructuredDocumentation","src":"1610:71:118","text":"@notice Gets all custodians who are registered for the given domain"},"functionSelector":"341d5ef5","implemented":true,"kind":"function","modifiers":[],"name":"getRegisteredCustodians","nameLocation":"1695:23:118","parameters":{"id":62177,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62176,"mutability":"mutable","name":"domain","nameLocation":"1736:6:118","nodeType":"VariableDeclaration","scope":62227,"src":"1728:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62175,"name":"address","nodeType":"ElementaryTypeName","src":"1728:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1718:30:118"},"returnParameters":{"id":62181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62180,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62227,"src":"1770:16:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62178,"name":"address","nodeType":"ElementaryTypeName","src":"1770:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62179,"nodeType":"ArrayTypeName","src":"1770:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1769:18:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62281,"nodeType":"FunctionDefinition","src":"2321:419:118","nodes":[],"body":{"id":62280,"nodeType":"Block","src":"2422:318:118","nodes":[],"statements":[{"assignments":[62240],"declarations":[{"constant":false,"id":62240,"mutability":"mutable","name":"attesters","nameLocation":"2449:9:118","nodeType":"VariableDeclaration","scope":62280,"src":"2432:26:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62238,"name":"address","nodeType":"ElementaryTypeName","src":"2432:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62239,"nodeType":"ArrayTypeName","src":"2432:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":62250,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62244,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"2488:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62246,"indexExpression":{"id":62245,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62230,"src":"2516:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2488:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62247,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2524:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"2488:42:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2488:44:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":62243,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2461:13:118","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":62241,"name":"address","nodeType":"ElementaryTypeName","src":"2465:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62242,"nodeType":"ArrayTypeName","src":"2465:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":62249,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2461:81:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2432:110:118"},{"body":{"id":62276,"nodeType":"Block","src":"2627:81:118","statements":[{"expression":{"id":62274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":62265,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62240,"src":"2641:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":62267,"indexExpression":{"id":62266,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62252,"src":"2651:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2641:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":62272,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62252,"src":"2695:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":62268,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"2656:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62270,"indexExpression":{"id":62269,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62230,"src":"2684:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2656:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62271,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2692:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"2656:38:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":62273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2656:41:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2641:56:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62275,"nodeType":"ExpressionStatement","src":"2641:56:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62261,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62255,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62252,"src":"2572:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62256,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"2576:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62258,"indexExpression":{"id":62257,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62230,"src":"2604:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2576:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62259,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2612:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"2576:42:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62260,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2576:44:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2572:48:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62277,"initializationExpression":{"assignments":[62252],"declarations":[{"constant":false,"id":62252,"mutability":"mutable","name":"i","nameLocation":"2565:1:118","nodeType":"VariableDeclaration","scope":62277,"src":"2557:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62251,"name":"uint256","nodeType":"ElementaryTypeName","src":"2557:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62254,"initialValue":{"hexValue":"30","id":62253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2569:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2557:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62263,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2622:3:118","subExpression":{"id":62262,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62252,"src":"2622:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62264,"nodeType":"ExpressionStatement","src":"2622:3:118"},"nodeType":"ForStatement","src":"2552:156:118"},{"expression":{"id":62278,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62240,"src":"2724:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":62235,"id":62279,"nodeType":"Return","src":"2717:16:118"}]},"baseFunctions":[64212],"documentation":{"id":62228,"nodeType":"StructuredDocumentation","src":"2246:70:118","text":"@notice Gets all attesters who are registered for the given domain"},"functionSelector":"1789aeb4","implemented":true,"kind":"function","modifiers":[],"name":"getRegisteredAttesters","nameLocation":"2330:22:118","parameters":{"id":62231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62230,"mutability":"mutable","name":"domain","nameLocation":"2370:6:118","nodeType":"VariableDeclaration","scope":62281,"src":"2362:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62229,"name":"address","nodeType":"ElementaryTypeName","src":"2362:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2352:30:118"},"returnParameters":{"id":62235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62234,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62281,"src":"2404:16:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62232,"name":"address","nodeType":"ElementaryTypeName","src":"2404:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62233,"nodeType":"ArrayTypeName","src":"2404:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2403:18:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62390,"nodeType":"FunctionDefinition","src":"2827:1107:118","nodes":[],"body":{"id":62389,"nodeType":"Block","src":"2941:993:118","nodes":[],"statements":[{"assignments":[62291],"declarations":[{"constant":false,"id":62291,"mutability":"mutable","name":"totalAttesters","nameLocation":"3005:14:118","nodeType":"VariableDeclaration","scope":62389,"src":"2997:22:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62290,"name":"uint256","nodeType":"ElementaryTypeName","src":"2997:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62297,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62292,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"3022:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62294,"indexExpression":{"id":62293,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62284,"src":"3050:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3022:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62295,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3058:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"3022:42:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62296,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3022:44:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2997:69:118"},{"assignments":[62299],"declarations":[{"constant":false,"id":62299,"mutability":"mutable","name":"activeAttesterCount","nameLocation":"3131:19:118","nodeType":"VariableDeclaration","scope":62389,"src":"3123:27:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62298,"name":"uint256","nodeType":"ElementaryTypeName","src":"3123:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62301,"initialValue":{"hexValue":"30","id":62300,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3153:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3123:31:118"},{"body":{"id":62332,"nodeType":"Block","src":"3209:213:118","statements":[{"assignments":[62313],"declarations":[{"constant":false,"id":62313,"mutability":"mutable","name":"attester","nameLocation":"3231:8:118","nodeType":"VariableDeclaration","scope":62332,"src":"3223:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62312,"name":"address","nodeType":"ElementaryTypeName","src":"3223:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":62320,"initialValue":{"arguments":[{"id":62318,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62303,"src":"3281:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":62314,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"3242:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62316,"indexExpression":{"id":62315,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62284,"src":"3270:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3242:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62317,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3278:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"3242:38:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":62319,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3242:41:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3223:60:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62322,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62284,"src":"3335:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62323,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62313,"src":"3343:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62321,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63000,"src":"3301:33:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":62324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3301:51:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":62325,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3355:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3301:55:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62331,"nodeType":"IfStatement","src":"3297:115:118","trueBody":{"id":62330,"nodeType":"Block","src":"3358:54:118","statements":[{"expression":{"id":62328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3376:21:118","subExpression":{"id":62327,"name":"activeAttesterCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62299,"src":"3376:19:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62329,"nodeType":"ExpressionStatement","src":"3376:21:118"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62308,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62306,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62303,"src":"3184:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":62307,"name":"totalAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62291,"src":"3188:14:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3184:18:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62333,"initializationExpression":{"assignments":[62303],"declarations":[{"constant":false,"id":62303,"mutability":"mutable","name":"i","nameLocation":"3177:1:118","nodeType":"VariableDeclaration","scope":62333,"src":"3169:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62302,"name":"uint256","nodeType":"ElementaryTypeName","src":"3169:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62305,"initialValue":{"hexValue":"30","id":62304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3181:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3169:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62310,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3204:3:118","subExpression":{"id":62309,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62303,"src":"3204:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62311,"nodeType":"ExpressionStatement","src":"3204:3:118"},"nodeType":"ForStatement","src":"3164:258:118"},{"assignments":[62338],"declarations":[{"constant":false,"id":62338,"mutability":"mutable","name":"activeAttesters","nameLocation":"3493:15:118","nodeType":"VariableDeclaration","scope":62389,"src":"3476:32:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62336,"name":"address","nodeType":"ElementaryTypeName","src":"3476:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62337,"nodeType":"ArrayTypeName","src":"3476:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":62344,"initialValue":{"arguments":[{"id":62342,"name":"activeAttesterCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62299,"src":"3525:19:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":62341,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3511:13:118","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":62339,"name":"address","nodeType":"ElementaryTypeName","src":"3515:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62340,"nodeType":"ArrayTypeName","src":"3515:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":62343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3511:34:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3476:69:118"},{"assignments":[62346],"declarations":[{"constant":false,"id":62346,"mutability":"mutable","name":"activeIndex","nameLocation":"3563:11:118","nodeType":"VariableDeclaration","scope":62389,"src":"3555:19:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62345,"name":"uint256","nodeType":"ElementaryTypeName","src":"3555:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62348,"initialValue":{"hexValue":"30","id":62347,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3577:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3555:23:118"},{"body":{"id":62385,"nodeType":"Block","src":"3633:262:118","statements":[{"assignments":[62360],"declarations":[{"constant":false,"id":62360,"mutability":"mutable","name":"attester","nameLocation":"3655:8:118","nodeType":"VariableDeclaration","scope":62385,"src":"3647:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62359,"name":"address","nodeType":"ElementaryTypeName","src":"3647:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":62367,"initialValue":{"arguments":[{"id":62365,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62350,"src":"3705:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":62361,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"3666:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62363,"indexExpression":{"id":62362,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62284,"src":"3694:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3666:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62364,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3702:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"3666:38:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":62366,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3666:41:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3647:60:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62369,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62284,"src":"3759:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62370,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62360,"src":"3767:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62368,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63000,"src":"3725:33:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":62371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3725:51:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":62372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3779:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3725:55:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62384,"nodeType":"IfStatement","src":"3721:164:118","trueBody":{"id":62383,"nodeType":"Block","src":"3782:103:118","statements":[{"expression":{"id":62378,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":62374,"name":"activeAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62338,"src":"3800:15:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":62376,"indexExpression":{"id":62375,"name":"activeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62346,"src":"3816:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3800:28:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":62377,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62360,"src":"3831:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3800:39:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62379,"nodeType":"ExpressionStatement","src":"3800:39:118"},{"expression":{"id":62381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3857:13:118","subExpression":{"id":62380,"name":"activeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62346,"src":"3857:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62382,"nodeType":"ExpressionStatement","src":"3857:13:118"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62355,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62353,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62350,"src":"3608:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":62354,"name":"totalAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62291,"src":"3612:14:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3608:18:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62386,"initializationExpression":{"assignments":[62350],"declarations":[{"constant":false,"id":62350,"mutability":"mutable","name":"i","nameLocation":"3601:1:118","nodeType":"VariableDeclaration","scope":62386,"src":"3593:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62349,"name":"uint256","nodeType":"ElementaryTypeName","src":"3593:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62352,"initialValue":{"hexValue":"30","id":62351,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3605:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3593:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62357,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3628:3:118","subExpression":{"id":62356,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62350,"src":"3628:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62358,"nodeType":"ExpressionStatement","src":"3628:3:118"},"nodeType":"ForStatement","src":"3588:307:118"},{"expression":{"id":62387,"name":"activeAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62338,"src":"3912:15:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":62289,"id":62388,"nodeType":"Return","src":"3905:22:118"}]},"baseFunctions":[64296],"documentation":{"id":62282,"nodeType":"StructuredDocumentation","src":"2746:76:118","text":"@notice Gets all attesters who have stake in the current accepting epoch"},"functionSelector":"4234a479","implemented":true,"kind":"function","modifiers":[],"name":"getStakedAttestersForAcceptingEpoch","nameLocation":"2836:35:118","parameters":{"id":62285,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62284,"mutability":"mutable","name":"domain","nameLocation":"2889:6:118","nodeType":"VariableDeclaration","scope":62390,"src":"2881:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62283,"name":"address","nodeType":"ElementaryTypeName","src":"2881:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2871:30:118"},"returnParameters":{"id":62289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62288,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62390,"src":"2923:16:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62286,"name":"address","nodeType":"ElementaryTypeName","src":"2923:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62287,"nodeType":"ArrayTypeName","src":"2923:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2922:18:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62403,"nodeType":"FunctionDefinition","src":"4001:125:118","nodes":[],"body":{"id":62402,"nodeType":"Block","src":"4073:53:118","nodes":[],"statements":[{"expression":{"baseExpression":{"id":62398,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63955,"src":"4090:21:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62400,"indexExpression":{"id":62399,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62393,"src":"4112:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4090:29:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62397,"id":62401,"nodeType":"Return","src":"4083:36:118"}]},"baseFunctions":[64340],"documentation":{"id":62391,"nodeType":"StructuredDocumentation","src":"3940:56:118","text":"@notice Gets the epoch duration for the given domain"},"functionSelector":"5c534359","implemented":true,"kind":"function","modifiers":[],"name":"getEpochDuration","nameLocation":"4010:16:118","parameters":{"id":62394,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62393,"mutability":"mutable","name":"domain","nameLocation":"4035:6:118","nodeType":"VariableDeclaration","scope":62403,"src":"4027:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62392,"name":"address","nodeType":"ElementaryTypeName","src":"4027:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4026:16:118"},"returnParameters":{"id":62397,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62396,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62403,"src":"4064:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62395,"name":"uint256","nodeType":"ElementaryTypeName","src":"4064:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4063:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62447,"nodeType":"FunctionDefinition","src":"4287:406:118","nodes":[],"body":{"id":62446,"nodeType":"Block","src":"4357:336:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62419,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62412,"name":"newEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62408,"src":"4375:8:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"arguments":[{"id":62416,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62406,"src":"4417:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62415,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4409:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":62414,"name":"address","nodeType":"ElementaryTypeName","src":"4409:7:118","typeDescriptions":{}}},"id":62417,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4409:15:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62413,"name":"getEpochByL1BlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62744,"src":"4387:21:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62418,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4387:38:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4375:50:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4e45575f45504f43485f4d5553545f42455f4c4553535f5448414e5f50524553454e545f45504f4348","id":62420,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4427:43:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_bafb0cf99a53f47fa38d345ccc72a9af618a38afdc4637810d95112bae4fd5da","typeString":"literal_string \"NEW_EPOCH_MUST_BE_LESS_THAN_PRESENT_EPOCH\""},"value":"NEW_EPOCH_MUST_BE_LESS_THAN_PRESENT_EPOCH"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bafb0cf99a53f47fa38d345ccc72a9af618a38afdc4637810d95112bae4fd5da","typeString":"literal_string \"NEW_EPOCH_MUST_BE_LESS_THAN_PRESENT_EPOCH\""}],"id":62411,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4367:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":62421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4367:104:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62422,"nodeType":"ExpressionStatement","src":"4367:104:118"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62428,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62424,"name":"newEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62408,"src":"4489:8:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"id":62426,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62406,"src":"4518:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62425,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"4500:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62427,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4500:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4489:36:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4e45575f45504f43485f4d5553545f42455f4849474845525f5448414e5f43555252454e545f45504f4348","id":62429,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4527:45:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_855bed83e45ffd12caf7970c2a2c68213b0e5206360b8dce424893928859487b","typeString":"literal_string \"NEW_EPOCH_MUST_BE_HIGHER_THAN_CURRENT_EPOCH\""},"value":"NEW_EPOCH_MUST_BE_HIGHER_THAN_CURRENT_EPOCH"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_855bed83e45ffd12caf7970c2a2c68213b0e5206360b8dce424893928859487b","typeString":"literal_string \"NEW_EPOCH_MUST_BE_HIGHER_THAN_CURRENT_EPOCH\""}],"id":62423,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4481:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":62430,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4481:92:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62431,"nodeType":"ExpressionStatement","src":"4481:92:118"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":62436,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":62433,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4591:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":62434,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4595:6:118","memberName":"sender","nodeType":"MemberAccess","src":"4591:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":62435,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62406,"src":"4605:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4591:20:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a4544","id":62437,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4613:14:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_269df367cd41cace5897a935d0e0858fe4543b5619d45e09af6b124c1bb3d528","typeString":"literal_string \"UNAUTHORIZED\""},"value":"UNAUTHORIZED"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_269df367cd41cace5897a935d0e0858fe4543b5619d45e09af6b124c1bb3d528","typeString":"literal_string \"UNAUTHORIZED\""}],"id":62432,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4583:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":62438,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4583:45:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62439,"nodeType":"ExpressionStatement","src":"4583:45:118"},{"expression":{"id":62444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":62440,"name":"currentAcceptingEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63960,"src":"4638:29:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62442,"indexExpression":{"id":62441,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62406,"src":"4668:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4638:37:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":62443,"name":"newEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62408,"src":"4678:8:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4638:48:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62445,"nodeType":"ExpressionStatement","src":"4638:48:118"}]},"baseFunctions":[64347],"documentation":{"id":62404,"nodeType":"StructuredDocumentation","src":"4132:150:118","text":"@notice Sets the accepting epoch for a given domain\n @param domain The domain address\n @param newEpoch The new accepting epoch value"},"functionSelector":"1dc8b949","implemented":true,"kind":"function","modifiers":[],"name":"setAcceptingEpoch","nameLocation":"4296:17:118","parameters":{"id":62409,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62406,"mutability":"mutable","name":"domain","nameLocation":"4322:6:118","nodeType":"VariableDeclaration","scope":62447,"src":"4314:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62405,"name":"address","nodeType":"ElementaryTypeName","src":"4314:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62408,"mutability":"mutable","name":"newEpoch","nameLocation":"4338:8:118","nodeType":"VariableDeclaration","scope":62447,"src":"4330:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62407,"name":"uint256","nodeType":"ElementaryTypeName","src":"4330:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4313:34:118"},"returnParameters":{"id":62410,"nodeType":"ParameterList","parameters":[],"src":"4357:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":62570,"nodeType":"FunctionDefinition","src":"4699:1563:118","nodes":[],"body":{"id":62569,"nodeType":"Block","src":"4752:1510:118","nodes":[],"statements":[{"assignments":[62453],"declarations":[{"constant":false,"id":62453,"mutability":"mutable","name":"domain","nameLocation":"4770:6:118","nodeType":"VariableDeclaration","scope":62569,"src":"4762:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62452,"name":"address","nodeType":"ElementaryTypeName","src":"4762:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":62456,"initialValue":{"expression":{"id":62454,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4779:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":62455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4783:6:118","memberName":"sender","nodeType":"MemberAccess","src":"4779:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4762:27:118"},{"condition":{"baseExpression":{"id":62457,"name":"domainGenesisAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64005,"src":"4804:21:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":62459,"indexExpression":{"id":62458,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"4826:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4804:29:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62463,"nodeType":"IfStatement","src":"4800:66:118","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":62460,"name":"GenesisAlreadyAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64288,"src":"4842:22:118","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":62461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4842:24:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":62462,"nodeType":"RevertStatement","src":"4835:31:118"}},{"expression":{"id":62468,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":62464,"name":"domainGenesisAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64005,"src":"4876:21:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":62466,"indexExpression":{"id":62465,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"4898:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4876:29:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":62467,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4908:4:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4876:36:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62469,"nodeType":"ExpressionStatement","src":"4876:36:118"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":62471,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63955,"src":"4938:21:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62473,"indexExpression":{"id":62472,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"4960:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4938:29:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":62474,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4970:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4938:33:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":62470,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"4931:6:118","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":62476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4931:41:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62477,"nodeType":"ExpressionStatement","src":"4931:41:118"},{"expression":{"id":62484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":62478,"name":"currentAcceptingEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63960,"src":"5054:29:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62480,"indexExpression":{"id":62479,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5084:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5054:37:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":62482,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5116:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62481,"name":"getEpochByL1BlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62744,"src":"5094:21:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62483,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5094:29:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5054:69:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62485,"nodeType":"ExpressionStatement","src":"5054:69:118"},{"body":{"id":62567,"nodeType":"Block","src":"5209:1047:118","statements":[{"assignments":[62501],"declarations":[{"constant":false,"id":62501,"mutability":"mutable","name":"attester","nameLocation":"5231:8:118","nodeType":"VariableDeclaration","scope":62567,"src":"5223:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62500,"name":"address","nodeType":"ElementaryTypeName","src":"5223:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":62508,"initialValue":{"arguments":[{"id":62506,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62487,"src":"5281:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":62502,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"5242:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62504,"indexExpression":{"id":62503,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5270:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5242:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62505,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5278:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"5242:38:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":62507,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5242:41:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5223:60:118"},{"body":{"id":62565,"nodeType":"Block","src":"5374:876:118","statements":[{"assignments":[62524],"declarations":[{"constant":false,"id":62524,"mutability":"mutable","name":"custodian","nameLocation":"5400:9:118","nodeType":"VariableDeclaration","scope":62565,"src":"5392:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62523,"name":"address","nodeType":"ElementaryTypeName","src":"5392:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":62531,"initialValue":{"arguments":[{"id":62529,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62510,"src":"5452:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":62525,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"5412:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62527,"indexExpression":{"id":62526,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5441:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5412:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62528,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5449:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"5412:39:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":62530,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5412:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5392:62:118"},{"assignments":[62533],"declarations":[{"constant":false,"id":62533,"mutability":"mutable","name":"attesterStake","nameLocation":"5539:13:118","nodeType":"VariableDeclaration","scope":62565,"src":"5531:21:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62532,"name":"uint256","nodeType":"ElementaryTypeName","src":"5531:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62540,"initialValue":{"arguments":[{"id":62535,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5585:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":62536,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5613:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":62537,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62524,"src":"5636:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62538,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62501,"src":"5667:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62534,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"5555:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":62539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5555:138:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5531:162:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62542,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5897:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62541,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"5879:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5879:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":62544,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5907:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5879:29:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62564,"nodeType":"IfStatement","src":"5875:365:118","trueBody":{"id":62563,"nodeType":"Block","src":"5910:330:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62547,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5950:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62546,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"5932:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5932:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":62549,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5960:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5932:29:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62562,"nodeType":"IfStatement","src":"5928:298:118","trueBody":{"id":62561,"nodeType":"Block","src":"5963:263:118","statements":[{"expression":{"arguments":[{"id":62552,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"6020:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":62554,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"6070:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62553,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"6052:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6052:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":62556,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62524,"src":"6103:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62557,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62501,"src":"6138:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62558,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62533,"src":"6172:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":62551,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62606,"src":"5985:9:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":62559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5985:222:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62560,"nodeType":"ExpressionStatement","src":"5985:222:118"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62513,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62510,"src":"5318:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62514,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"5322:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62516,"indexExpression":{"id":62515,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5351:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5322:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62517,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5359:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"5322:43:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62518,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5322:45:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5318:49:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62566,"initializationExpression":{"assignments":[62510],"declarations":[{"constant":false,"id":62510,"mutability":"mutable","name":"j","nameLocation":"5311:1:118","nodeType":"VariableDeclaration","scope":62566,"src":"5303:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62509,"name":"uint256","nodeType":"ElementaryTypeName","src":"5303:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62512,"initialValue":{"hexValue":"30","id":62511,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5315:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5303:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62521,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5369:3:118","subExpression":{"id":62520,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62510,"src":"5369:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62522,"nodeType":"ExpressionStatement","src":"5369:3:118"},"nodeType":"ForStatement","src":"5298:952:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62496,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62490,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62487,"src":"5154:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62491,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"5158:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62493,"indexExpression":{"id":62492,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"5186:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5158:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62494,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5194:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"5158:42:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62495,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5158:44:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5154:48:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62568,"initializationExpression":{"assignments":[62487],"declarations":[{"constant":false,"id":62487,"mutability":"mutable","name":"i","nameLocation":"5147:1:118","nodeType":"VariableDeclaration","scope":62568,"src":"5139:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62486,"name":"uint256","nodeType":"ElementaryTypeName","src":"5139:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62489,"initialValue":{"hexValue":"30","id":62488,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5151:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5139:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62498,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5204:3:118","subExpression":{"id":62497,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62487,"src":"5204:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62499,"nodeType":"ExpressionStatement","src":"5204:3:118"},"nodeType":"ForStatement","src":"5134:1122:118"}]},"baseFunctions":[64081],"functionSelector":"92a2ebf3","implemented":true,"kind":"function","modifiers":[{"id":62450,"kind":"modifierInvocation","modifierName":{"id":62449,"name":"nonReentrant","nameLocations":["4739:12:118"],"nodeType":"IdentifierPath","referencedDeclaration":45826,"src":"4739:12:118"},"nodeType":"ModifierInvocation","src":"4739:12:118"}],"name":"acceptGenesisCeremony","nameLocation":"4708:21:118","parameters":{"id":62448,"nodeType":"ParameterList","parameters":[],"src":"4729:2:118"},"returnParameters":{"id":62451,"nodeType":"ParameterList","parameters":[],"src":"4752:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":62606,"nodeType":"FunctionDefinition","src":"6268:331:118","nodes":[],"body":{"id":62605,"nodeType":"Block","src":"6426:173:118","nodes":[],"statements":[{"expression":{"id":62593,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62583,"name":"stakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63981,"src":"6436:36:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":62588,"indexExpression":{"id":62584,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62572,"src":"6473:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6436:44:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":62589,"indexExpression":{"id":62585,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62574,"src":"6481:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6436:51:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":62590,"indexExpression":{"id":62586,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62576,"src":"6488:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6436:62:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62591,"indexExpression":{"id":62587,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62578,"src":"6499:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6436:72:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":62592,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62580,"src":"6512:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6436:82:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62594,"nodeType":"ExpressionStatement","src":"6436:82:118"},{"expression":{"id":62603,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62595,"name":"stakesByDomainEpochCustodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64001,"src":"6528:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":62599,"indexExpression":{"id":62596,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62572,"src":"6557:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6528:36:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":62600,"indexExpression":{"id":62597,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62574,"src":"6565:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6528:43:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62601,"indexExpression":{"id":62598,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62576,"src":"6572:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6528:54:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":62602,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62580,"src":"6586:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6528:64:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62604,"nodeType":"ExpressionStatement","src":"6528:64:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_addStake","nameLocation":"6277:9:118","parameters":{"id":62581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62572,"mutability":"mutable","name":"domain","nameLocation":"6304:6:118","nodeType":"VariableDeclaration","scope":62606,"src":"6296:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62571,"name":"address","nodeType":"ElementaryTypeName","src":"6296:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62574,"mutability":"mutable","name":"epoch","nameLocation":"6328:5:118","nodeType":"VariableDeclaration","scope":62606,"src":"6320:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62573,"name":"uint256","nodeType":"ElementaryTypeName","src":"6320:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62576,"mutability":"mutable","name":"custodian","nameLocation":"6351:9:118","nodeType":"VariableDeclaration","scope":62606,"src":"6343:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62575,"name":"address","nodeType":"ElementaryTypeName","src":"6343:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62578,"mutability":"mutable","name":"attester","nameLocation":"6378:8:118","nodeType":"VariableDeclaration","scope":62606,"src":"6370:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62577,"name":"address","nodeType":"ElementaryTypeName","src":"6370:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62580,"mutability":"mutable","name":"amount","nameLocation":"6404:6:118","nodeType":"VariableDeclaration","scope":62606,"src":"6396:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62579,"name":"uint256","nodeType":"ElementaryTypeName","src":"6396:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6286:130:118"},"returnParameters":{"id":62582,"nodeType":"ParameterList","parameters":[],"src":"6426:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":62642,"nodeType":"FunctionDefinition","src":"6605:334:118","nodes":[],"body":{"id":62641,"nodeType":"Block","src":"6766:173:118","nodes":[],"statements":[{"expression":{"id":62629,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62619,"name":"stakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63981,"src":"6776:36:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":62624,"indexExpression":{"id":62620,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62608,"src":"6813:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6776:44:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":62625,"indexExpression":{"id":62621,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62610,"src":"6821:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6776:51:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":62626,"indexExpression":{"id":62622,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62612,"src":"6828:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6776:62:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62627,"indexExpression":{"id":62623,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62614,"src":"6839:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6776:72:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":62628,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62616,"src":"6852:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6776:82:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62630,"nodeType":"ExpressionStatement","src":"6776:82:118"},{"expression":{"id":62639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62631,"name":"stakesByDomainEpochCustodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64001,"src":"6868:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":62635,"indexExpression":{"id":62632,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62608,"src":"6897:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6868:36:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":62636,"indexExpression":{"id":62633,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62610,"src":"6905:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6868:43:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62637,"indexExpression":{"id":62634,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62612,"src":"6912:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6868:54:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":62638,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62616,"src":"6926:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6868:64:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62640,"nodeType":"ExpressionStatement","src":"6868:64:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeStake","nameLocation":"6614:12:118","parameters":{"id":62617,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62608,"mutability":"mutable","name":"domain","nameLocation":"6644:6:118","nodeType":"VariableDeclaration","scope":62642,"src":"6636:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62607,"name":"address","nodeType":"ElementaryTypeName","src":"6636:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62610,"mutability":"mutable","name":"epoch","nameLocation":"6668:5:118","nodeType":"VariableDeclaration","scope":62642,"src":"6660:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62609,"name":"uint256","nodeType":"ElementaryTypeName","src":"6660:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62612,"mutability":"mutable","name":"custodian","nameLocation":"6691:9:118","nodeType":"VariableDeclaration","scope":62642,"src":"6683:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62611,"name":"address","nodeType":"ElementaryTypeName","src":"6683:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62614,"mutability":"mutable","name":"attester","nameLocation":"6718:8:118","nodeType":"VariableDeclaration","scope":62642,"src":"6710:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62613,"name":"address","nodeType":"ElementaryTypeName","src":"6710:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62616,"mutability":"mutable","name":"amount","nameLocation":"6744:6:118","nodeType":"VariableDeclaration","scope":62642,"src":"6736:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62615,"name":"uint256","nodeType":"ElementaryTypeName","src":"6736:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6626:130:118"},"returnParameters":{"id":62618,"nodeType":"ParameterList","parameters":[],"src":"6766:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":62668,"nodeType":"FunctionDefinition","src":"6945:261:118","nodes":[],"body":{"id":62667,"nodeType":"Block","src":"7105:101:118","nodes":[],"statements":[{"expression":{"id":62665,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62655,"name":"unstakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63992,"src":"7115:38:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":62660,"indexExpression":{"id":62656,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62644,"src":"7154:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7115:46:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":62661,"indexExpression":{"id":62657,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62646,"src":"7162:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7115:53:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":62662,"indexExpression":{"id":62658,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62648,"src":"7169:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7115:64:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62663,"indexExpression":{"id":62659,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62650,"src":"7180:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7115:74:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":62664,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62652,"src":"7193:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7115:84:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62666,"nodeType":"ExpressionStatement","src":"7115:84:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_addUnstake","nameLocation":"6954:11:118","parameters":{"id":62653,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62644,"mutability":"mutable","name":"domain","nameLocation":"6983:6:118","nodeType":"VariableDeclaration","scope":62668,"src":"6975:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62643,"name":"address","nodeType":"ElementaryTypeName","src":"6975:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62646,"mutability":"mutable","name":"epoch","nameLocation":"7007:5:118","nodeType":"VariableDeclaration","scope":62668,"src":"6999:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62645,"name":"uint256","nodeType":"ElementaryTypeName","src":"6999:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62648,"mutability":"mutable","name":"custodian","nameLocation":"7030:9:118","nodeType":"VariableDeclaration","scope":62668,"src":"7022:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62647,"name":"address","nodeType":"ElementaryTypeName","src":"7022:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62650,"mutability":"mutable","name":"attester","nameLocation":"7057:8:118","nodeType":"VariableDeclaration","scope":62668,"src":"7049:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62649,"name":"address","nodeType":"ElementaryTypeName","src":"7049:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62652,"mutability":"mutable","name":"amount","nameLocation":"7083:6:118","nodeType":"VariableDeclaration","scope":62668,"src":"7075:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62651,"name":"uint256","nodeType":"ElementaryTypeName","src":"7075:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6965:130:118"},"returnParameters":{"id":62654,"nodeType":"ParameterList","parameters":[],"src":"7105:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":62694,"nodeType":"FunctionDefinition","src":"7212:264:118","nodes":[],"body":{"id":62693,"nodeType":"Block","src":"7375:101:118","nodes":[],"statements":[{"expression":{"id":62691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62681,"name":"unstakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63992,"src":"7385:38:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":62686,"indexExpression":{"id":62682,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62670,"src":"7424:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7385:46:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":62687,"indexExpression":{"id":62683,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62672,"src":"7432:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7385:53:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":62688,"indexExpression":{"id":62684,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62674,"src":"7439:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7385:64:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62689,"indexExpression":{"id":62685,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62676,"src":"7450:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7385:74:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":62690,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62678,"src":"7463:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7385:84:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62692,"nodeType":"ExpressionStatement","src":"7385:84:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeUnstake","nameLocation":"7221:14:118","parameters":{"id":62679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62670,"mutability":"mutable","name":"domain","nameLocation":"7253:6:118","nodeType":"VariableDeclaration","scope":62694,"src":"7245:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62669,"name":"address","nodeType":"ElementaryTypeName","src":"7245:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62672,"mutability":"mutable","name":"epoch","nameLocation":"7277:5:118","nodeType":"VariableDeclaration","scope":62694,"src":"7269:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62671,"name":"uint256","nodeType":"ElementaryTypeName","src":"7269:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62674,"mutability":"mutable","name":"custodian","nameLocation":"7300:9:118","nodeType":"VariableDeclaration","scope":62694,"src":"7292:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62673,"name":"address","nodeType":"ElementaryTypeName","src":"7292:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62676,"mutability":"mutable","name":"attester","nameLocation":"7327:8:118","nodeType":"VariableDeclaration","scope":62694,"src":"7319:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62675,"name":"address","nodeType":"ElementaryTypeName","src":"7319:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62678,"mutability":"mutable","name":"amount","nameLocation":"7353:6:118","nodeType":"VariableDeclaration","scope":62694,"src":"7345:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62677,"name":"uint256","nodeType":"ElementaryTypeName","src":"7345:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7235:130:118"},"returnParameters":{"id":62680,"nodeType":"ParameterList","parameters":[],"src":"7375:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":62720,"nodeType":"FunctionDefinition","src":"7482:260:118","nodes":[],"body":{"id":62719,"nodeType":"Block","src":"7642:100:118","nodes":[],"statements":[{"expression":{"id":62717,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62707,"name":"unstakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63992,"src":"7652:38:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":62712,"indexExpression":{"id":62708,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62696,"src":"7691:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7652:46:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":62713,"indexExpression":{"id":62709,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62698,"src":"7699:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7652:53:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":62714,"indexExpression":{"id":62710,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62700,"src":"7706:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7652:64:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62715,"indexExpression":{"id":62711,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62702,"src":"7717:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7652:74:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":62716,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62704,"src":"7729:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7652:83:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62718,"nodeType":"ExpressionStatement","src":"7652:83:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setUnstake","nameLocation":"7491:11:118","parameters":{"id":62705,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62696,"mutability":"mutable","name":"domain","nameLocation":"7520:6:118","nodeType":"VariableDeclaration","scope":62720,"src":"7512:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62695,"name":"address","nodeType":"ElementaryTypeName","src":"7512:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62698,"mutability":"mutable","name":"epoch","nameLocation":"7544:5:118","nodeType":"VariableDeclaration","scope":62720,"src":"7536:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62697,"name":"uint256","nodeType":"ElementaryTypeName","src":"7536:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62700,"mutability":"mutable","name":"custodian","nameLocation":"7567:9:118","nodeType":"VariableDeclaration","scope":62720,"src":"7559:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62699,"name":"address","nodeType":"ElementaryTypeName","src":"7559:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62702,"mutability":"mutable","name":"attester","nameLocation":"7594:8:118","nodeType":"VariableDeclaration","scope":62720,"src":"7586:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62701,"name":"address","nodeType":"ElementaryTypeName","src":"7586:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62704,"mutability":"mutable","name":"amount","nameLocation":"7620:6:118","nodeType":"VariableDeclaration","scope":62720,"src":"7612:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62703,"name":"uint256","nodeType":"ElementaryTypeName","src":"7612:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7502:130:118"},"returnParameters":{"id":62706,"nodeType":"ParameterList","parameters":[],"src":"7642:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":62744,"nodeType":"FunctionDefinition","src":"8002:226:118","nodes":[],"body":{"id":62743,"nodeType":"Block","src":"8079:149:118","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62731,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":62727,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63955,"src":"8093:21:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62729,"indexExpression":{"id":62728,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62722,"src":"8115:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8093:29:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":62730,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8126:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8093:34:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62735,"nodeType":"IfStatement","src":"8089:68:118","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":62732,"name":"EpochDurationNotSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62112,"src":"8136:19:118","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":62733,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8136:21:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":62734,"nodeType":"RevertStatement","src":"8129:28:118"}},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":62736,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"8174:5:118","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":62737,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8180:9:118","memberName":"timestamp","nodeType":"MemberAccess","src":"8174:15:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"id":62738,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63955,"src":"8192:21:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62740,"indexExpression":{"id":62739,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62722,"src":"8214:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8192:29:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8174:47:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62726,"id":62742,"nodeType":"Return","src":"8167:54:118"}]},"baseFunctions":[64088],"functionSelector":"d980b40d","implemented":true,"kind":"function","modifiers":[],"name":"getEpochByL1BlockTime","nameLocation":"8011:21:118","parameters":{"id":62723,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62722,"mutability":"mutable","name":"domain","nameLocation":"8041:6:118","nodeType":"VariableDeclaration","scope":62744,"src":"8033:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62721,"name":"address","nodeType":"ElementaryTypeName","src":"8033:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8032:16:118"},"returnParameters":{"id":62726,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62725,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62744,"src":"8070:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62724,"name":"uint256","nodeType":"ElementaryTypeName","src":"8070:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8069:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62756,"nodeType":"FunctionDefinition","src":"8307:134:118","nodes":[],"body":{"id":62755,"nodeType":"Block","src":"8380:61:118","nodes":[],"statements":[{"expression":{"baseExpression":{"id":62751,"name":"currentAcceptingEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63960,"src":"8397:29:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62753,"indexExpression":{"id":62752,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62746,"src":"8427:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8397:37:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62750,"id":62754,"nodeType":"Return","src":"8390:44:118"}]},"baseFunctions":[64095],"functionSelector":"22fceb75","implemented":true,"kind":"function","modifiers":[],"name":"getAcceptingEpoch","nameLocation":"8316:17:118","parameters":{"id":62747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62746,"mutability":"mutable","name":"domain","nameLocation":"8342:6:118","nodeType":"VariableDeclaration","scope":62756,"src":"8334:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62745,"name":"address","nodeType":"ElementaryTypeName","src":"8334:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8333:16:118"},"returnParameters":{"id":62750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62749,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62756,"src":"8371:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62748,"name":"uint256","nodeType":"ElementaryTypeName","src":"8371:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8370:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62778,"nodeType":"FunctionDefinition","src":"8661:180:118","nodes":[],"body":{"id":62777,"nodeType":"Block","src":"8751:90:118","nodes":[],"statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62768,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62765,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62759,"src":"8786:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62764,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"8768:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62766,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8768:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":62767,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8797:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8768:30:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62771,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62759,"src":"8823:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62770,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"8805:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8805:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":62773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8833:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8805:29:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8768:66:118","trueExpression":{"hexValue":"30","id":62769,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8801:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62763,"id":62776,"nodeType":"Return","src":"8761:73:118"}]},"baseFunctions":[64102],"documentation":{"id":62757,"nodeType":"StructuredDocumentation","src":"8447:209:118","text":"@notice Gets the next accepting epoch number\n @dev Special handling for genesis state (epoch 0):\n @dev If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes"},"functionSelector":"771fcfc4","implemented":true,"kind":"function","modifiers":[],"name":"getNextAcceptingEpochWithException","nameLocation":"8670:34:118","parameters":{"id":62760,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62759,"mutability":"mutable","name":"domain","nameLocation":"8713:6:118","nodeType":"VariableDeclaration","scope":62778,"src":"8705:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62758,"name":"address","nodeType":"ElementaryTypeName","src":"8705:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8704:16:118"},"returnParameters":{"id":62763,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62762,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62778,"src":"8742:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62761,"name":"uint256","nodeType":"ElementaryTypeName","src":"8742:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8741:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62800,"nodeType":"FunctionDefinition","src":"9069:182:118","nodes":[],"body":{"id":62799,"nodeType":"Block","src":"9157:94:118","nodes":[],"statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62787,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62781,"src":"9192:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62786,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"9174:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62788,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9174:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":62789,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9203:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9174:30:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62793,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62781,"src":"9233:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62792,"name":"getEpochByL1BlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62744,"src":"9211:21:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62794,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9211:29:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":62795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9243:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9211:33:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62797,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9174:70:118","trueExpression":{"hexValue":"30","id":62791,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9207:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62785,"id":62798,"nodeType":"Return","src":"9167:77:118"}]},"baseFunctions":[64109],"documentation":{"id":62779,"nodeType":"StructuredDocumentation","src":"8847:217:118","text":"@notice Gets the next present epoch number\n @dev Special handling for genesis state (accepting epoch 0):\n @dev If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes"},"functionSelector":"57dd6a94","implemented":true,"kind":"function","modifiers":[],"name":"getNextPresentEpochWithException","nameLocation":"9078:32:118","parameters":{"id":62782,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62781,"mutability":"mutable","name":"domain","nameLocation":"9119:6:118","nodeType":"VariableDeclaration","scope":62800,"src":"9111:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62780,"name":"address","nodeType":"ElementaryTypeName","src":"9111:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9110:16:118"},"returnParameters":{"id":62785,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62784,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62800,"src":"9148:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62783,"name":"uint256","nodeType":"ElementaryTypeName","src":"9148:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9147:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62825,"nodeType":"FunctionDefinition","src":"9342:250:118","nodes":[],"body":{"id":62824,"nodeType":"Block","src":"9496:96:118","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62814,"name":"stakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63981,"src":"9513:36:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":62816,"indexExpression":{"id":62815,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62803,"src":"9550:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9513:44:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":62818,"indexExpression":{"id":62817,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62805,"src":"9558:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9513:51:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":62820,"indexExpression":{"id":62819,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62807,"src":"9565:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9513:62:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62822,"indexExpression":{"id":62821,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62809,"src":"9576:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9513:72:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62813,"id":62823,"nodeType":"Return","src":"9506:79:118"}]},"baseFunctions":[64122],"documentation":{"id":62801,"nodeType":"StructuredDocumentation","src":"9257:80:118","text":"@dev gets the stake for a given epoch for a given {attester,custodian} tuple"},"functionSelector":"93dfb85c","implemented":true,"kind":"function","modifiers":[],"name":"getStake","nameLocation":"9351:8:118","parameters":{"id":62810,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62803,"mutability":"mutable","name":"domain","nameLocation":"9377:6:118","nodeType":"VariableDeclaration","scope":62825,"src":"9369:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62802,"name":"address","nodeType":"ElementaryTypeName","src":"9369:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62805,"mutability":"mutable","name":"epoch","nameLocation":"9401:5:118","nodeType":"VariableDeclaration","scope":62825,"src":"9393:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62804,"name":"uint256","nodeType":"ElementaryTypeName","src":"9393:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62807,"mutability":"mutable","name":"custodian","nameLocation":"9424:9:118","nodeType":"VariableDeclaration","scope":62825,"src":"9416:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62806,"name":"address","nodeType":"ElementaryTypeName","src":"9416:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62809,"mutability":"mutable","name":"attester","nameLocation":"9451:8:118","nodeType":"VariableDeclaration","scope":62825,"src":"9443:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62808,"name":"address","nodeType":"ElementaryTypeName","src":"9443:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9359:106:118"},"returnParameters":{"id":62813,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62812,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62825,"src":"9487:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62811,"name":"uint256","nodeType":"ElementaryTypeName","src":"9487:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9486:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62847,"nodeType":"FunctionDefinition","src":"9689:326:118","nodes":[],"body":{"id":62846,"nodeType":"Block","src":"9837:178:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":62838,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62828,"src":"9892:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":62840,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62828,"src":"9934:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62839,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"9916:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9916:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":62842,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62830,"src":"9959:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62843,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62832,"src":"9986:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62837,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"9866:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":62844,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9866:142:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62836,"id":62845,"nodeType":"Return","src":"9847:161:118"}]},"baseFunctions":[64133],"documentation":{"id":62826,"nodeType":"StructuredDocumentation","src":"9598:86:118","text":"@dev gets the stake for the accepting epoch for a given {attester,custodian} tuple"},"functionSelector":"a78d1fef","implemented":true,"kind":"function","modifiers":[],"name":"getStakeForAcceptingEpoch","nameLocation":"9698:25:118","parameters":{"id":62833,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62828,"mutability":"mutable","name":"domain","nameLocation":"9741:6:118","nodeType":"VariableDeclaration","scope":62847,"src":"9733:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62827,"name":"address","nodeType":"ElementaryTypeName","src":"9733:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62830,"mutability":"mutable","name":"custodian","nameLocation":"9765:9:118","nodeType":"VariableDeclaration","scope":62847,"src":"9757:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62829,"name":"address","nodeType":"ElementaryTypeName","src":"9757:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62832,"mutability":"mutable","name":"attester","nameLocation":"9792:8:118","nodeType":"VariableDeclaration","scope":62847,"src":"9784:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62831,"name":"address","nodeType":"ElementaryTypeName","src":"9784:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9723:83:118"},"returnParameters":{"id":62836,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62835,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62847,"src":"9828:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62834,"name":"uint256","nodeType":"ElementaryTypeName","src":"9828:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9827:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62872,"nodeType":"FunctionDefinition","src":"10109:254:118","nodes":[],"body":{"id":62871,"nodeType":"Block","src":"10265:98:118","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62861,"name":"unstakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63992,"src":"10282:38:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":62863,"indexExpression":{"id":62862,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62850,"src":"10321:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10282:46:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":62865,"indexExpression":{"id":62864,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62852,"src":"10329:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10282:53:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":62867,"indexExpression":{"id":62866,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62854,"src":"10336:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10282:64:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62869,"indexExpression":{"id":62868,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62856,"src":"10347:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10282:74:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62860,"id":62870,"nodeType":"Return","src":"10275:81:118"}]},"baseFunctions":[64146],"documentation":{"id":62848,"nodeType":"StructuredDocumentation","src":"10021:83:118","text":"@dev gets the unstake for a given epoch for a given {attester,custodian} tuple"},"functionSelector":"7d93768b","implemented":true,"kind":"function","modifiers":[],"name":"getUnstake","nameLocation":"10118:10:118","parameters":{"id":62857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62850,"mutability":"mutable","name":"domain","nameLocation":"10146:6:118","nodeType":"VariableDeclaration","scope":62872,"src":"10138:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62849,"name":"address","nodeType":"ElementaryTypeName","src":"10138:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62852,"mutability":"mutable","name":"epoch","nameLocation":"10170:5:118","nodeType":"VariableDeclaration","scope":62872,"src":"10162:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62851,"name":"uint256","nodeType":"ElementaryTypeName","src":"10162:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62854,"mutability":"mutable","name":"custodian","nameLocation":"10193:9:118","nodeType":"VariableDeclaration","scope":62872,"src":"10185:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62853,"name":"address","nodeType":"ElementaryTypeName","src":"10185:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62856,"mutability":"mutable","name":"attester","nameLocation":"10220:8:118","nodeType":"VariableDeclaration","scope":62872,"src":"10212:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62855,"name":"address","nodeType":"ElementaryTypeName","src":"10212:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10128:106:118"},"returnParameters":{"id":62860,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62859,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62872,"src":"10256:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62858,"name":"uint256","nodeType":"ElementaryTypeName","src":"10256:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10255:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62894,"nodeType":"FunctionDefinition","src":"10462:330:118","nodes":[],"body":{"id":62893,"nodeType":"Block","src":"10612:180:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":62885,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62875,"src":"10669:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":62887,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62875,"src":"10711:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62886,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"10693:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62888,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10693:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":62889,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62877,"src":"10736:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62890,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62879,"src":"10763:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62884,"name":"getUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62872,"src":"10641:10:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":62891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10641:144:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62883,"id":62892,"nodeType":"Return","src":"10622:163:118"}]},"baseFunctions":[64157],"documentation":{"id":62873,"nodeType":"StructuredDocumentation","src":"10369:88:118","text":"@dev gets the unstake for the accepting epoch for a given {attester,custodian} tuple"},"functionSelector":"34eada3a","implemented":true,"kind":"function","modifiers":[],"name":"getUnstakeForAcceptingEpoch","nameLocation":"10471:27:118","parameters":{"id":62880,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62875,"mutability":"mutable","name":"domain","nameLocation":"10516:6:118","nodeType":"VariableDeclaration","scope":62894,"src":"10508:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62874,"name":"address","nodeType":"ElementaryTypeName","src":"10508:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62877,"mutability":"mutable","name":"custodian","nameLocation":"10540:9:118","nodeType":"VariableDeclaration","scope":62894,"src":"10532:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62876,"name":"address","nodeType":"ElementaryTypeName","src":"10532:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62879,"mutability":"mutable","name":"attester","nameLocation":"10567:8:118","nodeType":"VariableDeclaration","scope":62894,"src":"10559:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62878,"name":"address","nodeType":"ElementaryTypeName","src":"10559:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10498:83:118"},"returnParameters":{"id":62883,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62882,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62894,"src":"10603:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62881,"name":"uint256","nodeType":"ElementaryTypeName","src":"10603:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10602:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62915,"nodeType":"FunctionDefinition","src":"10872:215:118","nodes":[],"body":{"id":62914,"nodeType":"Block","src":"11009:78:118","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":62906,"name":"stakesByDomainEpochCustodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64001,"src":"11026:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":62908,"indexExpression":{"id":62907,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62897,"src":"11055:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11026:36:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":62910,"indexExpression":{"id":62909,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62899,"src":"11063:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11026:43:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":62912,"indexExpression":{"id":62911,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62901,"src":"11070:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11026:54:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62905,"id":62913,"nodeType":"Return","src":"11019:61:118"}]},"baseFunctions":[64168],"documentation":{"id":62895,"nodeType":"StructuredDocumentation","src":"10798:69:118","text":"@dev gets the total stake for a given epoch for a given custodian"},"functionSelector":"0ce52af5","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStake","nameLocation":"10881:17:118","parameters":{"id":62902,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62897,"mutability":"mutable","name":"domain","nameLocation":"10916:6:118","nodeType":"VariableDeclaration","scope":62915,"src":"10908:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62896,"name":"address","nodeType":"ElementaryTypeName","src":"10908:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62899,"mutability":"mutable","name":"epoch","nameLocation":"10940:5:118","nodeType":"VariableDeclaration","scope":62915,"src":"10932:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62898,"name":"uint256","nodeType":"ElementaryTypeName","src":"10932:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62901,"mutability":"mutable","name":"custodian","nameLocation":"10963:9:118","nodeType":"VariableDeclaration","scope":62915,"src":"10955:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62900,"name":"address","nodeType":"ElementaryTypeName","src":"10955:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10898:80:118"},"returnParameters":{"id":62905,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62904,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62915,"src":"11000:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62903,"name":"uint256","nodeType":"ElementaryTypeName","src":"11000:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10999:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62934,"nodeType":"FunctionDefinition","src":"11173:230:118","nodes":[],"body":{"id":62933,"nodeType":"Block","src":"11304:99:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":62926,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62918,"src":"11351:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":62928,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62918,"src":"11377:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62927,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"11359:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62929,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11359:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":62930,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62920,"src":"11386:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62925,"name":"getCustodianStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62915,"src":"11333:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view returns (uint256)"}},"id":62931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11333:63:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62924,"id":62932,"nodeType":"Return","src":"11314:82:118"}]},"baseFunctions":[64177],"documentation":{"id":62916,"nodeType":"StructuredDocumentation","src":"11093:75:118","text":"@dev gets the total stake for the accepting epoch for a given custodian"},"functionSelector":"9db92f68","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStakeForAcceptingEpoch","nameLocation":"11182:34:118","parameters":{"id":62921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62918,"mutability":"mutable","name":"domain","nameLocation":"11234:6:118","nodeType":"VariableDeclaration","scope":62934,"src":"11226:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62917,"name":"address","nodeType":"ElementaryTypeName","src":"11226:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62920,"mutability":"mutable","name":"custodian","nameLocation":"11258:9:118","nodeType":"VariableDeclaration","scope":62934,"src":"11250:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62919,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11216:57:118"},"returnParameters":{"id":62924,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62923,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62934,"src":"11295:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62922,"name":"uint256","nodeType":"ElementaryTypeName","src":"11295:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11294:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62982,"nodeType":"FunctionDefinition","src":"11409:381:118","nodes":[],"body":{"id":62981,"nodeType":"Block","src":"11514:276:118","nodes":[],"statements":[{"assignments":[62946],"declarations":[{"constant":false,"id":62946,"mutability":"mutable","name":"attesterStake","nameLocation":"11532:13:118","nodeType":"VariableDeclaration","scope":62981,"src":"11524:21:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62945,"name":"uint256","nodeType":"ElementaryTypeName","src":"11524:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62948,"initialValue":{"hexValue":"30","id":62947,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11548:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11524:25:118"},{"body":{"id":62977,"nodeType":"Block","src":"11635:119:118","statements":[{"expression":{"id":62975,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":62963,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62946,"src":"11649:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":62965,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62936,"src":"11675:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62966,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62938,"src":"11683:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":62971,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62950,"src":"11730:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":62967,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"11690:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62969,"indexExpression":{"id":62968,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62936,"src":"11719:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11690:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62970,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11727:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"11690:39:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":62972,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11690:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62973,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62940,"src":"11734:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62964,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"11666:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":62974,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11666:77:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11649:94:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62976,"nodeType":"ExpressionStatement","src":"11649:94:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62959,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62953,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62950,"src":"11579:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":62954,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"11583:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":62956,"indexExpression":{"id":62955,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62936,"src":"11612:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11583:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":62957,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11620:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"11583:43:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":62958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11583:45:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11579:49:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62978,"initializationExpression":{"assignments":[62950],"declarations":[{"constant":false,"id":62950,"mutability":"mutable","name":"i","nameLocation":"11572:1:118","nodeType":"VariableDeclaration","scope":62978,"src":"11564:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62949,"name":"uint256","nodeType":"ElementaryTypeName","src":"11564:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62952,"initialValue":{"hexValue":"30","id":62951,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11576:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11564:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62961,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11630:3:118","subExpression":{"id":62960,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62950,"src":"11630:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62962,"nodeType":"ExpressionStatement","src":"11630:3:118"},"nodeType":"ForStatement","src":"11559:195:118"},{"expression":{"id":62979,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62946,"src":"11770:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62944,"id":62980,"nodeType":"Return","src":"11763:20:118"}]},"functionSelector":"24fdfddf","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStake","nameLocation":"11418:16:118","parameters":{"id":62941,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62936,"mutability":"mutable","name":"domain","nameLocation":"11443:6:118","nodeType":"VariableDeclaration","scope":62982,"src":"11435:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62935,"name":"address","nodeType":"ElementaryTypeName","src":"11435:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62938,"mutability":"mutable","name":"epoch","nameLocation":"11459:5:118","nodeType":"VariableDeclaration","scope":62982,"src":"11451:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62937,"name":"uint256","nodeType":"ElementaryTypeName","src":"11451:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62940,"mutability":"mutable","name":"attester","nameLocation":"11474:8:118","nodeType":"VariableDeclaration","scope":62982,"src":"11466:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62939,"name":"address","nodeType":"ElementaryTypeName","src":"11466:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11434:49:118"},"returnParameters":{"id":62944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62943,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62982,"src":"11505:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62942,"name":"uint256","nodeType":"ElementaryTypeName","src":"11505:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11504:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":63000,"nodeType":"FunctionDefinition","src":"11796:192:118","nodes":[],"body":{"id":62999,"nodeType":"Block","src":"11903:85:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":62992,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62984,"src":"11937:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":62994,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62984,"src":"11963:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62993,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"11945:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62995,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11945:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":62996,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62986,"src":"11972:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62991,"name":"getAttesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62982,"src":"11920:16:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view returns (uint256)"}},"id":62997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11920:61:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62990,"id":62998,"nodeType":"Return","src":"11913:68:118"}]},"baseFunctions":[64312],"functionSelector":"3debeadc","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStakeForAcceptingEpoch","nameLocation":"11805:33:118","parameters":{"id":62987,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62984,"mutability":"mutable","name":"domain","nameLocation":"11847:6:118","nodeType":"VariableDeclaration","scope":63000,"src":"11839:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62983,"name":"address","nodeType":"ElementaryTypeName","src":"11839:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62986,"mutability":"mutable","name":"attester","nameLocation":"11863:8:118","nodeType":"VariableDeclaration","scope":63000,"src":"11855:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62985,"name":"address","nodeType":"ElementaryTypeName","src":"11855:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11838:34:118"},"returnParameters":{"id":62990,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62989,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":63000,"src":"11894:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62988,"name":"uint256","nodeType":"ElementaryTypeName","src":"11894:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11893:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":63090,"nodeType":"FunctionDefinition","src":"12036:1885:118","nodes":[],"body":{"id":63089,"nodeType":"Block","src":"12178:1743:118","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":63020,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12281:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63021,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12285:6:118","memberName":"sender","nodeType":"MemberAccess","src":"12281:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":63016,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"12241:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":63018,"indexExpression":{"id":63017,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63003,"src":"12269:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12241:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":63019,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12277:3:118","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":51929,"src":"12241:39:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$51902_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":63022,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12241:51:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63023,"nodeType":"ExpressionStatement","src":"12241:51:118"},{"assignments":[63025],"declarations":[{"constant":false,"id":63025,"mutability":"mutable","name":"balanceBefore","nameLocation":"12674:13:118","nodeType":"VariableDeclaration","scope":63089,"src":"12666:21:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63024,"name":"uint256","nodeType":"ElementaryTypeName","src":"12666:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63033,"initialValue":{"arguments":[{"arguments":[{"id":63030,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12714:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63029,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12706:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63028,"name":"address","nodeType":"ElementaryTypeName","src":"12706:7:118","typeDescriptions":{}}},"id":63031,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12706:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":63026,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"12690:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"id":63027,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12696:9:118","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43805,"src":"12690:15:118","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":63032,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12690:30:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12666:54:118"},{"expression":{"arguments":[{"expression":{"id":63037,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13032:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63038,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13036:6:118","memberName":"sender","nodeType":"MemberAccess","src":"13032:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":63041,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"13052:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63040,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13044:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63039,"name":"address","nodeType":"ElementaryTypeName","src":"13044:7:118","typeDescriptions":{}}},"id":63042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13044:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63043,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63008,"src":"13059:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":63034,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63006,"src":"13009:9:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"id":63036,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13019:12:118","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43847,"src":"13009:22: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":63044,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13009:57:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63045,"nodeType":"ExpressionStatement","src":"13009:57:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":63050,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"13189:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63049,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13181:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63048,"name":"address","nodeType":"ElementaryTypeName","src":"13181:7:118","typeDescriptions":{}}},"id":63051,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13181:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":63046,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"13165:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"id":63047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13171:9:118","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43805,"src":"13165:15:118","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":63052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13165:30:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63053,"name":"balanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63025,"src":"13199:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":63054,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63008,"src":"13215:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13199:22:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13165:56:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63060,"nodeType":"IfStatement","src":"13161:114:118","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":63057,"name":"CustodianTransferAmountMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64286,"src":"13242:31:118","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":63058,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13242:33:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":63059,"nodeType":"RevertStatement","src":"13235:40:118"}},{"expression":{"arguments":[{"id":63062,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63003,"src":"13375:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":63064,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63003,"src":"13570:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63063,"name":"getNextAcceptingEpochWithException","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62778,"src":"13535:34:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63065,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13535:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":63068,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63006,"src":"13599:9:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63067,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13591:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63066,"name":"address","nodeType":"ElementaryTypeName","src":"13591:7:118","typeDescriptions":{}}},"id":63069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13591:18:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":63070,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13623:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13627:6:118","memberName":"sender","nodeType":"MemberAccess","src":"13623:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63072,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63008,"src":"13647:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63061,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62606,"src":"13352:9:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63073,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13352:311:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63074,"nodeType":"ExpressionStatement","src":"13352:311:118"},{"eventCall":{"arguments":[{"id":63076,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63003,"src":"13766:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":63078,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63003,"src":"13821:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63077,"name":"getNextAcceptingEpochWithException","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62778,"src":"13786:34:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13786:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":63082,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63006,"src":"13850:9:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63081,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13842:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63080,"name":"address","nodeType":"ElementaryTypeName","src":"13842:7:118","typeDescriptions":{}}},"id":63083,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13842:18:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":63084,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13874:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13878:6:118","memberName":"sender","nodeType":"MemberAccess","src":"13874:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63086,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63008,"src":"13898:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63075,"name":"AttesterStaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64252,"src":"13738:14:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63087,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13738:176:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63088,"nodeType":"EmitStatement","src":"13733:181:118"}]},"baseFunctions":[64187],"documentation":{"id":63001,"nodeType":"StructuredDocumentation","src":"11994:37:118","text":"@notice Stakes for the next epoch"},"functionSelector":"bf6eac2f","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":63011,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64010,"src":"12149:14:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":63012,"kind":"modifierInvocation","modifierName":{"id":63010,"name":"onlyRole","nameLocations":["12140:8:118"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"12140:8:118"},"nodeType":"ModifierInvocation","src":"12140:24:118"},{"id":63014,"kind":"modifierInvocation","modifierName":{"id":63013,"name":"nonReentrant","nameLocations":["12165:12:118"],"nodeType":"IdentifierPath","referencedDeclaration":45826,"src":"12165:12:118"},"nodeType":"ModifierInvocation","src":"12165:12:118"}],"name":"stake","nameLocation":"12045:5:118","parameters":{"id":63009,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63003,"mutability":"mutable","name":"domain","nameLocation":"12068:6:118","nodeType":"VariableDeclaration","scope":63090,"src":"12060:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63002,"name":"address","nodeType":"ElementaryTypeName","src":"12060:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63006,"mutability":"mutable","name":"custodian","nameLocation":"12091:9:118","nodeType":"VariableDeclaration","scope":63090,"src":"12084:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"},"typeName":{"id":63005,"nodeType":"UserDefinedTypeName","pathNode":{"id":63004,"name":"IERC20","nameLocations":["12084:6:118"],"nodeType":"IdentifierPath","referencedDeclaration":43848,"src":"12084:6:118"},"referencedDeclaration":43848,"src":"12084:6:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":63008,"mutability":"mutable","name":"amount","nameLocation":"12118:6:118","nodeType":"VariableDeclaration","scope":63090,"src":"12110:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63007,"name":"uint256","nodeType":"ElementaryTypeName","src":"12110:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12050:80:118"},"returnParameters":{"id":63015,"nodeType":"ParameterList","parameters":[],"src":"12178:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":63127,"nodeType":"FunctionDefinition","src":"13972:972:118","nodes":[],"body":{"id":63126,"nodeType":"Block","src":"14117:827:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":63105,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63092,"src":"14473:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":63107,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63092,"src":"14668:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63106,"name":"getNextAcceptingEpochWithException","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62778,"src":"14633:34:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63108,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14633:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63109,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63094,"src":"14689:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":63110,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14712:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63111,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14716:6:118","memberName":"sender","nodeType":"MemberAccess","src":"14712:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63112,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63096,"src":"14736:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63104,"name":"_addUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62668,"src":"14448:11:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14448:304:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63114,"nodeType":"ExpressionStatement","src":"14448:304:118"},{"eventCall":{"arguments":[{"id":63116,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63092,"src":"14798:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":63118,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63092,"src":"14853:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63117,"name":"getNextAcceptingEpochWithException","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62778,"src":"14818:34:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63119,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14818:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63120,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63094,"src":"14874:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":63121,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14897:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63122,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14901:6:118","memberName":"sender","nodeType":"MemberAccess","src":"14897:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63123,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63096,"src":"14921:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63115,"name":"AttesterUnstaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64264,"src":"14768:16:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63124,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14768:169:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63125,"nodeType":"EmitStatement","src":"14763:174:118"}]},"baseFunctions":[64196],"functionSelector":"60829f8a","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":63099,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64010,"src":"14088:14:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":63100,"kind":"modifierInvocation","modifierName":{"id":63098,"name":"onlyRole","nameLocations":["14079:8:118"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"14079:8:118"},"nodeType":"ModifierInvocation","src":"14079:24:118"},{"id":63102,"kind":"modifierInvocation","modifierName":{"id":63101,"name":"nonReentrant","nameLocations":["14104:12:118"],"nodeType":"IdentifierPath","referencedDeclaration":45826,"src":"14104:12:118"},"nodeType":"ModifierInvocation","src":"14104:12:118"}],"name":"unstake","nameLocation":"13981:7:118","parameters":{"id":63097,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63092,"mutability":"mutable","name":"domain","nameLocation":"14006:6:118","nodeType":"VariableDeclaration","scope":63127,"src":"13998:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63091,"name":"address","nodeType":"ElementaryTypeName","src":"13998:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63094,"mutability":"mutable","name":"custodian","nameLocation":"14030:9:118","nodeType":"VariableDeclaration","scope":63127,"src":"14022:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63093,"name":"address","nodeType":"ElementaryTypeName","src":"14022:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63096,"mutability":"mutable","name":"amount","nameLocation":"14057:6:118","nodeType":"VariableDeclaration","scope":63127,"src":"14049:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63095,"name":"uint256","nodeType":"ElementaryTypeName","src":"14049:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13988:81:118"},"returnParameters":{"id":63103,"nodeType":"ParameterList","parameters":[],"src":"14117:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":63207,"nodeType":"FunctionDefinition","src":"15011:1474:118","nodes":[],"body":{"id":63206,"nodeType":"Block","src":"15159:1326:118","nodes":[],"statements":[{"assignments":[63139],"declarations":[{"constant":false,"id":63139,"mutability":"mutable","name":"stakeAmount","nameLocation":"15273:11:118","nodeType":"VariableDeclaration","scope":63206,"src":"15265:19:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63138,"name":"uint256","nodeType":"ElementaryTypeName","src":"15265:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63146,"initialValue":{"arguments":[{"id":63141,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63129,"src":"15309:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63142,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63131,"src":"15329:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63143,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63133,"src":"15354:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63144,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63135,"src":"15377:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63140,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"15287:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":63145,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15287:108:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15265:130:118"},{"assignments":[63148],"declarations":[{"constant":false,"id":63148,"mutability":"mutable","name":"unstakeAmount","nameLocation":"15413:13:118","nodeType":"VariableDeclaration","scope":63206,"src":"15405:21:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63147,"name":"uint256","nodeType":"ElementaryTypeName","src":"15405:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63157,"initialValue":{"arguments":[{"id":63150,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63129,"src":"15453:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63153,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63151,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63131,"src":"15473:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":63152,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15487:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15473:15:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63154,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63133,"src":"15502:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63155,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63135,"src":"15525:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63149,"name":"getUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62872,"src":"15429:10:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":63156,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15429:114:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15405:138:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63158,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63148,"src":"15557:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":63159,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63139,"src":"15573:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15557:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63166,"nodeType":"IfStatement","src":"15553:85:118","trueBody":{"id":63165,"nodeType":"Block","src":"15586:52:118","statements":[{"expression":{"id":63163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":63161,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63148,"src":"15600:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":63162,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63139,"src":"15616:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15600:27:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63164,"nodeType":"ExpressionStatement","src":"15600:27:118"}]}},{"assignments":[63168],"declarations":[{"constant":false,"id":63168,"mutability":"mutable","name":"remainder","nameLocation":"15655:9:118","nodeType":"VariableDeclaration","scope":63206,"src":"15647:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63167,"name":"uint256","nodeType":"ElementaryTypeName","src":"15647:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63172,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63169,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63139,"src":"15667:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":63170,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63148,"src":"15681:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15667:27:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15647:47:118"},{"expression":{"arguments":[{"id":63174,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63129,"src":"15715:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63177,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63175,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63131,"src":"15723:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":63176,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15737:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15723:15:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63178,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63133,"src":"15740:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63179,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63135,"src":"15751:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63180,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63168,"src":"15761:9:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63173,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62606,"src":"15705:9:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15705:66:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63182,"nodeType":"ExpressionStatement","src":"15705:66:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63183,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63148,"src":"16181:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":63184,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16197:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16181:17:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63197,"nodeType":"IfStatement","src":"16177:131:118","trueBody":{"id":63196,"nodeType":"Block","src":"16200:108:118","statements":[{"expression":{"arguments":[{"arguments":[{"id":63189,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16255:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63188,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16247:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63187,"name":"address","nodeType":"ElementaryTypeName","src":"16247:7:118","typeDescriptions":{}}},"id":63190,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16247:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63191,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63135,"src":"16262:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63192,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63133,"src":"16272:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63193,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63148,"src":"16283:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63186,"name":"_payAttesterFromContractDirectly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63614,"src":"16214:32:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63194,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16214:83:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63195,"nodeType":"ExpressionStatement","src":"16214:83:118"}]}},{"eventCall":{"arguments":[{"id":63199,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63135,"src":"16360:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63200,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63131,"src":"16382:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63201,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63133,"src":"16407:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63202,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63139,"src":"16430:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63203,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63148,"src":"16455:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63198,"name":"AttesterEpochRolledOver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64276,"src":"16323:23:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,uint256,uint256)"}},"id":63204,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16323:155:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63205,"nodeType":"EmitStatement","src":"16318:160:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_rollOverAttester","nameLocation":"15020:17:118","parameters":{"id":63136,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63129,"mutability":"mutable","name":"domain","nameLocation":"15055:6:118","nodeType":"VariableDeclaration","scope":63207,"src":"15047:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63128,"name":"address","nodeType":"ElementaryTypeName","src":"15047:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63131,"mutability":"mutable","name":"epochNumber","nameLocation":"15079:11:118","nodeType":"VariableDeclaration","scope":63207,"src":"15071:19:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63130,"name":"uint256","nodeType":"ElementaryTypeName","src":"15071:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":63133,"mutability":"mutable","name":"custodian","nameLocation":"15108:9:118","nodeType":"VariableDeclaration","scope":63207,"src":"15100:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63132,"name":"address","nodeType":"ElementaryTypeName","src":"15100:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63135,"mutability":"mutable","name":"attester","nameLocation":"15135:8:118","nodeType":"VariableDeclaration","scope":63207,"src":"15127:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63134,"name":"address","nodeType":"ElementaryTypeName","src":"15127:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15037:112:118"},"returnParameters":{"id":63137,"nodeType":"ParameterList","parameters":[],"src":"15159:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63285,"nodeType":"FunctionDefinition","src":"16491:810:118","nodes":[],"body":{"id":63284,"nodeType":"Block","src":"16561:740:118","nodes":[],"statements":[{"body":{"id":63269,"nodeType":"Block","src":"16790:348:118","statements":[{"assignments":[63229],"declarations":[{"constant":false,"id":63229,"mutability":"mutable","name":"attester","nameLocation":"16812:8:118","nodeType":"VariableDeclaration","scope":63269,"src":"16804:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63228,"name":"address","nodeType":"ElementaryTypeName","src":"16804:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":63236,"initialValue":{"arguments":[{"id":63234,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63215,"src":"16862:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":63230,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"16823:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":63232,"indexExpression":{"id":63231,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63209,"src":"16851:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16823:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":63233,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16859:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"16823:38:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":63235,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16823:41:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16804:60:118"},{"body":{"id":63267,"nodeType":"Block","src":"16955:173:118","statements":[{"assignments":[63252],"declarations":[{"constant":false,"id":63252,"mutability":"mutable","name":"custodian","nameLocation":"16981:9:118","nodeType":"VariableDeclaration","scope":63267,"src":"16973:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63251,"name":"address","nodeType":"ElementaryTypeName","src":"16973:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":63259,"initialValue":{"arguments":[{"id":63257,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63238,"src":"17033:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":63253,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"16993:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":63255,"indexExpression":{"id":63254,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63209,"src":"17022:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16993:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":63256,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17030:2:118","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":52038,"src":"16993:39:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":63258,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16993:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16973:62:118"},{"expression":{"arguments":[{"id":63261,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63209,"src":"17072:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63262,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63211,"src":"17080:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63263,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63252,"src":"17093:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63264,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63229,"src":"17104:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63260,"name":"_rollOverAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63207,"src":"17054:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,uint256,address,address)"}},"id":63265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17054:59:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63266,"nodeType":"ExpressionStatement","src":"17054:59:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63241,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63238,"src":"16899:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":63242,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63970,"src":"16903:28:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":63244,"indexExpression":{"id":63243,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63209,"src":"16932:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16903:36:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":63245,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16940:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"16903:43:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":63246,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16903:45:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16899:49:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63268,"initializationExpression":{"assignments":[63238],"declarations":[{"constant":false,"id":63238,"mutability":"mutable","name":"j","nameLocation":"16892:1:118","nodeType":"VariableDeclaration","scope":63268,"src":"16884:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63237,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63240,"initialValue":{"hexValue":"30","id":63239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16896:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16884:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":63249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16950:3:118","subExpression":{"id":63248,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63238,"src":"16950:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63250,"nodeType":"ExpressionStatement","src":"16950:3:118"},"nodeType":"ForStatement","src":"16879:249:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63218,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63215,"src":"16735:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":63219,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63965,"src":"16739:27:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$51902_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":63221,"indexExpression":{"id":63220,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63209,"src":"16767:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16739:35:118","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$51902_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":63222,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16775:6:118","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":52011,"src":"16739:42:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$51902_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$51902_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":63223,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16739:44:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16735:48:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63270,"initializationExpression":{"assignments":[63215],"declarations":[{"constant":false,"id":63215,"mutability":"mutable","name":"i","nameLocation":"16728:1:118","nodeType":"VariableDeclaration","scope":63270,"src":"16720:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63214,"name":"uint256","nodeType":"ElementaryTypeName","src":"16720:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63217,"initialValue":{"hexValue":"30","id":63216,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16732:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16720:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":63226,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16785:3:118","subExpression":{"id":63225,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63215,"src":"16785:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63227,"nodeType":"ExpressionStatement","src":"16785:3:118"},"nodeType":"ForStatement","src":"16715:423:118"},{"expression":{"id":63277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":63271,"name":"currentAcceptingEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63960,"src":"17187:29:118","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":63273,"indexExpression":{"id":63272,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63209,"src":"17217:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"17187:37:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63276,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63274,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63211,"src":"17227:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":63275,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17241:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"17227:15:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17187:55:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63278,"nodeType":"ExpressionStatement","src":"17187:55:118"},{"eventCall":{"arguments":[{"id":63280,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63209,"src":"17274:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63281,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63211,"src":"17282:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63279,"name":"EpochRolledOver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64282,"src":"17258:15:118","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":63282,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17258:36:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63283,"nodeType":"EmitStatement","src":"17253:41:118"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_rollOverEpoch","nameLocation":"16500:14:118","parameters":{"id":63212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63209,"mutability":"mutable","name":"domain","nameLocation":"16523:6:118","nodeType":"VariableDeclaration","scope":63285,"src":"16515:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63208,"name":"address","nodeType":"ElementaryTypeName","src":"16515:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63211,"mutability":"mutable","name":"epochNumber","nameLocation":"16539:11:118","nodeType":"VariableDeclaration","scope":63285,"src":"16531:19:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63210,"name":"uint256","nodeType":"ElementaryTypeName","src":"16531:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16514:37:118"},"returnParameters":{"id":63213,"nodeType":"ParameterList","parameters":[],"src":"16561:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63298,"nodeType":"FunctionDefinition","src":"17307:108:118","nodes":[],"body":{"id":63297,"nodeType":"Block","src":"17341:74:118","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":63289,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17366:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63290,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17370:6:118","memberName":"sender","nodeType":"MemberAccess","src":"17366:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":63292,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17396:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63293,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17400:6:118","memberName":"sender","nodeType":"MemberAccess","src":"17396:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63291,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"17378:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63294,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17378:29:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63288,"name":"_rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63285,"src":"17351:14:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":63295,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17351:57:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63296,"nodeType":"ExpressionStatement","src":"17351:57:118"}]},"baseFunctions":[64215],"functionSelector":"a887b71c","implemented":true,"kind":"function","modifiers":[],"name":"rollOverEpoch","nameLocation":"17316:13:118","parameters":{"id":63286,"nodeType":"ParameterList","parameters":[],"src":"17329:2:118"},"returnParameters":{"id":63287,"nodeType":"ParameterList","parameters":[],"src":"17341:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":63348,"nodeType":"FunctionDefinition","src":"17722:796:118","nodes":[],"body":{"id":63347,"nodeType":"Block","src":"17882:636:118","nodes":[],"statements":[{"assignments":[63313],"declarations":[{"constant":false,"id":63313,"mutability":"mutable","name":"targetEpoch","nameLocation":"17953:11:118","nodeType":"VariableDeclaration","scope":63347,"src":"17945:19:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63312,"name":"uint256","nodeType":"ElementaryTypeName","src":"17945:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63315,"initialValue":{"id":63314,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63303,"src":"17967:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17945:27:118"},{"assignments":[63317],"declarations":[{"constant":false,"id":63317,"mutability":"mutable","name":"stakeForEpoch","nameLocation":"17990:13:118","nodeType":"VariableDeclaration","scope":63347,"src":"17982:21:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63316,"name":"uint256","nodeType":"ElementaryTypeName","src":"17982:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63324,"initialValue":{"arguments":[{"id":63319,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63301,"src":"18028:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63320,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63313,"src":"18048:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63321,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63305,"src":"18073:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63322,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63307,"src":"18096:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63318,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"18006:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":63323,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18006:108:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17982:132:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63325,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63317,"src":"18207:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":63326,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63309,"src":"18223:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18207:22:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":63345,"nodeType":"Block","src":"18425:87:118","statements":[{"expression":{"arguments":[{"id":63338,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63301,"src":"18452:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63339,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63313,"src":"18460:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63340,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63305,"src":"18473:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63341,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63307,"src":"18484:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63342,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63309,"src":"18494:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63337,"name":"_removeStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62642,"src":"18439:12:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63343,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18439:62:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63344,"nodeType":"ExpressionStatement","src":"18439:62:118"}]},"id":63346,"nodeType":"IfStatement","src":"18203:309:118","trueBody":{"id":63336,"nodeType":"Block","src":"18231:188:118","statements":[{"expression":{"arguments":[{"id":63329,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63301,"src":"18275:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63330,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63313,"src":"18299:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63331,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63305,"src":"18328:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63332,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63307,"src":"18355:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63333,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63317,"src":"18381:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63328,"name":"_removeStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62642,"src":"18245:12:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63334,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18245:163:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63335,"nodeType":"ExpressionStatement","src":"18245:163:118"}]}}]},"documentation":{"id":63299,"nodeType":"StructuredDocumentation","src":"17421:296:118","text":" @dev Slash an attester's stake\n @param domain The domain of the attester\n @param epoch The epoch in which the slash is attempted\n @param custodian The custodian of the token\n @param attester The attester to slash\n @param amount The amount to slash"},"implemented":true,"kind":"function","modifiers":[],"name":"_slashStake","nameLocation":"17731:11:118","parameters":{"id":63310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63301,"mutability":"mutable","name":"domain","nameLocation":"17760:6:118","nodeType":"VariableDeclaration","scope":63348,"src":"17752:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63300,"name":"address","nodeType":"ElementaryTypeName","src":"17752:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63303,"mutability":"mutable","name":"epoch","nameLocation":"17784:5:118","nodeType":"VariableDeclaration","scope":63348,"src":"17776:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63302,"name":"uint256","nodeType":"ElementaryTypeName","src":"17776:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":63305,"mutability":"mutable","name":"custodian","nameLocation":"17807:9:118","nodeType":"VariableDeclaration","scope":63348,"src":"17799:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63304,"name":"address","nodeType":"ElementaryTypeName","src":"17799:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63307,"mutability":"mutable","name":"attester","nameLocation":"17834:8:118","nodeType":"VariableDeclaration","scope":63348,"src":"17826:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63306,"name":"address","nodeType":"ElementaryTypeName","src":"17826:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63309,"mutability":"mutable","name":"amount","nameLocation":"17860:6:118","nodeType":"VariableDeclaration","scope":63348,"src":"17852:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63308,"name":"uint256","nodeType":"ElementaryTypeName","src":"17852:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17742:130:118"},"returnParameters":{"id":63311,"nodeType":"ParameterList","parameters":[],"src":"17882:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63398,"nodeType":"FunctionDefinition","src":"18850:888:118","nodes":[],"body":{"id":63397,"nodeType":"Block","src":"18988:750:118","nodes":[],"statements":[{"assignments":[63361],"declarations":[{"constant":false,"id":63361,"mutability":"mutable","name":"stakeForEpoch","nameLocation":"19065:13:118","nodeType":"VariableDeclaration","scope":63397,"src":"19057:21:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63360,"name":"uint256","nodeType":"ElementaryTypeName","src":"19057:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63368,"initialValue":{"arguments":[{"id":63363,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63351,"src":"19103:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63364,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63353,"src":"19123:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63365,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63355,"src":"19142:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63366,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63357,"src":"19165:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63362,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"19081:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":63367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19081:102:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19057:126:118"},{"assignments":[63370],"declarations":[{"constant":false,"id":63370,"mutability":"mutable","name":"targetEpoch","nameLocation":"19201:11:118","nodeType":"VariableDeclaration","scope":63397,"src":"19193:19:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63369,"name":"uint256","nodeType":"ElementaryTypeName","src":"19193:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63374,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63373,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63371,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63353,"src":"19215:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":63372,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19223:1:118","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"19215:9:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19193:31:118"},{"assignments":[63376],"declarations":[{"constant":false,"id":63376,"mutability":"mutable","name":"unstakeForEpoch","nameLocation":"19242:15:118","nodeType":"VariableDeclaration","scope":63397,"src":"19234:23:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63375,"name":"uint256","nodeType":"ElementaryTypeName","src":"19234:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63383,"initialValue":{"arguments":[{"id":63378,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63351,"src":"19284:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63379,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63370,"src":"19304:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63380,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63355,"src":"19329:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63381,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63357,"src":"19352:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63377,"name":"getUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62872,"src":"19260:10:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":63382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19260:110:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19234:136:118"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63384,"name":"unstakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63376,"src":"19385:15:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":63385,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63361,"src":"19403:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19385:31:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63396,"nodeType":"IfStatement","src":"19381:351:118","trueBody":{"id":63395,"nodeType":"Block","src":"19418:314:118","statements":[{"expression":{"arguments":[{"id":63388,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63351,"src":"19588:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63389,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63370,"src":"19612:11:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":63390,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63355,"src":"19641:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63391,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63357,"src":"19668:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63392,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63361,"src":"19694:13:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63387,"name":"_setUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62720,"src":"19559:11:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63393,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19559:162:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63394,"nodeType":"ExpressionStatement","src":"19559:162:118"}]}}]},"documentation":{"id":63349,"nodeType":"StructuredDocumentation","src":"18524:321:118","text":" @dev Slash an attester's unstake\n @param domain The domain of the attester\n @param epoch The epoch in which the slash is attempted, i.e., epoch - 1 of the epoch where the unstake will be removed\n @param custodian The custodian of the token\n @param attester The attester to slash"},"implemented":true,"kind":"function","modifiers":[],"name":"_slashUnstake","nameLocation":"18859:13:118","parameters":{"id":63358,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63351,"mutability":"mutable","name":"domain","nameLocation":"18890:6:118","nodeType":"VariableDeclaration","scope":63398,"src":"18882:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63350,"name":"address","nodeType":"ElementaryTypeName","src":"18882:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63353,"mutability":"mutable","name":"epoch","nameLocation":"18914:5:118","nodeType":"VariableDeclaration","scope":63398,"src":"18906:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63352,"name":"uint256","nodeType":"ElementaryTypeName","src":"18906:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":63355,"mutability":"mutable","name":"custodian","nameLocation":"18937:9:118","nodeType":"VariableDeclaration","scope":63398,"src":"18929:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63354,"name":"address","nodeType":"ElementaryTypeName","src":"18929:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63357,"mutability":"mutable","name":"attester","nameLocation":"18964:8:118","nodeType":"VariableDeclaration","scope":63398,"src":"18956:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63356,"name":"address","nodeType":"ElementaryTypeName","src":"18956:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18872:106:118"},"returnParameters":{"id":63359,"nodeType":"ParameterList","parameters":[],"src":"18988:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63506,"nodeType":"FunctionDefinition","src":"19744:1588:118","nodes":[],"body":{"id":63505,"nodeType":"Block","src":"19940:1392:118","nodes":[],"statements":[{"body":{"id":63503,"nodeType":"Block","src":"19997:1329:118","statements":[{"assignments":[63427],"declarations":[{"constant":false,"id":63427,"mutability":"mutable","name":"refundAmount","nameLocation":"20246:12:118","nodeType":"VariableDeclaration","scope":63503,"src":"20238:20:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63426,"name":"uint256","nodeType":"ElementaryTypeName","src":"20238:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63455,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":63431,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20317:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63432,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20321:6:118","memberName":"sender","nodeType":"MemberAccess","src":"20317:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":63434,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63404,"src":"20367:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63436,"indexExpression":{"id":63435,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"20377:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20367:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63433,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"20349:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63437,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20349:31:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":63438,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63401,"src":"20402:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63440,"indexExpression":{"id":63439,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"20413:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20402:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63441,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63404,"src":"20437:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63443,"indexExpression":{"id":63442,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"20447:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20437:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63430,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"20287:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":63444,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20287:180:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"baseExpression":{"id":63447,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63407,"src":"20494:7:118","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":63449,"indexExpression":{"id":63448,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"20502:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20494:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":63450,"name":"refundAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63410,"src":"20506:13:118","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":63452,"indexExpression":{"id":63451,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"20520:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20506:16:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":63445,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49609,"src":"20485:4:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$49609_$","typeString":"type(library Math)"}},"id":63446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20490:3:118","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":48315,"src":"20485:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":63453,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20485:38:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":63428,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":49609,"src":"20261:4:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$49609_$","typeString":"type(library Math)"}},"id":63429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20266:3:118","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":48315,"src":"20261:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":63454,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20261:276:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20238:299:118"},{"expression":{"arguments":[{"arguments":[{"id":63459,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"20601:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63458,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20593:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63457,"name":"address","nodeType":"ElementaryTypeName","src":"20593:7:118","typeDescriptions":{}}},"id":63460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20593:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63461,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63404,"src":"20702:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63463,"indexExpression":{"id":63462,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"20712:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20702:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63464,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63401,"src":"20732:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63466,"indexExpression":{"id":63465,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"20743:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20732:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63467,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63427,"src":"20763:12:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63456,"name":"_payAttesterWithSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63574,"src":"20551:24:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63468,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20551:238:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63469,"nodeType":"ExpressionStatement","src":"20551:238:118"},{"expression":{"arguments":[{"expression":{"id":63471,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20977:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63472,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20981:6:118","memberName":"sender","nodeType":"MemberAccess","src":"20977:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":63474,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"21023:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21027:6:118","memberName":"sender","nodeType":"MemberAccess","src":"21023:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63473,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"21005:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63476,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21005:29:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":63477,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63401,"src":"21052:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63479,"indexExpression":{"id":63478,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"21063:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21052:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63480,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63404,"src":"21083:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63482,"indexExpression":{"id":63481,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"21093:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21083:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63483,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63407,"src":"21113:7:118","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":63485,"indexExpression":{"id":63484,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"21121:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21113:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63470,"name":"_slashStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63348,"src":"20948:11:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":63486,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20948:189:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63487,"nodeType":"ExpressionStatement","src":"20948:189:118"},{"expression":{"arguments":[{"expression":{"id":63489,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"21183:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63490,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21187:6:118","memberName":"sender","nodeType":"MemberAccess","src":"21183:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":63492,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"21229:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63493,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21233:6:118","memberName":"sender","nodeType":"MemberAccess","src":"21229:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63491,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"21211:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63494,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21211:29:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":63495,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63401,"src":"21258:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63497,"indexExpression":{"id":63496,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"21269:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21258:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63498,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63404,"src":"21289:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63500,"indexExpression":{"id":63499,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"21299:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21289:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63488,"name":"_slashUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63398,"src":"21152:13:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,uint256,address,address)"}},"id":63501,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21152:163:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63502,"nodeType":"ExpressionStatement","src":"21152:163:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63422,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63419,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"19970:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":63420,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63404,"src":"19974:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63421,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19984:6:118","memberName":"length","nodeType":"MemberAccess","src":"19974:16:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19970:20:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63504,"initializationExpression":{"assignments":[63416],"declarations":[{"constant":false,"id":63416,"mutability":"mutable","name":"i","nameLocation":"19963:1:118","nodeType":"VariableDeclaration","scope":63504,"src":"19955:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63415,"name":"uint256","nodeType":"ElementaryTypeName","src":"19955:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63418,"initialValue":{"hexValue":"30","id":63417,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19967:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"19955:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":63424,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19992:3:118","subExpression":{"id":63423,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63416,"src":"19992:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63425,"nodeType":"ExpressionStatement","src":"19992:3:118"},"nodeType":"ForStatement","src":"19950:1376:118"}]},"baseFunctions":[64230],"functionSelector":"a885c975","implemented":true,"kind":"function","modifiers":[{"id":63413,"kind":"modifierInvocation","modifierName":{"id":63412,"name":"nonReentrant","nameLocations":["19927:12:118"],"nodeType":"IdentifierPath","referencedDeclaration":45826,"src":"19927:12:118"},"nodeType":"ModifierInvocation","src":"19927:12:118"}],"name":"slash","nameLocation":"19753:5:118","parameters":{"id":63411,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63401,"mutability":"mutable","name":"custodians","nameLocation":"19787:10:118","nodeType":"VariableDeclaration","scope":63506,"src":"19768:29:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":63399,"name":"address","nodeType":"ElementaryTypeName","src":"19768:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":63400,"nodeType":"ArrayTypeName","src":"19768:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":63404,"mutability":"mutable","name":"attesters","nameLocation":"19826:9:118","nodeType":"VariableDeclaration","scope":63506,"src":"19807:28:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":63402,"name":"address","nodeType":"ElementaryTypeName","src":"19807:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":63403,"nodeType":"ArrayTypeName","src":"19807:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":63407,"mutability":"mutable","name":"amounts","nameLocation":"19864:7:118","nodeType":"VariableDeclaration","scope":63506,"src":"19845:26:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":63405,"name":"uint256","nodeType":"ElementaryTypeName","src":"19845:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63406,"nodeType":"ArrayTypeName","src":"19845:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":63410,"mutability":"mutable","name":"refundAmounts","nameLocation":"19900:13:118","nodeType":"VariableDeclaration","scope":63506,"src":"19881:32:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":63408,"name":"uint256","nodeType":"ElementaryTypeName","src":"19881:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63409,"nodeType":"ArrayTypeName","src":"19881:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"19758:161:118"},"returnParameters":{"id":63414,"nodeType":"ParameterList","parameters":[],"src":"19940:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":63574,"nodeType":"FunctionDefinition","src":"21690:1458:118","nodes":[],"body":{"id":63573,"nodeType":"Block","src":"21838:1310:118","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63523,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63518,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63509,"src":"21852:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":63521,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"21868:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63520,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21860:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63519,"name":"address","nodeType":"ElementaryTypeName","src":"21860:7:118","typeDescriptions":{}}},"id":63522,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21860:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21852:21:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":63571,"nodeType":"Block","src":"22370:772:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63553,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":63550,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"22752:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63549,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22744:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63548,"name":"address","nodeType":"ElementaryTypeName","src":"22744:7:118","typeDescriptions":{}}},"id":63551,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22744:14:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":63552,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63513,"src":"22762:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"22744:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":63569,"nodeType":"Block","src":"22951:181:118","statements":[{"expression":{"arguments":[{"id":63563,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63509,"src":"23083:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63564,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63511,"src":"23089:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63565,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63513,"src":"23099:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63566,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63515,"src":"23110:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63562,"name":"_payAttesterFromExternalViaCustodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63747,"src":"23046:36:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23046:71:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63568,"nodeType":"ExpressionStatement","src":"23046:71:118"}]},"id":63570,"nodeType":"IfStatement","src":"22740:392:118","trueBody":{"id":63561,"nodeType":"Block","src":"22773:172:118","statements":[{"expression":{"arguments":[{"id":63555,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63509,"src":"22896:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63556,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63511,"src":"22902:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63557,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63513,"src":"22912:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63558,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63515,"src":"22923:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63554,"name":"_payAttesterFromExternalDirectly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63704,"src":"22863:32:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63559,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22863:67:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63560,"nodeType":"ExpressionStatement","src":"22863:67:118"}]}}]},"id":63572,"nodeType":"IfStatement","src":"21848:1294:118","trueBody":{"id":63547,"nodeType":"Block","src":"21875:489:118","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63529,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":63526,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"21953:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63525,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21945:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63524,"name":"address","nodeType":"ElementaryTypeName","src":"21945:7:118","typeDescriptions":{}}},"id":63527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21945:14:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":63528,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63513,"src":"21963:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21945:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":63545,"nodeType":"Block","src":"22156:198:118","statements":[{"expression":{"arguments":[{"id":63539,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63509,"src":"22305:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63540,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63511,"src":"22311:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63541,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63513,"src":"22321:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63542,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63515,"src":"22332:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63538,"name":"_payAttesterFromContractViaCustodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63662,"src":"22268:36:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63543,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22268:71:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63544,"nodeType":"ExpressionStatement","src":"22268:71:118"}]},"id":63546,"nodeType":"IfStatement","src":"21941:413:118","trueBody":{"id":63537,"nodeType":"Block","src":"21974:176:118","statements":[{"expression":{"arguments":[{"id":63531,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63509,"src":"22101:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63532,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63511,"src":"22107:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63533,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63513,"src":"22117:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63534,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63515,"src":"22128:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63530,"name":"_payAttesterFromContractDirectly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63614,"src":"22068:32:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22068:67:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63536,"nodeType":"ExpressionStatement","src":"22068:67:118"}]}}]}}]},"documentation":{"id":63507,"nodeType":"StructuredDocumentation","src":"21338:347:118","text":"@notice Routes attester payment to appropriate function based on conditions\n @param from The address initiating the payment (this contract or external)\n @param attester The address receiving the payment\n @param custodian The custodian token address (or base token if direct payment)\n @param amount The amount to pay"},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttesterWithSelector","nameLocation":"21699:24:118","parameters":{"id":63516,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63509,"mutability":"mutable","name":"from","nameLocation":"21741:4:118","nodeType":"VariableDeclaration","scope":63574,"src":"21733:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63508,"name":"address","nodeType":"ElementaryTypeName","src":"21733:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63511,"mutability":"mutable","name":"attester","nameLocation":"21763:8:118","nodeType":"VariableDeclaration","scope":63574,"src":"21755:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63510,"name":"address","nodeType":"ElementaryTypeName","src":"21755:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63513,"mutability":"mutable","name":"custodian","nameLocation":"21789:9:118","nodeType":"VariableDeclaration","scope":63574,"src":"21781:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63512,"name":"address","nodeType":"ElementaryTypeName","src":"21781:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63515,"mutability":"mutable","name":"amount","nameLocation":"21816:6:118","nodeType":"VariableDeclaration","scope":63574,"src":"21808:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63514,"name":"uint256","nodeType":"ElementaryTypeName","src":"21808:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21723:105:118"},"returnParameters":{"id":63517,"nodeType":"ParameterList","parameters":[],"src":"21838:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63614,"nodeType":"FunctionDefinition","src":"23282:313:118","nodes":[],"body":{"id":63613,"nodeType":"Block","src":"23400:195:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63592,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63587,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63577,"src":"23418:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":63590,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"23434:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63589,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23426:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63588,"name":"address","nodeType":"ElementaryTypeName","src":"23426:7:118","typeDescriptions":{}}},"id":63591,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23426:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23418:21:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c792031","id":63593,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23441:35:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_0f1708bf867ac54e96e29dd93f681d12908fbf35a8ede654650d46510a77cb5d","typeString":"literal_string \"Only contract can call directly 1\""},"value":"Only contract can call directly 1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0f1708bf867ac54e96e29dd93f681d12908fbf35a8ede654650d46510a77cb5d","typeString":"literal_string \"Only contract can call directly 1\""}],"id":63586,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23410:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63594,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23410:67:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63595,"nodeType":"ExpressionStatement","src":"23410:67:118"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63602,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":63599,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"23503:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63598,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23495:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63597,"name":"address","nodeType":"ElementaryTypeName","src":"23495:7:118","typeDescriptions":{}}},"id":63600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23495:14:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":63601,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63581,"src":"23513:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23495:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d75737420757365206261736520746f6b656e","id":63603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23524:21:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_bc613066773cc3393ba2034b10aecd37cf0fd2b9ca236e3823d8166e2e771fe3","typeString":"literal_string \"Must use base token\""},"value":"Must use base token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bc613066773cc3393ba2034b10aecd37cf0fd2b9ca236e3823d8166e2e771fe3","typeString":"literal_string \"Must use base token\""}],"id":63596,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23487:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23487:59:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63605,"nodeType":"ExpressionStatement","src":"23487:59:118"},{"expression":{"arguments":[{"id":63609,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63579,"src":"23571:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63610,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63583,"src":"23581:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":63606,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"23556:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"id":63608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23562:8:118","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":43815,"src":"23556:14:118","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":63611,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23556:32:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63612,"nodeType":"ExpressionStatement","src":"23556:32:118"}]},"documentation":{"id":63575,"nodeType":"StructuredDocumentation","src":"23154:59:118","text":"@notice Contract pays attester directly with base token"},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttesterFromContractDirectly","nameLocation":"23291:32:118","parameters":{"id":63584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63577,"mutability":"mutable","name":"from","nameLocation":"23332:4:118","nodeType":"VariableDeclaration","scope":63614,"src":"23324:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63576,"name":"address","nodeType":"ElementaryTypeName","src":"23324:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63579,"mutability":"mutable","name":"attester","nameLocation":"23346:8:118","nodeType":"VariableDeclaration","scope":63614,"src":"23338:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63578,"name":"address","nodeType":"ElementaryTypeName","src":"23338:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63581,"mutability":"mutable","name":"custodian","nameLocation":"23364:9:118","nodeType":"VariableDeclaration","scope":63614,"src":"23356:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63580,"name":"address","nodeType":"ElementaryTypeName","src":"23356:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63583,"mutability":"mutable","name":"amount","nameLocation":"23383:6:118","nodeType":"VariableDeclaration","scope":63614,"src":"23375:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63582,"name":"uint256","nodeType":"ElementaryTypeName","src":"23375:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23323:67:118"},"returnParameters":{"id":63585,"nodeType":"ParameterList","parameters":[],"src":"23400:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63662,"nodeType":"FunctionDefinition","src":"23664:394:118","nodes":[],"body":{"id":63661,"nodeType":"Block","src":"23786:272:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63627,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63617,"src":"23804:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":63630,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"23820:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63629,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23812:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63628,"name":"address","nodeType":"ElementaryTypeName","src":"23812:7:118","typeDescriptions":{}}},"id":63631,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23812:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23804:21:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c792032","id":63633,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23827:35:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_55315d8a57d191891b5e288e7e61a0e55314dfa6f15f2961a8a3eb948b6a731c","typeString":"literal_string \"Only contract can call directly 2\""},"value":"Only contract can call directly 2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_55315d8a57d191891b5e288e7e61a0e55314dfa6f15f2961a8a3eb948b6a731c","typeString":"literal_string \"Only contract can call directly 2\""}],"id":63626,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23796:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63634,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23796:67:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63635,"nodeType":"ExpressionStatement","src":"23796:67:118"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":63639,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"23889:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63638,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23881:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63637,"name":"address","nodeType":"ElementaryTypeName","src":"23881:7:118","typeDescriptions":{}}},"id":63640,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23881:14:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":63641,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63621,"src":"23899:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23881:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d7573742075736520637573746f6469616e20746f6b656e","id":63643,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23910:26:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_625c61961be03bbe0874e1337fdd6dfea88bf797382890551820b152199956ec","typeString":"literal_string \"Must use custodian token\""},"value":"Must use custodian token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_625c61961be03bbe0874e1337fdd6dfea88bf797382890551820b152199956ec","typeString":"literal_string \"Must use custodian token\""}],"id":63636,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23873:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23873:64:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63645,"nodeType":"ExpressionStatement","src":"23873:64:118"},{"expression":{"arguments":[{"id":63649,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63621,"src":"23961:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63650,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63623,"src":"23972:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":63646,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"23947:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"id":63648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23953:7:118","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":43835,"src":"23947:13:118","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":63651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23947:32:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63652,"nodeType":"ExpressionStatement","src":"23947:32:118"},{"expression":{"arguments":[{"id":63657,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63619,"src":"24034:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63658,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63623,"src":"24044:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":63654,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63621,"src":"24005:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63653,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65013,"src":"23989:15:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICustodianToken_$65013_$","typeString":"type(contract ICustodianToken)"}},"id":63655,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23989:26:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICustodianToken_$65013","typeString":"contract ICustodianToken"}},"id":63656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24016:17:118","memberName":"buyCustodialToken","nodeType":"MemberAccess","referencedDeclaration":65003,"src":"23989:44:118","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":63659,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23989:62:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63660,"nodeType":"ExpressionStatement","src":"23989:62:118"}]},"documentation":{"id":63615,"nodeType":"StructuredDocumentation","src":"23601:58:118","text":"@notice Contract pays attester through custodian token"},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttesterFromContractViaCustodian","nameLocation":"23673:36:118","parameters":{"id":63624,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63617,"mutability":"mutable","name":"from","nameLocation":"23718:4:118","nodeType":"VariableDeclaration","scope":63662,"src":"23710:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63616,"name":"address","nodeType":"ElementaryTypeName","src":"23710:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63619,"mutability":"mutable","name":"attester","nameLocation":"23732:8:118","nodeType":"VariableDeclaration","scope":63662,"src":"23724:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63618,"name":"address","nodeType":"ElementaryTypeName","src":"23724:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63621,"mutability":"mutable","name":"custodian","nameLocation":"23750:9:118","nodeType":"VariableDeclaration","scope":63662,"src":"23742:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63620,"name":"address","nodeType":"ElementaryTypeName","src":"23742:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63623,"mutability":"mutable","name":"amount","nameLocation":"23769:6:118","nodeType":"VariableDeclaration","scope":63662,"src":"23761:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63622,"name":"uint256","nodeType":"ElementaryTypeName","src":"23761:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23709:67:118"},"returnParameters":{"id":63625,"nodeType":"ParameterList","parameters":[],"src":"23786:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63704,"nodeType":"FunctionDefinition","src":"24467:315:118","nodes":[],"body":{"id":63703,"nodeType":"Block","src":"24585:197:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":63675,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"24603:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63676,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24607:6:118","memberName":"sender","nodeType":"MemberAccess","src":"24603:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":63679,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"24625:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63678,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24617:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63677,"name":"address","nodeType":"ElementaryTypeName","src":"24617:7:118","typeDescriptions":{}}},"id":63680,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24617:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24603:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f6e6c792065787465726e616c2063616c6c73","id":63682,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24632:21:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_367278d280804749c40a2b54193b2d030c9f08a76b2a9338e0b2e7109240e55e","typeString":"literal_string \"Only external calls\""},"value":"Only external calls"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_367278d280804749c40a2b54193b2d030c9f08a76b2a9338e0b2e7109240e55e","typeString":"literal_string \"Only external calls\""}],"id":63674,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"24595:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24595:59:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63684,"nodeType":"ExpressionStatement","src":"24595:59:118"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63691,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":63688,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"24680:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63687,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24672:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63686,"name":"address","nodeType":"ElementaryTypeName","src":"24672:7:118","typeDescriptions":{}}},"id":63689,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24672:14:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":63690,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63669,"src":"24690:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24672:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d75737420757365206261736520746f6b656e","id":63692,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24701:21:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_bc613066773cc3393ba2034b10aecd37cf0fd2b9ca236e3823d8166e2e771fe3","typeString":"literal_string \"Must use base token\""},"value":"Must use base token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bc613066773cc3393ba2034b10aecd37cf0fd2b9ca236e3823d8166e2e771fe3","typeString":"literal_string \"Must use base token\""}],"id":63685,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"24664:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24664:59:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63694,"nodeType":"ExpressionStatement","src":"24664:59:118"},{"expression":{"arguments":[{"id":63698,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63665,"src":"24752:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63699,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63667,"src":"24758:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63700,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63671,"src":"24768:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":63695,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"24733:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}},"id":63697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24739:12:118","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43847,"src":"24733:18: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":63701,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24733:42:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63702,"nodeType":"ExpressionStatement","src":"24733:42:118"}]},"documentation":{"id":63663,"nodeType":"StructuredDocumentation","src":"24064:67:118","text":"@notice External account pays attester directly with base token"},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttesterFromExternalDirectly","nameLocation":"24476:32:118","parameters":{"id":63672,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63665,"mutability":"mutable","name":"from","nameLocation":"24517:4:118","nodeType":"VariableDeclaration","scope":63704,"src":"24509:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63664,"name":"address","nodeType":"ElementaryTypeName","src":"24509:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63667,"mutability":"mutable","name":"attester","nameLocation":"24531:8:118","nodeType":"VariableDeclaration","scope":63704,"src":"24523:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63666,"name":"address","nodeType":"ElementaryTypeName","src":"24523:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63669,"mutability":"mutable","name":"custodian","nameLocation":"24549:9:118","nodeType":"VariableDeclaration","scope":63704,"src":"24541:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63668,"name":"address","nodeType":"ElementaryTypeName","src":"24541:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63671,"mutability":"mutable","name":"amount","nameLocation":"24568:6:118","nodeType":"VariableDeclaration","scope":63704,"src":"24560:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63670,"name":"uint256","nodeType":"ElementaryTypeName","src":"24560:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24508:67:118"},"returnParameters":{"id":63673,"nodeType":"ParameterList","parameters":[],"src":"24585:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63747,"nodeType":"FunctionDefinition","src":"24859:354:118","nodes":[],"body":{"id":63746,"nodeType":"Block","src":"24981:232:118","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63723,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":63717,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"24999:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63718,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25003:6:118","memberName":"sender","nodeType":"MemberAccess","src":"24999:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":63721,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"25021:4:118","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$63931","typeString":"contract MovementStaking"}],"id":63720,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25013:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63719,"name":"address","nodeType":"ElementaryTypeName","src":"25013:7:118","typeDescriptions":{}}},"id":63722,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25013:13:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24999:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f6e6c792065787465726e616c2063616c6c73","id":63724,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"25028:21:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_367278d280804749c40a2b54193b2d030c9f08a76b2a9338e0b2e7109240e55e","typeString":"literal_string \"Only external calls\""},"value":"Only external calls"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_367278d280804749c40a2b54193b2d030c9f08a76b2a9338e0b2e7109240e55e","typeString":"literal_string \"Only external calls\""}],"id":63716,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"24991:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63725,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24991:59:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63726,"nodeType":"ExpressionStatement","src":"24991:59:118"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":63733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":63730,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63950,"src":"25076:5:118","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43848","typeString":"contract IERC20"}],"id":63729,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25068:7:118","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":63728,"name":"address","nodeType":"ElementaryTypeName","src":"25068:7:118","typeDescriptions":{}}},"id":63731,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25068:14:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":63732,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63711,"src":"25086:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"25068:27:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d7573742075736520637573746f6469616e20746f6b656e","id":63734,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"25097:26:118","typeDescriptions":{"typeIdentifier":"t_stringliteral_625c61961be03bbe0874e1337fdd6dfea88bf797382890551820b152199956ec","typeString":"literal_string \"Must use custodian token\""},"value":"Must use custodian token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_625c61961be03bbe0874e1337fdd6dfea88bf797382890551820b152199956ec","typeString":"literal_string \"Must use custodian token\""}],"id":63727,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"25060:7:118","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":63735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25060:64:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63736,"nodeType":"ExpressionStatement","src":"25060:64:118"},{"expression":{"arguments":[{"id":63741,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63707,"src":"25183:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63742,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63709,"src":"25189:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63743,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63713,"src":"25199:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":63738,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63711,"src":"25150:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63737,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":65013,"src":"25134:15:118","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICustodianToken_$65013_$","typeString":"type(contract ICustodianToken)"}},"id":63739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25134:26:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICustodianToken_$65013","typeString":"contract ICustodianToken"}},"id":63740,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25161:21:118","memberName":"buyCustodialTokenFrom","nodeType":"MemberAccess","referencedDeclaration":65012,"src":"25134:48:118","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":63744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25134:72:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63745,"nodeType":"ExpressionStatement","src":"25134:72:118"}]},"documentation":{"id":63705,"nodeType":"StructuredDocumentation","src":"24788:66:118","text":"@notice External account pays attester through custodian token"},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttesterFromExternalViaCustodian","nameLocation":"24868:36:118","parameters":{"id":63714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63707,"mutability":"mutable","name":"from","nameLocation":"24913:4:118","nodeType":"VariableDeclaration","scope":63747,"src":"24905:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63706,"name":"address","nodeType":"ElementaryTypeName","src":"24905:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63709,"mutability":"mutable","name":"attester","nameLocation":"24927:8:118","nodeType":"VariableDeclaration","scope":63747,"src":"24919:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63708,"name":"address","nodeType":"ElementaryTypeName","src":"24919:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63711,"mutability":"mutable","name":"custodian","nameLocation":"24945:9:118","nodeType":"VariableDeclaration","scope":63747,"src":"24937:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63710,"name":"address","nodeType":"ElementaryTypeName","src":"24937:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63713,"mutability":"mutable","name":"amount","nameLocation":"24964:6:118","nodeType":"VariableDeclaration","scope":63747,"src":"24956:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63712,"name":"uint256","nodeType":"ElementaryTypeName","src":"24956:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24904:67:118"},"returnParameters":{"id":63715,"nodeType":"ParameterList","parameters":[],"src":"24981:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":63768,"nodeType":"FunctionDefinition","src":"25461:244:118","nodes":[],"body":{"id":63767,"nodeType":"Block","src":"25615:90:118","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":63760,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"25658:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63761,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25662:6:118","memberName":"sender","nodeType":"MemberAccess","src":"25658:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63762,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63750,"src":"25670:8:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63763,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63754,"src":"25680:9:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63764,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63752,"src":"25691:6:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63759,"name":"_payAttesterFromExternalDirectly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63704,"src":"25625:32:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63765,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25625:73:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63766,"nodeType":"ExpressionStatement","src":"25625:73:118"}]},"baseFunctions":[64321],"documentation":{"id":63748,"nodeType":"StructuredDocumentation","src":"25219:237:118","text":"@notice Domain rewards an attester\n @param attester The attester to reward\n @param amount The amount to reward\n @param custodian The custodian of the token from which to reward the attester, here it is the domain"},"functionSelector":"5e00bf46","implemented":true,"kind":"function","modifiers":[{"id":63757,"kind":"modifierInvocation","modifierName":{"id":63756,"name":"nonReentrant","nameLocations":["25602:12:118"],"nodeType":"IdentifierPath","referencedDeclaration":45826,"src":"25602:12:118"},"nodeType":"ModifierInvocation","src":"25602:12:118"}],"name":"rewardFromDomain","nameLocation":"25470:16:118","parameters":{"id":63755,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63750,"mutability":"mutable","name":"attester","nameLocation":"25504:8:118","nodeType":"VariableDeclaration","scope":63768,"src":"25496:16:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63749,"name":"address","nodeType":"ElementaryTypeName","src":"25496:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63752,"mutability":"mutable","name":"amount","nameLocation":"25530:6:118","nodeType":"VariableDeclaration","scope":63768,"src":"25522:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63751,"name":"uint256","nodeType":"ElementaryTypeName","src":"25522:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":63754,"mutability":"mutable","name":"custodian","nameLocation":"25554:9:118","nodeType":"VariableDeclaration","scope":63768,"src":"25546:17:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63753,"name":"address","nodeType":"ElementaryTypeName","src":"25546:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"25486:108:118"},"returnParameters":{"id":63758,"nodeType":"ParameterList","parameters":[],"src":"25615:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":63811,"nodeType":"FunctionDefinition","src":"25966:457:118","nodes":[],"body":{"id":63810,"nodeType":"Block","src":"26126:297:118","nodes":[],"statements":[{"body":{"id":63808,"nodeType":"Block","src":"26307:110:118","statements":[{"expression":{"arguments":[{"expression":{"id":63795,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"26354:3:118","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":63796,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26358:6:118","memberName":"sender","nodeType":"MemberAccess","src":"26354:10:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63797,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63772,"src":"26366:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63799,"indexExpression":{"id":63798,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63784,"src":"26376:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26366:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63800,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63778,"src":"26380:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63802,"indexExpression":{"id":63801,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63784,"src":"26391:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26380:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63803,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63775,"src":"26395:7:118","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":63805,"indexExpression":{"id":63804,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63784,"src":"26403:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26395:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63794,"name":"_payAttesterFromExternalDirectly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63704,"src":"26321:32:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":63806,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26321:85:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63807,"nodeType":"ExpressionStatement","src":"26321:85:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63790,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63787,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63784,"src":"26280:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":63788,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63772,"src":"26284:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":63789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26294:6:118","memberName":"length","nodeType":"MemberAccess","src":"26284:16:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26280:20:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63809,"initializationExpression":{"assignments":[63784],"declarations":[{"constant":false,"id":63784,"mutability":"mutable","name":"i","nameLocation":"26273:1:118","nodeType":"VariableDeclaration","scope":63809,"src":"26265:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63783,"name":"uint256","nodeType":"ElementaryTypeName","src":"26265:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63786,"initialValue":{"hexValue":"30","id":63785,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26277:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"26265:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":63792,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"26302:3:118","subExpression":{"id":63791,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63784,"src":"26302:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63793,"nodeType":"ExpressionStatement","src":"26302:3:118"},"nodeType":"ForStatement","src":"26260:157:118"}]},"baseFunctions":[64333],"documentation":{"id":63769,"nodeType":"StructuredDocumentation","src":"25711:250:118","text":"@notice An array of custodians reward an array of attesters\n @param attesters The attesters to reward\n @param amounts The amounts to reward\n @param custodians The custodians of the token from which to reward the attesters "},"functionSelector":"4e76a139","implemented":true,"kind":"function","modifiers":[{"id":63781,"kind":"modifierInvocation","modifierName":{"id":63780,"name":"nonReentrant","nameLocations":["26113:12:118"],"nodeType":"IdentifierPath","referencedDeclaration":45826,"src":"26113:12:118"},"nodeType":"ModifierInvocation","src":"26113:12:118"}],"name":"rewardArray","nameLocation":"25975:11:118","parameters":{"id":63779,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63772,"mutability":"mutable","name":"attesters","nameLocation":"26015:9:118","nodeType":"VariableDeclaration","scope":63811,"src":"25996:28:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":63770,"name":"address","nodeType":"ElementaryTypeName","src":"25996:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":63771,"nodeType":"ArrayTypeName","src":"25996:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":63775,"mutability":"mutable","name":"amounts","nameLocation":"26053:7:118","nodeType":"VariableDeclaration","scope":63811,"src":"26034:26:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":63773,"name":"uint256","nodeType":"ElementaryTypeName","src":"26034:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63774,"nodeType":"ArrayTypeName","src":"26034:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":63778,"mutability":"mutable","name":"custodians","nameLocation":"26089:10:118","nodeType":"VariableDeclaration","scope":63811,"src":"26070:29:118","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":63776,"name":"address","nodeType":"ElementaryTypeName","src":"26070:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":63777,"nodeType":"ArrayTypeName","src":"26070:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"25986:119:118"},"returnParameters":{"id":63782,"nodeType":"ParameterList","parameters":[],"src":"26126:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":63826,"nodeType":"FunctionDefinition","src":"26593:140:118","nodes":[],"body":{"id":63825,"nodeType":"Block","src":"26685:48:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":63821,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64010,"src":"26705:14:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":63822,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63814,"src":"26721:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63820,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39306,"src":"26695:9:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":63823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26695:31:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63824,"nodeType":"ExpressionStatement","src":"26695:31:118"}]},"baseFunctions":[64235],"documentation":{"id":63812,"nodeType":"StructuredDocumentation","src":"26431:157:118","text":"@notice Whitelist an address to be used as an attester or custodian. \n @notice Whitelisting means that the address is allowed to stake and unstake"},"functionSelector":"41566585","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":63817,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39144,"src":"26665:18:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":63818,"kind":"modifierInvocation","modifierName":{"id":63816,"name":"onlyRole","nameLocations":["26656:8:118"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"26656:8:118"},"nodeType":"ModifierInvocation","src":"26656:28:118"}],"name":"whitelistAddress","nameLocation":"26602:16:118","parameters":{"id":63815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63814,"mutability":"mutable","name":"addr","nameLocation":"26636:4:118","nodeType":"VariableDeclaration","scope":63826,"src":"26628:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63813,"name":"address","nodeType":"ElementaryTypeName","src":"26628:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26618:28:118"},"returnParameters":{"id":63819,"nodeType":"ParameterList","parameters":[],"src":"26685:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":63840,"nodeType":"FunctionDefinition","src":"26739:151:118","nodes":[],"body":{"id":63839,"nodeType":"Block","src":"26841:49:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":63835,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64010,"src":"26862:14:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":63836,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63828,"src":"26878:4:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63834,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39325,"src":"26851:10:118","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":63837,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26851:32:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":63838,"nodeType":"ExpressionStatement","src":"26851:32:118"}]},"baseFunctions":[64240],"functionSelector":"286dd3f5","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":63831,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39144,"src":"26821:18:118","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":63832,"kind":"modifierInvocation","modifierName":{"id":63830,"name":"onlyRole","nameLocations":["26812:8:118"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"26812:8:118"},"nodeType":"ModifierInvocation","src":"26812:28:118"}],"name":"removeAddressFromWhitelist","nameLocation":"26748:26:118","parameters":{"id":63829,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63828,"mutability":"mutable","name":"addr","nameLocation":"26792:4:118","nodeType":"VariableDeclaration","scope":63840,"src":"26784:12:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63827,"name":"address","nodeType":"ElementaryTypeName","src":"26784:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26774:28:118"},"returnParameters":{"id":63833,"nodeType":"ParameterList","parameters":[],"src":"26841:0:118"},"scope":63931,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":63914,"nodeType":"FunctionDefinition","src":"26982:542:118","nodes":[],"body":{"id":63913,"nodeType":"Block","src":"27090:434:118","nodes":[],"statements":[{"assignments":[63854],"declarations":[{"constant":false,"id":63854,"mutability":"mutable","name":"custodians","nameLocation":"27117:10:118","nodeType":"VariableDeclaration","scope":63913,"src":"27100:27:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":63852,"name":"address","nodeType":"ElementaryTypeName","src":"27100:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":63853,"nodeType":"ArrayTypeName","src":"27100:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":63858,"initialValue":{"arguments":[{"id":63856,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63843,"src":"27154:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63855,"name":"getRegisteredCustodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62227,"src":"27130:23:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view returns (address[] memory)"}},"id":63857,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27130:31:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"27100:61:118"},{"assignments":[63863],"declarations":[{"constant":false,"id":63863,"mutability":"mutable","name":"attesters","nameLocation":"27188:9:118","nodeType":"VariableDeclaration","scope":63913,"src":"27171:26:118","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":63861,"name":"address","nodeType":"ElementaryTypeName","src":"27171:7:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":63862,"nodeType":"ArrayTypeName","src":"27171:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":63867,"initialValue":{"arguments":[{"id":63865,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63843,"src":"27223:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63864,"name":"getRegisteredAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62281,"src":"27200:22:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view returns (address[] memory)"}},"id":63866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27200:30:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"27171:59:118"},{"assignments":[63869],"declarations":[{"constant":false,"id":63869,"mutability":"mutable","name":"totalStake","nameLocation":"27248:10:118","nodeType":"VariableDeclaration","scope":63913,"src":"27240:18:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63868,"name":"uint256","nodeType":"ElementaryTypeName","src":"27240:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63871,"initialValue":{"hexValue":"30","id":63870,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27261:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"27240:22:118"},{"body":{"id":63909,"nodeType":"Block","src":"27321:170:118","statements":[{"body":{"id":63907,"nodeType":"Block","src":"27382:99:118","statements":[{"expression":{"id":63905,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":63894,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63869,"src":"27400:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":63896,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63843,"src":"27423:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":63897,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63845,"src":"27431:5:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":63898,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63854,"src":"27438:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":63900,"indexExpression":{"id":63899,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63873,"src":"27449:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27438:13:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":63901,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63863,"src":"27453:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":63903,"indexExpression":{"id":63902,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63884,"src":"27463:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27453:12:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":63895,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62825,"src":"27414:8:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":63904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27414:52:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27400:66:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63906,"nodeType":"ExpressionStatement","src":"27400:66:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63890,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63887,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63884,"src":"27355:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":63888,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63863,"src":"27359:9:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":63889,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27369:6:118","memberName":"length","nodeType":"MemberAccess","src":"27359:16:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27355:20:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63908,"initializationExpression":{"assignments":[63884],"declarations":[{"constant":false,"id":63884,"mutability":"mutable","name":"j","nameLocation":"27348:1:118","nodeType":"VariableDeclaration","scope":63908,"src":"27340:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63883,"name":"uint256","nodeType":"ElementaryTypeName","src":"27340:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63886,"initialValue":{"hexValue":"30","id":63885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27352:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"27340:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":63892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"27377:3:118","subExpression":{"id":63891,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63884,"src":"27377:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63893,"nodeType":"ExpressionStatement","src":"27377:3:118"},"nodeType":"ForStatement","src":"27335:146:118"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":63879,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":63876,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63873,"src":"27293:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":63877,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63854,"src":"27297:10:118","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":63878,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27308:6:118","memberName":"length","nodeType":"MemberAccess","src":"27297:17:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27293:21:118","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":63910,"initializationExpression":{"assignments":[63873],"declarations":[{"constant":false,"id":63873,"mutability":"mutable","name":"i","nameLocation":"27286:1:118","nodeType":"VariableDeclaration","scope":63910,"src":"27278:9:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63872,"name":"uint256","nodeType":"ElementaryTypeName","src":"27278:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":63875,"initialValue":{"hexValue":"30","id":63874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27290:1:118","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"27278:13:118"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":63881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"27316:3:118","subExpression":{"id":63880,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63873,"src":"27316:1:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":63882,"nodeType":"ExpressionStatement","src":"27316:3:118"},"nodeType":"ForStatement","src":"27273:218:118"},{"expression":{"id":63911,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63869,"src":"27507:10:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":63849,"id":63912,"nodeType":"Return","src":"27500:17:118"}]},"documentation":{"id":63841,"nodeType":"StructuredDocumentation","src":"26896:81:118","text":"@notice Computes total stake across all custodians and attesters for an epoch"},"functionSelector":"55bdbe4c","implemented":true,"kind":"function","modifiers":[],"name":"computeAllStake","nameLocation":"26991:15:118","parameters":{"id":63846,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63843,"mutability":"mutable","name":"domain","nameLocation":"27024:6:118","nodeType":"VariableDeclaration","scope":63914,"src":"27016:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63842,"name":"address","nodeType":"ElementaryTypeName","src":"27016:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":63845,"mutability":"mutable","name":"epoch","nameLocation":"27048:5:118","nodeType":"VariableDeclaration","scope":63914,"src":"27040:13:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63844,"name":"uint256","nodeType":"ElementaryTypeName","src":"27040:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27006:53:118"},"returnParameters":{"id":63849,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63848,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":63914,"src":"27081:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63847,"name":"uint256","nodeType":"ElementaryTypeName","src":"27081:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27080:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":63930,"nodeType":"FunctionDefinition","src":"27695:176:118","nodes":[],"body":{"id":63929,"nodeType":"Block","src":"27797:74:118","nodes":[],"statements":[{"expression":{"arguments":[{"id":63923,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63917,"src":"27830:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":63925,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63917,"src":"27856:6:118","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":63924,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62756,"src":"27838:17:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":63926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27838:25:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":63922,"name":"computeAllStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63914,"src":"27814:15:118","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256) view returns (uint256)"}},"id":63927,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27814:50:118","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":63921,"id":63928,"nodeType":"Return","src":"27807:57:118"}]},"baseFunctions":[64303],"documentation":{"id":63915,"nodeType":"StructuredDocumentation","src":"27530:160:118","text":"@notice Computes total stake across all custodians and attesters for the current accepting epoch\n @param domain The domain to compute total stake for"},"functionSelector":"574663a9","implemented":true,"kind":"function","modifiers":[],"name":"computeAllStakeForAcceptingEpoch","nameLocation":"27704:32:118","parameters":{"id":63918,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63917,"mutability":"mutable","name":"domain","nameLocation":"27754:6:118","nodeType":"VariableDeclaration","scope":63930,"src":"27746:14:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":63916,"name":"address","nodeType":"ElementaryTypeName","src":"27746:7:118","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"27736:30:118"},"returnParameters":{"id":63921,"nodeType":"ParameterList","parameters":[{"constant":false,"id":63920,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":63930,"src":"27788:7:118","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":63919,"name":"uint256","nodeType":"ElementaryTypeName","src":"27788:7:118","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27787:9:118"},"scope":63931,"stateMutability":"view","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":62098,"name":"MovementStakingStorage","nameLocations":["798:22:118"],"nodeType":"IdentifierPath","referencedDeclaration":64011,"src":"798:22:118"},"id":62099,"nodeType":"InheritanceSpecifier","src":"798:22:118"},{"baseName":{"id":62100,"name":"IMovementStaking","nameLocations":["826:16:118"],"nodeType":"IdentifierPath","referencedDeclaration":64348,"src":"826:16:118"},"id":62101,"nodeType":"InheritanceSpecifier","src":"826:16:118"},{"baseName":{"id":62102,"name":"BaseStaking","nameLocations":["848:11:118"],"nodeType":"IdentifierPath","referencedDeclaration":64066,"src":"848:11:118"},"id":62103,"nodeType":"InheritanceSpecifier","src":"848:11:118"},{"baseName":{"id":62104,"name":"ReentrancyGuard","nameLocations":["865:15:118"],"nodeType":"IdentifierPath","referencedDeclaration":45862,"src":"865:15:118"},"id":62105,"nodeType":"InheritanceSpecifier","src":"865:15:118"}],"canonicalName":"MovementStaking","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[63931,45862,64066,39928,42948,39478,41255,47988,41634,40760,39746,64348,64011],"name":"MovementStaking","nameLocation":"775:15:118","scope":63932,"usedErrors":[39495,39498,39773,39778,41561,41564,43143,43156,44429,45732,45807,62112,64284,64286,64288],"usedEvents":[39503,41573,41582,41591,42896,64252,64264,64276,64282]}],"license":"UNLICENSED"},"id":118} \ No newline at end of file +{"abi":[{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"WHITELIST_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"acceptGenesisCeremony","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"computeAllStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"computeAllStakeForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"currentAcceptingEpochByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"currentAcceptingEpoch","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"domainGenesisAccepted","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"epochDurationByDomain","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"epochDuration","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStakeForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStakeForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochByL1BlockTime","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochDuration","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextAcceptingEpochWithException","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextPresentEpochWithException","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRegisteredAttesters","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRegisteredCustodians","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakeForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakedAttestersForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getUnstake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getUnstakeForAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[{"name":"_token","type":"address","internalType":"contract IERC20"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"registerDomain","inputs":[{"name":"epochDuration","type":"uint256","internalType":"uint256"},{"name":"custodians","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"removeAddressFromWhitelist","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardArray","inputs":[{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"amounts","type":"uint256[]","internalType":"uint256[]"},{"name":"custodians","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardFromDomain","inputs":[{"name":"attester","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rollOverEpoch","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setAcceptingEpoch","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"newEpoch","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"slash","inputs":[{"name":"custodians","type":"address[]","internalType":"address[]"},{"name":"attesters","type":"address[]","internalType":"address[]"},{"name":"amounts","type":"uint256[]","internalType":"uint256[]"},{"name":"refundAmounts","type":"uint256[]","internalType":"uint256[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"contract IERC20"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakesByDomainEpochCustodian","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"stakesByDomainEpochCustodianAttester","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"token","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IERC20"}],"stateMutability":"view"},{"type":"function","name":"unstake","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"custodian","type":"address","internalType":"address"},{"name":"amount","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"unstakesByDomainEpochCustodianAttester","inputs":[{"name":"domain","type":"address","internalType":"address"},{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"whitelistAddress","inputs":[{"name":"addr","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"event","name":"AttesterEpochRolledOver","inputs":[{"name":"attester","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"},{"name":"unstake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AttesterStaked","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":false,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"AttesterUnstaked","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":true,"internalType":"uint256"},{"name":"custodian","type":"address","indexed":true,"internalType":"address"},{"name":"attester","type":"address","indexed":false,"internalType":"address"},{"name":"stake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"EpochRolledOver","inputs":[{"name":"domain","type":"address","indexed":true,"internalType":"address"},{"name":"epoch","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"CustodianTransferAmountMismatch","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"EpochDurationNotSet","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"GenesisAlreadyAccepted","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"ReentrancyGuardReentrantCall","inputs":[]},{"type":"error","name":"StakeExceedsGenesisStake","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]}],"bytecode":{"object":"0x60a0604052306080523480156012575f80fd5b5060016009556080516131a361003e5f395f8181611e8301528181611eac0152611fed01526131a35ff3fe6080604052600436106102a5575f3560e01c80635e00bf461161016f578063a78d1fef116100d8578063c4d66de811610092578063d547741f1161006d578063d547741f146108a8578063d980b40d146108c7578063e6e3fb3a146108e6578063fc0c546a1461092b575f80fd5b8063c4d66de81461083c578063d1ba90ff1461085b578063d37304f814610889575f80fd5b8063a78d1fef14610763578063a885c97514610782578063a887b71c146107a1578063ad3cb1cc146107b5578063b1de97f7146107f2578063bf6eac2f1461081d575f80fd5b806386af70d11161012957806386af70d1146106a357806391d14854146106df57806392a2ebf3146106fe57806393dfb85c146107125780639db92f6814610731578063a217fddf14610750575f80fd5b80635e00bf46146105f357806360829f8a14610612578063771fcfc4146106315780637a997ab7146106505780637d93768b146106705780638129fc1c1461068f575f80fd5b806336568abe116102115780634f1ef286116101cb5780634f1ef2861461053b57806352d1902d1461054e57806355bdbe4c14610562578063574663a91461058157806357dd6a94146105a05780635c534359146105bf575f80fd5b806336568abe146104755780633bccf635146104945780633debeadc146104bf57806341566585146104de5780634234a479146104fd5780634e76a1391461051c575f80fd5b8063248a9ca311610262578063248a9ca3146103bb57806324fdfddf146103da578063286dd3f5146103f95780632f2ff15d14610418578063341d5ef51461043757806334eada3a14610456575f80fd5b806301ffc9a7146102a95780630c8f522f146102dd5780630ce52af5146103305780631789aeb41461034f5780631dc8b9491461037b57806322fceb751461039c575b5f80fd5b3480156102b4575f80fd5b506102c86102c3366004612aed565b610961565b60405190151581526020015b60405180910390f35b3480156102e8575f80fd5b506103226102f7366004612b28565b600560209081525f948552604080862082529385528385208152918452828420909152825290205481565b6040519081526020016102d4565b34801561033b575f80fd5b5061032261034a366004612b78565b610997565b34801561035a575f80fd5b5061036e610369366004612bb7565b6109cc565b6040516102d49190612bd2565b348015610386575f80fd5b5061039a610395366004612c12565b610ab6565b005b3480156103a7575f80fd5b506103226103b6366004612bb7565b610bf2565b3480156103c6575f80fd5b506103226103d5366004612c3c565b610c0c565b3480156103e5575f80fd5b506103226103f4366004612b78565b610c2c565b348015610404575f80fd5b5061039a610413366004612bb7565b610ca3565b348015610423575f80fd5b5061039a610432366004612c53565b610cc8565b348015610442575f80fd5b5061036e610451366004612bb7565b610cea565b348015610461575f80fd5b50610322610470366004612c81565b610dcd565b348015610480575f80fd5b5061039a61048f366004612c53565b610dea565b34801561049f575f80fd5b506103226104ae366004612bb7565b60016020525f908152604090205481565b3480156104ca575f80fd5b506103226104d9366004612cbe565b610e22565b3480156104e9575f80fd5b5061039a6104f8366004612bb7565b610e36565b348015610508575f80fd5b5061036e610517366004612bb7565b610e57565b348015610527575f80fd5b5061039a610536366004612d31565b610fa5565b61039a610549366004612de1565b611042565b348015610559575f80fd5b5061032261105d565b34801561056d575f80fd5b5061032261057c366004612c12565b611078565b34801561058c575f80fd5b5061032261059b366004612bb7565b61110d565b3480156105ab575f80fd5b506103226105ba366004612bb7565b61111b565b3480156105ca575f80fd5b506103226105d9366004612bb7565b6001600160a01b03165f9081526001602052604090205490565b3480156105fe575f80fd5b5061039a61060d366004612b78565b61114a565b34801561061d575f80fd5b5061039a61062c366004612ea4565b611168565b34801561063c575f80fd5b5061032261064b366004612bb7565b6111fd565b34801561065b575f80fd5b506103225f8051602061310e83398151915281565b34801561067b575f80fd5b5061032261068a366004612b28565b611215565b34801561069a575f80fd5b5061039a611252565b3480156106ae575f80fd5b506103226106bd366004612b78565b600760209081525f938452604080852082529284528284209052825290205481565b3480156106ea575f80fd5b506102c86106f9366004612c53565b61135c565b348015610709575f80fd5b5061039a611392565b34801561071d575f80fd5b5061032261072c366004612b28565b611524565b34801561073c575f80fd5b5061032261074b366004612cbe565b611561565b34801561075b575f80fd5b506103225f81565b34801561076e575f80fd5b5061032261077d366004612c81565b611575565b34801561078d575f80fd5b5061039a61079c366004612ee2565b61158a565b3480156107ac575f80fd5b5061039a6117ac565b3480156107c0575f80fd5b506107e5604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102d49190612fac565b3480156107fd575f80fd5b5061032261080c366004612bb7565b60026020525f908152604090205481565b348015610828575f80fd5b5061039a610837366004612ea4565b6117be565b348015610847575f80fd5b5061039a610856366004612bb7565b6119e9565b348015610866575f80fd5b506102c8610875366004612bb7565b60086020525f908152604090205460ff1681565b348015610894575f80fd5b5061039a6108a3366004612fe1565b611b0d565b3480156108b3575f80fd5b5061039a6108c2366004612c53565b611b8b565b3480156108d2575f80fd5b506103226108e1366004612bb7565b611ba7565b3480156108f1575f80fd5b50610322610900366004612b28565b600660209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610936575f80fd5b505f54610949906001600160a01b031681565b6040516001600160a01b0390911681526020016102d4565b5f6001600160e01b03198216637965db0b60e01b148061099157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001600160a01b038084165f9081526007602090815260408083208684528252808320938516835292905220545b9392505050565b6001600160a01b0381165f908152600360205260408120606091906109f090611c00565b6001600160401b03811115610a0757610a07612dcd565b604051908082528060200260200182016040528015610a30578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600360205260409020610a5590611c00565b811015610aaf576001600160a01b0384165f908152600360205260409020610a7d9082611c09565b828281518110610a8f57610a8f613028565b6001600160a01b0390921660209283029190910190910152600101610a35565b5092915050565b610abf82611ba7565b811115610b255760405162461bcd60e51b815260206004820152602960248201527f4e45575f45504f43485f4d5553545f42455f4c4553535f5448414e5f5052455360448201526808a9ca8be8aa09e86960bb1b60648201526084015b60405180910390fd5b610b2e82610bf2565b8111610b905760405162461bcd60e51b815260206004820152602b60248201527f4e45575f45504f43485f4d5553545f42455f4849474845525f5448414e5f435560448201526a0a4a48a9ca8be8aa09e86960ab1b6064820152608401610b1c565b336001600160a01b03831614610bd75760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610b1c565b6001600160a01b039091165f90815260026020526040902055565b6001600160a01b03165f9081526002602052604090205490565b5f9081525f8051602061314e833981519152602052604090206001015490565b5f80805b6001600160a01b0386165f908152600460205260409020610c5090611c00565b811015610c9a576001600160a01b0386165f908152600460205260409020610c869087908790610c809085611c09565b87611524565b610c909083613050565b9150600101610c30565b50949350505050565b5f610cad81611c14565b610cc45f8051602061310e83398151915283611b8b565b5050565b610cd182610c0c565b610cda81611c14565b610ce48383611c21565b50505050565b6001600160a01b0381165f90815260046020526040812060609190610d0e90611c00565b6001600160401b03811115610d2557610d25612dcd565b604051908082528060200260200182016040528015610d4e578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600460205260409020610d7390611c00565b811015610aaf576001600160a01b0384165f908152600460205260409020610d9b9082611c09565b828281518110610dad57610dad613028565b6001600160a01b0390921660209283029190910190910152600101610d53565b5f610de284610ddb86610bf2565b8585611215565b949350505050565b6001600160a01b0381163314610e135760405163334bd91960e11b815260040160405180910390fd5b610e1d8282611cc2565b505050565b5f6109c583610e3085610bf2565b84610c2c565b5f610e4081611c14565b610cc45f8051602061310e83398151915283610cc8565b6001600160a01b0381165f90815260036020526040812060609190610e7b90611c00565b90505f805b82811015610ed3576001600160a01b0385165f908152600360205260408120610ea99083611c09565b90505f610eb68783610e22565b1115610eca5782610ec681613063565b9350505b50600101610e80565b505f816001600160401b03811115610eed57610eed612dcd565b604051908082528060200260200182016040528015610f16578160200160208202803683370190505b5090505f805b84811015610f9a576001600160a01b0387165f908152600360205260408120610f459083611c09565b90505f610f528983610e22565b1115610f915780848481518110610f6b57610f6b613028565b6001600160a01b039092166020928302919091019091015282610f8d81613063565b9350505b50600101610f1c565b509095945050505050565b610fad611d3b565b5f5b8581101561102f5761102733888884818110610fcd57610fcd613028565b9050602002016020810190610fe29190612bb7565b858585818110610ff457610ff4613028565b90506020020160208101906110099190612bb7565b88888681811061101b5761101b613028565b90506020020135611d65565b600101610faf565b5061103a6001600955565b505050505050565b61104a611e78565b61105382611f1c565b610cc48282611f26565b5f611066611fe2565b505f8051602061312e83398151915290565b5f8061108384610cea565b90505f61108f856109cc565b90505f805b8351811015611103575f5b83518110156110fa576110e688888785815181106110bf576110bf613028565b60200260200101518785815181106110d9576110d9613028565b6020026020010151611524565b6110f09084613050565b925060010161109f565b50600101611094565b5095945050505050565b5f6109918261057c84610bf2565b5f61112582610bf2565b156111435761113382611ba7565b61113e906001613050565b610991565b5f92915050565b611152611d3b565b61115e33848385611d65565b610e1d6001600955565b5f8051602061310e83398151915261117f81611c14565b611187611d3b565b61119c84611194866111fd565b85338661202b565b826001600160a01b03166111af856111fd565b60408051338152602081018690526001600160a01b038816917fd41c64546a5c34c283150998874c7ee0412c8954f57aef484c681f6e137827df910160405180910390a4610ce46001600955565b5f61120782610bf2565b156111435761113382610bf2565b6001600160a01b039384165f9081526006602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112965750825b90505f826001600160401b031660011480156112b15750303b155b9050811580156112bf575080155b156112dd5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561130757845460ff60401b1916600160401b1785555b61130f61207f565b831561135557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f9182525f8051602061314e833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61139a611d3b565b335f8181526008602052604090205460ff16156113c95760405162fe178760e01b815260040160405180910390fd5b6001600160a01b0381165f908152600860209081526040808320805460ff191660019081179091559091529020546114035761140361307b565b61140c81611ba7565b6001600160a01b0382165f908152600260205260408120919091555b6001600160a01b0382165f90815260036020526040902061144890611c00565b811015611516576001600160a01b0382165f9081526003602052604081206114709083611c09565b90505f5b6001600160a01b0384165f90815260046020526040902061149490611c00565b81101561150c576001600160a01b0384165f9081526004602052604081206114bc9083611c09565b90505f6114cb865f8487611524565b90505f6114d787610bf2565b1115611502575f6114e787610bf2565b111561150257611502866114fa88610bf2565b84878561208f565b5050600101611474565b5050600101611428565b50506115226001600955565b565b6001600160a01b039384165f9081526005602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f6109c58361156f85610bf2565b84610997565b5f610de28461158386610bf2565b8585611524565b611592611d3b565b5f5b85811015611797575f61165b61161c336115ce8b8b878181106115b9576115b9613028565b90506020020160208101906103b69190612bb7565b8d8d878181106115e0576115e0613028565b90506020020160208101906115f59190612bb7565b8c8c8881811061160757611607613028565b905060200201602081019061072c9190612bb7565b61165688888681811061163157611631613028565b9050602002013587878781811061164a5761164a613028565b9050602002013561211a565b61211a565b90506116b53089898581811061167357611673613028565b90506020020160208101906116889190612bb7565b8c8c8681811061169a5761169a613028565b90506020020160208101906116af9190612bb7565b84612129565b61172e336116c233610bf2565b8c8c868181106116d4576116d4613028565b90506020020160208101906116e99190612bb7565b8b8b878181106116fb576116fb613028565b90506020020160208101906117109190612bb7565b8a8a8881811061172257611722613028565b90506020020135612196565b61178e3361173b33610bf2565b8c8c8681811061174d5761174d613028565b90506020020160208101906117629190612bb7565b8b8b8781811061177457611774613028565b90506020020160208101906117899190612bb7565b6121d6565b50600101611594565b506117a26001600955565b5050505050505050565b611522336117b933610bf2565b612248565b5f8051602061310e8339815191526117d581611c14565b6117dd611d3b565b6001600160a01b0384165f9081526003602052604090206117fe9033612365565b505f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611845573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611869919061308f565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303815f875af11580156118bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118e091906130a6565b506118eb8382613050565b5f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611930573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611954919061308f565b1461197257604051631910d68360e21b815260040160405180910390fd5b6119878561197f876111fd565b86338761208f565b836001600160a01b031661199a866111fd565b60408051338152602081018790526001600160a01b038916917f7be65c2ae4d3c544de23b1db5bea4d541c02b93a5f4302852f4dc9880e0cb554910160405180910390a450610ce46001600955565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015611a2d5750825b90505f826001600160401b03166001148015611a485750303b155b905081158015611a56575080155b15611a745760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611a9e57845460ff60401b1916600160401b1785555b611aa6612379565b5f80546001600160a01b0319166001600160a01b038816179055831561103a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b611b15611d3b565b335f8181526001602052604081208590555b82811015611b7f57611b76848483818110611b4457611b44613028565b9050602002016020810190611b599190612bb7565b6001600160a01b0384165f90815260046020526040902090612365565b50600101611b27565b5050610e1d6001600955565b611b9482610c0c565b611b9d81611c14565b610ce48383611cc2565b6001600160a01b0381165f908152600160205260408120548103611bde5760405163143c378b60e01b815260040160405180910390fd5b6001600160a01b0382165f9081526001602052604090205461099190426130c5565b5f610991825490565b5f6109c5838361238b565b611c1e81336123b1565b50565b5f5f8051602061314e833981519152611c3a848461135c565b611cb9575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611c6f3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610991565b5f915050610991565b5f5f8051602061314e833981519152611cdb848461135c565b15611cb9575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610991565b600260095403611d5e57604051633ee5aeb560e01b815260040160405180910390fd5b6002600955565b303303611daa5760405162461bcd60e51b81526020600482015260136024820152724f6e6c792065787465726e616c2063616c6c7360681b6044820152606401610b1c565b5f546001600160a01b03838116911614611dfc5760405162461bcd60e51b815260206004820152601360248201527226bab9ba103ab9b2903130b9b2903a37b5b2b760691b6044820152606401610b1c565b5f546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201849052909116906323b872dd906064015b6020604051808303815f875af1158015611e54573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135591906130a6565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611efe57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ef25f8051602061312e833981519152546001600160a01b031690565b6001600160a01b031614155b156115225760405163703e46dd60e11b815260040160405180910390fd5b5f610cc481611c14565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611f80575060408051601f3d908101601f19168201909252611f7d9181019061308f565b60015b611fa857604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610b1c565b5f8051602061312e8339815191528114611fd857604051632a87526960e21b815260048101829052602401610b1c565b610e1d83836123ea565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115225760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b038086165f90815260066020908152604080832088845282528083208785168452825280832093861683529290529081208054839290612073908490613050565b90915550505050505050565b61208761243f565b611522612379565b6001600160a01b038086165f908152600560209081526040808320888452825280832087851684528252808320938616835292905290812080548392906120d7908490613050565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290612073908490613050565b5f8282188284100282186109c5565b306001600160a01b0385160361216a575f546001600160a01b0380841691160361215e5761215984848484612488565b610ce4565b61215984848484612574565b5f546001600160a01b0380841691160361218a5761215984848484611d65565b610ce4848484846126fb565b835f6121a487838787611524565b9050828110156121c0576121bb87838787856127d4565b6121cd565b6121cd87838787876127d4565b50505050505050565b5f6121e385858585611524565b90505f6121f1856001613050565b90505f61220087838787611215565b9050828111156121cd576001600160a01b038088165f9081526006602090815260408083208684528252808320848a16845282528083209388168352929052208390556121cd565b5f5b6001600160a01b0383165f90815260036020526040902061226a90611c00565b8110156122ff576001600160a01b0383165f9081526003602052604081206122929083611c09565b90505f5b6001600160a01b0385165f9081526004602052604090206122b690611c00565b8110156122f5576001600160a01b0385165f9081526004602052604081206122de9083611c09565b90506122ec8686838661285f565b50600101612296565b505060010161224a565b5061230b816001613050565b6001600160a01b0383165f81815260026020526040908190209290925590517fb693195b5ff3e376f8b562486abc516e10fe2467b75f0e4165e79cf4ab70dc41906123599084815260200190565b60405180910390a25050565b5f6109c5836001600160a01b038416612928565b61238161243f565b611c1e5f33611c21565b5f825f0182815481106123a0576123a0613028565b905f5260205f200154905092915050565b6123bb828261135c565b610cc45760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610b1c565b6123f382612974565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561243757610e1d82826129d7565b610cc4612a49565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661152257604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b03841630146124ea5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c79206044820152603160f81b6064820152608401610b1c565b5f546001600160a01b0383811691161461253c5760405162461bcd60e51b815260206004820152601360248201527226bab9ba103ab9b2903130b9b2903a37b5b2b760691b6044820152606401610b1c565b5f5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb90604401611e38565b6001600160a01b03841630146125d65760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c79206044820152601960f91b6064820152608401610b1c565b5f546001600160a01b0380841691160361262d5760405162461bcd60e51b815260206004820152601860248201527726bab9ba103ab9b29031bab9ba37b234b0b7103a37b5b2b760411b6044820152606401610b1c565b5f5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af115801561267c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a091906130a6565b506040516318950c7160e01b81526001600160a01b038481166004830152602482018390528316906318950c71906044015b5f604051808303815f87803b1580156126e9575f80fd5b505af11580156117a2573d5f803e3d5ffd5b3033036127405760405162461bcd60e51b81526020600482015260136024820152724f6e6c792065787465726e616c2063616c6c7360681b6044820152606401610b1c565b5f546001600160a01b038084169116036127975760405162461bcd60e51b815260206004820152601860248201527726bab9ba103ab9b29031bab9ba37b234b0b7103a37b5b2b760411b6044820152606401610b1c565b60405163c4652d8360e01b81526001600160a01b03858116600483015284811660248301526044820183905283169063c4652d83906064016126d2565b6001600160a01b038086165f9081526005602090815260408083208884528252808320878516845282528083209386168352929052908120805483929061281c9084906130e4565b90915550506001600160a01b038086165f9081526007602090815260408083208884528252808320938716835292905290812080548392906120739084906130e4565b5f61286c85858585611524565b90505f6128858661287e876001613050565b8686611215565b9050818111156128925750805b5f61289d82846130e4565b90506128b6876128ae886001613050565b87878561208f565b81156128c8576128c830858785612488565b846001600160a01b031686856001600160a01b03167f3ddb7f725ac69363a1df8296c965af4d268f31b082480dcd8419d284fb7fd3428686604051612917929190918252602082015260400190565b60405180910390a450505050505050565b5f81815260018301602052604081205461296d57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610991565b505f610991565b806001600160a01b03163b5f036129a957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610b1c565b5f8051602061312e83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516129f391906130f7565b5f60405180830381855af49150503d805f8114612a2b576040519150601f19603f3d011682016040523d82523d5f602084013e612a30565b606091505b5091509150612a40858383612a68565b95945050505050565b34156115225760405163b398979f60e01b815260040160405180910390fd5b606082612a7d57612a7882612ac4565b6109c5565b8151158015612a9457506001600160a01b0384163b155b15612abd57604051639996b31560e01b81526001600160a01b0385166004820152602401610b1c565b50806109c5565b805115612ad45780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215612afd575f80fd5b81356001600160e01b0319811681146109c5575f80fd5b6001600160a01b0381168114611c1e575f80fd5b5f805f8060808587031215612b3b575f80fd5b8435612b4681612b14565b9350602085013592506040850135612b5d81612b14565b91506060850135612b6d81612b14565b939692955090935050565b5f805f60608486031215612b8a575f80fd5b8335612b9581612b14565b9250602084013591506040840135612bac81612b14565b809150509250925092565b5f60208284031215612bc7575f80fd5b81356109c581612b14565b602080825282518282018190525f918401906040840190835b81811015610f9a5783516001600160a01b0316835260209384019390920191600101612beb565b5f8060408385031215612c23575f80fd5b8235612c2e81612b14565b946020939093013593505050565b5f60208284031215612c4c575f80fd5b5035919050565b5f8060408385031215612c64575f80fd5b823591506020830135612c7681612b14565b809150509250929050565b5f805f60608486031215612c93575f80fd5b8335612c9e81612b14565b92506020840135612cae81612b14565b91506040840135612bac81612b14565b5f8060408385031215612ccf575f80fd5b8235612cda81612b14565b91506020830135612c7681612b14565b5f8083601f840112612cfa575f80fd5b5081356001600160401b03811115612d10575f80fd5b6020830191508360208260051b8501011115612d2a575f80fd5b9250929050565b5f805f805f8060608789031215612d46575f80fd5b86356001600160401b03811115612d5b575f80fd5b612d6789828a01612cea565b90975095505060208701356001600160401b03811115612d85575f80fd5b612d9189828a01612cea565b90955093505060408701356001600160401b03811115612daf575f80fd5b612dbb89828a01612cea565b979a9699509497509295939492505050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612df2575f80fd5b8235612dfd81612b14565b915060208301356001600160401b03811115612e17575f80fd5b8301601f81018513612e27575f80fd5b80356001600160401b03811115612e4057612e40612dcd565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612e6e57612e6e612dcd565b604052818152828201602001871015612e85575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f805f60608486031215612eb6575f80fd5b8335612ec181612b14565b92506020840135612ed181612b14565b929592945050506040919091013590565b5f805f805f805f806080898b031215612ef9575f80fd5b88356001600160401b03811115612f0e575f80fd5b612f1a8b828c01612cea565b90995097505060208901356001600160401b03811115612f38575f80fd5b612f448b828c01612cea565b90975095505060408901356001600160401b03811115612f62575f80fd5b612f6e8b828c01612cea565b90955093505060608901356001600160401b03811115612f8c575f80fd5b612f988b828c01612cea565b999c989b5096995094979396929594505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f60408486031215612ff3575f80fd5b8335925060208401356001600160401b0381111561300f575f80fd5b61301b86828701612cea565b9497909650939450505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156109915761099161303c565b5f600182016130745761307461303c565b5060010190565b634e487b7160e01b5f52600160045260245ffd5b5f6020828403121561309f575f80fd5b5051919050565b5f602082840312156130b6575f80fd5b815180151581146109c5575f80fd5b5f826130df57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156109915761099161303c565b5f82518060208501845e5f92019182525091905056fedc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220e0269fa999d9a884e7d5efe6e7b9a93aebf6d1e0488be1c3ffd5941a8c891cc664736f6c634300081a0033","sourceMap":"766:27108:114:-:0;;;1171:4:21;1128:48;;766:27108:114;;;;;;;;;-1:-1:-1;1857:1:57;2061:7;:21;766:27108:114;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106102a5575f3560e01c80635e00bf461161016f578063a78d1fef116100d8578063c4d66de811610092578063d547741f1161006d578063d547741f146108a8578063d980b40d146108c7578063e6e3fb3a146108e6578063fc0c546a1461092b575f80fd5b8063c4d66de81461083c578063d1ba90ff1461085b578063d37304f814610889575f80fd5b8063a78d1fef14610763578063a885c97514610782578063a887b71c146107a1578063ad3cb1cc146107b5578063b1de97f7146107f2578063bf6eac2f1461081d575f80fd5b806386af70d11161012957806386af70d1146106a357806391d14854146106df57806392a2ebf3146106fe57806393dfb85c146107125780639db92f6814610731578063a217fddf14610750575f80fd5b80635e00bf46146105f357806360829f8a14610612578063771fcfc4146106315780637a997ab7146106505780637d93768b146106705780638129fc1c1461068f575f80fd5b806336568abe116102115780634f1ef286116101cb5780634f1ef2861461053b57806352d1902d1461054e57806355bdbe4c14610562578063574663a91461058157806357dd6a94146105a05780635c534359146105bf575f80fd5b806336568abe146104755780633bccf635146104945780633debeadc146104bf57806341566585146104de5780634234a479146104fd5780634e76a1391461051c575f80fd5b8063248a9ca311610262578063248a9ca3146103bb57806324fdfddf146103da578063286dd3f5146103f95780632f2ff15d14610418578063341d5ef51461043757806334eada3a14610456575f80fd5b806301ffc9a7146102a95780630c8f522f146102dd5780630ce52af5146103305780631789aeb41461034f5780631dc8b9491461037b57806322fceb751461039c575b5f80fd5b3480156102b4575f80fd5b506102c86102c3366004612aed565b610961565b60405190151581526020015b60405180910390f35b3480156102e8575f80fd5b506103226102f7366004612b28565b600560209081525f948552604080862082529385528385208152918452828420909152825290205481565b6040519081526020016102d4565b34801561033b575f80fd5b5061032261034a366004612b78565b610997565b34801561035a575f80fd5b5061036e610369366004612bb7565b6109cc565b6040516102d49190612bd2565b348015610386575f80fd5b5061039a610395366004612c12565b610ab6565b005b3480156103a7575f80fd5b506103226103b6366004612bb7565b610bf2565b3480156103c6575f80fd5b506103226103d5366004612c3c565b610c0c565b3480156103e5575f80fd5b506103226103f4366004612b78565b610c2c565b348015610404575f80fd5b5061039a610413366004612bb7565b610ca3565b348015610423575f80fd5b5061039a610432366004612c53565b610cc8565b348015610442575f80fd5b5061036e610451366004612bb7565b610cea565b348015610461575f80fd5b50610322610470366004612c81565b610dcd565b348015610480575f80fd5b5061039a61048f366004612c53565b610dea565b34801561049f575f80fd5b506103226104ae366004612bb7565b60016020525f908152604090205481565b3480156104ca575f80fd5b506103226104d9366004612cbe565b610e22565b3480156104e9575f80fd5b5061039a6104f8366004612bb7565b610e36565b348015610508575f80fd5b5061036e610517366004612bb7565b610e57565b348015610527575f80fd5b5061039a610536366004612d31565b610fa5565b61039a610549366004612de1565b611042565b348015610559575f80fd5b5061032261105d565b34801561056d575f80fd5b5061032261057c366004612c12565b611078565b34801561058c575f80fd5b5061032261059b366004612bb7565b61110d565b3480156105ab575f80fd5b506103226105ba366004612bb7565b61111b565b3480156105ca575f80fd5b506103226105d9366004612bb7565b6001600160a01b03165f9081526001602052604090205490565b3480156105fe575f80fd5b5061039a61060d366004612b78565b61114a565b34801561061d575f80fd5b5061039a61062c366004612ea4565b611168565b34801561063c575f80fd5b5061032261064b366004612bb7565b6111fd565b34801561065b575f80fd5b506103225f8051602061310e83398151915281565b34801561067b575f80fd5b5061032261068a366004612b28565b611215565b34801561069a575f80fd5b5061039a611252565b3480156106ae575f80fd5b506103226106bd366004612b78565b600760209081525f938452604080852082529284528284209052825290205481565b3480156106ea575f80fd5b506102c86106f9366004612c53565b61135c565b348015610709575f80fd5b5061039a611392565b34801561071d575f80fd5b5061032261072c366004612b28565b611524565b34801561073c575f80fd5b5061032261074b366004612cbe565b611561565b34801561075b575f80fd5b506103225f81565b34801561076e575f80fd5b5061032261077d366004612c81565b611575565b34801561078d575f80fd5b5061039a61079c366004612ee2565b61158a565b3480156107ac575f80fd5b5061039a6117ac565b3480156107c0575f80fd5b506107e5604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516102d49190612fac565b3480156107fd575f80fd5b5061032261080c366004612bb7565b60026020525f908152604090205481565b348015610828575f80fd5b5061039a610837366004612ea4565b6117be565b348015610847575f80fd5b5061039a610856366004612bb7565b6119e9565b348015610866575f80fd5b506102c8610875366004612bb7565b60086020525f908152604090205460ff1681565b348015610894575f80fd5b5061039a6108a3366004612fe1565b611b0d565b3480156108b3575f80fd5b5061039a6108c2366004612c53565b611b8b565b3480156108d2575f80fd5b506103226108e1366004612bb7565b611ba7565b3480156108f1575f80fd5b50610322610900366004612b28565b600660209081525f948552604080862082529385528385208152918452828420909152825290205481565b348015610936575f80fd5b505f54610949906001600160a01b031681565b6040516001600160a01b0390911681526020016102d4565b5f6001600160e01b03198216637965db0b60e01b148061099157506301ffc9a760e01b6001600160e01b03198316145b92915050565b6001600160a01b038084165f9081526007602090815260408083208684528252808320938516835292905220545b9392505050565b6001600160a01b0381165f908152600360205260408120606091906109f090611c00565b6001600160401b03811115610a0757610a07612dcd565b604051908082528060200260200182016040528015610a30578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600360205260409020610a5590611c00565b811015610aaf576001600160a01b0384165f908152600360205260409020610a7d9082611c09565b828281518110610a8f57610a8f613028565b6001600160a01b0390921660209283029190910190910152600101610a35565b5092915050565b610abf82611ba7565b811115610b255760405162461bcd60e51b815260206004820152602960248201527f4e45575f45504f43485f4d5553545f42455f4c4553535f5448414e5f5052455360448201526808a9ca8be8aa09e86960bb1b60648201526084015b60405180910390fd5b610b2e82610bf2565b8111610b905760405162461bcd60e51b815260206004820152602b60248201527f4e45575f45504f43485f4d5553545f42455f4849474845525f5448414e5f435560448201526a0a4a48a9ca8be8aa09e86960ab1b6064820152608401610b1c565b336001600160a01b03831614610bd75760405162461bcd60e51b815260206004820152600c60248201526b15539055551213d49256915160a21b6044820152606401610b1c565b6001600160a01b039091165f90815260026020526040902055565b6001600160a01b03165f9081526002602052604090205490565b5f9081525f8051602061314e833981519152602052604090206001015490565b5f80805b6001600160a01b0386165f908152600460205260409020610c5090611c00565b811015610c9a576001600160a01b0386165f908152600460205260409020610c869087908790610c809085611c09565b87611524565b610c909083613050565b9150600101610c30565b50949350505050565b5f610cad81611c14565b610cc45f8051602061310e83398151915283611b8b565b5050565b610cd182610c0c565b610cda81611c14565b610ce48383611c21565b50505050565b6001600160a01b0381165f90815260046020526040812060609190610d0e90611c00565b6001600160401b03811115610d2557610d25612dcd565b604051908082528060200260200182016040528015610d4e578160200160208202803683370190505b5090505f5b6001600160a01b0384165f908152600460205260409020610d7390611c00565b811015610aaf576001600160a01b0384165f908152600460205260409020610d9b9082611c09565b828281518110610dad57610dad613028565b6001600160a01b0390921660209283029190910190910152600101610d53565b5f610de284610ddb86610bf2565b8585611215565b949350505050565b6001600160a01b0381163314610e135760405163334bd91960e11b815260040160405180910390fd5b610e1d8282611cc2565b505050565b5f6109c583610e3085610bf2565b84610c2c565b5f610e4081611c14565b610cc45f8051602061310e83398151915283610cc8565b6001600160a01b0381165f90815260036020526040812060609190610e7b90611c00565b90505f805b82811015610ed3576001600160a01b0385165f908152600360205260408120610ea99083611c09565b90505f610eb68783610e22565b1115610eca5782610ec681613063565b9350505b50600101610e80565b505f816001600160401b03811115610eed57610eed612dcd565b604051908082528060200260200182016040528015610f16578160200160208202803683370190505b5090505f805b84811015610f9a576001600160a01b0387165f908152600360205260408120610f459083611c09565b90505f610f528983610e22565b1115610f915780848481518110610f6b57610f6b613028565b6001600160a01b039092166020928302919091019091015282610f8d81613063565b9350505b50600101610f1c565b509095945050505050565b610fad611d3b565b5f5b8581101561102f5761102733888884818110610fcd57610fcd613028565b9050602002016020810190610fe29190612bb7565b858585818110610ff457610ff4613028565b90506020020160208101906110099190612bb7565b88888681811061101b5761101b613028565b90506020020135611d65565b600101610faf565b5061103a6001600955565b505050505050565b61104a611e78565b61105382611f1c565b610cc48282611f26565b5f611066611fe2565b505f8051602061312e83398151915290565b5f8061108384610cea565b90505f61108f856109cc565b90505f805b8351811015611103575f5b83518110156110fa576110e688888785815181106110bf576110bf613028565b60200260200101518785815181106110d9576110d9613028565b6020026020010151611524565b6110f09084613050565b925060010161109f565b50600101611094565b5095945050505050565b5f6109918261057c84610bf2565b5f61112582610bf2565b156111435761113382611ba7565b61113e906001613050565b610991565b5f92915050565b611152611d3b565b61115e33848385611d65565b610e1d6001600955565b5f8051602061310e83398151915261117f81611c14565b611187611d3b565b61119c84611194866111fd565b85338661202b565b826001600160a01b03166111af856111fd565b60408051338152602081018690526001600160a01b038816917fd41c64546a5c34c283150998874c7ee0412c8954f57aef484c681f6e137827df910160405180910390a4610ce46001600955565b5f61120782610bf2565b156111435761113382610bf2565b6001600160a01b039384165f9081526006602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156112965750825b90505f826001600160401b031660011480156112b15750303b155b9050811580156112bf575080155b156112dd5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561130757845460ff60401b1916600160401b1785555b61130f61207f565b831561135557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f9182525f8051602061314e833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b61139a611d3b565b335f8181526008602052604090205460ff16156113c95760405162fe178760e01b815260040160405180910390fd5b6001600160a01b0381165f908152600860209081526040808320805460ff191660019081179091559091529020546114035761140361307b565b61140c81611ba7565b6001600160a01b0382165f908152600260205260408120919091555b6001600160a01b0382165f90815260036020526040902061144890611c00565b811015611516576001600160a01b0382165f9081526003602052604081206114709083611c09565b90505f5b6001600160a01b0384165f90815260046020526040902061149490611c00565b81101561150c576001600160a01b0384165f9081526004602052604081206114bc9083611c09565b90505f6114cb865f8487611524565b90505f6114d787610bf2565b1115611502575f6114e787610bf2565b111561150257611502866114fa88610bf2565b84878561208f565b5050600101611474565b5050600101611428565b50506115226001600955565b565b6001600160a01b039384165f9081526005602090815260408083209583529481528482209386168252928352838120919094168452905290205490565b5f6109c58361156f85610bf2565b84610997565b5f610de28461158386610bf2565b8585611524565b611592611d3b565b5f5b85811015611797575f61165b61161c336115ce8b8b878181106115b9576115b9613028565b90506020020160208101906103b69190612bb7565b8d8d878181106115e0576115e0613028565b90506020020160208101906115f59190612bb7565b8c8c8881811061160757611607613028565b905060200201602081019061072c9190612bb7565b61165688888681811061163157611631613028565b9050602002013587878781811061164a5761164a613028565b9050602002013561211a565b61211a565b90506116b53089898581811061167357611673613028565b90506020020160208101906116889190612bb7565b8c8c8681811061169a5761169a613028565b90506020020160208101906116af9190612bb7565b84612129565b61172e336116c233610bf2565b8c8c868181106116d4576116d4613028565b90506020020160208101906116e99190612bb7565b8b8b878181106116fb576116fb613028565b90506020020160208101906117109190612bb7565b8a8a8881811061172257611722613028565b90506020020135612196565b61178e3361173b33610bf2565b8c8c8681811061174d5761174d613028565b90506020020160208101906117629190612bb7565b8b8b8781811061177457611774613028565b90506020020160208101906117899190612bb7565b6121d6565b50600101611594565b506117a26001600955565b5050505050505050565b611522336117b933610bf2565b612248565b5f8051602061310e8339815191526117d581611c14565b6117dd611d3b565b6001600160a01b0384165f9081526003602052604090206117fe9033612365565b505f80546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611845573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611869919061308f565b6040516323b872dd60e01b8152336004820152306024820152604481018590529091506001600160a01b038516906323b872dd906064016020604051808303815f875af11580156118bc573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906118e091906130a6565b506118eb8382613050565b5f546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611930573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611954919061308f565b1461197257604051631910d68360e21b815260040160405180910390fd5b6119878561197f876111fd565b86338761208f565b836001600160a01b031661199a866111fd565b60408051338152602081018790526001600160a01b038916917f7be65c2ae4d3c544de23b1db5bea4d541c02b93a5f4302852f4dc9880e0cb554910160405180910390a450610ce46001600955565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015611a2d5750825b90505f826001600160401b03166001148015611a485750303b155b905081158015611a56575080155b15611a745760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611a9e57845460ff60401b1916600160401b1785555b611aa6612379565b5f80546001600160a01b0319166001600160a01b038816179055831561103a57845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a1505050505050565b611b15611d3b565b335f8181526001602052604081208590555b82811015611b7f57611b76848483818110611b4457611b44613028565b9050602002016020810190611b599190612bb7565b6001600160a01b0384165f90815260046020526040902090612365565b50600101611b27565b5050610e1d6001600955565b611b9482610c0c565b611b9d81611c14565b610ce48383611cc2565b6001600160a01b0381165f908152600160205260408120548103611bde5760405163143c378b60e01b815260040160405180910390fd5b6001600160a01b0382165f9081526001602052604090205461099190426130c5565b5f610991825490565b5f6109c5838361238b565b611c1e81336123b1565b50565b5f5f8051602061314e833981519152611c3a848461135c565b611cb9575f848152602082815260408083206001600160a01b03871684529091529020805460ff19166001179055611c6f3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050610991565b5f915050610991565b5f5f8051602061314e833981519152611cdb848461135c565b15611cb9575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050610991565b600260095403611d5e57604051633ee5aeb560e01b815260040160405180910390fd5b6002600955565b303303611daa5760405162461bcd60e51b81526020600482015260136024820152724f6e6c792065787465726e616c2063616c6c7360681b6044820152606401610b1c565b5f546001600160a01b03838116911614611dfc5760405162461bcd60e51b815260206004820152601360248201527226bab9ba103ab9b2903130b9b2903a37b5b2b760691b6044820152606401610b1c565b5f546040516323b872dd60e01b81526001600160a01b038681166004830152858116602483015260448201849052909116906323b872dd906064015b6020604051808303815f875af1158015611e54573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061135591906130a6565b306001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480611efe57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316611ef25f8051602061312e833981519152546001600160a01b031690565b6001600160a01b031614155b156115225760405163703e46dd60e11b815260040160405180910390fd5b5f610cc481611c14565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015611f80575060408051601f3d908101601f19168201909252611f7d9181019061308f565b60015b611fa857604051634c9c8ce360e01b81526001600160a01b0383166004820152602401610b1c565b5f8051602061312e8339815191528114611fd857604051632a87526960e21b815260048101829052602401610b1c565b610e1d83836123ea565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146115225760405163703e46dd60e11b815260040160405180910390fd5b6001600160a01b038086165f90815260066020908152604080832088845282528083208785168452825280832093861683529290529081208054839290612073908490613050565b90915550505050505050565b61208761243f565b611522612379565b6001600160a01b038086165f908152600560209081526040808320888452825280832087851684528252808320938616835292905290812080548392906120d7908490613050565b90915550506001600160a01b038086165f908152600760209081526040808320888452825280832093871683529290529081208054839290612073908490613050565b5f8282188284100282186109c5565b306001600160a01b0385160361216a575f546001600160a01b0380841691160361215e5761215984848484612488565b610ce4565b61215984848484612574565b5f546001600160a01b0380841691160361218a5761215984848484611d65565b610ce4848484846126fb565b835f6121a487838787611524565b9050828110156121c0576121bb87838787856127d4565b6121cd565b6121cd87838787876127d4565b50505050505050565b5f6121e385858585611524565b90505f6121f1856001613050565b90505f61220087838787611215565b9050828111156121cd576001600160a01b038088165f9081526006602090815260408083208684528252808320848a16845282528083209388168352929052208390556121cd565b5f5b6001600160a01b0383165f90815260036020526040902061226a90611c00565b8110156122ff576001600160a01b0383165f9081526003602052604081206122929083611c09565b90505f5b6001600160a01b0385165f9081526004602052604090206122b690611c00565b8110156122f5576001600160a01b0385165f9081526004602052604081206122de9083611c09565b90506122ec8686838661285f565b50600101612296565b505060010161224a565b5061230b816001613050565b6001600160a01b0383165f81815260026020526040908190209290925590517fb693195b5ff3e376f8b562486abc516e10fe2467b75f0e4165e79cf4ab70dc41906123599084815260200190565b60405180910390a25050565b5f6109c5836001600160a01b038416612928565b61238161243f565b611c1e5f33611c21565b5f825f0182815481106123a0576123a0613028565b905f5260205f200154905092915050565b6123bb828261135c565b610cc45760405163e2517d3f60e01b81526001600160a01b038216600482015260248101839052604401610b1c565b6123f382612974565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a280511561243757610e1d82826129d7565b610cc4612a49565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661152257604051631afcd79f60e31b815260040160405180910390fd5b6001600160a01b03841630146124ea5760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c79206044820152603160f81b6064820152608401610b1c565b5f546001600160a01b0383811691161461253c5760405162461bcd60e51b815260206004820152601360248201527226bab9ba103ab9b2903130b9b2903a37b5b2b760691b6044820152606401610b1c565b5f5460405163a9059cbb60e01b81526001600160a01b038581166004830152602482018490529091169063a9059cbb90604401611e38565b6001600160a01b03841630146125d65760405162461bcd60e51b815260206004820152602160248201527f4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c79206044820152601960f91b6064820152608401610b1c565b5f546001600160a01b0380841691160361262d5760405162461bcd60e51b815260206004820152601860248201527726bab9ba103ab9b29031bab9ba37b234b0b7103a37b5b2b760411b6044820152606401610b1c565b5f5460405163095ea7b360e01b81526001600160a01b038481166004830152602482018490529091169063095ea7b3906044016020604051808303815f875af115801561267c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906126a091906130a6565b506040516318950c7160e01b81526001600160a01b038481166004830152602482018390528316906318950c71906044015b5f604051808303815f87803b1580156126e9575f80fd5b505af11580156117a2573d5f803e3d5ffd5b3033036127405760405162461bcd60e51b81526020600482015260136024820152724f6e6c792065787465726e616c2063616c6c7360681b6044820152606401610b1c565b5f546001600160a01b038084169116036127975760405162461bcd60e51b815260206004820152601860248201527726bab9ba103ab9b29031bab9ba37b234b0b7103a37b5b2b760411b6044820152606401610b1c565b60405163c4652d8360e01b81526001600160a01b03858116600483015284811660248301526044820183905283169063c4652d83906064016126d2565b6001600160a01b038086165f9081526005602090815260408083208884528252808320878516845282528083209386168352929052908120805483929061281c9084906130e4565b90915550506001600160a01b038086165f9081526007602090815260408083208884528252808320938716835292905290812080548392906120739084906130e4565b5f61286c85858585611524565b90505f6128858661287e876001613050565b8686611215565b9050818111156128925750805b5f61289d82846130e4565b90506128b6876128ae886001613050565b87878561208f565b81156128c8576128c830858785612488565b846001600160a01b031686856001600160a01b03167f3ddb7f725ac69363a1df8296c965af4d268f31b082480dcd8419d284fb7fd3428686604051612917929190918252602082015260400190565b60405180910390a450505050505050565b5f81815260018301602052604081205461296d57508154600181810184555f848152602080822090930184905584548482528286019093526040902091909155610991565b505f610991565b806001600160a01b03163b5f036129a957604051634c9c8ce360e01b81526001600160a01b0382166004820152602401610b1c565b5f8051602061312e83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b0316846040516129f391906130f7565b5f60405180830381855af49150503d805f8114612a2b576040519150601f19603f3d011682016040523d82523d5f602084013e612a30565b606091505b5091509150612a40858383612a68565b95945050505050565b34156115225760405163b398979f60e01b815260040160405180910390fd5b606082612a7d57612a7882612ac4565b6109c5565b8151158015612a9457506001600160a01b0384163b155b15612abd57604051639996b31560e01b81526001600160a01b0385166004820152602401610b1c565b50806109c5565b805115612ad45780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215612afd575f80fd5b81356001600160e01b0319811681146109c5575f80fd5b6001600160a01b0381168114611c1e575f80fd5b5f805f8060808587031215612b3b575f80fd5b8435612b4681612b14565b9350602085013592506040850135612b5d81612b14565b91506060850135612b6d81612b14565b939692955090935050565b5f805f60608486031215612b8a575f80fd5b8335612b9581612b14565b9250602084013591506040840135612bac81612b14565b809150509250925092565b5f60208284031215612bc7575f80fd5b81356109c581612b14565b602080825282518282018190525f918401906040840190835b81811015610f9a5783516001600160a01b0316835260209384019390920191600101612beb565b5f8060408385031215612c23575f80fd5b8235612c2e81612b14565b946020939093013593505050565b5f60208284031215612c4c575f80fd5b5035919050565b5f8060408385031215612c64575f80fd5b823591506020830135612c7681612b14565b809150509250929050565b5f805f60608486031215612c93575f80fd5b8335612c9e81612b14565b92506020840135612cae81612b14565b91506040840135612bac81612b14565b5f8060408385031215612ccf575f80fd5b8235612cda81612b14565b91506020830135612c7681612b14565b5f8083601f840112612cfa575f80fd5b5081356001600160401b03811115612d10575f80fd5b6020830191508360208260051b8501011115612d2a575f80fd5b9250929050565b5f805f805f8060608789031215612d46575f80fd5b86356001600160401b03811115612d5b575f80fd5b612d6789828a01612cea565b90975095505060208701356001600160401b03811115612d85575f80fd5b612d9189828a01612cea565b90955093505060408701356001600160401b03811115612daf575f80fd5b612dbb89828a01612cea565b979a9699509497509295939492505050565b634e487b7160e01b5f52604160045260245ffd5b5f8060408385031215612df2575f80fd5b8235612dfd81612b14565b915060208301356001600160401b03811115612e17575f80fd5b8301601f81018513612e27575f80fd5b80356001600160401b03811115612e4057612e40612dcd565b604051601f8201601f19908116603f011681016001600160401b0381118282101715612e6e57612e6e612dcd565b604052818152828201602001871015612e85575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f805f60608486031215612eb6575f80fd5b8335612ec181612b14565b92506020840135612ed181612b14565b929592945050506040919091013590565b5f805f805f805f806080898b031215612ef9575f80fd5b88356001600160401b03811115612f0e575f80fd5b612f1a8b828c01612cea565b90995097505060208901356001600160401b03811115612f38575f80fd5b612f448b828c01612cea565b90975095505060408901356001600160401b03811115612f62575f80fd5b612f6e8b828c01612cea565b90955093505060608901356001600160401b03811115612f8c575f80fd5b612f988b828c01612cea565b999c989b5096995094979396929594505050565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f805f60408486031215612ff3575f80fd5b8335925060208401356001600160401b0381111561300f575f80fd5b61301b86828701612cea565b9497909650939450505050565b634e487b7160e01b5f52603260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b808201808211156109915761099161303c565b5f600182016130745761307461303c565b5060010190565b634e487b7160e01b5f52600160045260245ffd5b5f6020828403121561309f575f80fd5b5051919050565b5f602082840312156130b6575f80fd5b815180151581146109c5575f80fd5b5f826130df57634e487b7160e01b5f52601260045260245ffd5b500490565b818103818111156109915761099161303c565b5f82518060208501845e5f92019182525091905056fedc72ed553f2544c34465af23b847953efeb813428162d767f9ba5f4013be6760360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800a2646970667358221220e0269fa999d9a884e7d5efe6e7b9a93aebf6d1e0488be1c3ffd5941a8c891cc664736f6c634300081a0033","sourceMap":"766:27108:114:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:19;;;;;;;;;;-1:-1:-1;3443:202:19;;;;;:::i;:::-;;:::i;:::-;;;470:14:143;;463:22;445:41;;433:2;418:18;3443:202:19;;;;;;;;1474:208:115;;;;;;;;;;-1:-1:-1;1474:208:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1434:25:143;;;1422:2;1407:18;1474:208:115;1288:177:143;10872:215:114;;;;;;;;;;-1:-1:-1;10872:215:114;;;;;:::i;:::-;;:::i;2321:419::-;;;;;;;;;;-1:-1:-1;2321:419:114;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4287:406::-;;;;;;;;;;-1:-1:-1;4287:406:114;;;;;:::i;:::-;;:::i;:::-;;8307:134;;;;;;;;;;-1:-1:-1;8307:134:114;;;;;:::i;:::-;;:::i;4759:191:19:-;;;;;;;;;;-1:-1:-1;4759:191:19;;;;;:::i;:::-;;:::i;11409:381:114:-;;;;;;;;;;-1:-1:-1;11409:381:114;;;;;:::i;:::-;;:::i;26739:151::-;;;;;;;;;;-1:-1:-1;26739:151:114;;;;;:::i;:::-;;:::i;5246:136:19:-;;;;;;;;;;-1:-1:-1;5246:136:19;;;;;:::i;:::-;;:::i;1686:554:114:-;;;;;;;;;;-1:-1:-1;1686:554:114;;;;;:::i;:::-;;:::i;10462:330::-;;;;;;;;;;-1:-1:-1;10462:330:114;;;;;:::i;:::-;;:::i;6348:245:19:-;;;;;;;;;;-1:-1:-1;6348:245:19;;;;;:::i;:::-;;:::i;650:77:115:-;;;;;;;;;;-1:-1:-1;650:77:115;;;;;:::i;:::-;;;;;;;;;;;;;;11796:192:114;;;;;;;;;;-1:-1:-1;11796:192:114;;;;;:::i;:::-;;:::i;26593:140::-;;;;;;;;;;-1:-1:-1;26593:140:114;;;;;:::i;:::-;;:::i;2827:1107::-;;;;;;;;;;-1:-1:-1;2827:1107:114;;;;;:::i;:::-;;:::i;25966:457::-;;;;;;;;;;-1:-1:-1;25966:457:114;;;;;:::i;:::-;;:::i;4161:214:21:-;;;;;;:::i;:::-;;:::i;3708:134::-;;;;;;;;;;;;;:::i;26982:542:114:-;;;;;;;;;;-1:-1:-1;26982:542:114;;;;;:::i;:::-;;:::i;27695:176::-;;;;;;;;;;-1:-1:-1;27695:176:114;;;;;:::i;:::-;;:::i;9069:182::-;;;;;;;;;;-1:-1:-1;9069:182:114;;;;;:::i;:::-;;:::i;4001:125::-;;;;;;;;;;-1:-1:-1;4001:125:114;;;;;:::i;:::-;-1:-1:-1;;;;;4090:29:114;4064:7;4090:29;;;:21;:29;;;;;;;4001:125;25461:244;;;;;;;;;;-1:-1:-1;25461:244:114;;;;;:::i;:::-;;:::i;13972:972::-;;;;;;;;;;-1:-1:-1;13972:972:114;;;;;:::i;:::-;;:::i;8661:180::-;;;;;;;;;;-1:-1:-1;8661:180:114;;;;;:::i;:::-;;:::i;2462:68:115:-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;2462:68:115;;10109:254:114;;;;;;;;;;-1:-1:-1;10109:254:114;;;;;:::i;:::-;;:::i;514:86:116:-;;;;;;;;;;;;;:::i;2186:152:115:-;;;;;;;;;;-1:-1:-1;2186:152:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3732:207:19;;;;;;;;;;-1:-1:-1;3732:207:19;;;;;:::i;:::-;;:::i;4699:1563:114:-;;;;;;;;;;;;;:::i;9342:250::-;;;;;;;;;;-1:-1:-1;9342:250:114;;;;;:::i;:::-;;:::i;11173:230::-;;;;;;;;;;-1:-1:-1;11173:230:114;;;;;:::i;:::-;;:::i;2317:49:19:-;;;;;;;;;;-1:-1:-1;2317:49:19;2362:4;2317:49;;9689:326:114;;;;;;;;;;-1:-1:-1;9689:326:114;;;;;:::i;:::-;;:::i;19744:1588::-;;;;;;;;;;-1:-1:-1;19744:1588:114;;;;;:::i;:::-;;:::i;17307:108::-;;;;;;;;;;;;;:::i;1819:58:21:-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:21;;;;;;;;;;;;:::i;977:93:115:-;;;;;;;;;;-1:-1:-1;977:93:115;;;;;:::i;:::-;;;;;;;;;;;;;;12036:1885:114;;;;;;;;;;-1:-1:-1;12036:1885:114;;;;;:::i;:::-;;:::i;1051:125::-;;;;;;;;;;-1:-1:-1;1051:125:114;;;;;:::i;:::-;;:::i;2345:60:115:-;;;;;;;;;;-1:-1:-1;2345:60:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;1245:359:114;;;;;;;;;;-1:-1:-1;1245:359:114;;;;;:::i;:::-;;:::i;5662:138:19:-;;;;;;;;;;-1:-1:-1;5662:138:19;;;;;:::i;:::-;;:::i;8002:226:114:-;;;;;;;;;;-1:-1:-1;8002:226:114;;;;;:::i;:::-;;:::i;1832:210:115:-;;;;;;;;;;-1:-1:-1;1832:210:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;471:19;;;;;;;;;;-1:-1:-1;471:19:115;;;;-1:-1:-1;;;;;471:19:115;;;;;;-1:-1:-1;;;;;11558:32:143;;;11540:51;;11528:2;11513:18;471:19:115;11378:219:143;3443:202:19;3528:4;-1:-1:-1;;;;;;3551:47:19;;-1:-1:-1;;;3551:47:19;;:87;;-1:-1:-1;;;;;;;;;;1134:40:27;;;3602:36:19;3544:94;3443:202;-1:-1:-1;;3443:202:19:o;10872:215:114:-;-1:-1:-1;;;;;11026:36:114;;;11000:7;11026:36;;;:28;:36;;;;;;;;:43;;;;;;;;:54;;;;;;;;;;10872:215;;;;;;:::o;2321:419::-;-1:-1:-1;;;;;2488:35:114;;2432:26;2488:35;;;:27;:35;;;;;2404:16;;2432:26;2488:44;;:42;:44::i;:::-;-1:-1:-1;;;;;2461:81:114;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2461:81:114;;2432:110;;2557:9;2552:156;-1:-1:-1;;;;;2576:35:114;;;;;;:27;:35;;;;;:44;;:42;:44::i;:::-;2572:1;:48;2552:156;;;-1:-1:-1;;;;;2656:35:114;;;;;;:27;:35;;;;;:41;;2695:1;2656:38;:41::i;:::-;2641:9;2651:1;2641:12;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2641:56:114;;;:12;;;;;;;;;;;:56;2622:3;;2552:156;;;-1:-1:-1;2724:9:114;2321:419;-1:-1:-1;;2321:419:114:o;4287:406::-;4387:38;4417:6;4387:21;:38::i;:::-;4375:8;:50;;4367:104;;;;-1:-1:-1;;;4367:104:114;;11936:2:143;4367:104:114;;;11918:21:143;11975:2;11955:18;;;11948:30;12014:34;11994:18;;;11987:62;-1:-1:-1;;;12065:18:143;;;12058:39;12114:19;;4367:104:114;;;;;;;;;4500:25;4518:6;4500:17;:25::i;:::-;4489:8;:36;4481:92;;;;-1:-1:-1;;;4481:92:114;;12346:2:143;4481:92:114;;;12328:21:143;12385:2;12365:18;;;12358:30;12424:34;12404:18;;;12397:62;-1:-1:-1;;;12475:18:143;;;12468:41;12526:19;;4481:92:114;12144:407:143;4481:92:114;4591:10;-1:-1:-1;;;;;4591:20:114;;;4583:45;;;;-1:-1:-1;;;4583:45:114;;12758:2:143;4583:45:114;;;12740:21:143;12797:2;12777:18;;;12770:30;-1:-1:-1;;;12816:18:143;;;12809:42;12868:18;;4583:45:114;12556:336:143;4583:45:114;-1:-1:-1;;;;;4638:37:114;;;;;;;:29;:37;;;;;:48;4287:406::o;8307:134::-;-1:-1:-1;;;;;8397:37:114;8371:7;8397:37;;;:29;:37;;;;;;;8307:134::o;4759:191:19:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:19;;;;;:24;;;;4759:191::o;11409:381:114:-;11505:7;;;11559:195;-1:-1:-1;;;;;11583:36:114;;;;;;:28;:36;;;;;:45;;:43;:45::i;:::-;11579:1;:49;11559:195;;;-1:-1:-1;;;;;11690:36:114;;;;;;:28;:36;;;;;11666:77;;11675:6;;11683:5;;11690:42;;11730:1;11690:39;:42::i;:::-;11734:8;11666;:77::i;:::-;11649:94;;;;:::i;:::-;;-1:-1:-1;11630:3:114;;11559:195;;;-1:-1:-1;11770:13:114;11409:381;-1:-1:-1;;;;11409:381:114:o;26739:151::-;2362:4:19;3191:16;2362:4;3191:10;:16::i;:::-;26851:32:114::1;-1:-1:-1::0;;;;;;;;;;;26878:4:114::1;26851:10;:32::i;:::-;26739:151:::0;;:::o;5246:136:19:-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;1686:554:114:-;-1:-1:-1;;;;;1983:36:114;;1926:27;1983:36;;;:28;:36;;;;;1770:16;;1926:27;1983:45;;:43;:45::i;:::-;-1:-1:-1;;;;;1956:82:114;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1956:82:114;;1926:112;;2053:9;2048:159;-1:-1:-1;;;;;2072:36:114;;;;;;:28;:36;;;;;:45;;:43;:45::i;:::-;2068:1;:49;2048:159;;;-1:-1:-1;;;;;2154:36:114;;;;;;:28;:36;;;;;:42;;2194:1;2154:39;:42::i;:::-;2138:10;2149:1;2138:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2138:58:114;;;:13;;;;;;;;;;;:58;2119:3;;2048:159;;10462:330;10603:7;10641:144;10669:6;10693:25;10711:6;10693:17;:25::i;:::-;10736:9;10763:8;10641:10;:144::i;:::-;10622:163;10462:330;-1:-1:-1;;;;10462:330:114:o;6348:245:19:-;-1:-1:-1;;;;;6441:34:19;;966:10:24;6441:34:19;6437:102;;6498:30;;-1:-1:-1;;;6498:30:19;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;11796:192:114:-;11894:7;11920:61;11937:6;11945:25;11963:6;11945:17;:25::i;:::-;11972:8;11920:16;:61::i;26593:140::-;2362:4:19;3191:16;2362:4;3191:10;:16::i;:::-;26695:31:114::1;-1:-1:-1::0;;;;;;;;;;;26721:4:114::1;26695:9;:31::i;2827:1107::-:0;-1:-1:-1;;;;;3022:35:114;;2997:22;3022:35;;;:27;:35;;;;;2923:16;;2997:22;3022:44;;:42;:44::i;:::-;2997:69;;3123:27;3169:9;3164:258;3188:14;3184:1;:18;3164:258;;;-1:-1:-1;;;;;3242:35:114;;3223:16;3242:35;;;:27;:35;;;;;:41;;3281:1;3242:38;:41::i;:::-;3223:60;;3355:1;3301:51;3335:6;3343:8;3301:33;:51::i;:::-;:55;3297:115;;;3376:21;;;;:::i;:::-;;;;3297:115;-1:-1:-1;3204:3:114;;3164:258;;;;3476:32;3525:19;-1:-1:-1;;;;;3511:34:114;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3511:34:114;;3476:69;;3555:19;3593:9;3588:307;3612:14;3608:1;:18;3588:307;;;-1:-1:-1;;;;;3666:35:114;;3647:16;3666:35;;;:27;:35;;;;;:41;;3705:1;3666:38;:41::i;:::-;3647:60;;3779:1;3725:51;3759:6;3767:8;3725:33;:51::i;:::-;:55;3721:164;;;3831:8;3800:15;3816:11;3800:28;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3800:39:114;;;:28;;;;;;;;;;;:39;3857:13;;;;:::i;:::-;;;;3721:164;-1:-1:-1;3628:3:114;;3588:307;;;-1:-1:-1;3912:15:114;;2827:1107;-1:-1:-1;;;;;2827:1107:114:o;25966:457::-;2500:21:57;:19;:21::i;:::-;26265:9:114::1;26260:157;26280:20:::0;;::::1;26260:157;;;26321:85;26354:10;26366:9;;26376:1;26366:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26380:10;;26391:1;26380:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;26395:7;;26403:1;26395:10;;;;;;;:::i;:::-;;;;;;;26321:32;:85::i;:::-;26302:3;;26260:157;;;;2542:20:57::0;1857:1;3068:7;:21;2888:208;2542:20;25966:457:114;;;;;;:::o;4161:214:21:-;2655:13;:11;:13::i;:::-;4276:36:::1;4294:17;4276;:36::i;:::-;4322:46;4344:17;4363:4;4322:21;:46::i;3708:134::-:0;3777:7;2926:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3708:134:21;:::o;26982:542:114:-;27081:7;27100:27;27130:31;27154:6;27130:23;:31::i;:::-;27100:61;;27171:26;27200:30;27223:6;27200:22;:30::i;:::-;27171:59;;27240:18;27278:9;27273:218;27297:10;:17;27293:1;:21;27273:218;;;27340:9;27335:146;27359:9;:16;27355:1;:20;27335:146;;;27414:52;27423:6;27431:5;27438:10;27449:1;27438:13;;;;;;;;:::i;:::-;;;;;;;27453:9;27463:1;27453:12;;;;;;;;:::i;:::-;;;;;;;27414:8;:52::i;:::-;27400:66;;;;:::i;:::-;;-1:-1:-1;27377:3:114;;27335:146;;;-1:-1:-1;27316:3:114;;27273:218;;;-1:-1:-1;27507:10:114;26982:542;-1:-1:-1;;;;;26982:542:114:o;27695:176::-;27788:7;27814:50;27830:6;27838:25;27856:6;27838:17;:25::i;9069:182::-;9148:7;9174:25;9192:6;9174:17;:25::i;:::-;:30;:70;;9211:29;9233:6;9211:21;:29::i;:::-;:33;;9243:1;9211:33;:::i;:::-;9174:70;;;9207:1;9167:77;9069:182;-1:-1:-1;;9069:182:114:o;25461:244::-;2500:21:57;:19;:21::i;:::-;25625:73:114::1;25658:10;25670:8;25680:9;25691:6;25625:32;:73::i;:::-;2542:20:57::0;1857:1;3068:7;:21;2888:208;13972:972:114;-1:-1:-1;;;;;;;;;;;3191:16:19;3202:4;3191:10;:16::i;:::-;2500:21:57::1;:19;:21::i;:::-;14448:304:114::2;14473:6;14633:42;14668:6;14633:34;:42::i;:::-;14689:9;14712:10;14736:6;14448:11;:304::i;:::-;14874:9;-1:-1:-1::0;;;;;14768:169:114::2;14818:42;14853:6;14818:34;:42::i;:::-;14768:169;::::0;;14897:10:::2;13473:51:143::0;;13555:2;13540:18;;13533:34;;;-1:-1:-1;;;;;14768:169:114;::::2;::::0;::::2;::::0;13446:18:143;14768:169:114::2;;;;;;;2542:20:57::1;1857:1:::0;3068:7;:21;2888:208;8661:180:114;8742:7;8768:25;8786:6;8768:17;:25::i;:::-;:30;:66;;8805:25;8823:6;8805:17;:25::i;10109:254::-;-1:-1:-1;;;;;10282:46:114;;;10256:7;10282:46;;;:38;:46;;;;;;;;:53;;;;;;;;;:64;;;;;;;;;;;:74;;;;;;;;;;;;10109:254::o;514:86:116:-;8870:21:20;4302:15;;-1:-1:-1;;;4302:15:20;;;;4301:16;;-1:-1:-1;;;;;4348:14:20;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:20;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:20;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:20;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:20;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:20;-1:-1:-1;;;5013:22:20;;;4979:67;573:20:116::1;:18;:20::i;:::-;5070:14:20::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:20;;;5142:14;;-1:-1:-1;13731:50:143;;5142:14:20;;13719:2:143;13704:18;5142:14:20;;;;;;;5066:101;4092:1081;;;;;514:86:116:o;3732:207:19:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:19;;;;;;;;-1:-1:-1;;;;;3901:31:19;;;;;;;;;;;;;;;3732:207::o;4699:1563:114:-;2500:21:57;:19;:21::i;:::-;4779:10:114::1;4762:14;4804:29:::0;;;:21:::1;:29;::::0;;;;;::::1;;4800:66;;;4842:24;;-1:-1:-1::0;;;4842:24:114::1;;;;;;;;;;;4800:66;-1:-1:-1::0;;;;;4876:29:114;::::1;;::::0;;;:21:::1;:29;::::0;;;;;;;:36;;-1:-1:-1;;4876:36:114::1;4908:4;4876:36:::0;;::::1;::::0;;;4938:29;;;;;;4931:41:::1;;;;:::i;:::-;5094:29;5116:6;5094:21;:29::i;:::-;-1:-1:-1::0;;;;;5054:37:114;::::1;;::::0;;;:29:::1;:37;::::0;;;;:69;;;;5134:1122:::1;-1:-1:-1::0;;;;;5158:35:114;::::1;;::::0;;;:27:::1;:35;::::0;;;;:44:::1;::::0;:42:::1;:44::i;:::-;5154:1;:48;5134:1122;;;-1:-1:-1::0;;;;;5242:35:114;::::1;5223:16;5242:35:::0;;;:27:::1;:35;::::0;;;;:41:::1;::::0;5281:1;5242:38:::1;:41::i;:::-;5223:60;;5303:9;5298:952;-1:-1:-1::0;;;;;5322:36:114;::::1;;::::0;;;:28:::1;:36;::::0;;;;:45:::1;::::0;:43:::1;:45::i;:::-;5318:1;:49;5298:952;;;-1:-1:-1::0;;;;;5412:36:114;::::1;5392:17;5412:36:::0;;;:28:::1;:36;::::0;;;;:42:::1;::::0;5452:1;5412:39:::1;:42::i;:::-;5392:62;;5531:21;5555:138;5585:6;5613:1;5636:9;5667:8;5555;:138::i;:::-;5531:162;;5907:1;5879:25;5897:6;5879:17;:25::i;:::-;:29;5875:365;;;5960:1;5932:25;5950:6;5932:17;:25::i;:::-;:29;5928:298;;;5985:222;6020:6;6052:25;6070:6;6052:17;:25::i;:::-;6103:9;6138:8;6172:13;5985:9;:222::i;:::-;-1:-1:-1::0;;5369:3:114::1;;5298:952;;;-1:-1:-1::0;;5204:3:114::1;;5134:1122;;;;4752:1510;2542:20:57::0;1857:1;3068:7;:21;2888:208;2542:20;4699:1563:114:o;9342:250::-;-1:-1:-1;;;;;9513:44:114;;;9487:7;9513:44;;;:36;:44;;;;;;;;:51;;;;;;;;;:62;;;;;;;;;;;:72;;;;;;;;;;;;9342:250::o;11173:230::-;11295:7;11333:63;11351:6;11359:25;11377:6;11359:17;:25::i;:::-;11386:9;11333:17;:63::i;9689:326::-;9828:7;9866:142;9892:6;9916:25;9934:6;9916:17;:25::i;:::-;9959:9;9986:8;9866;:142::i;19744:1588::-;2500:21:57;:19;:21::i;:::-;19955:9:114::1;19950:1376;19970:20:::0;;::::1;19950:1376;;;20238:20;20261:276;20287:180;20317:10;20349:31;20367:9;;20377:1;20367:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;20349:31::-;20402:10;;20413:1;20402:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20437:9;;20447:1;20437:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;20287:180::-;20485:38;20494:7;;20502:1;20494:10;;;;;;;:::i;:::-;;;;;;;20506:13;;20520:1;20506:16;;;;;;;:::i;:::-;;;;;;;20485:8;:38::i;:::-;20261:8;:276::i;:::-;20238:299;;20551:238;20601:4;20702:9;;20712:1;20702:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20732:10;;20743:1;20732:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;20763:12;20551:24;:238::i;:::-;20948:189;20977:10;21005:29;21023:10;21005:17;:29::i;:::-;21052:10;;21063:1;21052:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21083:9;;21093:1;21083:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21113:7;;21121:1;21113:10;;;;;;;:::i;:::-;;;;;;;20948:11;:189::i;:::-;21152:163;21183:10;21211:29;21229:10;21211:17;:29::i;:::-;21258:10;;21269:1;21258:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21289:9;;21299:1;21289:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;21152:13;:163::i;:::-;-1:-1:-1::0;19992:3:114::1;;19950:1376;;;;2542:20:57::0;1857:1;3068:7;:21;2888:208;2542:20;19744:1588:114;;;;;;;;:::o;17307:108::-;17351:57;17366:10;17378:29;17396:10;17378:17;:29::i;:::-;17351:14;:57::i;12036:1885::-;-1:-1:-1;;;;;;;;;;;3191:16:19;3202:4;3191:10;:16::i;:::-;2500:21:57::1;:19;:21::i;:::-;-1:-1:-1::0;;;;;12241:35:114;::::2;;::::0;;;:27:::2;:35;::::0;;;;:51:::2;::::0;12281:10:::2;12241:39;:51::i;:::-;-1:-1:-1::0;12666:21:114::2;12690:5:::0;;:30:::2;::::0;-1:-1:-1;;;12690:30:114;;12714:4:::2;12690:30;::::0;::::2;11540:51:143::0;-1:-1:-1;;;;;12690:5:114;;::::2;::::0;:15:::2;::::0;11513:18:143;;12690:30:114::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13009:57;::::0;-1:-1:-1;;;13009:57:114;;13032:10:::2;13009:57;::::0;::::2;14523:51:143::0;13052:4:114::2;14590:18:143::0;;;14583:60;14659:18;;;14652:34;;;12666:54:114;;-1:-1:-1;;;;;;13009:22:114;::::2;::::0;::::2;::::0;14496:18:143;;13009:57:114::2;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;13199:22:114::2;13215:6:::0;13199:13;:22:::2;:::i;:::-;13165:5;::::0;:30:::2;::::0;-1:-1:-1;;;13165:30:114;;13189:4:::2;13165:30;::::0;::::2;11540:51:143::0;-1:-1:-1;;;;;13165:5:114;;::::2;::::0;:15:::2;::::0;11513:18:143;;13165:30:114::2;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;13161:114;;13242:33;;-1:-1:-1::0;;;13242:33:114::2;;;;;;;;;;;13161:114;13352:311;13375:6;13535:42;13570:6;13535:34;:42::i;:::-;13599:9;13623:10;13647:6;13352:9;:311::i;:::-;13850:9;-1:-1:-1::0;;;;;13738:176:114::2;13786:42;13821:6;13786:34;:42::i;:::-;13738:176;::::0;;13874:10:::2;13473:51:143::0;;13555:2;13540:18;;13533:34;;;-1:-1:-1;;;;;13738:176:114;::::2;::::0;::::2;::::0;13446:18:143;13738:176:114::2;;;;;;;12178:1743;2542:20:57::1;1857:1:::0;3068:7;:21;2888:208;1051:125:114;8870:21:20;4302:15;;-1:-1:-1;;;4302:15:20;;;;4301:16;;-1:-1:-1;;;;;4348:14:20;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:20;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:20;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:20;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:20;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:20;-1:-1:-1;;;5013:22:20;;;4979:67;1115:30:114::1;:28;:30::i;:::-;1155:5;:14:::0;;-1:-1:-1;;;;;;1155:14:114::1;-1:-1:-1::0;;;;;1155:14:114;::::1;;::::0;;5066:101:20;;;;5100:23;;-1:-1:-1;;;;5100:23:20;;;5142:14;;-1:-1:-1;13731:50:143;;5142:14:20;;13719:2:143;13704:18;5142:14:20;;;;;;;4092:1081;;;;;1051:125:114;:::o;1245:359::-;2500:21:57;:19;:21::i;:::-;1394:10:114::1;1377:14;1414:29:::0;;;:21:::1;:29;::::0;;;;:45;;;1470:128:::1;1490:21:::0;;::::1;1470:128;;;1532:55;1573:10;;1584:1;1573:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1532:36:114;::::1;;::::0;;;:28:::1;:36;::::0;;;;;:40:::1;:55::i;:::-;-1:-1:-1::0;1513:3:114::1;;1470:128;;;;1367:237;2542:20:57::0;1857:1;3068:7;:21;2888:208;5662:138:19;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;8002:226:114:-:0;-1:-1:-1;;;;;8093:29:114;;8070:7;8093:29;;;:21;:29;;;;;;:34;;8089:68;;8136:21;;-1:-1:-1;;;8136:21:114;;;;;;;;;;;8089:68;-1:-1:-1;;;;;8192:29:114;;;;;;:21;:29;;;;;;8174:47;;:15;:47;:::i;9090:115:67:-;9153:7;9179:19;9187:3;4556:18;;4474:107;9547:156;9621:7;9671:22;9675:3;9687:5;9671:3;:22::i;4148:103:19:-;4214:30;4225:4;966:10:24;4214::19;:30::i;:::-;4148:103;:::o;7270:387::-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:19;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:19;;;;;;;;;:38;;-1:-1:-1;;7475:38:19;7509:4;7475:38;;;7559:12;966:10:24;;887:96;7559:12:19;-1:-1:-1;;;;;7532:40:19;7550:7;-1:-1:-1;;;;;7532:40:19;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7892:388;7970:4;-1:-1:-1;;;;;;;;;;;8059:22:19;8067:4;8073:7;8059;:22::i;:::-;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:19;;;;;;;;;;:39;;-1:-1:-1;;8097:39:19;;;8155:40;966:10:24;;8097:14:19;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;2575:307:57;1899:1;2702:7;;:18;2698:86;;2743:30;;-1:-1:-1;;;2743:30:57;;;;;;;;;;;2698:86;1899:1;2858:7;:17;2575:307::o;24467:315:114:-;24625:4;24603:10;:27;24595:59;;;;-1:-1:-1;;;24595:59:114;;15403:2:143;24595:59:114;;;15385:21:143;15442:2;15422:18;;;15415:30;-1:-1:-1;;;15461:18:143;;;15454:49;15520:18;;24595:59:114;15201:343:143;24595:59:114;24680:5;;-1:-1:-1;;;;;24672:27:114;;;24680:5;;24672:27;24664:59;;;;-1:-1:-1;;;24664:59:114;;15751:2:143;24664:59:114;;;15733:21:143;15790:2;15770:18;;;15763:30;-1:-1:-1;;;15809:18:143;;;15802:49;15868:18;;24664:59:114;15549:343:143;24664:59:114;24733:5;;:42;;-1:-1:-1;;;24733:42:114;;-1:-1:-1;;;;;14541:32:143;;;24733:42:114;;;14523:51:143;14610:32;;;14590:18;;;14583:60;14659:18;;;14652:34;;;24733:5:114;;;;:18;;14496::143;;24733:42:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;4603:312:21:-;4683:4;-1:-1:-1;;;;;4692:6:21;4675:23;;;:120;;;4789:6;-1:-1:-1;;;;;4753:42:21;:32;-1:-1:-1;;;;;;;;;;;1519:53:40;-1:-1:-1;;;;;1519:53:40;;1441:138;4753:32:21;-1:-1:-1;;;;;4753:42:21;;;4675:120;4658:251;;;4869:29;;-1:-1:-1;;;4869:29:21;;;;;;;;;;;965:103:116;2362:4:19;3191:16;2362:4;3191:10;:16::i;6057:538:21:-;6174:17;-1:-1:-1;;;;;6156:50:21;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6156:52:21;;;;;;;;-1:-1:-1;;6156:52:21;;;;;;;;;;;;:::i;:::-;;;6152:437;;6518:60;;-1:-1:-1;;;6518:60:21;;-1:-1:-1;;;;;11558:32:143;;6518:60:21;;;11540:51:143;11513:18;;6518:60:21;11378:219:143;6152:437:21;-1:-1:-1;;;;;;;;;;;6250:40:21;;6246:120;;6317:34;;-1:-1:-1;;;6317:34:21;;;;;1434:25:143;;;1407:18;;6317:34:21;1288:177:143;6246:120:21;6379:54;6409:17;6428:4;6379:29;:54::i;5032:213::-;5106:4;-1:-1:-1;;;;;5115:6:21;5098:23;;5094:145;;5199:29;;-1:-1:-1;;;5199:29:21;;;;;;;;;;;6945:261:114;-1:-1:-1;;;;;7115:46:114;;;;;;;:38;:46;;;;;;;;:53;;;;;;;;:64;;;;;;;;;;:74;;;;;;;;;;;:84;;7193:6;;7115:46;:84;;7193:6;;7115:84;:::i;:::-;;;;-1:-1:-1;;;;;;;6945:261:114:o;606:103:116:-;6931:20:20;:18;:20::i;:::-;672:30:116::1;:28;:30::i;6268:331:114:-:0;-1:-1:-1;;;;;6436:44:114;;;;;;;:36;:44;;;;;;;;:51;;;;;;;;:62;;;;;;;;;;:72;;;;;;;;;;;:82;;6512:6;;6436:44;:82;;6512:6;;6436:82;:::i;:::-;;;;-1:-1:-1;;;;;;;6528:36:114;;;;;;;:28;:36;;;;;;;;:43;;;;;;;;:54;;;;;;;;;;;:64;;6586:6;;6528:36;:64;;6586:6;;6528:64;:::i;3371:111:64:-;3429:7;3066:5;;;3463;;;3065:36;3060:42;;3455:20;2825:294;21690:1458:114;21868:4;-1:-1:-1;;;;;21852:21:114;;;21848:1294;;21953:5;;-1:-1:-1;;;;;21945:27:114;;;21953:5;;21945:27;21941:413;;22068:67;22101:4;22107:8;22117:9;22128:6;22068:32;:67::i;:::-;21848:1294;;21941:413;22268:71;22305:4;22311:8;22321:9;22332:6;22268:36;:71::i;21848:1294::-;22752:5;;-1:-1:-1;;;;;22744:27:114;;;22752:5;;22744:27;22740:392;;22863:67;22896:4;22902:8;22912:9;22923:6;22863:32;:67::i;22740:392::-;23046:71;23083:4;23089:8;23099:9;23110:6;23046:36;:71::i;17722:796::-;17967:5;17945:19;18006:108;18028:6;17967:5;18073:9;18096:8;18006;:108::i;:::-;17982:132;;18223:6;18207:13;:22;18203:309;;;18245:163;18275:6;18299:11;18328:9;18355:8;18381:13;18245:12;:163::i;:::-;18203:309;;;18439:62;18452:6;18460:11;18473:9;18484:8;18494:6;18439:12;:62::i;:::-;17882:636;;17722:796;;;;;:::o;18850:888::-;19057:21;19081:102;19103:6;19123:5;19142:9;19165:8;19081;:102::i;:::-;19057:126;-1:-1:-1;19193:19:114;19215:9;:5;19223:1;19215:9;:::i;:::-;19193:31;;19234:23;19260:110;19284:6;19304:11;19329:9;19352:8;19260:10;:110::i;:::-;19234:136;;19403:13;19385:15;:31;19381:351;;;-1:-1:-1;;;;;7652:46:114;;;;;;;:38;:46;;;;;;;;:53;;;;;;;;:64;;;;;;;;;;:74;;;;;;;;;:83;;;19559:162;7482:260;16491:810;16720:9;16715:423;-1:-1:-1;;;;;16739:35:114;;;;;;:27;:35;;;;;:44;;:42;:44::i;:::-;16735:1;:48;16715:423;;;-1:-1:-1;;;;;16823:35:114;;16804:16;16823:35;;;:27;:35;;;;;:41;;16862:1;16823:38;:41::i;:::-;16804:60;;16884:9;16879:249;-1:-1:-1;;;;;16903:36:114;;;;;;:28;:36;;;;;:45;;:43;:45::i;:::-;16899:1;:49;16879:249;;;-1:-1:-1;;;;;16993:36:114;;16973:17;16993:36;;;:28;:36;;;;;:42;;17033:1;16993:39;:42::i;:::-;16973:62;;17054:59;17072:6;17080:11;17093:9;17104:8;17054:17;:59::i;:::-;-1:-1:-1;16950:3:114;;16879:249;;;-1:-1:-1;;16785:3:114;;16715:423;;;-1:-1:-1;17227:15:114;:11;17241:1;17227:15;:::i;:::-;-1:-1:-1;;;;;17187:37:114;;;;;;:29;:37;;;;;;;:55;;;;17258:36;;;;;;17282:11;1434:25:143;;1422:2;1407:18;;1288:177;17258:36:114;;;;;;;;16491:810;;:::o;8289:150:67:-;8359:4;8382:50;8387:3;-1:-1:-1;;;;;8407:23:67;;8382:4;:50::i;715:125:116:-;6931:20:20;:18;:20::i;:::-;791:42:116::1;2362:4:19;822:10:116;791;:42::i;4923:118:67:-:0;4990:7;5016:3;:11;;5028:5;5016:18;;;;;;;;:::i;:::-;;;;;;;;;5009:25;;4923:118;;;;:::o;4381:197:19:-;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:19;;-1:-1:-1;;;;;13491:32:143;;4514:47:19;;;13473:51:143;13540:18;;;13533:34;;;13446:18;;4514:47:19;13299:274:143;2264:344:40;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:40;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;2454:148::-;2573:18;:16;:18::i;7084:141:20:-;8870:21;8560:40;-1:-1:-1;;;8560:40:20;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:20;;;;;;;;;;;23282:313:114;-1:-1:-1;;;;;23418:21:114;;23434:4;23418:21;23410:67;;;;-1:-1:-1;;;23410:67:114;;16567:2:143;23410:67:114;;;16549:21:143;16606:2;16586:18;;;16579:30;16645:34;16625:18;;;16618:62;-1:-1:-1;;;16696:18:143;;;16689:31;16737:19;;23410:67:114;16365:397:143;23410:67:114;23503:5;;-1:-1:-1;;;;;23495:27:114;;;23503:5;;23495:27;23487:59;;;;-1:-1:-1;;;23487:59:114;;15751:2:143;23487:59:114;;;15733:21:143;15790:2;15770:18;;;15763:30;-1:-1:-1;;;15809:18:143;;;15802:49;15868:18;;23487:59:114;15549:343:143;23487:59:114;23556:5;;:32;;-1:-1:-1;;;23556:32:114;;-1:-1:-1;;;;;13491:32:143;;;23556::114;;;13473:51:143;13540:18;;;13533:34;;;23556:5:114;;;;:14;;13446:18:143;;23556:32:114;13299:274:143;23664:394:114;-1:-1:-1;;;;;23804:21:114;;23820:4;23804:21;23796:67;;;;-1:-1:-1;;;23796:67:114;;16969:2:143;23796:67:114;;;16951:21:143;17008:2;16988:18;;;16981:30;17047:34;17027:18;;;17020:62;-1:-1:-1;;;17098:18:143;;;17091:31;17139:19;;23796:67:114;16767:397:143;23796:67:114;23889:5;;-1:-1:-1;;;;;23881:27:114;;;23889:5;;23881:27;23873:64;;;;-1:-1:-1;;;23873:64:114;;17371:2:143;23873:64:114;;;17353:21:143;17410:2;17390:18;;;17383:30;-1:-1:-1;;;17429:18:143;;;17422:54;17493:18;;23873:64:114;17169:348:143;23873:64:114;23947:5;;:32;;-1:-1:-1;;;23947:32:114;;-1:-1:-1;;;;;13491:32:143;;;23947::114;;;13473:51:143;13540:18;;;13533:34;;;23947:5:114;;;;:13;;13446:18:143;;23947:32:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;23989:62:114;;-1:-1:-1;;;23989:62:114;;-1:-1:-1;;;;;13491:32:143;;;23989:62:114;;;13473:51:143;13540:18;;;13533:34;;;23989:44:114;;;;;13446:18:143;;23989:62:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24859:354;25021:4;24999:10;:27;24991:59;;;;-1:-1:-1;;;24991:59:114;;15403:2:143;24991:59:114;;;15385:21:143;15442:2;15422:18;;;15415:30;-1:-1:-1;;;15461:18:143;;;15454:49;15520:18;;24991:59:114;15201:343:143;24991:59:114;25076:5;;-1:-1:-1;;;;;25068:27:114;;;25076:5;;25068:27;25060:64;;;;-1:-1:-1;;;25060:64:114;;17371:2:143;25060:64:114;;;17353:21:143;17410:2;17390:18;;;17383:30;-1:-1:-1;;;17429:18:143;;;17422:54;17493:18;;25060:64:114;17169:348:143;25060:64:114;25134:72;;-1:-1:-1;;;25134:72:114;;-1:-1:-1;;;;;14541:32:143;;;25134:72:114;;;14523:51:143;14610:32;;;14590:18;;;14583:60;14659:18;;;14652:34;;;25134:48:114;;;;;14496:18:143;;25134:72:114;14321:371:143;6605:334:114;-1:-1:-1;;;;;6776:44:114;;;;;;;:36;:44;;;;;;;;:51;;;;;;;;:62;;;;;;;;;;:72;;;;;;;;;;;:82;;6852:6;;6776:44;:82;;6852:6;;6776:82;:::i;:::-;;;;-1:-1:-1;;;;;;;6868:36:114;;;;;;;:28;:36;;;;;;;;:43;;;;;;;;:54;;;;;;;;;;;:64;;6926:6;;6868:36;:64;;6926:6;;6868:64;:::i;15011:1474::-;15265:19;15287:108;15309:6;15329:11;15354:9;15377:8;15287;:108::i;:::-;15265:130;-1:-1:-1;15405:21:114;15429:114;15453:6;15473:15;:11;15487:1;15473:15;:::i;:::-;15502:9;15525:8;15429:10;:114::i;:::-;15405:138;;15573:11;15557:13;:27;15553:85;;;-1:-1:-1;15616:11:114;15553:85;15647:17;15667:27;15681:13;15667:11;:27;:::i;:::-;15647:47;-1:-1:-1;15705:66:114;15715:6;15723:15;:11;15737:1;15723:15;:::i;:::-;15740:9;15751:8;15761:9;15705;:66::i;:::-;16181:17;;16177:131;;16214:83;16255:4;16262:8;16272:9;16283:13;16214:32;:83::i;:::-;16407:9;-1:-1:-1;;;;;16323:155:114;16382:11;16360:8;-1:-1:-1;;;;;16323:155:114;;16430:11;16455:13;16323:155;;;;;;17829:25:143;;;17885:2;17870:18;;17863:34;17817:2;17802:18;;17655:248;16323:155:114;;;;;;;;15159:1326;;;15011:1474;;;;:::o;2241:406:67:-;2304:4;4360:21;;;:14;;;:21;;;;;;2320:321;;-1:-1:-1;2362:23:67;;;;;;;;:11;:23;;;;;;;;;;;;;2544:18;;2520:21;;;:14;;;:21;;;;;;:42;;;;2576:11;;2320:321;-1:-1:-1;2625:5:67;2618:12;;1671:281:40;1748:17;-1:-1:-1;;;;;1748:29:40;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:40;;-1:-1:-1;;;;;11558:32:143;;1805:47:40;;;11540:51:143;11513:18;;1805:47:40;11378:219:143;1744:119:40;-1:-1:-1;;;;;;;;;;;1872:73:40;;-1:-1:-1;;;;;;1872:73:40;-1:-1:-1;;;;;1872:73:40;;;;;;;;;;1671:281::o;3916:253:53:-;3999:12;4024;4038:23;4065:6;-1:-1:-1;;;;;4065:19:53;4085:4;4065:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4023:67;;;;4107:55;4134:6;4142:7;4151:10;4107:26;:55::i;:::-;4100:62;3916:253;-1:-1:-1;;;;;3916:253:53:o;6113:122:40:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:40;;;;;;;;;;;4437:582:53;4581:12;4610:7;4605:408;;4633:19;4641:10;4633:7;:19::i;:::-;4605:408;;;4857:17;;:22;:49;;;;-1:-1:-1;;;;;;4883:18:53;;;:23;4857:49;4853:119;;;4933:24;;-1:-1:-1;;;4933:24:53;;-1:-1:-1;;;;;11558:32:143;;4933:24:53;;;11540:51:143;11513:18;;4933:24:53;11378:219:143;4853:119:53;-1:-1:-1;4992:10:53;4985:17;;5559:487;5690:17;;:21;5686:354;;5887:10;5881:17;5943:15;5930:10;5926:2;5922:19;5915:44;5686:354;6010:19;;-1:-1:-1;;;6010:19:53;;;;;;;;;;;14:286:143;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:143;;209:43;;199:71;;266:1;263;256:12;497:131;-1:-1:-1;;;;;572:31:143;;562:42;;552:70;;618:1;615;608:12;633:650;719:6;727;735;743;796:3;784:9;775:7;771:23;767:33;764:53;;;813:1;810;803:12;764:53;852:9;839:23;871:31;896:5;871:31;:::i;:::-;921:5;-1:-1:-1;999:2:143;984:18;;971:32;;-1:-1:-1;1081:2:143;1066:18;;1053:32;1094:33;1053:32;1094:33;:::i;:::-;1146:7;-1:-1:-1;1205:2:143;1190:18;;1177:32;1218:33;1177:32;1218:33;:::i;:::-;633:650;;;;-1:-1:-1;633:650:143;;-1:-1:-1;;633:650:143:o;1470:508::-;1547:6;1555;1563;1616:2;1604:9;1595:7;1591:23;1587:32;1584:52;;;1632:1;1629;1622:12;1584:52;1671:9;1658:23;1690:31;1715:5;1690:31;:::i;:::-;1740:5;-1:-1:-1;1818:2:143;1803:18;;1790:32;;-1:-1:-1;1900:2:143;1885:18;;1872:32;1913:33;1872:32;1913:33;:::i;:::-;1965:7;1955:17;;;1470:508;;;;;:::o;1983:247::-;2042:6;2095:2;2083:9;2074:7;2070:23;2066:32;2063:52;;;2111:1;2108;2101:12;2063:52;2150:9;2137:23;2169:31;2194:5;2169:31;:::i;2235:637::-;2425:2;2437:21;;;2507:13;;2410:18;;;2529:22;;;2377:4;;2608:15;;;2582:2;2567:18;;;2377:4;2651:195;2665:6;2662:1;2659:13;2651:195;;;2730:13;;-1:-1:-1;;;;;2726:39:143;2714:52;;2795:2;2821:15;;;;2786:12;;;;2762:1;2680:9;2651:195;;2877:367;2945:6;2953;3006:2;2994:9;2985:7;2981:23;2977:32;2974:52;;;3022:1;3019;3012:12;2974:52;3061:9;3048:23;3080:31;3105:5;3080:31;:::i;:::-;3130:5;3208:2;3193:18;;;;3180:32;;-1:-1:-1;;;2877:367:143:o;3249:226::-;3308:6;3361:2;3349:9;3340:7;3336:23;3332:32;3329:52;;;3377:1;3374;3367:12;3329:52;-1:-1:-1;3422:23:143;;3249:226;-1:-1:-1;3249:226:143:o;3662:367::-;3730:6;3738;3791:2;3779:9;3770:7;3766:23;3762:32;3759:52;;;3807:1;3804;3797:12;3759:52;3852:23;;;-1:-1:-1;3951:2:143;3936:18;;3923:32;3964:33;3923:32;3964:33;:::i;:::-;4016:7;4006:17;;;3662:367;;;;;:::o;4034:529::-;4111:6;4119;4127;4180:2;4168:9;4159:7;4155:23;4151:32;4148:52;;;4196:1;4193;4186:12;4148:52;4235:9;4222:23;4254:31;4279:5;4254:31;:::i;:::-;4304:5;-1:-1:-1;4361:2:143;4346:18;;4333:32;4374:33;4333:32;4374:33;:::i;:::-;4426:7;-1:-1:-1;4485:2:143;4470:18;;4457:32;4498:33;4457:32;4498:33;:::i;4568:388::-;4636:6;4644;4697:2;4685:9;4676:7;4672:23;4668:32;4665:52;;;4713:1;4710;4703:12;4665:52;4752:9;4739:23;4771:31;4796:5;4771:31;:::i;:::-;4821:5;-1:-1:-1;4878:2:143;4863:18;;4850:32;4891:33;4850:32;4891:33;:::i;4961:367::-;5024:8;5034:6;5088:3;5081:4;5073:6;5069:17;5065:27;5055:55;;5106:1;5103;5096:12;5055:55;-1:-1:-1;5129:20:143;;-1:-1:-1;;;;;5161:30:143;;5158:50;;;5204:1;5201;5194:12;5158:50;5241:4;5233:6;5229:17;5217:29;;5301:3;5294:4;5284:6;5281:1;5277:14;5269:6;5265:27;5261:38;5258:47;5255:67;;;5318:1;5315;5308:12;5255:67;4961:367;;;;;:::o;5333:1099::-;5491:6;5499;5507;5515;5523;5531;5584:2;5572:9;5563:7;5559:23;5555:32;5552:52;;;5600:1;5597;5590:12;5552:52;5640:9;5627:23;-1:-1:-1;;;;;5665:6:143;5662:30;5659:50;;;5705:1;5702;5695:12;5659:50;5744:70;5806:7;5797:6;5786:9;5782:22;5744:70;:::i;:::-;5833:8;;-1:-1:-1;5718:96:143;-1:-1:-1;;5921:2:143;5906:18;;5893:32;-1:-1:-1;;;;;5937:32:143;;5934:52;;;5982:1;5979;5972:12;5934:52;6021:72;6085:7;6074:8;6063:9;6059:24;6021:72;:::i;:::-;6112:8;;-1:-1:-1;5995:98:143;-1:-1:-1;;6200:2:143;6185:18;;6172:32;-1:-1:-1;;;;;6216:32:143;;6213:52;;;6261:1;6258;6251:12;6213:52;6300:72;6364:7;6353:8;6342:9;6338:24;6300:72;:::i;:::-;5333:1099;;;;-1:-1:-1;5333:1099:143;;-1:-1:-1;5333:1099:143;;6391:8;;5333:1099;-1:-1:-1;;;5333:1099:143:o;6437:127::-;6498:10;6493:3;6489:20;6486:1;6479:31;6529:4;6526:1;6519:15;6553:4;6550:1;6543:15;6569:1079;6646:6;6654;6707:2;6695:9;6686:7;6682:23;6678:32;6675:52;;;6723:1;6720;6713:12;6675:52;6762:9;6749:23;6781:31;6806:5;6781:31;:::i;:::-;6831:5;-1:-1:-1;6887:2:143;6872:18;;6859:32;-1:-1:-1;;;;;6903:30:143;;6900:50;;;6946:1;6943;6936:12;6900:50;6969:22;;7022:4;7014:13;;7010:27;-1:-1:-1;7000:55:143;;7051:1;7048;7041:12;7000:55;7091:2;7078:16;-1:-1:-1;;;;;7109:6:143;7106:30;7103:56;;;7139:18;;:::i;:::-;7188:2;7182:9;7280:2;7242:17;;-1:-1:-1;;7238:31:143;;;7271:2;7234:40;7230:54;7218:67;;-1:-1:-1;;;;;7300:34:143;;7336:22;;;7297:62;7294:88;;;7362:18;;:::i;:::-;7398:2;7391:22;7422;;;7463:15;;;7480:2;7459:24;7456:37;-1:-1:-1;7453:57:143;;;7506:1;7503;7496:12;7453:57;7562:6;7557:2;7553;7549:11;7544:2;7536:6;7532:15;7519:50;7615:1;7610:2;7601:6;7593;7589:19;7585:28;7578:39;7636:6;7626:16;;;;;6569:1079;;;;;:::o;7653:508::-;7730:6;7738;7746;7799:2;7787:9;7778:7;7774:23;7770:32;7767:52;;;7815:1;7812;7805:12;7767:52;7854:9;7841:23;7873:31;7898:5;7873:31;:::i;:::-;7923:5;-1:-1:-1;7980:2:143;7965:18;;7952:32;7993:33;7952:32;7993:33;:::i;:::-;7653:508;;8045:7;;-1:-1:-1;;;8125:2:143;8110:18;;;;8097:32;;7653:508::o;8166:1431::-;8360:6;8368;8376;8384;8392;8400;8408;8416;8469:3;8457:9;8448:7;8444:23;8440:33;8437:53;;;8486:1;8483;8476:12;8437:53;8526:9;8513:23;-1:-1:-1;;;;;8551:6:143;8548:30;8545:50;;;8591:1;8588;8581:12;8545:50;8630:70;8692:7;8683:6;8672:9;8668:22;8630:70;:::i;:::-;8719:8;;-1:-1:-1;8604:96:143;-1:-1:-1;;8807:2:143;8792:18;;8779:32;-1:-1:-1;;;;;8823:32:143;;8820:52;;;8868:1;8865;8858:12;8820:52;8907:72;8971:7;8960:8;8949:9;8945:24;8907:72;:::i;:::-;8998:8;;-1:-1:-1;8881:98:143;-1:-1:-1;;9086:2:143;9071:18;;9058:32;-1:-1:-1;;;;;9102:32:143;;9099:52;;;9147:1;9144;9137:12;9099:52;9186:72;9250:7;9239:8;9228:9;9224:24;9186:72;:::i;:::-;9277:8;;-1:-1:-1;9160:98:143;-1:-1:-1;;9365:2:143;9350:18;;9337:32;-1:-1:-1;;;;;9381:32:143;;9378:52;;;9426:1;9423;9416:12;9378:52;9465:72;9529:7;9518:8;9507:9;9503:24;9465:72;:::i;:::-;8166:1431;;;;-1:-1:-1;8166:1431:143;;-1:-1:-1;8166:1431:143;;;;;;9556:8;-1:-1:-1;;;8166:1431:143:o;9602:418::-;9751:2;9740:9;9733:21;9714:4;9783:6;9777:13;9826:6;9821:2;9810:9;9806:18;9799:34;9885:6;9880:2;9872:6;9868:15;9863:2;9852:9;9848:18;9842:50;9941:1;9936:2;9927:6;9916:9;9912:22;9908:31;9901:42;10011:2;10004;10000:7;9995:2;9987:6;9983:15;9979:29;9968:9;9964:45;9960:54;9952:62;;;9602:418;;;;:::o;10822:551::-;10917:6;10925;10933;10986:2;10974:9;10965:7;10961:23;10957:32;10954:52;;;11002:1;10999;10992:12;10954:52;11047:23;;;-1:-1:-1;11145:2:143;11130:18;;11117:32;-1:-1:-1;;;;;11161:30:143;;11158:50;;;11204:1;11201;11194:12;11158:50;11243:70;11305:7;11296:6;11285:9;11281:22;11243:70;:::i;:::-;10822:551;;11332:8;;-1:-1:-1;11217:96:143;;-1:-1:-1;;;;10822:551:143:o;11602:127::-;11663:10;11658:3;11654:20;11651:1;11644:31;11694:4;11691:1;11684:15;11718:4;11715:1;11708:15;12897:127;12958:10;12953:3;12949:20;12946:1;12939:31;12989:4;12986:1;12979:15;13013:4;13010:1;13003:15;13029:125;13094:9;;;13115:10;;;13112:36;;;13128:18;;:::i;13159:135::-;13198:3;13219:17;;;13216:43;;13239:18;;:::i;:::-;-1:-1:-1;13286:1:143;13275:13;;13159:135::o;13792:127::-;13853:10;13848:3;13844:20;13841:1;13834:31;13884:4;13881:1;13874:15;13908:4;13905:1;13898:15;14132:184;14202:6;14255:2;14243:9;14234:7;14230:23;14226:32;14223:52;;;14271:1;14268;14261:12;14223:52;-1:-1:-1;14294:16:143;;14132:184;-1:-1:-1;14132:184:143:o;14697:277::-;14764:6;14817:2;14805:9;14796:7;14792:23;14788:32;14785:52;;;14833:1;14830;14823:12;14785:52;14865:9;14859:16;14918:5;14911:13;14904:21;14897:5;14894:32;14884:60;;14940:1;14937;14930:12;14979:217;15019:1;15045;15035:132;;15089:10;15084:3;15080:20;15077:1;15070:31;15124:4;15121:1;15114:15;15152:4;15149:1;15142:15;15035:132;-1:-1:-1;15181:9:143;;14979:217::o;17522:128::-;17589:9;;;17610:11;;;17607:37;;;17624:18;;:::i;17908:301::-;18037:3;18075:6;18069:13;18121:6;18114:4;18106:6;18102:17;18097:3;18091:37;18183:1;18147:16;;18172:13;;;-1:-1:-1;18147:16:143;17908:301;-1:-1:-1;17908:301:143:o","linkReferences":{},"immutableReferences":{"39722":[{"start":7811,"length":32},{"start":7852,"length":32},{"start":8173,"length":32}]}},"methodIdentifiers":{"DEFAULT_ADMIN_ROLE()":"a217fddf","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","WHITELIST_ROLE()":"7a997ab7","acceptGenesisCeremony()":"92a2ebf3","computeAllStake(address,uint256)":"55bdbe4c","computeAllStakeForAcceptingEpoch(address)":"574663a9","currentAcceptingEpochByDomain(address)":"b1de97f7","domainGenesisAccepted(address)":"d1ba90ff","epochDurationByDomain(address)":"3bccf635","getAcceptingEpoch(address)":"22fceb75","getAttesterStake(address,uint256,address)":"24fdfddf","getAttesterStakeForAcceptingEpoch(address,address)":"3debeadc","getCustodianStake(address,uint256,address)":"0ce52af5","getCustodianStakeForAcceptingEpoch(address,address)":"9db92f68","getEpochByL1BlockTime(address)":"d980b40d","getEpochDuration(address)":"5c534359","getNextAcceptingEpochWithException(address)":"771fcfc4","getNextPresentEpochWithException(address)":"57dd6a94","getRegisteredAttesters(address)":"1789aeb4","getRegisteredCustodians(address)":"341d5ef5","getRoleAdmin(bytes32)":"248a9ca3","getStake(address,uint256,address,address)":"93dfb85c","getStakeForAcceptingEpoch(address,address,address)":"a78d1fef","getStakedAttestersForAcceptingEpoch(address)":"4234a479","getUnstake(address,uint256,address,address)":"7d93768b","getUnstakeForAcceptingEpoch(address,address,address)":"34eada3a","grantRole(bytes32,address)":"2f2ff15d","hasRole(bytes32,address)":"91d14854","initialize()":"8129fc1c","initialize(address)":"c4d66de8","proxiableUUID()":"52d1902d","registerDomain(uint256,address[])":"d37304f8","removeAddressFromWhitelist(address)":"286dd3f5","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","rewardArray(address[],uint256[],address[])":"4e76a139","rewardFromDomain(address,uint256,address)":"5e00bf46","rollOverEpoch()":"a887b71c","setAcceptingEpoch(address,uint256)":"1dc8b949","slash(address[],address[],uint256[],uint256[])":"a885c975","stake(address,address,uint256)":"bf6eac2f","stakesByDomainEpochCustodian(address,uint256,address)":"86af70d1","stakesByDomainEpochCustodianAttester(address,uint256,address,address)":"0c8f522f","supportsInterface(bytes4)":"01ffc9a7","token()":"fc0c546a","unstake(address,address,uint256)":"60829f8a","unstakesByDomainEpochCustodianAttester(address,uint256,address,address)":"e6e3fb3a","upgradeToAndCall(address,bytes)":"4f1ef286","whitelistAddress(address)":"41566585"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CustodianTransferAmountMismatch\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"ERC1967InvalidImplementation\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ERC1967NonPayable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"EpochDurationNotSet\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FailedCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"GenesisAlreadyAccepted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ReentrancyGuardReentrantCall\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"StakeExceedsGenesisStake\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"unstake\",\"type\":\"uint256\"}],\"name\":\"AttesterEpochRolledOver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"name\":\"AttesterStaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"name\":\"AttesterUnstaked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"EpochRolledOver\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"WHITELIST_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"computeAllStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"computeAllStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"currentAcceptingEpochByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"currentAcceptingEpoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"domainGenesisAccepted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"epochDurationByDomain\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epochDuration\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getEpochByL1BlockTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getEpochDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getNextAcceptingEpochWithException\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getNextPresentEpochWithException\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getRegisteredAttesters\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getRegisteredCustodians\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"}],\"name\":\"getStakedAttestersForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getUnstake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getUnstakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"_token\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epochDuration\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"}],\"name\":\"registerDomain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"removeAddressFromWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"}],\"name\":\"rewardArray\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"rewardFromDomain\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rollOverEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"newEpoch\",\"type\":\"uint256\"}],\"name\":\"setAcceptingEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"custodians\",\"type\":\"address[]\"},{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"},{\"internalType\":\"uint256[]\",\"name\":\"amounts\",\"type\":\"uint256[]\"},{\"internalType\":\"uint256[]\",\"name\":\"refundAmounts\",\"type\":\"uint256[]\"}],\"name\":\"slash\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"contract IERC20\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"stake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"stakesByDomainEpochCustodian\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"stakesByDomainEpochCustodianAttester\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"token\",\"outputs\":[{\"internalType\":\"contract IERC20\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"unstake\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"domain\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"unstakesByDomainEpochCustodianAttester\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"addr\",\"type\":\"address\"}],\"name\":\"whitelistAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"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.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"ReentrancyGuardReentrantCall()\":[{\"details\":\"Unauthorized reentrant call.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"computeAllStakeForAcceptingEpoch(address)\":{\"params\":{\"domain\":\"The domain to compute total stake for\"}},\"getCustodianStake(address,uint256,address)\":{\"details\":\"gets the total stake for a given epoch for a given custodian\"},\"getCustodianStakeForAcceptingEpoch(address,address)\":{\"details\":\"gets the total stake for the accepting epoch for a given custodian\"},\"getNextAcceptingEpochWithException(address)\":{\"details\":\"Special handling for genesis state (epoch 0):If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes\"},\"getNextPresentEpochWithException(address)\":{\"details\":\"Special handling for genesis state (accepting epoch 0):If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes\"},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"getStake(address,uint256,address,address)\":{\"details\":\"gets the stake for a given epoch for a given {attester,custodian} tuple\"},\"getStakeForAcceptingEpoch(address,address,address)\":{\"details\":\"gets the stake for the accepting epoch for a given {attester,custodian} tuple\"},\"getUnstake(address,uint256,address,address)\":{\"details\":\"gets the unstake for a given epoch for a given {attester,custodian} tuple\"},\"getUnstakeForAcceptingEpoch(address,address,address)\":{\"details\":\"gets the unstake for the accepting epoch for a given {attester,custodian} tuple\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize()\":{\"details\":\"Initialize the contract\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"rewardArray(address[],uint256[],address[])\":{\"params\":{\"amounts\":\"The amounts to reward\",\"attesters\":\"The attesters to reward\",\"custodians\":\"The custodians of the token from which to reward the attesters \"}},\"rewardFromDomain(address,uint256,address)\":{\"params\":{\"amount\":\"The amount to reward\",\"attester\":\"The attester to reward\",\"custodian\":\"The custodian of the token from which to reward the attester, here it is the domain\"}},\"setAcceptingEpoch(address,uint256)\":{\"params\":{\"domain\":\"The domain address\",\"newEpoch\":\"The new accepting epoch value\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"EpochDurationNotSet()\":[{\"notice\":\"Error thrown when trying to get epoch but duration not set\"}]},\"kind\":\"user\",\"methods\":{\"computeAllStake(address,uint256)\":{\"notice\":\"Computes total stake across all custodians and attesters for an epoch\"},\"computeAllStakeForAcceptingEpoch(address)\":{\"notice\":\"Computes total stake across all custodians and attesters for the current accepting epoch\"},\"getEpochDuration(address)\":{\"notice\":\"Gets the epoch duration for the given domain\"},\"getNextAcceptingEpochWithException(address)\":{\"notice\":\"Gets the next accepting epoch number\"},\"getNextPresentEpochWithException(address)\":{\"notice\":\"Gets the next present epoch number\"},\"getRegisteredAttesters(address)\":{\"notice\":\"Gets all attesters who are registered for the given domain\"},\"getRegisteredCustodians(address)\":{\"notice\":\"Gets all custodians who are registered for the given domain\"},\"getStakedAttestersForAcceptingEpoch(address)\":{\"notice\":\"Gets all attesters who have stake in the current accepting epoch\"},\"registerDomain(uint256,address[])\":{\"notice\":\"Registers a domain and sets the epoch duration\"},\"rewardArray(address[],uint256[],address[])\":{\"notice\":\"An array of custodians reward an array of attesters\"},\"rewardFromDomain(address,uint256,address)\":{\"notice\":\"Domain rewards an attester\"},\"setAcceptingEpoch(address,uint256)\":{\"notice\":\"Sets the accepting epoch for a given domain\"},\"stake(address,address,uint256)\":{\"notice\":\"Stakes for the next epoch\"},\"whitelistAddress(address)\":{\"notice\":\"Whitelist an address to be used as an attester or custodian. Whitelisting means that the address is allowed to stake and unstake\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/staking/MovementStaking.sol\":\"MovementStaking\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"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/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0xd861907d1168dcaec2a7846edbaed12feb8bad2d6781dba987be01374f90b495\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://12ff809243040419e2fc2aa7ef0aaa60b3e6ebc901553ba1de970ceeef208c4c\",\"dweb:/ipfs/QmX2dwMVNrQAahqVzEx94gqcVB6Z8ovifPYdEfHZzj7aEb\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x5c54228bbb2f1f8616179c51bdb90b7960f4a3414c390ad5c6ead6763eb55a59\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://745fe72596bb8fde5f294d9d6b943db942202e4445536ee00da3ba011f876e86\",\"dweb:/ipfs/QmcjeESkk4rbhUVaSBfyq5f8rY56Jms1TwcJXaRD55K3UH\"]},\"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/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89\",\"dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70\",\"dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"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/utils/SafeERC20.sol\":{\"keccak256\":\"0x4ea01544758fd2c7045961904686bfe232d2220a04ecaa2d6b08dac17827febf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fabe6bef5167ae741dd8c22d7f81d3f9120bd61b290762a2e8f176712567d329\",\"dweb:/ipfs/QmSnEitJ6xmf1SSAUeZozD7Gx7h8bNnX3a1ZBzqeivsvVg\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e\",\"dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR\"]},\"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/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"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/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9b161e97b8967d4bc0c08d25741889a30692cdda4b71910bf1b0e315f1962212\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://821500c39d095eaa25b06f46e65f1d0e97c4c96b39227f79077dee7d9e84051f\",\"dweb:/ipfs/QmSTeGorKzSWF6HAmxo32uCZiEuKNvreQdUiX1AaYtUMTz\"]},\"src/staking/MovementStaking.sol\":{\"keccak256\":\"0xb61e04fbc6fce5f3d2e64269f2adccea1f27060f714259634ec20eab1cff468f\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0bf80557c4c9156a247c44cc476c5747028fddd392f9d3e3c7cea1a7fac1f670\",\"dweb:/ipfs/QmQ6A6bPUsm2b7yy5eSsJ7MXgQGAF8zWEkJf7uL7sZNXi9\"]},\"src/staking/MovementStakingStorage.sol\":{\"keccak256\":\"0xcb909fbdd31da45891f983aca5387eff88693b31c60d304b6ab7c1128c814225\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fcfd3aadf8c9e714c6e0f5b8b7f6000b54a1a0eeb219d25cb23848411ae17edb\",\"dweb:/ipfs/QmTKyTFmGKHKWk1wKncaAvXBZH9MwJfkdhFbmTUAwTX7UP\"]},\"src/staking/base/BaseStaking.sol\":{\"keccak256\":\"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46\",\"dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx\"]},\"src/staking/interfaces/IMovementStaking.sol\":{\"keccak256\":\"0x250f5a72809b363ebefe5fbcdce50b62a9ff49672a863c8273e0fbe4d59f8933\",\"urls\":[\"bzz-raw://5a4385f838da317ce90fb84cdd83a724d132f7e6c287191673f4e2ce1a486bbe\",\"dweb:/ipfs/Qmbwq1kBumZDyREvc4ryHMNMQ4sgT39fNAK4bUNRoXqchj\"]},\"src/token/base/BaseToken.sol\":{\"keccak256\":\"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e\",\"dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd\"]},\"src/token/base/MintableToken.sol\":{\"keccak256\":\"0xba4c9b5e900564cb3abb081d11b95f23e5f39a5ee799cda54c9f1a49a7aa8a13\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://94ca441f7acc6b312fc3d1d6ce4dab9971fd1cdf176ae5251fe2f28c4c52a35a\",\"dweb:/ipfs/QmXAuDzaJqydZho7CFyKKKtyYATHedyAUHTKAS839oji3o\"]},\"src/token/base/WrappedToken.sol\":{\"keccak256\":\"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885\",\"dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4\"]},\"src/token/base/WrappedTokenStorage.sol\":{\"keccak256\":\"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08\",\"dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj\"]},\"src/token/custodian/CustodianToken.sol\":{\"keccak256\":\"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04\",\"dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"CustodianTransferAmountMismatch"},{"inputs":[{"internalType":"address","name":"implementation","type":"address"}],"type":"error","name":"ERC1967InvalidImplementation"},{"inputs":[],"type":"error","name":"ERC1967NonPayable"},{"inputs":[],"type":"error","name":"EpochDurationNotSet"},{"inputs":[],"type":"error","name":"FailedCall"},{"inputs":[],"type":"error","name":"GenesisAlreadyAccepted"},{"inputs":[],"type":"error","name":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"ReentrancyGuardReentrantCall"},{"inputs":[],"type":"error","name":"StakeExceedsGenesisStake"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[{"internalType":"address","name":"attester","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false},{"internalType":"uint256","name":"unstake","type":"uint256","indexed":false}],"type":"event","name":"AttesterEpochRolledOver","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"address","name":"attester","type":"address","indexed":false},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false}],"type":"event","name":"AttesterStaked","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":true},{"internalType":"address","name":"custodian","type":"address","indexed":true},{"internalType":"address","name":"attester","type":"address","indexed":false},{"internalType":"uint256","name":"stake","type":"uint256","indexed":false}],"type":"event","name":"AttesterUnstaked","anonymous":false},{"inputs":[{"internalType":"address","name":"domain","type":"address","indexed":true},{"internalType":"uint256","name":"epoch","type":"uint256","indexed":false}],"type":"event","name":"EpochRolledOver","anonymous":false},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"WHITELIST_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptGenesisCeremony"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"}],"stateMutability":"view","type":"function","name":"computeAllStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"computeAllStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"currentAcceptingEpochByDomain","outputs":[{"internalType":"uint256","name":"currentAcceptingEpoch","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"domainGenesisAccepted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"epochDurationByDomain","outputs":[{"internalType":"uint256","name":"epochDuration","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getEpochByL1BlockTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getEpochDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getNextAcceptingEpochWithException","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getNextPresentEpochWithException","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getRegisteredAttesters","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getRegisteredCustodians","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"}],"stateMutability":"view","type":"function","name":"getStakedAttestersForAcceptingEpoch","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getUnstake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getUnstakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"contract IERC20","name":"_token","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epochDuration","type":"uint256"},{"internalType":"address[]","name":"custodians","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"registerDomain"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"removeAddressFromWhitelist"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"address[]","name":"custodians","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"rewardArray"},{"inputs":[{"internalType":"address","name":"attester","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"rewardFromDomain"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"rollOverEpoch"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"newEpoch","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setAcceptingEpoch"},{"inputs":[{"internalType":"address[]","name":"custodians","type":"address[]"},{"internalType":"address[]","name":"attesters","type":"address[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"uint256[]","name":"refundAmounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function","name":"slash"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"contract IERC20","name":"custodian","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"stake"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"stakesByDomainEpochCustodian","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"stakesByDomainEpochCustodianAttester","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"token","outputs":[{"internalType":"contract IERC20","name":"","type":"address"}]},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"unstake"},{"inputs":[{"internalType":"address","name":"domain","type":"address"},{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"unstakesByDomainEpochCustodianAttester","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"whitelistAddress"}],"devdoc":{"kind":"dev","methods":{"computeAllStakeForAcceptingEpoch(address)":{"params":{"domain":"The domain to compute total stake for"}},"getCustodianStake(address,uint256,address)":{"details":"gets the total stake for a given epoch for a given custodian"},"getCustodianStakeForAcceptingEpoch(address,address)":{"details":"gets the total stake for the accepting epoch for a given custodian"},"getNextAcceptingEpochWithException(address)":{"details":"Special handling for genesis state (epoch 0):If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes"},"getNextPresentEpochWithException(address)":{"details":"Special handling for genesis state (accepting epoch 0):If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes"},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"getStake(address,uint256,address,address)":{"details":"gets the stake for a given epoch for a given {attester,custodian} tuple"},"getStakeForAcceptingEpoch(address,address,address)":{"details":"gets the stake for the accepting epoch for a given {attester,custodian} tuple"},"getUnstake(address,uint256,address,address)":{"details":"gets the unstake for a given epoch for a given {attester,custodian} tuple"},"getUnstakeForAcceptingEpoch(address,address,address)":{"details":"gets the unstake for the accepting epoch for a given {attester,custodian} tuple"},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize()":{"details":"Initialize the contract"},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"rewardArray(address[],uint256[],address[])":{"params":{"amounts":"The amounts to reward","attesters":"The attesters to reward","custodians":"The custodians of the token from which to reward the attesters "}},"rewardFromDomain(address,uint256,address)":{"params":{"amount":"The amount to reward","attester":"The attester to reward","custodian":"The custodian of the token from which to reward the attester, here it is the domain"}},"setAcceptingEpoch(address,uint256)":{"params":{"domain":"The domain address","newEpoch":"The new accepting epoch value"}},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"computeAllStake(address,uint256)":{"notice":"Computes total stake across all custodians and attesters for an epoch"},"computeAllStakeForAcceptingEpoch(address)":{"notice":"Computes total stake across all custodians and attesters for the current accepting epoch"},"getEpochDuration(address)":{"notice":"Gets the epoch duration for the given domain"},"getNextAcceptingEpochWithException(address)":{"notice":"Gets the next accepting epoch number"},"getNextPresentEpochWithException(address)":{"notice":"Gets the next present epoch number"},"getRegisteredAttesters(address)":{"notice":"Gets all attesters who are registered for the given domain"},"getRegisteredCustodians(address)":{"notice":"Gets all custodians who are registered for the given domain"},"getStakedAttestersForAcceptingEpoch(address)":{"notice":"Gets all attesters who have stake in the current accepting epoch"},"registerDomain(uint256,address[])":{"notice":"Registers a domain and sets the epoch duration"},"rewardArray(address[],uint256[],address[])":{"notice":"An array of custodians reward an array of attesters"},"rewardFromDomain(address,uint256,address)":{"notice":"Domain rewards an attester"},"setAcceptingEpoch(address,uint256)":{"notice":"Sets the accepting epoch for a given domain"},"stake(address,address,uint256)":{"notice":"Stakes for the next epoch"},"whitelistAddress(address)":{"notice":"Whitelist an address to be used as an attester or custodian. Whitelisting means that the address is allowed to stake and unstake"}},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/staking/MovementStaking.sol":"MovementStaking"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"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/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0xd861907d1168dcaec2a7846edbaed12feb8bad2d6781dba987be01374f90b495","urls":["bzz-raw://12ff809243040419e2fc2aa7ef0aaa60b3e6ebc901553ba1de970ceeef208c4c","dweb:/ipfs/QmX2dwMVNrQAahqVzEx94gqcVB6Z8ovifPYdEfHZzj7aEb"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x5c54228bbb2f1f8616179c51bdb90b7960f4a3414c390ad5c6ead6763eb55a59","urls":["bzz-raw://745fe72596bb8fde5f294d9d6b943db942202e4445536ee00da3ba011f876e86","dweb:/ipfs/QmcjeESkk4rbhUVaSBfyq5f8rY56Jms1TwcJXaRD55K3UH"],"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/introspection/ERC165Upgradeable.sol":{"keccak256":"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab","urls":["bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89","dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606","urls":["bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1","dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol":{"keccak256":"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7","urls":["bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b","dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"keccak256":"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724","urls":["bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a","dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486","urls":["bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d","dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c","urls":["bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba","dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d","urls":["bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196","dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA"],"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/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898","urls":["bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70","dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2"],"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/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/utils/SafeERC20.sol":{"keccak256":"0x4ea01544758fd2c7045961904686bfe232d2220a04ecaa2d6b08dac17827febf","urls":["bzz-raw://fabe6bef5167ae741dd8c22d7f81d3f9120bd61b290762a2e8f176712567d329","dweb:/ipfs/QmSnEitJ6xmf1SSAUeZozD7Gx7h8bNnX3a1ZBzqeivsvVg"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c","urls":["bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e","dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR"],"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/ReentrancyGuard.sol":{"keccak256":"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3","urls":["bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a","dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"],"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/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"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/structs/EnumerableSet.sol":{"keccak256":"0x9b161e97b8967d4bc0c08d25741889a30692cdda4b71910bf1b0e315f1962212","urls":["bzz-raw://821500c39d095eaa25b06f46e65f1d0e97c4c96b39227f79077dee7d9e84051f","dweb:/ipfs/QmSTeGorKzSWF6HAmxo32uCZiEuKNvreQdUiX1AaYtUMTz"],"license":"MIT"},"src/staking/MovementStaking.sol":{"keccak256":"0xb61e04fbc6fce5f3d2e64269f2adccea1f27060f714259634ec20eab1cff468f","urls":["bzz-raw://0bf80557c4c9156a247c44cc476c5747028fddd392f9d3e3c7cea1a7fac1f670","dweb:/ipfs/QmQ6A6bPUsm2b7yy5eSsJ7MXgQGAF8zWEkJf7uL7sZNXi9"],"license":"UNLICENSED"},"src/staking/MovementStakingStorage.sol":{"keccak256":"0xcb909fbdd31da45891f983aca5387eff88693b31c60d304b6ab7c1128c814225","urls":["bzz-raw://fcfd3aadf8c9e714c6e0f5b8b7f6000b54a1a0eeb219d25cb23848411ae17edb","dweb:/ipfs/QmTKyTFmGKHKWk1wKncaAvXBZH9MwJfkdhFbmTUAwTX7UP"],"license":"UNLICENSED"},"src/staking/base/BaseStaking.sol":{"keccak256":"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393","urls":["bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46","dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx"],"license":"MIT"},"src/staking/interfaces/IMovementStaking.sol":{"keccak256":"0x250f5a72809b363ebefe5fbcdce50b62a9ff49672a863c8273e0fbe4d59f8933","urls":["bzz-raw://5a4385f838da317ce90fb84cdd83a724d132f7e6c287191673f4e2ce1a486bbe","dweb:/ipfs/Qmbwq1kBumZDyREvc4ryHMNMQ4sgT39fNAK4bUNRoXqchj"],"license":null},"src/token/base/BaseToken.sol":{"keccak256":"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2","urls":["bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e","dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd"],"license":"MIT"},"src/token/base/MintableToken.sol":{"keccak256":"0xba4c9b5e900564cb3abb081d11b95f23e5f39a5ee799cda54c9f1a49a7aa8a13","urls":["bzz-raw://94ca441f7acc6b312fc3d1d6ce4dab9971fd1cdf176ae5251fe2f28c4c52a35a","dweb:/ipfs/QmXAuDzaJqydZho7CFyKKKtyYATHedyAUHTKAS839oji3o"],"license":"MIT"},"src/token/base/WrappedToken.sol":{"keccak256":"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45","urls":["bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885","dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4"],"license":"MIT"},"src/token/base/WrappedTokenStorage.sol":{"keccak256":"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e","urls":["bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08","dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj"],"license":"MIT"},"src/token/custodian/CustodianToken.sol":{"keccak256":"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350","urls":["bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04","dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":62398,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"token","offset":0,"slot":"0","type":"t_contract(IERC20)43804"},{"astId":62403,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"epochDurationByDomain","offset":0,"slot":"1","type":"t_mapping(t_address,t_uint256)"},{"astId":62408,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"currentAcceptingEpochByDomain","offset":0,"slot":"2","type":"t_mapping(t_address,t_uint256)"},{"astId":62413,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"registeredAttestersByDomain","offset":0,"slot":"3","type":"t_mapping(t_address,t_struct(AddressSet)50376_storage)"},{"astId":62418,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"registeredCustodiansByDomain","offset":0,"slot":"4","type":"t_mapping(t_address,t_struct(AddressSet)50376_storage)"},{"astId":62429,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"stakesByDomainEpochCustodianAttester","offset":0,"slot":"5","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))"},{"astId":62440,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"unstakesByDomainEpochCustodianAttester","offset":0,"slot":"6","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))"},{"astId":62449,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"stakesByDomainEpochCustodian","offset":0,"slot":"7","type":"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_uint256)))"},{"astId":62453,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"domainGenesisAccepted","offset":0,"slot":"8","type":"t_mapping(t_address,t_bool)"},{"astId":44695,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_status","offset":0,"slot":"9","type":"t_uint256"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_bytes32)dyn_storage":{"encoding":"dynamic_array","label":"bytes32[]","numberOfBytes":"32","base":"t_bytes32"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IERC20)43804":{"encoding":"inplace","label":"contract IERC20","numberOfBytes":"20"},"t_mapping(t_address,t_bool)":{"encoding":"mapping","key":"t_address","label":"mapping(address => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_address,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256))))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))"},"t_mapping(t_address,t_mapping(t_uint256,t_mapping(t_address,t_uint256)))":{"encoding":"mapping","key":"t_address","label":"mapping(address => mapping(uint256 => mapping(address => uint256)))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},"t_mapping(t_address,t_struct(AddressSet)50376_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct EnumerableSet.AddressSet)","numberOfBytes":"32","value":"t_struct(AddressSet)50376_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_mapping(t_address,t_mapping(t_address,t_uint256)))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => mapping(address => uint256)))","numberOfBytes":"32","value":"t_mapping(t_address,t_mapping(t_address,t_uint256))"},"t_mapping(t_uint256,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_struct(AddressSet)50376_storage":{"encoding":"inplace","label":"struct EnumerableSet.AddressSet","numberOfBytes":"64","members":[{"astId":50375,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_inner","offset":0,"slot":"0","type":"t_struct(Set)50061_storage"}]},"t_struct(Set)50061_storage":{"encoding":"inplace","label":"struct EnumerableSet.Set","numberOfBytes":"64","members":[{"astId":50056,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_values","offset":0,"slot":"0","type":"t_array(t_bytes32)dyn_storage"},{"astId":50060,"contract":"src/staking/MovementStaking.sol:MovementStaking","label":"_positions","offset":0,"slot":"1","type":"t_mapping(t_bytes32,t_uint256)"}]},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/staking/MovementStaking.sol","id":62380,"exportedSymbols":{"Address":[44580],"BaseStaking":[62514],"EnumerableSet":[50663],"ICustodianToken":[63461],"IERC20":[43804],"IMovementStaking":[62796],"Math":[48141],"MovementStaking":[62379],"MovementStakingStorage":[62459],"ReentrancyGuard":[44753],"SafeERC20":[44275]},"nodeType":"SourceUnit","src":"39:27836:114","nodes":[{"id":60527,"nodeType":"PragmaDirective","src":"39:24:114","nodes":[],"literals":["solidity","^","0.8",".13"]},{"id":60529,"nodeType":"ImportDirective","src":"64:51:114","nodes":[],"absolutePath":"src/staking/base/BaseStaking.sol","file":"./base/BaseStaking.sol","nameLocation":"-1:-1:-1","scope":62380,"sourceUnit":62515,"symbolAliases":[{"foreign":{"id":60528,"name":"BaseStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62514,"src":"72:11:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60531,"nodeType":"ImportDirective","src":"116:82:114","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol","file":"@openzeppelin/contracts/token/ERC20/utils/SafeERC20.sol","nameLocation":"-1:-1:-1","scope":62380,"sourceUnit":44276,"symbolAliases":[{"foreign":{"id":60530,"name":"SafeERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44275,"src":"124:9:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60533,"nodeType":"ImportDirective","src":"199:69:114","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol","file":"@openzeppelin/contracts/interfaces/IERC20.sol","nameLocation":"-1:-1:-1","scope":62380,"sourceUnit":42870,"symbolAliases":[{"foreign":{"id":60532,"name":"IERC20","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":43804,"src":"207:6:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60535,"nodeType":"ImportDirective","src":"269:66:114","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/Address.sol","file":"@openzeppelin/contracts/utils/Address.sol","nameLocation":"-1:-1:-1","scope":62380,"sourceUnit":44581,"symbolAliases":[{"foreign":{"id":60534,"name":"Address","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":44580,"src":"277:7:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60537,"nodeType":"ImportDirective","src":"336:70:114","nodes":[],"absolutePath":"src/token/custodian/CustodianToken.sol","file":"../token/custodian/CustodianToken.sol","nameLocation":"-1:-1:-1","scope":62380,"sourceUnit":63797,"symbolAliases":[{"foreign":{"id":60536,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63461,"src":"344:15:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60539,"nodeType":"ImportDirective","src":"407:65:114","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/math/Math.sol","file":"@openzeppelin/contracts/utils/math/Math.sol","nameLocation":"-1:-1:-1","scope":62380,"sourceUnit":48142,"symbolAliases":[{"foreign":{"id":60538,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48141,"src":"415:4:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60542,"nodeType":"ImportDirective","src":"473:83:114","nodes":[],"absolutePath":"src/staking/MovementStakingStorage.sol","file":"./MovementStakingStorage.sol","nameLocation":"-1:-1:-1","scope":62380,"sourceUnit":62460,"symbolAliases":[{"foreign":{"id":60540,"name":"MovementStakingStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62459,"src":"481:22:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":60541,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50663,"src":"505:13:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60544,"nodeType":"ImportDirective","src":"557:67:114","nodes":[],"absolutePath":"src/staking/interfaces/IMovementStaking.sol","file":"./interfaces/IMovementStaking.sol","nameLocation":"-1:-1:-1","scope":62380,"sourceUnit":62797,"symbolAliases":[{"foreign":{"id":60543,"name":"IMovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62796,"src":"565:16:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60545,"nodeType":"ImportDirective","src":"625:59:114","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","nameLocation":"-1:-1:-1","scope":62380,"sourceUnit":44754,"symbolAliases":[],"unitAlias":""},{"id":62379,"nodeType":"ContractDefinition","src":"766:27108:114","nodes":[{"id":60557,"nodeType":"UsingForDirective","src":"887:49:114","nodes":[],"global":false,"libraryName":{"id":60554,"name":"EnumerableSet","nameLocations":["893:13:114"],"nodeType":"IdentifierPath","referencedDeclaration":50663,"src":"893:13:114"},"typeName":{"id":60556,"nodeType":"UserDefinedTypeName","pathNode":{"id":60555,"name":"EnumerableSet.AddressSet","nameLocations":["911:13:114","925:10:114"],"nodeType":"IdentifierPath","referencedDeclaration":50376,"src":"911:24:114"},"referencedDeclaration":50376,"src":"911:24:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage_ptr","typeString":"struct EnumerableSet.AddressSet"}}},{"id":60560,"nodeType":"ErrorDefinition","src":"1017:28:114","nodes":[],"documentation":{"id":60558,"nodeType":"StructuredDocumentation","src":"942:70:114","text":"@notice Error thrown when trying to get epoch but duration not set"},"errorSelector":"143c378b","name":"EpochDurationNotSet","nameLocation":"1023:19:114","parameters":{"id":60559,"nodeType":"ParameterList","parameters":[],"src":"1042:2:114"}},{"id":60576,"nodeType":"FunctionDefinition","src":"1051:125:114","nodes":[],"body":{"id":60575,"nodeType":"Block","src":"1105:71:114","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":60568,"name":"__BaseStaking_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62502,"src":"1115:28:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":60569,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1115:30:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60570,"nodeType":"ExpressionStatement","src":"1115:30:114"},{"expression":{"id":60573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60571,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62398,"src":"1155:5:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60572,"name":"_token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60563,"src":"1163:6:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}},"src":"1155:14:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}},"id":60574,"nodeType":"ExpressionStatement","src":"1155:14:114"}]},"functionSelector":"c4d66de8","implemented":true,"kind":"function","modifiers":[{"id":60566,"kind":"modifierInvocation","modifierName":{"id":60565,"name":"initializer","nameLocations":["1093:11:114"],"nodeType":"IdentifierPath","referencedDeclaration":39556,"src":"1093:11:114"},"nodeType":"ModifierInvocation","src":"1093:11:114"}],"name":"initialize","nameLocation":"1060:10:114","parameters":{"id":60564,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60563,"mutability":"mutable","name":"_token","nameLocation":"1078:6:114","nodeType":"VariableDeclaration","scope":60576,"src":"1071:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"},"typeName":{"id":60562,"nodeType":"UserDefinedTypeName","pathNode":{"id":60561,"name":"IERC20","nameLocations":["1071:6:114"],"nodeType":"IdentifierPath","referencedDeclaration":43804,"src":"1071:6:114"},"referencedDeclaration":43804,"src":"1071:6:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}},"visibility":"internal"}],"src":"1070:15:114"},"returnParameters":{"id":60567,"nodeType":"ParameterList","parameters":[],"src":"1105:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60621,"nodeType":"FunctionDefinition","src":"1245:359:114","nodes":[],"body":{"id":60620,"nodeType":"Block","src":"1367:237:114","nodes":[],"statements":[{"assignments":[60588],"declarations":[{"constant":false,"id":60588,"mutability":"mutable","name":"domain","nameLocation":"1385:6:114","nodeType":"VariableDeclaration","scope":60620,"src":"1377:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60587,"name":"address","nodeType":"ElementaryTypeName","src":"1377:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":60591,"initialValue":{"expression":{"id":60589,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1394:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60590,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1398:6:114","memberName":"sender","nodeType":"MemberAccess","src":"1394:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"1377:27:114"},{"expression":{"id":60596,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":60592,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62403,"src":"1414:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":60594,"indexExpression":{"id":60593,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60588,"src":"1436:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"1414:29:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60595,"name":"epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60579,"src":"1446:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1414:45:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60597,"nodeType":"ExpressionStatement","src":"1414:45:114"},{"body":{"id":60618,"nodeType":"Block","src":"1518:80:114","statements":[{"expression":{"arguments":[{"baseExpression":{"id":60613,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60582,"src":"1573:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":60615,"indexExpression":{"id":60614,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60599,"src":"1584:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1573:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":60609,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62418,"src":"1532:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":60611,"indexExpression":{"id":60610,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60588,"src":"1561:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1532:36:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":60612,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"1569:3:114","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":50403,"src":"1532:40:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$50376_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":60616,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1532:55:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60617,"nodeType":"ExpressionStatement","src":"1532:55:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60605,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60602,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60599,"src":"1490:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":60603,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60582,"src":"1494:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":60604,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1505:6:114","memberName":"length","nodeType":"MemberAccess","src":"1494:17:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"1490:21:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60619,"initializationExpression":{"assignments":[60599],"declarations":[{"constant":false,"id":60599,"mutability":"mutable","name":"i","nameLocation":"1483:1:114","nodeType":"VariableDeclaration","scope":60619,"src":"1475:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60598,"name":"uint256","nodeType":"ElementaryTypeName","src":"1475:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60601,"initialValue":{"hexValue":"30","id":60600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"1487:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"1475:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"1513:3:114","subExpression":{"id":60606,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60599,"src":"1513:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60608,"nodeType":"ExpressionStatement","src":"1513:3:114"},"nodeType":"ForStatement","src":"1470:128:114"}]},"baseFunctions":[62526],"documentation":{"id":60577,"nodeType":"StructuredDocumentation","src":"1182:58:114","text":"@notice Registers a domain and sets the epoch duration"},"functionSelector":"d37304f8","implemented":true,"kind":"function","modifiers":[{"id":60585,"kind":"modifierInvocation","modifierName":{"id":60584,"name":"nonReentrant","nameLocations":["1354:12:114"],"nodeType":"IdentifierPath","referencedDeclaration":44717,"src":"1354:12:114"},"nodeType":"ModifierInvocation","src":"1354:12:114"}],"name":"registerDomain","nameLocation":"1254:14:114","parameters":{"id":60583,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60579,"mutability":"mutable","name":"epochDuration","nameLocation":"1286:13:114","nodeType":"VariableDeclaration","scope":60621,"src":"1278:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60578,"name":"uint256","nodeType":"ElementaryTypeName","src":"1278:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60582,"mutability":"mutable","name":"custodians","nameLocation":"1328:10:114","nodeType":"VariableDeclaration","scope":60621,"src":"1309:29:114","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60580,"name":"address","nodeType":"ElementaryTypeName","src":"1309:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60581,"nodeType":"ArrayTypeName","src":"1309:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1268:76:114"},"returnParameters":{"id":60586,"nodeType":"ParameterList","parameters":[],"src":"1367:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":60675,"nodeType":"FunctionDefinition","src":"1686:554:114","nodes":[],"body":{"id":60674,"nodeType":"Block","src":"1788:452:114","nodes":[],"statements":[{"assignments":[60634],"declarations":[{"constant":false,"id":60634,"mutability":"mutable","name":"custodians","nameLocation":"1943:10:114","nodeType":"VariableDeclaration","scope":60674,"src":"1926:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60632,"name":"address","nodeType":"ElementaryTypeName","src":"1926:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60633,"nodeType":"ArrayTypeName","src":"1926:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":60644,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":60638,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62418,"src":"1983:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":60640,"indexExpression":{"id":60639,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60624,"src":"2012:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"1983:36:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":60641,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2020:6:114","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":50472,"src":"1983:43:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":60642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1983:45:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":60637,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"1956:13:114","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":60635,"name":"address","nodeType":"ElementaryTypeName","src":"1960:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60636,"nodeType":"ArrayTypeName","src":"1960:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":60643,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1956:82:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"1926:112:114"},{"body":{"id":60670,"nodeType":"Block","src":"2124:83:114","statements":[{"expression":{"id":60668,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":60659,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60634,"src":"2138:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60661,"indexExpression":{"id":60660,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60646,"src":"2149:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2138:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":60666,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60646,"src":"2194:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":60662,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62418,"src":"2154:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":60664,"indexExpression":{"id":60663,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60624,"src":"2183:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2154:36:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":60665,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2191:2:114","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":50499,"src":"2154:39:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":60667,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2154:42:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2138:58:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60669,"nodeType":"ExpressionStatement","src":"2138:58:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60649,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60646,"src":"2068:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":60650,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62418,"src":"2072:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":60652,"indexExpression":{"id":60651,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60624,"src":"2101:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2072:36:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":60653,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2109:6:114","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":50472,"src":"2072:43:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":60654,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2072:45:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2068:49:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60671,"initializationExpression":{"assignments":[60646],"declarations":[{"constant":false,"id":60646,"mutability":"mutable","name":"i","nameLocation":"2061:1:114","nodeType":"VariableDeclaration","scope":60671,"src":"2053:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60645,"name":"uint256","nodeType":"ElementaryTypeName","src":"2053:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60648,"initialValue":{"hexValue":"30","id":60647,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2065:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2053:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2119:3:114","subExpression":{"id":60656,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60646,"src":"2119:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60658,"nodeType":"ExpressionStatement","src":"2119:3:114"},"nodeType":"ForStatement","src":"2048:159:114"},{"expression":{"id":60672,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60634,"src":"2223:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":60629,"id":60673,"nodeType":"Return","src":"2216:17:114"}]},"baseFunctions":[62652],"documentation":{"id":60622,"nodeType":"StructuredDocumentation","src":"1610:71:114","text":"@notice Gets all custodians who are registered for the given domain"},"functionSelector":"341d5ef5","implemented":true,"kind":"function","modifiers":[],"name":"getRegisteredCustodians","nameLocation":"1695:23:114","parameters":{"id":60625,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60624,"mutability":"mutable","name":"domain","nameLocation":"1736:6:114","nodeType":"VariableDeclaration","scope":60675,"src":"1728:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60623,"name":"address","nodeType":"ElementaryTypeName","src":"1728:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1718:30:114"},"returnParameters":{"id":60629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60628,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60675,"src":"1770:16:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60626,"name":"address","nodeType":"ElementaryTypeName","src":"1770:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60627,"nodeType":"ArrayTypeName","src":"1770:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1769:18:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60729,"nodeType":"FunctionDefinition","src":"2321:419:114","nodes":[],"body":{"id":60728,"nodeType":"Block","src":"2422:318:114","nodes":[],"statements":[{"assignments":[60688],"declarations":[{"constant":false,"id":60688,"mutability":"mutable","name":"attesters","nameLocation":"2449:9:114","nodeType":"VariableDeclaration","scope":60728,"src":"2432:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60686,"name":"address","nodeType":"ElementaryTypeName","src":"2432:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60687,"nodeType":"ArrayTypeName","src":"2432:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":60698,"initialValue":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":60692,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62413,"src":"2488:27:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":60694,"indexExpression":{"id":60693,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60678,"src":"2516:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2488:35:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":60695,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2524:6:114","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":50472,"src":"2488:42:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":60696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2488:44:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":60691,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"2461:13:114","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":60689,"name":"address","nodeType":"ElementaryTypeName","src":"2465:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60690,"nodeType":"ArrayTypeName","src":"2465:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":60697,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2461:81:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"2432:110:114"},{"body":{"id":60724,"nodeType":"Block","src":"2627:81:114","statements":[{"expression":{"id":60722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":60713,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60688,"src":"2641:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60715,"indexExpression":{"id":60714,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60700,"src":"2651:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"2641:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":60720,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60700,"src":"2695:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":60716,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62413,"src":"2656:27:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":60718,"indexExpression":{"id":60717,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60678,"src":"2684:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2656:35:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":60719,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2692:2:114","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":50499,"src":"2656:38:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":60721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2656:41:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"2641:56:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60723,"nodeType":"ExpressionStatement","src":"2641:56:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60709,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60703,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60700,"src":"2572:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":60704,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62413,"src":"2576:27:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":60706,"indexExpression":{"id":60705,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60678,"src":"2604:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2576:35:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":60707,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"2612:6:114","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":50472,"src":"2576:42:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":60708,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2576:44:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2572:48:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60725,"initializationExpression":{"assignments":[60700],"declarations":[{"constant":false,"id":60700,"mutability":"mutable","name":"i","nameLocation":"2565:1:114","nodeType":"VariableDeclaration","scope":60725,"src":"2557:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60699,"name":"uint256","nodeType":"ElementaryTypeName","src":"2557:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60702,"initialValue":{"hexValue":"30","id":60701,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2569:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2557:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60711,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2622:3:114","subExpression":{"id":60710,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60700,"src":"2622:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60712,"nodeType":"ExpressionStatement","src":"2622:3:114"},"nodeType":"ForStatement","src":"2552:156:114"},{"expression":{"id":60726,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60688,"src":"2724:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":60683,"id":60727,"nodeType":"Return","src":"2717:16:114"}]},"baseFunctions":[62660],"documentation":{"id":60676,"nodeType":"StructuredDocumentation","src":"2246:70:114","text":"@notice Gets all attesters who are registered for the given domain"},"functionSelector":"1789aeb4","implemented":true,"kind":"function","modifiers":[],"name":"getRegisteredAttesters","nameLocation":"2330:22:114","parameters":{"id":60679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60678,"mutability":"mutable","name":"domain","nameLocation":"2370:6:114","nodeType":"VariableDeclaration","scope":60729,"src":"2362:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60677,"name":"address","nodeType":"ElementaryTypeName","src":"2362:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2352:30:114"},"returnParameters":{"id":60683,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60682,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60729,"src":"2404:16:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60680,"name":"address","nodeType":"ElementaryTypeName","src":"2404:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60681,"nodeType":"ArrayTypeName","src":"2404:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2403:18:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60838,"nodeType":"FunctionDefinition","src":"2827:1107:114","nodes":[],"body":{"id":60837,"nodeType":"Block","src":"2941:993:114","nodes":[],"statements":[{"assignments":[60739],"declarations":[{"constant":false,"id":60739,"mutability":"mutable","name":"totalAttesters","nameLocation":"3005:14:114","nodeType":"VariableDeclaration","scope":60837,"src":"2997:22:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60738,"name":"uint256","nodeType":"ElementaryTypeName","src":"2997:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60745,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":60740,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62413,"src":"3022:27:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":60742,"indexExpression":{"id":60741,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60732,"src":"3050:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3022:35:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":60743,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3058:6:114","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":50472,"src":"3022:42:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":60744,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3022:44:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"2997:69:114"},{"assignments":[60747],"declarations":[{"constant":false,"id":60747,"mutability":"mutable","name":"activeAttesterCount","nameLocation":"3131:19:114","nodeType":"VariableDeclaration","scope":60837,"src":"3123:27:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60746,"name":"uint256","nodeType":"ElementaryTypeName","src":"3123:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60749,"initialValue":{"hexValue":"30","id":60748,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3153:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3123:31:114"},{"body":{"id":60780,"nodeType":"Block","src":"3209:213:114","statements":[{"assignments":[60761],"declarations":[{"constant":false,"id":60761,"mutability":"mutable","name":"attester","nameLocation":"3231:8:114","nodeType":"VariableDeclaration","scope":60780,"src":"3223:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60760,"name":"address","nodeType":"ElementaryTypeName","src":"3223:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":60768,"initialValue":{"arguments":[{"id":60766,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60751,"src":"3281:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":60762,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62413,"src":"3242:27:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":60764,"indexExpression":{"id":60763,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60732,"src":"3270:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3242:35:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":60765,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3278:2:114","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":50499,"src":"3242:38:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":60767,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3242:41:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3223:60:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60774,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":60770,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60732,"src":"3335:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":60771,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60761,"src":"3343:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60769,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61448,"src":"3301:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":60772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3301:51:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":60773,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3355:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3301:55:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60779,"nodeType":"IfStatement","src":"3297:115:114","trueBody":{"id":60778,"nodeType":"Block","src":"3358:54:114","statements":[{"expression":{"id":60776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3376:21:114","subExpression":{"id":60775,"name":"activeAttesterCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60747,"src":"3376:19:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60777,"nodeType":"ExpressionStatement","src":"3376:21:114"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60756,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60754,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60751,"src":"3184:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":60755,"name":"totalAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60739,"src":"3188:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3184:18:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60781,"initializationExpression":{"assignments":[60751],"declarations":[{"constant":false,"id":60751,"mutability":"mutable","name":"i","nameLocation":"3177:1:114","nodeType":"VariableDeclaration","scope":60781,"src":"3169:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60750,"name":"uint256","nodeType":"ElementaryTypeName","src":"3169:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60753,"initialValue":{"hexValue":"30","id":60752,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3181:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3169:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60758,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3204:3:114","subExpression":{"id":60757,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60751,"src":"3204:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60759,"nodeType":"ExpressionStatement","src":"3204:3:114"},"nodeType":"ForStatement","src":"3164:258:114"},{"assignments":[60786],"declarations":[{"constant":false,"id":60786,"mutability":"mutable","name":"activeAttesters","nameLocation":"3493:15:114","nodeType":"VariableDeclaration","scope":60837,"src":"3476:32:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60784,"name":"address","nodeType":"ElementaryTypeName","src":"3476:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60785,"nodeType":"ArrayTypeName","src":"3476:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":60792,"initialValue":{"arguments":[{"id":60790,"name":"activeAttesterCount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60747,"src":"3525:19:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":60789,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"NewExpression","src":"3511:13:114","typeDescriptions":{"typeIdentifier":"t_function_objectcreation_pure$_t_uint256_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (uint256) pure returns (address[] memory)"},"typeName":{"baseType":{"id":60787,"name":"address","nodeType":"ElementaryTypeName","src":"3515:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60788,"nodeType":"ArrayTypeName","src":"3515:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}}},"id":60791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3511:34:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"3476:69:114"},{"assignments":[60794],"declarations":[{"constant":false,"id":60794,"mutability":"mutable","name":"activeIndex","nameLocation":"3563:11:114","nodeType":"VariableDeclaration","scope":60837,"src":"3555:19:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60793,"name":"uint256","nodeType":"ElementaryTypeName","src":"3555:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60796,"initialValue":{"hexValue":"30","id":60795,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3577:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3555:23:114"},{"body":{"id":60833,"nodeType":"Block","src":"3633:262:114","statements":[{"assignments":[60808],"declarations":[{"constant":false,"id":60808,"mutability":"mutable","name":"attester","nameLocation":"3655:8:114","nodeType":"VariableDeclaration","scope":60833,"src":"3647:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60807,"name":"address","nodeType":"ElementaryTypeName","src":"3647:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":60815,"initialValue":{"arguments":[{"id":60813,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60798,"src":"3705:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":60809,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62413,"src":"3666:27:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":60811,"indexExpression":{"id":60810,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60732,"src":"3694:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"3666:35:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":60812,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"3702:2:114","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":50499,"src":"3666:38:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":60814,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3666:41:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"3647:60:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":60817,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60732,"src":"3759:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":60818,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60808,"src":"3767:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60816,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61448,"src":"3725:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,address) view returns (uint256)"}},"id":60819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3725:51:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":60820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3779:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"3725:55:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60832,"nodeType":"IfStatement","src":"3721:164:114","trueBody":{"id":60831,"nodeType":"Block","src":"3782:103:114","statements":[{"expression":{"id":60826,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":60822,"name":"activeAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60786,"src":"3800:15:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60824,"indexExpression":{"id":60823,"name":"activeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60794,"src":"3816:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"3800:28:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60825,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60808,"src":"3831:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3800:39:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60827,"nodeType":"ExpressionStatement","src":"3800:39:114"},{"expression":{"id":60829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3857:13:114","subExpression":{"id":60828,"name":"activeIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60794,"src":"3857:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60830,"nodeType":"ExpressionStatement","src":"3857:13:114"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60803,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60801,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60798,"src":"3608:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":60802,"name":"totalAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60739,"src":"3612:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3608:18:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60834,"initializationExpression":{"assignments":[60798],"declarations":[{"constant":false,"id":60798,"mutability":"mutable","name":"i","nameLocation":"3601:1:114","nodeType":"VariableDeclaration","scope":60834,"src":"3593:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60797,"name":"uint256","nodeType":"ElementaryTypeName","src":"3593:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60800,"initialValue":{"hexValue":"30","id":60799,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"3605:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"3593:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60805,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"3628:3:114","subExpression":{"id":60804,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60798,"src":"3628:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60806,"nodeType":"ExpressionStatement","src":"3628:3:114"},"nodeType":"ForStatement","src":"3588:307:114"},{"expression":{"id":60835,"name":"activeAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60786,"src":"3912:15:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":60737,"id":60836,"nodeType":"Return","src":"3905:22:114"}]},"baseFunctions":[62744],"documentation":{"id":60730,"nodeType":"StructuredDocumentation","src":"2746:76:114","text":"@notice Gets all attesters who have stake in the current accepting epoch"},"functionSelector":"4234a479","implemented":true,"kind":"function","modifiers":[],"name":"getStakedAttestersForAcceptingEpoch","nameLocation":"2836:35:114","parameters":{"id":60733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60732,"mutability":"mutable","name":"domain","nameLocation":"2889:6:114","nodeType":"VariableDeclaration","scope":60838,"src":"2881:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60731,"name":"address","nodeType":"ElementaryTypeName","src":"2881:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2871:30:114"},"returnParameters":{"id":60737,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60736,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60838,"src":"2923:16:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60734,"name":"address","nodeType":"ElementaryTypeName","src":"2923:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60735,"nodeType":"ArrayTypeName","src":"2923:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2922:18:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60851,"nodeType":"FunctionDefinition","src":"4001:125:114","nodes":[],"body":{"id":60850,"nodeType":"Block","src":"4073:53:114","nodes":[],"statements":[{"expression":{"baseExpression":{"id":60846,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62403,"src":"4090:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":60848,"indexExpression":{"id":60847,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60841,"src":"4112:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4090:29:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60845,"id":60849,"nodeType":"Return","src":"4083:36:114"}]},"baseFunctions":[62788],"documentation":{"id":60839,"nodeType":"StructuredDocumentation","src":"3940:56:114","text":"@notice Gets the epoch duration for the given domain"},"functionSelector":"5c534359","implemented":true,"kind":"function","modifiers":[],"name":"getEpochDuration","nameLocation":"4010:16:114","parameters":{"id":60842,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60841,"mutability":"mutable","name":"domain","nameLocation":"4035:6:114","nodeType":"VariableDeclaration","scope":60851,"src":"4027:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60840,"name":"address","nodeType":"ElementaryTypeName","src":"4027:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"4026:16:114"},"returnParameters":{"id":60845,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60844,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60851,"src":"4064:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60843,"name":"uint256","nodeType":"ElementaryTypeName","src":"4064:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4063:9:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60895,"nodeType":"FunctionDefinition","src":"4287:406:114","nodes":[],"body":{"id":60894,"nodeType":"Block","src":"4357:336:114","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60867,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60860,"name":"newEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60856,"src":"4375:8:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<=","rightExpression":{"arguments":[{"arguments":[{"id":60864,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60854,"src":"4417:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60863,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"4409:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60862,"name":"address","nodeType":"ElementaryTypeName","src":"4409:7:114","typeDescriptions":{}}},"id":60865,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4409:15:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60861,"name":"getEpochByL1BlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61192,"src":"4387:21:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":60866,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4387:38:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4375:50:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4e45575f45504f43485f4d5553545f42455f4c4553535f5448414e5f50524553454e545f45504f4348","id":60868,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4427:43:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_bafb0cf99a53f47fa38d345ccc72a9af618a38afdc4637810d95112bae4fd5da","typeString":"literal_string \"NEW_EPOCH_MUST_BE_LESS_THAN_PRESENT_EPOCH\""},"value":"NEW_EPOCH_MUST_BE_LESS_THAN_PRESENT_EPOCH"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bafb0cf99a53f47fa38d345ccc72a9af618a38afdc4637810d95112bae4fd5da","typeString":"literal_string \"NEW_EPOCH_MUST_BE_LESS_THAN_PRESENT_EPOCH\""}],"id":60859,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4367:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4367:104:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60870,"nodeType":"ExpressionStatement","src":"4367:104:114"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60876,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60872,"name":"newEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60856,"src":"4489:8:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[{"id":60874,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60854,"src":"4518:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60873,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"4500:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":60875,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4500:25:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4489:36:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4e45575f45504f43485f4d5553545f42455f4849474845525f5448414e5f43555252454e545f45504f4348","id":60877,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4527:45:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_855bed83e45ffd12caf7970c2a2c68213b0e5206360b8dce424893928859487b","typeString":"literal_string \"NEW_EPOCH_MUST_BE_HIGHER_THAN_CURRENT_EPOCH\""},"value":"NEW_EPOCH_MUST_BE_HIGHER_THAN_CURRENT_EPOCH"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_855bed83e45ffd12caf7970c2a2c68213b0e5206360b8dce424893928859487b","typeString":"literal_string \"NEW_EPOCH_MUST_BE_HIGHER_THAN_CURRENT_EPOCH\""}],"id":60871,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4481:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60878,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4481:92:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60879,"nodeType":"ExpressionStatement","src":"4481:92:114"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":60884,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":60881,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4591:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60882,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4595:6:114","memberName":"sender","nodeType":"MemberAccess","src":"4591:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":60883,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60854,"src":"4605:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"4591:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a4544","id":60885,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4613:14:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_269df367cd41cace5897a935d0e0858fe4543b5619d45e09af6b124c1bb3d528","typeString":"literal_string \"UNAUTHORIZED\""},"value":"UNAUTHORIZED"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_269df367cd41cace5897a935d0e0858fe4543b5619d45e09af6b124c1bb3d528","typeString":"literal_string \"UNAUTHORIZED\""}],"id":60880,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4583:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60886,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4583:45:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60887,"nodeType":"ExpressionStatement","src":"4583:45:114"},{"expression":{"id":60892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":60888,"name":"currentAcceptingEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62408,"src":"4638:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":60890,"indexExpression":{"id":60889,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60854,"src":"4668:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4638:37:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60891,"name":"newEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60856,"src":"4678:8:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4638:48:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60893,"nodeType":"ExpressionStatement","src":"4638:48:114"}]},"baseFunctions":[62795],"documentation":{"id":60852,"nodeType":"StructuredDocumentation","src":"4132:150:114","text":"@notice Sets the accepting epoch for a given domain\n @param domain The domain address\n @param newEpoch The new accepting epoch value"},"functionSelector":"1dc8b949","implemented":true,"kind":"function","modifiers":[],"name":"setAcceptingEpoch","nameLocation":"4296:17:114","parameters":{"id":60857,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60854,"mutability":"mutable","name":"domain","nameLocation":"4322:6:114","nodeType":"VariableDeclaration","scope":60895,"src":"4314:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60853,"name":"address","nodeType":"ElementaryTypeName","src":"4314:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":60856,"mutability":"mutable","name":"newEpoch","nameLocation":"4338:8:114","nodeType":"VariableDeclaration","scope":60895,"src":"4330:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60855,"name":"uint256","nodeType":"ElementaryTypeName","src":"4330:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4313:34:114"},"returnParameters":{"id":60858,"nodeType":"ParameterList","parameters":[],"src":"4357:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":61018,"nodeType":"FunctionDefinition","src":"4699:1563:114","nodes":[],"body":{"id":61017,"nodeType":"Block","src":"4752:1510:114","nodes":[],"statements":[{"assignments":[60901],"declarations":[{"constant":false,"id":60901,"mutability":"mutable","name":"domain","nameLocation":"4770:6:114","nodeType":"VariableDeclaration","scope":61017,"src":"4762:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60900,"name":"address","nodeType":"ElementaryTypeName","src":"4762:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":60904,"initialValue":{"expression":{"id":60902,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4779:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4783:6:114","memberName":"sender","nodeType":"MemberAccess","src":"4779:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"4762:27:114"},{"condition":{"baseExpression":{"id":60905,"name":"domainGenesisAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"4804:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":60907,"indexExpression":{"id":60906,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60901,"src":"4826:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4804:29:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60911,"nodeType":"IfStatement","src":"4800:66:114","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60908,"name":"GenesisAlreadyAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62736,"src":"4842:22:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60909,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4842:24:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60910,"nodeType":"RevertStatement","src":"4835:31:114"}},{"expression":{"id":60916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":60912,"name":"domainGenesisAccepted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62453,"src":"4876:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_bool_$","typeString":"mapping(address => bool)"}},"id":60914,"indexExpression":{"id":60913,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60901,"src":"4898:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"4876:29:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":60915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"4908:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"4876:36:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60917,"nodeType":"ExpressionStatement","src":"4876:36:114"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":60919,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62403,"src":"4938:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":60921,"indexExpression":{"id":60920,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60901,"src":"4960:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"4938:29:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":60922,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4970:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"4938:33:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"}],"id":60918,"name":"assert","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-3,"src":"4931:6:114","typeDescriptions":{"typeIdentifier":"t_function_assert_pure$_t_bool_$returns$__$","typeString":"function (bool) pure"}},"id":60924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4931:41:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60925,"nodeType":"ExpressionStatement","src":"4931:41:114"},{"expression":{"id":60932,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":60926,"name":"currentAcceptingEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62408,"src":"5054:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":60928,"indexExpression":{"id":60927,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60901,"src":"5084:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"5054:37:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[{"id":60930,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60901,"src":"5116:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60929,"name":"getEpochByL1BlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61192,"src":"5094:21:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":60931,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5094:29:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5054:69:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60933,"nodeType":"ExpressionStatement","src":"5054:69:114"},{"body":{"id":61015,"nodeType":"Block","src":"5209:1047:114","statements":[{"assignments":[60949],"declarations":[{"constant":false,"id":60949,"mutability":"mutable","name":"attester","nameLocation":"5231:8:114","nodeType":"VariableDeclaration","scope":61015,"src":"5223:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60948,"name":"address","nodeType":"ElementaryTypeName","src":"5223:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":60956,"initialValue":{"arguments":[{"id":60954,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60935,"src":"5281:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":60950,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62413,"src":"5242:27:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":60952,"indexExpression":{"id":60951,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60901,"src":"5270:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5242:35:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":60953,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5278:2:114","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":50499,"src":"5242:38:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":60955,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5242:41:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5223:60:114"},{"body":{"id":61013,"nodeType":"Block","src":"5374:876:114","statements":[{"assignments":[60972],"declarations":[{"constant":false,"id":60972,"mutability":"mutable","name":"custodian","nameLocation":"5400:9:114","nodeType":"VariableDeclaration","scope":61013,"src":"5392:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60971,"name":"address","nodeType":"ElementaryTypeName","src":"5392:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":60979,"initialValue":{"arguments":[{"id":60977,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60958,"src":"5452:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":60973,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62418,"src":"5412:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":60975,"indexExpression":{"id":60974,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60901,"src":"5441:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5412:36:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":60976,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5449:2:114","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":50499,"src":"5412:39:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":60978,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5412:42:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"5392:62:114"},{"assignments":[60981],"declarations":[{"constant":false,"id":60981,"mutability":"mutable","name":"attesterStake","nameLocation":"5539:13:114","nodeType":"VariableDeclaration","scope":61013,"src":"5531:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60980,"name":"uint256","nodeType":"ElementaryTypeName","src":"5531:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60988,"initialValue":{"arguments":[{"id":60983,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60901,"src":"5585:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"hexValue":"30","id":60984,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5613:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},{"id":60985,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60972,"src":"5636:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":60986,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60949,"src":"5667:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60982,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61273,"src":"5555:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":60987,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5555:138:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5531:162:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60993,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":60990,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60901,"src":"5897:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60989,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"5879:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":60991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5879:25:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":60992,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5907:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5879:29:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61012,"nodeType":"IfStatement","src":"5875:365:114","trueBody":{"id":61011,"nodeType":"Block","src":"5910:330:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60998,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":60995,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60901,"src":"5950:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60994,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"5932:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":60996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5932:25:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":60997,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5960:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"5932:29:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61010,"nodeType":"IfStatement","src":"5928:298:114","trueBody":{"id":61009,"nodeType":"Block","src":"5963:263:114","statements":[{"expression":{"arguments":[{"id":61000,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60901,"src":"6020:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":61002,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60901,"src":"6070:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61001,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"6052:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6052:25:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61004,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60972,"src":"6103:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61005,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60949,"src":"6138:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61006,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60981,"src":"6172:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":60999,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61054,"src":"5985:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":61007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5985:222:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61008,"nodeType":"ExpressionStatement","src":"5985:222:114"}]}}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60961,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60958,"src":"5318:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":60962,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62418,"src":"5322:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":60964,"indexExpression":{"id":60963,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60901,"src":"5351:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5322:36:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":60965,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5359:6:114","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":50472,"src":"5322:43:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":60966,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5322:45:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5318:49:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61014,"initializationExpression":{"assignments":[60958],"declarations":[{"constant":false,"id":60958,"mutability":"mutable","name":"j","nameLocation":"5311:1:114","nodeType":"VariableDeclaration","scope":61014,"src":"5303:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60957,"name":"uint256","nodeType":"ElementaryTypeName","src":"5303:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60960,"initialValue":{"hexValue":"30","id":60959,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5315:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5303:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60969,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5369:3:114","subExpression":{"id":60968,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60958,"src":"5369:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60970,"nodeType":"ExpressionStatement","src":"5369:3:114"},"nodeType":"ForStatement","src":"5298:952:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60944,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60938,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60935,"src":"5154:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":60939,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62413,"src":"5158:27:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":60941,"indexExpression":{"id":60940,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60901,"src":"5186:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"5158:35:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":60942,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"5194:6:114","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":50472,"src":"5158:42:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":60943,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5158:44:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5154:48:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61016,"initializationExpression":{"assignments":[60935],"declarations":[{"constant":false,"id":60935,"mutability":"mutable","name":"i","nameLocation":"5147:1:114","nodeType":"VariableDeclaration","scope":61016,"src":"5139:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60934,"name":"uint256","nodeType":"ElementaryTypeName","src":"5139:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60937,"initialValue":{"hexValue":"30","id":60936,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5151:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"5139:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60946,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"5204:3:114","subExpression":{"id":60945,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60935,"src":"5204:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60947,"nodeType":"ExpressionStatement","src":"5204:3:114"},"nodeType":"ForStatement","src":"5134:1122:114"}]},"baseFunctions":[62529],"functionSelector":"92a2ebf3","implemented":true,"kind":"function","modifiers":[{"id":60898,"kind":"modifierInvocation","modifierName":{"id":60897,"name":"nonReentrant","nameLocations":["4739:12:114"],"nodeType":"IdentifierPath","referencedDeclaration":44717,"src":"4739:12:114"},"nodeType":"ModifierInvocation","src":"4739:12:114"}],"name":"acceptGenesisCeremony","nameLocation":"4708:21:114","parameters":{"id":60896,"nodeType":"ParameterList","parameters":[],"src":"4729:2:114"},"returnParameters":{"id":60899,"nodeType":"ParameterList","parameters":[],"src":"4752:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":61054,"nodeType":"FunctionDefinition","src":"6268:331:114","nodes":[],"body":{"id":61053,"nodeType":"Block","src":"6426:173:114","nodes":[],"statements":[{"expression":{"id":61041,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":61031,"name":"stakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62429,"src":"6436:36:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":61036,"indexExpression":{"id":61032,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61020,"src":"6473:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6436:44:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":61037,"indexExpression":{"id":61033,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61022,"src":"6481:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6436:51:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":61038,"indexExpression":{"id":61034,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61024,"src":"6488:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6436:62:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61039,"indexExpression":{"id":61035,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61026,"src":"6499:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6436:72:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":61040,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61028,"src":"6512:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6436:82:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61042,"nodeType":"ExpressionStatement","src":"6436:82:114"},{"expression":{"id":61051,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":61043,"name":"stakesByDomainEpochCustodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62449,"src":"6528:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":61047,"indexExpression":{"id":61044,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61020,"src":"6557:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6528:36:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61048,"indexExpression":{"id":61045,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61022,"src":"6565:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6528:43:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61049,"indexExpression":{"id":61046,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61024,"src":"6572:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6528:54:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":61050,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61028,"src":"6586:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6528:64:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61052,"nodeType":"ExpressionStatement","src":"6528:64:114"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_addStake","nameLocation":"6277:9:114","parameters":{"id":61029,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61020,"mutability":"mutable","name":"domain","nameLocation":"6304:6:114","nodeType":"VariableDeclaration","scope":61054,"src":"6296:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61019,"name":"address","nodeType":"ElementaryTypeName","src":"6296:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61022,"mutability":"mutable","name":"epoch","nameLocation":"6328:5:114","nodeType":"VariableDeclaration","scope":61054,"src":"6320:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61021,"name":"uint256","nodeType":"ElementaryTypeName","src":"6320:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61024,"mutability":"mutable","name":"custodian","nameLocation":"6351:9:114","nodeType":"VariableDeclaration","scope":61054,"src":"6343:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61023,"name":"address","nodeType":"ElementaryTypeName","src":"6343:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61026,"mutability":"mutable","name":"attester","nameLocation":"6378:8:114","nodeType":"VariableDeclaration","scope":61054,"src":"6370:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61025,"name":"address","nodeType":"ElementaryTypeName","src":"6370:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61028,"mutability":"mutable","name":"amount","nameLocation":"6404:6:114","nodeType":"VariableDeclaration","scope":61054,"src":"6396:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61027,"name":"uint256","nodeType":"ElementaryTypeName","src":"6396:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6286:130:114"},"returnParameters":{"id":61030,"nodeType":"ParameterList","parameters":[],"src":"6426:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61090,"nodeType":"FunctionDefinition","src":"6605:334:114","nodes":[],"body":{"id":61089,"nodeType":"Block","src":"6766:173:114","nodes":[],"statements":[{"expression":{"id":61077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":61067,"name":"stakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62429,"src":"6776:36:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":61072,"indexExpression":{"id":61068,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61056,"src":"6813:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6776:44:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":61073,"indexExpression":{"id":61069,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61058,"src":"6821:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6776:51:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":61074,"indexExpression":{"id":61070,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61060,"src":"6828:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6776:62:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61075,"indexExpression":{"id":61071,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61062,"src":"6839:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6776:72:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":61076,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61064,"src":"6852:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6776:82:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61078,"nodeType":"ExpressionStatement","src":"6776:82:114"},{"expression":{"id":61087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"id":61079,"name":"stakesByDomainEpochCustodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62449,"src":"6868:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":61083,"indexExpression":{"id":61080,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61056,"src":"6897:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6868:36:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61084,"indexExpression":{"id":61081,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61058,"src":"6905:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"6868:43:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61085,"indexExpression":{"id":61082,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61060,"src":"6912:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"6868:54:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":61086,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61064,"src":"6926:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6868:64:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61088,"nodeType":"ExpressionStatement","src":"6868:64:114"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeStake","nameLocation":"6614:12:114","parameters":{"id":61065,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61056,"mutability":"mutable","name":"domain","nameLocation":"6644:6:114","nodeType":"VariableDeclaration","scope":61090,"src":"6636:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61055,"name":"address","nodeType":"ElementaryTypeName","src":"6636:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61058,"mutability":"mutable","name":"epoch","nameLocation":"6668:5:114","nodeType":"VariableDeclaration","scope":61090,"src":"6660:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61057,"name":"uint256","nodeType":"ElementaryTypeName","src":"6660:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61060,"mutability":"mutable","name":"custodian","nameLocation":"6691:9:114","nodeType":"VariableDeclaration","scope":61090,"src":"6683:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61059,"name":"address","nodeType":"ElementaryTypeName","src":"6683:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61062,"mutability":"mutable","name":"attester","nameLocation":"6718:8:114","nodeType":"VariableDeclaration","scope":61090,"src":"6710:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61061,"name":"address","nodeType":"ElementaryTypeName","src":"6710:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61064,"mutability":"mutable","name":"amount","nameLocation":"6744:6:114","nodeType":"VariableDeclaration","scope":61090,"src":"6736:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61063,"name":"uint256","nodeType":"ElementaryTypeName","src":"6736:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6626:130:114"},"returnParameters":{"id":61066,"nodeType":"ParameterList","parameters":[],"src":"6766:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61116,"nodeType":"FunctionDefinition","src":"6945:261:114","nodes":[],"body":{"id":61115,"nodeType":"Block","src":"7105:101:114","nodes":[],"statements":[{"expression":{"id":61113,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":61103,"name":"unstakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62440,"src":"7115:38:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":61108,"indexExpression":{"id":61104,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61092,"src":"7154:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7115:46:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":61109,"indexExpression":{"id":61105,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61094,"src":"7162:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7115:53:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":61110,"indexExpression":{"id":61106,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61096,"src":"7169:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7115:64:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61111,"indexExpression":{"id":61107,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61098,"src":"7180:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7115:74:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":61112,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61100,"src":"7193:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7115:84:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61114,"nodeType":"ExpressionStatement","src":"7115:84:114"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_addUnstake","nameLocation":"6954:11:114","parameters":{"id":61101,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61092,"mutability":"mutable","name":"domain","nameLocation":"6983:6:114","nodeType":"VariableDeclaration","scope":61116,"src":"6975:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61091,"name":"address","nodeType":"ElementaryTypeName","src":"6975:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61094,"mutability":"mutable","name":"epoch","nameLocation":"7007:5:114","nodeType":"VariableDeclaration","scope":61116,"src":"6999:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61093,"name":"uint256","nodeType":"ElementaryTypeName","src":"6999:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61096,"mutability":"mutable","name":"custodian","nameLocation":"7030:9:114","nodeType":"VariableDeclaration","scope":61116,"src":"7022:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61095,"name":"address","nodeType":"ElementaryTypeName","src":"7022:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61098,"mutability":"mutable","name":"attester","nameLocation":"7057:8:114","nodeType":"VariableDeclaration","scope":61116,"src":"7049:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61097,"name":"address","nodeType":"ElementaryTypeName","src":"7049:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61100,"mutability":"mutable","name":"amount","nameLocation":"7083:6:114","nodeType":"VariableDeclaration","scope":61116,"src":"7075:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61099,"name":"uint256","nodeType":"ElementaryTypeName","src":"7075:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6965:130:114"},"returnParameters":{"id":61102,"nodeType":"ParameterList","parameters":[],"src":"7105:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61142,"nodeType":"FunctionDefinition","src":"7212:264:114","nodes":[],"body":{"id":61141,"nodeType":"Block","src":"7375:101:114","nodes":[],"statements":[{"expression":{"id":61139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":61129,"name":"unstakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62440,"src":"7385:38:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":61134,"indexExpression":{"id":61130,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61118,"src":"7424:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7385:46:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":61135,"indexExpression":{"id":61131,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61120,"src":"7432:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7385:53:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":61136,"indexExpression":{"id":61132,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61122,"src":"7439:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7385:64:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61137,"indexExpression":{"id":61133,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61124,"src":"7450:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7385:74:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"-=","rightHandSide":{"id":61138,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61126,"src":"7463:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7385:84:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61140,"nodeType":"ExpressionStatement","src":"7385:84:114"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_removeUnstake","nameLocation":"7221:14:114","parameters":{"id":61127,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61118,"mutability":"mutable","name":"domain","nameLocation":"7253:6:114","nodeType":"VariableDeclaration","scope":61142,"src":"7245:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61117,"name":"address","nodeType":"ElementaryTypeName","src":"7245:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61120,"mutability":"mutable","name":"epoch","nameLocation":"7277:5:114","nodeType":"VariableDeclaration","scope":61142,"src":"7269:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61119,"name":"uint256","nodeType":"ElementaryTypeName","src":"7269:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61122,"mutability":"mutable","name":"custodian","nameLocation":"7300:9:114","nodeType":"VariableDeclaration","scope":61142,"src":"7292:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61121,"name":"address","nodeType":"ElementaryTypeName","src":"7292:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61124,"mutability":"mutable","name":"attester","nameLocation":"7327:8:114","nodeType":"VariableDeclaration","scope":61142,"src":"7319:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61123,"name":"address","nodeType":"ElementaryTypeName","src":"7319:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61126,"mutability":"mutable","name":"amount","nameLocation":"7353:6:114","nodeType":"VariableDeclaration","scope":61142,"src":"7345:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61125,"name":"uint256","nodeType":"ElementaryTypeName","src":"7345:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7235:130:114"},"returnParameters":{"id":61128,"nodeType":"ParameterList","parameters":[],"src":"7375:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61168,"nodeType":"FunctionDefinition","src":"7482:260:114","nodes":[],"body":{"id":61167,"nodeType":"Block","src":"7642:100:114","nodes":[],"statements":[{"expression":{"id":61165,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":61155,"name":"unstakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62440,"src":"7652:38:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":61160,"indexExpression":{"id":61156,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61144,"src":"7691:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7652:46:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":61161,"indexExpression":{"id":61157,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61146,"src":"7699:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7652:53:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":61162,"indexExpression":{"id":61158,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61148,"src":"7706:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"7652:64:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61163,"indexExpression":{"id":61159,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"7717:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"7652:74:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61164,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61152,"src":"7729:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7652:83:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61166,"nodeType":"ExpressionStatement","src":"7652:83:114"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_setUnstake","nameLocation":"7491:11:114","parameters":{"id":61153,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61144,"mutability":"mutable","name":"domain","nameLocation":"7520:6:114","nodeType":"VariableDeclaration","scope":61168,"src":"7512:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61143,"name":"address","nodeType":"ElementaryTypeName","src":"7512:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61146,"mutability":"mutable","name":"epoch","nameLocation":"7544:5:114","nodeType":"VariableDeclaration","scope":61168,"src":"7536:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61145,"name":"uint256","nodeType":"ElementaryTypeName","src":"7536:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61148,"mutability":"mutable","name":"custodian","nameLocation":"7567:9:114","nodeType":"VariableDeclaration","scope":61168,"src":"7559:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61147,"name":"address","nodeType":"ElementaryTypeName","src":"7559:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61150,"mutability":"mutable","name":"attester","nameLocation":"7594:8:114","nodeType":"VariableDeclaration","scope":61168,"src":"7586:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61149,"name":"address","nodeType":"ElementaryTypeName","src":"7586:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61152,"mutability":"mutable","name":"amount","nameLocation":"7620:6:114","nodeType":"VariableDeclaration","scope":61168,"src":"7612:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61151,"name":"uint256","nodeType":"ElementaryTypeName","src":"7612:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7502:130:114"},"returnParameters":{"id":61154,"nodeType":"ParameterList","parameters":[],"src":"7642:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61192,"nodeType":"FunctionDefinition","src":"8002:226:114","nodes":[],"body":{"id":61191,"nodeType":"Block","src":"8079:149:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61179,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":61175,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62403,"src":"8093:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61177,"indexExpression":{"id":61176,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61170,"src":"8115:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8093:29:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":61178,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8126:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8093:34:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61183,"nodeType":"IfStatement","src":"8089:68:114","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":61180,"name":"EpochDurationNotSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60560,"src":"8136:19:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":61181,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8136:21:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":61182,"nodeType":"RevertStatement","src":"8129:28:114"}},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61189,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":61184,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"8174:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":61185,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8180:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"8174:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"baseExpression":{"id":61186,"name":"epochDurationByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62403,"src":"8192:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61188,"indexExpression":{"id":61187,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61170,"src":"8214:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8192:29:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8174:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61174,"id":61190,"nodeType":"Return","src":"8167:54:114"}]},"baseFunctions":[62536],"functionSelector":"d980b40d","implemented":true,"kind":"function","modifiers":[],"name":"getEpochByL1BlockTime","nameLocation":"8011:21:114","parameters":{"id":61171,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61170,"mutability":"mutable","name":"domain","nameLocation":"8041:6:114","nodeType":"VariableDeclaration","scope":61192,"src":"8033:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61169,"name":"address","nodeType":"ElementaryTypeName","src":"8033:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8032:16:114"},"returnParameters":{"id":61174,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61173,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61192,"src":"8070:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61172,"name":"uint256","nodeType":"ElementaryTypeName","src":"8070:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8069:9:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61204,"nodeType":"FunctionDefinition","src":"8307:134:114","nodes":[],"body":{"id":61203,"nodeType":"Block","src":"8380:61:114","nodes":[],"statements":[{"expression":{"baseExpression":{"id":61199,"name":"currentAcceptingEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62408,"src":"8397:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61201,"indexExpression":{"id":61200,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61194,"src":"8427:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"8397:37:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61198,"id":61202,"nodeType":"Return","src":"8390:44:114"}]},"baseFunctions":[62543],"functionSelector":"22fceb75","implemented":true,"kind":"function","modifiers":[],"name":"getAcceptingEpoch","nameLocation":"8316:17:114","parameters":{"id":61195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61194,"mutability":"mutable","name":"domain","nameLocation":"8342:6:114","nodeType":"VariableDeclaration","scope":61204,"src":"8334:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61193,"name":"address","nodeType":"ElementaryTypeName","src":"8334:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8333:16:114"},"returnParameters":{"id":61198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61197,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61204,"src":"8371:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61196,"name":"uint256","nodeType":"ElementaryTypeName","src":"8371:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8370:9:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61226,"nodeType":"FunctionDefinition","src":"8661:180:114","nodes":[],"body":{"id":61225,"nodeType":"Block","src":"8751:90:114","nodes":[],"statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61216,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":61213,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61207,"src":"8786:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61212,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"8768:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61214,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8768:25:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":61215,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8797:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"8768:30:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61222,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":61219,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61207,"src":"8823:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61218,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"8805:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8805:25:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":61221,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8833:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"8805:29:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"8768:66:114","trueExpression":{"hexValue":"30","id":61217,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"8801:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61211,"id":61224,"nodeType":"Return","src":"8761:73:114"}]},"baseFunctions":[62550],"documentation":{"id":61205,"nodeType":"StructuredDocumentation","src":"8447:209:114","text":"@notice Gets the next accepting epoch number\n @dev Special handling for genesis state (epoch 0):\n @dev If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes"},"functionSelector":"771fcfc4","implemented":true,"kind":"function","modifiers":[],"name":"getNextAcceptingEpochWithException","nameLocation":"8670:34:114","parameters":{"id":61208,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61207,"mutability":"mutable","name":"domain","nameLocation":"8713:6:114","nodeType":"VariableDeclaration","scope":61226,"src":"8705:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61206,"name":"address","nodeType":"ElementaryTypeName","src":"8705:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"8704:16:114"},"returnParameters":{"id":61211,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61210,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61226,"src":"8742:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61209,"name":"uint256","nodeType":"ElementaryTypeName","src":"8742:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8741:9:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61248,"nodeType":"FunctionDefinition","src":"9069:182:114","nodes":[],"body":{"id":61247,"nodeType":"Block","src":"9157:94:114","nodes":[],"statements":[{"expression":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":61235,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61229,"src":"9192:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61234,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"9174:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61236,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9174:25:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":61237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9203:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"9174:30:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":61241,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61229,"src":"9233:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61240,"name":"getEpochByL1BlockTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61192,"src":"9211:21:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61242,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9211:29:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":61243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9243:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"9211:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"Conditional","src":"9174:70:114","trueExpression":{"hexValue":"30","id":61239,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"9207:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61233,"id":61246,"nodeType":"Return","src":"9167:77:114"}]},"baseFunctions":[62557],"documentation":{"id":61227,"nodeType":"StructuredDocumentation","src":"8847:217:114","text":"@notice Gets the next present epoch number\n @dev Special handling for genesis state (accepting epoch 0):\n @dev If getAcceptingEpoch(domain) == 0, returns 0 to stay in genesis until ceremony completes"},"functionSelector":"57dd6a94","implemented":true,"kind":"function","modifiers":[],"name":"getNextPresentEpochWithException","nameLocation":"9078:32:114","parameters":{"id":61230,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61229,"mutability":"mutable","name":"domain","nameLocation":"9119:6:114","nodeType":"VariableDeclaration","scope":61248,"src":"9111:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61228,"name":"address","nodeType":"ElementaryTypeName","src":"9111:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9110:16:114"},"returnParameters":{"id":61233,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61232,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61248,"src":"9148:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61231,"name":"uint256","nodeType":"ElementaryTypeName","src":"9148:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9147:9:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61273,"nodeType":"FunctionDefinition","src":"9342:250:114","nodes":[],"body":{"id":61272,"nodeType":"Block","src":"9496:96:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":61262,"name":"stakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62429,"src":"9513:36:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":61264,"indexExpression":{"id":61263,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61251,"src":"9550:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9513:44:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":61266,"indexExpression":{"id":61265,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61253,"src":"9558:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9513:51:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":61268,"indexExpression":{"id":61267,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61255,"src":"9565:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9513:62:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61270,"indexExpression":{"id":61269,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61257,"src":"9576:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"9513:72:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61261,"id":61271,"nodeType":"Return","src":"9506:79:114"}]},"baseFunctions":[62570],"documentation":{"id":61249,"nodeType":"StructuredDocumentation","src":"9257:80:114","text":"@dev gets the stake for a given epoch for a given {attester,custodian} tuple"},"functionSelector":"93dfb85c","implemented":true,"kind":"function","modifiers":[],"name":"getStake","nameLocation":"9351:8:114","parameters":{"id":61258,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61251,"mutability":"mutable","name":"domain","nameLocation":"9377:6:114","nodeType":"VariableDeclaration","scope":61273,"src":"9369:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61250,"name":"address","nodeType":"ElementaryTypeName","src":"9369:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61253,"mutability":"mutable","name":"epoch","nameLocation":"9401:5:114","nodeType":"VariableDeclaration","scope":61273,"src":"9393:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61252,"name":"uint256","nodeType":"ElementaryTypeName","src":"9393:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61255,"mutability":"mutable","name":"custodian","nameLocation":"9424:9:114","nodeType":"VariableDeclaration","scope":61273,"src":"9416:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61254,"name":"address","nodeType":"ElementaryTypeName","src":"9416:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61257,"mutability":"mutable","name":"attester","nameLocation":"9451:8:114","nodeType":"VariableDeclaration","scope":61273,"src":"9443:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61256,"name":"address","nodeType":"ElementaryTypeName","src":"9443:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9359:106:114"},"returnParameters":{"id":61261,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61260,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61273,"src":"9487:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61259,"name":"uint256","nodeType":"ElementaryTypeName","src":"9487:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9486:9:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61295,"nodeType":"FunctionDefinition","src":"9689:326:114","nodes":[],"body":{"id":61294,"nodeType":"Block","src":"9837:178:114","nodes":[],"statements":[{"expression":{"arguments":[{"id":61286,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61276,"src":"9892:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":61288,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61276,"src":"9934:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61287,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"9916:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61289,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9916:25:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61290,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61278,"src":"9959:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61291,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61280,"src":"9986:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61285,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61273,"src":"9866:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":61292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9866:142:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61284,"id":61293,"nodeType":"Return","src":"9847:161:114"}]},"baseFunctions":[62581],"documentation":{"id":61274,"nodeType":"StructuredDocumentation","src":"9598:86:114","text":"@dev gets the stake for the accepting epoch for a given {attester,custodian} tuple"},"functionSelector":"a78d1fef","implemented":true,"kind":"function","modifiers":[],"name":"getStakeForAcceptingEpoch","nameLocation":"9698:25:114","parameters":{"id":61281,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61276,"mutability":"mutable","name":"domain","nameLocation":"9741:6:114","nodeType":"VariableDeclaration","scope":61295,"src":"9733:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61275,"name":"address","nodeType":"ElementaryTypeName","src":"9733:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61278,"mutability":"mutable","name":"custodian","nameLocation":"9765:9:114","nodeType":"VariableDeclaration","scope":61295,"src":"9757:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61277,"name":"address","nodeType":"ElementaryTypeName","src":"9757:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61280,"mutability":"mutable","name":"attester","nameLocation":"9792:8:114","nodeType":"VariableDeclaration","scope":61295,"src":"9784:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61279,"name":"address","nodeType":"ElementaryTypeName","src":"9784:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9723:83:114"},"returnParameters":{"id":61284,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61283,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61295,"src":"9828:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61282,"name":"uint256","nodeType":"ElementaryTypeName","src":"9828:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9827:9:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61320,"nodeType":"FunctionDefinition","src":"10109:254:114","nodes":[],"body":{"id":61319,"nodeType":"Block","src":"10265:98:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":61309,"name":"unstakesByDomainEpochCustodianAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62440,"src":"10282:38:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => mapping(address => uint256))))"}},"id":61311,"indexExpression":{"id":61310,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61298,"src":"10321:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10282:46:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(uint256 => mapping(address => mapping(address => uint256)))"}},"id":61313,"indexExpression":{"id":61312,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61300,"src":"10329:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10282:53:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(address => mapping(address => uint256))"}},"id":61315,"indexExpression":{"id":61314,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61302,"src":"10336:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10282:64:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61317,"indexExpression":{"id":61316,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61304,"src":"10347:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10282:74:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61308,"id":61318,"nodeType":"Return","src":"10275:81:114"}]},"baseFunctions":[62594],"documentation":{"id":61296,"nodeType":"StructuredDocumentation","src":"10021:83:114","text":"@dev gets the unstake for a given epoch for a given {attester,custodian} tuple"},"functionSelector":"7d93768b","implemented":true,"kind":"function","modifiers":[],"name":"getUnstake","nameLocation":"10118:10:114","parameters":{"id":61305,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61298,"mutability":"mutable","name":"domain","nameLocation":"10146:6:114","nodeType":"VariableDeclaration","scope":61320,"src":"10138:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61297,"name":"address","nodeType":"ElementaryTypeName","src":"10138:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61300,"mutability":"mutable","name":"epoch","nameLocation":"10170:5:114","nodeType":"VariableDeclaration","scope":61320,"src":"10162:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61299,"name":"uint256","nodeType":"ElementaryTypeName","src":"10162:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61302,"mutability":"mutable","name":"custodian","nameLocation":"10193:9:114","nodeType":"VariableDeclaration","scope":61320,"src":"10185:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61301,"name":"address","nodeType":"ElementaryTypeName","src":"10185:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61304,"mutability":"mutable","name":"attester","nameLocation":"10220:8:114","nodeType":"VariableDeclaration","scope":61320,"src":"10212:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61303,"name":"address","nodeType":"ElementaryTypeName","src":"10212:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10128:106:114"},"returnParameters":{"id":61308,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61307,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61320,"src":"10256:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61306,"name":"uint256","nodeType":"ElementaryTypeName","src":"10256:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10255:9:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61342,"nodeType":"FunctionDefinition","src":"10462:330:114","nodes":[],"body":{"id":61341,"nodeType":"Block","src":"10612:180:114","nodes":[],"statements":[{"expression":{"arguments":[{"id":61333,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61323,"src":"10669:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":61335,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61323,"src":"10711:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61334,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"10693:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61336,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10693:25:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61337,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61325,"src":"10736:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61338,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61327,"src":"10763:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61332,"name":"getUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61320,"src":"10641:10:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":61339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10641:144:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61331,"id":61340,"nodeType":"Return","src":"10622:163:114"}]},"baseFunctions":[62605],"documentation":{"id":61321,"nodeType":"StructuredDocumentation","src":"10369:88:114","text":"@dev gets the unstake for the accepting epoch for a given {attester,custodian} tuple"},"functionSelector":"34eada3a","implemented":true,"kind":"function","modifiers":[],"name":"getUnstakeForAcceptingEpoch","nameLocation":"10471:27:114","parameters":{"id":61328,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61323,"mutability":"mutable","name":"domain","nameLocation":"10516:6:114","nodeType":"VariableDeclaration","scope":61342,"src":"10508:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61322,"name":"address","nodeType":"ElementaryTypeName","src":"10508:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61325,"mutability":"mutable","name":"custodian","nameLocation":"10540:9:114","nodeType":"VariableDeclaration","scope":61342,"src":"10532:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61324,"name":"address","nodeType":"ElementaryTypeName","src":"10532:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61327,"mutability":"mutable","name":"attester","nameLocation":"10567:8:114","nodeType":"VariableDeclaration","scope":61342,"src":"10559:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61326,"name":"address","nodeType":"ElementaryTypeName","src":"10559:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10498:83:114"},"returnParameters":{"id":61331,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61330,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61342,"src":"10603:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61329,"name":"uint256","nodeType":"ElementaryTypeName","src":"10603:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10602:9:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61363,"nodeType":"FunctionDefinition","src":"10872:215:114","nodes":[],"body":{"id":61362,"nodeType":"Block","src":"11009:78:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"baseExpression":{"id":61354,"name":"stakesByDomainEpochCustodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62449,"src":"11026:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$_$","typeString":"mapping(address => mapping(uint256 => mapping(address => uint256)))"}},"id":61356,"indexExpression":{"id":61355,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61345,"src":"11055:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11026:36:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61358,"indexExpression":{"id":61357,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61347,"src":"11063:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11026:43:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61360,"indexExpression":{"id":61359,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61349,"src":"11070:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11026:54:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61353,"id":61361,"nodeType":"Return","src":"11019:61:114"}]},"baseFunctions":[62616],"documentation":{"id":61343,"nodeType":"StructuredDocumentation","src":"10798:69:114","text":"@dev gets the total stake for a given epoch for a given custodian"},"functionSelector":"0ce52af5","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStake","nameLocation":"10881:17:114","parameters":{"id":61350,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61345,"mutability":"mutable","name":"domain","nameLocation":"10916:6:114","nodeType":"VariableDeclaration","scope":61363,"src":"10908:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61344,"name":"address","nodeType":"ElementaryTypeName","src":"10908:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61347,"mutability":"mutable","name":"epoch","nameLocation":"10940:5:114","nodeType":"VariableDeclaration","scope":61363,"src":"10932:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61346,"name":"uint256","nodeType":"ElementaryTypeName","src":"10932:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61349,"mutability":"mutable","name":"custodian","nameLocation":"10963:9:114","nodeType":"VariableDeclaration","scope":61363,"src":"10955:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61348,"name":"address","nodeType":"ElementaryTypeName","src":"10955:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"10898:80:114"},"returnParameters":{"id":61353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61352,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61363,"src":"11000:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61351,"name":"uint256","nodeType":"ElementaryTypeName","src":"11000:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"10999:9:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61382,"nodeType":"FunctionDefinition","src":"11173:230:114","nodes":[],"body":{"id":61381,"nodeType":"Block","src":"11304:99:114","nodes":[],"statements":[{"expression":{"arguments":[{"id":61374,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61366,"src":"11351:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":61376,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61366,"src":"11377:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61375,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"11359:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61377,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11359:25:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61378,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61368,"src":"11386:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61373,"name":"getCustodianStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61363,"src":"11333:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view returns (uint256)"}},"id":61379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11333:63:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61372,"id":61380,"nodeType":"Return","src":"11314:82:114"}]},"baseFunctions":[62625],"documentation":{"id":61364,"nodeType":"StructuredDocumentation","src":"11093:75:114","text":"@dev gets the total stake for the accepting epoch for a given custodian"},"functionSelector":"9db92f68","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStakeForAcceptingEpoch","nameLocation":"11182:34:114","parameters":{"id":61369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61366,"mutability":"mutable","name":"domain","nameLocation":"11234:6:114","nodeType":"VariableDeclaration","scope":61382,"src":"11226:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61365,"name":"address","nodeType":"ElementaryTypeName","src":"11226:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61368,"mutability":"mutable","name":"custodian","nameLocation":"11258:9:114","nodeType":"VariableDeclaration","scope":61382,"src":"11250:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61367,"name":"address","nodeType":"ElementaryTypeName","src":"11250:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11216:57:114"},"returnParameters":{"id":61372,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61371,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61382,"src":"11295:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61370,"name":"uint256","nodeType":"ElementaryTypeName","src":"11295:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11294:9:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61430,"nodeType":"FunctionDefinition","src":"11409:381:114","nodes":[],"body":{"id":61429,"nodeType":"Block","src":"11514:276:114","nodes":[],"statements":[{"assignments":[61394],"declarations":[{"constant":false,"id":61394,"mutability":"mutable","name":"attesterStake","nameLocation":"11532:13:114","nodeType":"VariableDeclaration","scope":61429,"src":"11524:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61393,"name":"uint256","nodeType":"ElementaryTypeName","src":"11524:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61396,"initialValue":{"hexValue":"30","id":61395,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11548:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11524:25:114"},{"body":{"id":61425,"nodeType":"Block","src":"11635:119:114","statements":[{"expression":{"id":61423,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61411,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61394,"src":"11649:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":61413,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61384,"src":"11675:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61414,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61386,"src":"11683:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":61419,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61398,"src":"11730:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":61415,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62418,"src":"11690:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":61417,"indexExpression":{"id":61416,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61384,"src":"11719:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11690:36:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":61418,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11727:2:114","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":50499,"src":"11690:39:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":61420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11690:42:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61421,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61388,"src":"11734:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61412,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61273,"src":"11666:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":61422,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11666:77:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11649:94:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61424,"nodeType":"ExpressionStatement","src":"11649:94:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61401,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61398,"src":"11579:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":61402,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62418,"src":"11583:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":61404,"indexExpression":{"id":61403,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61384,"src":"11612:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"11583:36:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":61405,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"11620:6:114","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":50472,"src":"11583:43:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":61406,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11583:45:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"11579:49:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61426,"initializationExpression":{"assignments":[61398],"declarations":[{"constant":false,"id":61398,"mutability":"mutable","name":"i","nameLocation":"11572:1:114","nodeType":"VariableDeclaration","scope":61426,"src":"11564:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61397,"name":"uint256","nodeType":"ElementaryTypeName","src":"11564:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61400,"initialValue":{"hexValue":"30","id":61399,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"11576:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"11564:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"11630:3:114","subExpression":{"id":61408,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61398,"src":"11630:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61410,"nodeType":"ExpressionStatement","src":"11630:3:114"},"nodeType":"ForStatement","src":"11559:195:114"},{"expression":{"id":61427,"name":"attesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61394,"src":"11770:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61392,"id":61428,"nodeType":"Return","src":"11763:20:114"}]},"functionSelector":"24fdfddf","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStake","nameLocation":"11418:16:114","parameters":{"id":61389,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61384,"mutability":"mutable","name":"domain","nameLocation":"11443:6:114","nodeType":"VariableDeclaration","scope":61430,"src":"11435:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61383,"name":"address","nodeType":"ElementaryTypeName","src":"11435:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61386,"mutability":"mutable","name":"epoch","nameLocation":"11459:5:114","nodeType":"VariableDeclaration","scope":61430,"src":"11451:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61385,"name":"uint256","nodeType":"ElementaryTypeName","src":"11451:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61388,"mutability":"mutable","name":"attester","nameLocation":"11474:8:114","nodeType":"VariableDeclaration","scope":61430,"src":"11466:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61387,"name":"address","nodeType":"ElementaryTypeName","src":"11466:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11434:49:114"},"returnParameters":{"id":61392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61391,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61430,"src":"11505:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61390,"name":"uint256","nodeType":"ElementaryTypeName","src":"11505:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11504:9:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61448,"nodeType":"FunctionDefinition","src":"11796:192:114","nodes":[],"body":{"id":61447,"nodeType":"Block","src":"11903:85:114","nodes":[],"statements":[{"expression":{"arguments":[{"id":61440,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61432,"src":"11937:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":61442,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61432,"src":"11963:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61441,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"11945:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11945:25:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61444,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61434,"src":"11972:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61439,"name":"getAttesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61430,"src":"11920:16:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view returns (uint256)"}},"id":61445,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11920:61:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61438,"id":61446,"nodeType":"Return","src":"11913:68:114"}]},"baseFunctions":[62760],"functionSelector":"3debeadc","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStakeForAcceptingEpoch","nameLocation":"11805:33:114","parameters":{"id":61435,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61432,"mutability":"mutable","name":"domain","nameLocation":"11847:6:114","nodeType":"VariableDeclaration","scope":61448,"src":"11839:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61431,"name":"address","nodeType":"ElementaryTypeName","src":"11839:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61434,"mutability":"mutable","name":"attester","nameLocation":"11863:8:114","nodeType":"VariableDeclaration","scope":61448,"src":"11855:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61433,"name":"address","nodeType":"ElementaryTypeName","src":"11855:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"11838:34:114"},"returnParameters":{"id":61438,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61437,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61448,"src":"11894:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61436,"name":"uint256","nodeType":"ElementaryTypeName","src":"11894:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11893:9:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61538,"nodeType":"FunctionDefinition","src":"12036:1885:114","nodes":[],"body":{"id":61537,"nodeType":"Block","src":"12178:1743:114","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":61468,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"12281:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12285:6:114","memberName":"sender","nodeType":"MemberAccess","src":"12281:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"baseExpression":{"id":61464,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62413,"src":"12241:27:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":61466,"indexExpression":{"id":61465,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61451,"src":"12269:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12241:35:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":61467,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12277:3:114","memberName":"add","nodeType":"MemberAccess","referencedDeclaration":50403,"src":"12241:39:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_AddressSet_$50376_storage_ptr_$_t_address_$returns$_t_bool_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,address) returns (bool)"}},"id":61470,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12241:51:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61471,"nodeType":"ExpressionStatement","src":"12241:51:114"},{"assignments":[61473],"declarations":[{"constant":false,"id":61473,"mutability":"mutable","name":"balanceBefore","nameLocation":"12674:13:114","nodeType":"VariableDeclaration","scope":61537,"src":"12666:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61472,"name":"uint256","nodeType":"ElementaryTypeName","src":"12666:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61481,"initialValue":{"arguments":[{"arguments":[{"id":61478,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"12714:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}],"id":61477,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"12706:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61476,"name":"address","nodeType":"ElementaryTypeName","src":"12706:7:114","typeDescriptions":{}}},"id":61479,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12706:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61474,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62398,"src":"12690:5:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}},"id":61475,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"12696:9:114","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43761,"src":"12690:15:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":61480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12690:30:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"12666:54:114"},{"expression":{"arguments":[{"expression":{"id":61485,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13032:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61486,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13036:6:114","memberName":"sender","nodeType":"MemberAccess","src":"13032:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":61489,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"13052:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}],"id":61488,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13044:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61487,"name":"address","nodeType":"ElementaryTypeName","src":"13044:7:114","typeDescriptions":{}}},"id":61490,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13044:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61491,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61456,"src":"13059:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":61482,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61454,"src":"13009:9:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}},"id":61484,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13019:12:114","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43803,"src":"13009:22:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":61492,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13009:57:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61493,"nodeType":"ExpressionStatement","src":"13009:57:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61504,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":61498,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"13189:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}],"id":61497,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13181:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61496,"name":"address","nodeType":"ElementaryTypeName","src":"13181:7:114","typeDescriptions":{}}},"id":61499,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13181:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61494,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62398,"src":"13165:5:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}},"id":61495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13171:9:114","memberName":"balanceOf","nodeType":"MemberAccess","referencedDeclaration":43761,"src":"13165:15:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":61500,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13165:30:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61501,"name":"balanceBefore","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61473,"src":"13199:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":61502,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61456,"src":"13215:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13199:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13165:56:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61508,"nodeType":"IfStatement","src":"13161:114:114","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":61505,"name":"CustodianTransferAmountMismatch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62734,"src":"13242:31:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":61506,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13242:33:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":61507,"nodeType":"RevertStatement","src":"13235:40:114"}},{"expression":{"arguments":[{"id":61510,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61451,"src":"13375:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":61512,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61451,"src":"13570:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61511,"name":"getNextAcceptingEpochWithException","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61226,"src":"13535:34:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61513,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13535:42:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":61516,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61454,"src":"13599:9:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}],"id":61515,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13591:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61514,"name":"address","nodeType":"ElementaryTypeName","src":"13591:7:114","typeDescriptions":{}}},"id":61517,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13591:18:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":61518,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13623:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13627:6:114","memberName":"sender","nodeType":"MemberAccess","src":"13623:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61520,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61456,"src":"13647:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61509,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61054,"src":"13352:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":61521,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13352:311:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61522,"nodeType":"ExpressionStatement","src":"13352:311:114"},{"eventCall":{"arguments":[{"id":61524,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61451,"src":"13766:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":61526,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61451,"src":"13821:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61525,"name":"getNextAcceptingEpochWithException","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61226,"src":"13786:34:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61527,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13786:42:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"id":61530,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61454,"src":"13850:9:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}],"id":61529,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"13842:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61528,"name":"address","nodeType":"ElementaryTypeName","src":"13842:7:114","typeDescriptions":{}}},"id":61531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13842:18:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":61532,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"13874:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61533,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13878:6:114","memberName":"sender","nodeType":"MemberAccess","src":"13874:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61534,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61456,"src":"13898:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61523,"name":"AttesterStaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62700,"src":"13738:14:114","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":61535,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13738:176:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61536,"nodeType":"EmitStatement","src":"13733:181:114"}]},"baseFunctions":[62635],"documentation":{"id":61449,"nodeType":"StructuredDocumentation","src":"11994:37:114","text":"@notice Stakes for the next epoch"},"functionSelector":"bf6eac2f","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":61459,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62458,"src":"12149:14:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":61460,"kind":"modifierInvocation","modifierName":{"id":61458,"name":"onlyRole","nameLocations":["12140:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39143,"src":"12140:8:114"},"nodeType":"ModifierInvocation","src":"12140:24:114"},{"id":61462,"kind":"modifierInvocation","modifierName":{"id":61461,"name":"nonReentrant","nameLocations":["12165:12:114"],"nodeType":"IdentifierPath","referencedDeclaration":44717,"src":"12165:12:114"},"nodeType":"ModifierInvocation","src":"12165:12:114"}],"name":"stake","nameLocation":"12045:5:114","parameters":{"id":61457,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61451,"mutability":"mutable","name":"domain","nameLocation":"12068:6:114","nodeType":"VariableDeclaration","scope":61538,"src":"12060:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61450,"name":"address","nodeType":"ElementaryTypeName","src":"12060:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61454,"mutability":"mutable","name":"custodian","nameLocation":"12091:9:114","nodeType":"VariableDeclaration","scope":61538,"src":"12084:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"},"typeName":{"id":61453,"nodeType":"UserDefinedTypeName","pathNode":{"id":61452,"name":"IERC20","nameLocations":["12084:6:114"],"nodeType":"IdentifierPath","referencedDeclaration":43804,"src":"12084:6:114"},"referencedDeclaration":43804,"src":"12084:6:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}},"visibility":"internal"},{"constant":false,"id":61456,"mutability":"mutable","name":"amount","nameLocation":"12118:6:114","nodeType":"VariableDeclaration","scope":61538,"src":"12110:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61455,"name":"uint256","nodeType":"ElementaryTypeName","src":"12110:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"12050:80:114"},"returnParameters":{"id":61463,"nodeType":"ParameterList","parameters":[],"src":"12178:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":61575,"nodeType":"FunctionDefinition","src":"13972:972:114","nodes":[],"body":{"id":61574,"nodeType":"Block","src":"14117:827:114","nodes":[],"statements":[{"expression":{"arguments":[{"id":61553,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61540,"src":"14473:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":61555,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61540,"src":"14668:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61554,"name":"getNextAcceptingEpochWithException","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61226,"src":"14633:34:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14633:42:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61557,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61542,"src":"14689:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":61558,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14712:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61559,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14716:6:114","memberName":"sender","nodeType":"MemberAccess","src":"14712:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61560,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61544,"src":"14736:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61552,"name":"_addUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61116,"src":"14448:11:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":61561,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14448:304:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61562,"nodeType":"ExpressionStatement","src":"14448:304:114"},{"eventCall":{"arguments":[{"id":61564,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61540,"src":"14798:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":61566,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61540,"src":"14853:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61565,"name":"getNextAcceptingEpochWithException","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61226,"src":"14818:34:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61567,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14818:42:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61568,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61542,"src":"14874:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"expression":{"id":61569,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14897:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61570,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14901:6:114","memberName":"sender","nodeType":"MemberAccess","src":"14897:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61571,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61544,"src":"14921:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61563,"name":"AttesterUnstaked","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62712,"src":"14768:16:114","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":61572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14768:169:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61573,"nodeType":"EmitStatement","src":"14763:174:114"}]},"baseFunctions":[62644],"functionSelector":"60829f8a","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":61547,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62458,"src":"14088:14:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":61548,"kind":"modifierInvocation","modifierName":{"id":61546,"name":"onlyRole","nameLocations":["14079:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39143,"src":"14079:8:114"},"nodeType":"ModifierInvocation","src":"14079:24:114"},{"id":61550,"kind":"modifierInvocation","modifierName":{"id":61549,"name":"nonReentrant","nameLocations":["14104:12:114"],"nodeType":"IdentifierPath","referencedDeclaration":44717,"src":"14104:12:114"},"nodeType":"ModifierInvocation","src":"14104:12:114"}],"name":"unstake","nameLocation":"13981:7:114","parameters":{"id":61545,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61540,"mutability":"mutable","name":"domain","nameLocation":"14006:6:114","nodeType":"VariableDeclaration","scope":61575,"src":"13998:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61539,"name":"address","nodeType":"ElementaryTypeName","src":"13998:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61542,"mutability":"mutable","name":"custodian","nameLocation":"14030:9:114","nodeType":"VariableDeclaration","scope":61575,"src":"14022:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61541,"name":"address","nodeType":"ElementaryTypeName","src":"14022:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61544,"mutability":"mutable","name":"amount","nameLocation":"14057:6:114","nodeType":"VariableDeclaration","scope":61575,"src":"14049:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61543,"name":"uint256","nodeType":"ElementaryTypeName","src":"14049:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"13988:81:114"},"returnParameters":{"id":61551,"nodeType":"ParameterList","parameters":[],"src":"14117:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":61655,"nodeType":"FunctionDefinition","src":"15011:1474:114","nodes":[],"body":{"id":61654,"nodeType":"Block","src":"15159:1326:114","nodes":[],"statements":[{"assignments":[61587],"declarations":[{"constant":false,"id":61587,"mutability":"mutable","name":"stakeAmount","nameLocation":"15273:11:114","nodeType":"VariableDeclaration","scope":61654,"src":"15265:19:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61586,"name":"uint256","nodeType":"ElementaryTypeName","src":"15265:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61594,"initialValue":{"arguments":[{"id":61589,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61577,"src":"15309:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61590,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61579,"src":"15329:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61591,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61581,"src":"15354:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61592,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61583,"src":"15377:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61588,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61273,"src":"15287:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":61593,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15287:108:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15265:130:114"},{"assignments":[61596],"declarations":[{"constant":false,"id":61596,"mutability":"mutable","name":"unstakeAmount","nameLocation":"15413:13:114","nodeType":"VariableDeclaration","scope":61654,"src":"15405:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61595,"name":"uint256","nodeType":"ElementaryTypeName","src":"15405:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61605,"initialValue":{"arguments":[{"id":61598,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61577,"src":"15453:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61601,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61599,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61579,"src":"15473:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":61600,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15487:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15473:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61602,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61581,"src":"15502:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61603,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61583,"src":"15525:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61597,"name":"getUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61320,"src":"15429:10:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":61604,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15429:114:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15405:138:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61606,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61596,"src":"15557:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":61607,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61587,"src":"15573:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15557:27:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61614,"nodeType":"IfStatement","src":"15553:85:114","trueBody":{"id":61613,"nodeType":"Block","src":"15586:52:114","statements":[{"expression":{"id":61611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61609,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61596,"src":"15600:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61610,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61587,"src":"15616:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15600:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61612,"nodeType":"ExpressionStatement","src":"15600:27:114"}]}},{"assignments":[61616],"declarations":[{"constant":false,"id":61616,"mutability":"mutable","name":"remainder","nameLocation":"15655:9:114","nodeType":"VariableDeclaration","scope":61654,"src":"15647:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61615,"name":"uint256","nodeType":"ElementaryTypeName","src":"15647:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61620,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61619,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61617,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61587,"src":"15667:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"id":61618,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61596,"src":"15681:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15667:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"15647:47:114"},{"expression":{"arguments":[{"id":61622,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61577,"src":"15715:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61625,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61623,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61579,"src":"15723:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":61624,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"15737:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"15723:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61626,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61581,"src":"15740:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61627,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61583,"src":"15751:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61628,"name":"remainder","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61616,"src":"15761:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61621,"name":"_addStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61054,"src":"15705:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":61629,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"15705:66:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61630,"nodeType":"ExpressionStatement","src":"15705:66:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61633,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61631,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61596,"src":"16181:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":61632,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16197:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16181:17:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61645,"nodeType":"IfStatement","src":"16177:131:114","trueBody":{"id":61644,"nodeType":"Block","src":"16200:108:114","statements":[{"expression":{"arguments":[{"arguments":[{"id":61637,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"16255:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}],"id":61636,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"16247:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61635,"name":"address","nodeType":"ElementaryTypeName","src":"16247:7:114","typeDescriptions":{}}},"id":61638,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16247:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61639,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61583,"src":"16262:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61640,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61581,"src":"16272:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61641,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61596,"src":"16283:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61634,"name":"_payAttesterFromContractDirectly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62062,"src":"16214:32:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":61642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16214:83:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61643,"nodeType":"ExpressionStatement","src":"16214:83:114"}]}},{"eventCall":{"arguments":[{"id":61647,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61583,"src":"16360:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61648,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61579,"src":"16382:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61649,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61581,"src":"16407:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61650,"name":"stakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61587,"src":"16430:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61651,"name":"unstakeAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61596,"src":"16455:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61646,"name":"AttesterEpochRolledOver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62724,"src":"16323:23:114","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_uint256_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,uint256,uint256)"}},"id":61652,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16323:155:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61653,"nodeType":"EmitStatement","src":"16318:160:114"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_rollOverAttester","nameLocation":"15020:17:114","parameters":{"id":61584,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61577,"mutability":"mutable","name":"domain","nameLocation":"15055:6:114","nodeType":"VariableDeclaration","scope":61655,"src":"15047:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61576,"name":"address","nodeType":"ElementaryTypeName","src":"15047:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61579,"mutability":"mutable","name":"epochNumber","nameLocation":"15079:11:114","nodeType":"VariableDeclaration","scope":61655,"src":"15071:19:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61578,"name":"uint256","nodeType":"ElementaryTypeName","src":"15071:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61581,"mutability":"mutable","name":"custodian","nameLocation":"15108:9:114","nodeType":"VariableDeclaration","scope":61655,"src":"15100:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61580,"name":"address","nodeType":"ElementaryTypeName","src":"15100:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61583,"mutability":"mutable","name":"attester","nameLocation":"15135:8:114","nodeType":"VariableDeclaration","scope":61655,"src":"15127:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61582,"name":"address","nodeType":"ElementaryTypeName","src":"15127:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15037:112:114"},"returnParameters":{"id":61585,"nodeType":"ParameterList","parameters":[],"src":"15159:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61733,"nodeType":"FunctionDefinition","src":"16491:810:114","nodes":[],"body":{"id":61732,"nodeType":"Block","src":"16561:740:114","nodes":[],"statements":[{"body":{"id":61717,"nodeType":"Block","src":"16790:348:114","statements":[{"assignments":[61677],"declarations":[{"constant":false,"id":61677,"mutability":"mutable","name":"attester","nameLocation":"16812:8:114","nodeType":"VariableDeclaration","scope":61717,"src":"16804:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61676,"name":"address","nodeType":"ElementaryTypeName","src":"16804:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":61684,"initialValue":{"arguments":[{"id":61682,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61663,"src":"16862:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":61678,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62413,"src":"16823:27:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":61680,"indexExpression":{"id":61679,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61657,"src":"16851:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16823:35:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":61681,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16859:2:114","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":50499,"src":"16823:38:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":61683,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16823:41:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16804:60:114"},{"body":{"id":61715,"nodeType":"Block","src":"16955:173:114","statements":[{"assignments":[61700],"declarations":[{"constant":false,"id":61700,"mutability":"mutable","name":"custodian","nameLocation":"16981:9:114","nodeType":"VariableDeclaration","scope":61715,"src":"16973:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61699,"name":"address","nodeType":"ElementaryTypeName","src":"16973:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":61707,"initialValue":{"arguments":[{"id":61705,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61686,"src":"17033:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"baseExpression":{"id":61701,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62418,"src":"16993:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":61703,"indexExpression":{"id":61702,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61657,"src":"17022:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16993:36:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":61704,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"17030:2:114","memberName":"at","nodeType":"MemberAccess","referencedDeclaration":50499,"src":"16993:39:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$_t_uint256_$returns$_t_address_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer,uint256) view returns (address)"}},"id":61706,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16993:42:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"16973:62:114"},{"expression":{"arguments":[{"id":61709,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61657,"src":"17072:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61710,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61659,"src":"17080:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61711,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61700,"src":"17093:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61712,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61677,"src":"17104:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61708,"name":"_rollOverAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61655,"src":"17054:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,uint256,address,address)"}},"id":61713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17054:59:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61714,"nodeType":"ExpressionStatement","src":"17054:59:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61689,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61686,"src":"16899:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":61690,"name":"registeredCustodiansByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62418,"src":"16903:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":61692,"indexExpression":{"id":61691,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61657,"src":"16932:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16903:36:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":61693,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16940:6:114","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":50472,"src":"16903:43:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":61694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16903:45:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16899:49:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61716,"initializationExpression":{"assignments":[61686],"declarations":[{"constant":false,"id":61686,"mutability":"mutable","name":"j","nameLocation":"16892:1:114","nodeType":"VariableDeclaration","scope":61716,"src":"16884:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61685,"name":"uint256","nodeType":"ElementaryTypeName","src":"16884:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61688,"initialValue":{"hexValue":"30","id":61687,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16896:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16884:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16950:3:114","subExpression":{"id":61696,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61686,"src":"16950:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61698,"nodeType":"ExpressionStatement","src":"16950:3:114"},"nodeType":"ForStatement","src":"16879:249:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61666,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61663,"src":"16735:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"baseExpression":{"id":61667,"name":"registeredAttestersByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62413,"src":"16739:27:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_AddressSet_$50376_storage_$","typeString":"mapping(address => struct EnumerableSet.AddressSet storage ref)"}},"id":61669,"indexExpression":{"id":61668,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61657,"src":"16767:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16739:35:114","typeDescriptions":{"typeIdentifier":"t_struct$_AddressSet_$50376_storage","typeString":"struct EnumerableSet.AddressSet storage ref"}},"id":61670,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16775:6:114","memberName":"length","nodeType":"MemberAccess","referencedDeclaration":50472,"src":"16739:42:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_AddressSet_$50376_storage_ptr_$returns$_t_uint256_$attached_to$_t_struct$_AddressSet_$50376_storage_ptr_$","typeString":"function (struct EnumerableSet.AddressSet storage pointer) view returns (uint256)"}},"id":61671,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"16739:44:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16735:48:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61718,"initializationExpression":{"assignments":[61663],"declarations":[{"constant":false,"id":61663,"mutability":"mutable","name":"i","nameLocation":"16728:1:114","nodeType":"VariableDeclaration","scope":61718,"src":"16720:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61662,"name":"uint256","nodeType":"ElementaryTypeName","src":"16720:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61665,"initialValue":{"hexValue":"30","id":61664,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16732:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"16720:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61674,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"16785:3:114","subExpression":{"id":61673,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61663,"src":"16785:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61675,"nodeType":"ExpressionStatement","src":"16785:3:114"},"nodeType":"ForStatement","src":"16715:423:114"},{"expression":{"id":61725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":61719,"name":"currentAcceptingEpochByDomain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62408,"src":"17187:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61721,"indexExpression":{"id":61720,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61657,"src":"17217:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"17187:37:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61724,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61722,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61659,"src":"17227:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":61723,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"17241:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"17227:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"17187:55:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61726,"nodeType":"ExpressionStatement","src":"17187:55:114"},{"eventCall":{"arguments":[{"id":61728,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61657,"src":"17274:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61729,"name":"epochNumber","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61659,"src":"17282:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61727,"name":"EpochRolledOver","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62730,"src":"17258:15:114","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":61730,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17258:36:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61731,"nodeType":"EmitStatement","src":"17253:41:114"}]},"implemented":true,"kind":"function","modifiers":[],"name":"_rollOverEpoch","nameLocation":"16500:14:114","parameters":{"id":61660,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61657,"mutability":"mutable","name":"domain","nameLocation":"16523:6:114","nodeType":"VariableDeclaration","scope":61733,"src":"16515:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61656,"name":"address","nodeType":"ElementaryTypeName","src":"16515:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61659,"mutability":"mutable","name":"epochNumber","nameLocation":"16539:11:114","nodeType":"VariableDeclaration","scope":61733,"src":"16531:19:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61658,"name":"uint256","nodeType":"ElementaryTypeName","src":"16531:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16514:37:114"},"returnParameters":{"id":61661,"nodeType":"ParameterList","parameters":[],"src":"16561:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61746,"nodeType":"FunctionDefinition","src":"17307:108:114","nodes":[],"body":{"id":61745,"nodeType":"Block","src":"17341:74:114","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":61737,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17366:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61738,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17370:6:114","memberName":"sender","nodeType":"MemberAccess","src":"17366:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":61740,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17396:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61741,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17400:6:114","memberName":"sender","nodeType":"MemberAccess","src":"17396:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61739,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"17378:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61742,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17378:29:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61736,"name":"_rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61733,"src":"17351:14:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256)"}},"id":61743,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17351:57:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61744,"nodeType":"ExpressionStatement","src":"17351:57:114"}]},"baseFunctions":[62663],"functionSelector":"a887b71c","implemented":true,"kind":"function","modifiers":[],"name":"rollOverEpoch","nameLocation":"17316:13:114","parameters":{"id":61734,"nodeType":"ParameterList","parameters":[],"src":"17329:2:114"},"returnParameters":{"id":61735,"nodeType":"ParameterList","parameters":[],"src":"17341:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":61796,"nodeType":"FunctionDefinition","src":"17722:796:114","nodes":[],"body":{"id":61795,"nodeType":"Block","src":"17882:636:114","nodes":[],"statements":[{"assignments":[61761],"declarations":[{"constant":false,"id":61761,"mutability":"mutable","name":"targetEpoch","nameLocation":"17953:11:114","nodeType":"VariableDeclaration","scope":61795,"src":"17945:19:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61760,"name":"uint256","nodeType":"ElementaryTypeName","src":"17945:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61763,"initialValue":{"id":61762,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61751,"src":"17967:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17945:27:114"},{"assignments":[61765],"declarations":[{"constant":false,"id":61765,"mutability":"mutable","name":"stakeForEpoch","nameLocation":"17990:13:114","nodeType":"VariableDeclaration","scope":61795,"src":"17982:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61764,"name":"uint256","nodeType":"ElementaryTypeName","src":"17982:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61772,"initialValue":{"arguments":[{"id":61767,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61749,"src":"18028:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61768,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61761,"src":"18048:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61769,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61753,"src":"18073:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61770,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61755,"src":"18096:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61766,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61273,"src":"18006:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":61771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18006:108:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"17982:132:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61775,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61773,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61765,"src":"18207:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":61774,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61757,"src":"18223:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"18207:22:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":61793,"nodeType":"Block","src":"18425:87:114","statements":[{"expression":{"arguments":[{"id":61786,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61749,"src":"18452:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61787,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61761,"src":"18460:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61788,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61753,"src":"18473:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61789,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61755,"src":"18484:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61790,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61757,"src":"18494:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61785,"name":"_removeStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61090,"src":"18439:12:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":61791,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18439:62:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61792,"nodeType":"ExpressionStatement","src":"18439:62:114"}]},"id":61794,"nodeType":"IfStatement","src":"18203:309:114","trueBody":{"id":61784,"nodeType":"Block","src":"18231:188:114","statements":[{"expression":{"arguments":[{"id":61777,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61749,"src":"18275:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61778,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61761,"src":"18299:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61779,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61753,"src":"18328:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61780,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61755,"src":"18355:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61781,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61765,"src":"18381:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61776,"name":"_removeStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61090,"src":"18245:12:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":61782,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18245:163:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61783,"nodeType":"ExpressionStatement","src":"18245:163:114"}]}}]},"documentation":{"id":61747,"nodeType":"StructuredDocumentation","src":"17421:296:114","text":" @dev Slash an attester's stake\n @param domain The domain of the attester\n @param epoch The epoch in which the slash is attempted\n @param custodian The custodian of the token\n @param attester The attester to slash\n @param amount The amount to slash"},"implemented":true,"kind":"function","modifiers":[],"name":"_slashStake","nameLocation":"17731:11:114","parameters":{"id":61758,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61749,"mutability":"mutable","name":"domain","nameLocation":"17760:6:114","nodeType":"VariableDeclaration","scope":61796,"src":"17752:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61748,"name":"address","nodeType":"ElementaryTypeName","src":"17752:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61751,"mutability":"mutable","name":"epoch","nameLocation":"17784:5:114","nodeType":"VariableDeclaration","scope":61796,"src":"17776:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61750,"name":"uint256","nodeType":"ElementaryTypeName","src":"17776:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61753,"mutability":"mutable","name":"custodian","nameLocation":"17807:9:114","nodeType":"VariableDeclaration","scope":61796,"src":"17799:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61752,"name":"address","nodeType":"ElementaryTypeName","src":"17799:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61755,"mutability":"mutable","name":"attester","nameLocation":"17834:8:114","nodeType":"VariableDeclaration","scope":61796,"src":"17826:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61754,"name":"address","nodeType":"ElementaryTypeName","src":"17826:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61757,"mutability":"mutable","name":"amount","nameLocation":"17860:6:114","nodeType":"VariableDeclaration","scope":61796,"src":"17852:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61756,"name":"uint256","nodeType":"ElementaryTypeName","src":"17852:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"17742:130:114"},"returnParameters":{"id":61759,"nodeType":"ParameterList","parameters":[],"src":"17882:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61846,"nodeType":"FunctionDefinition","src":"18850:888:114","nodes":[],"body":{"id":61845,"nodeType":"Block","src":"18988:750:114","nodes":[],"statements":[{"assignments":[61809],"declarations":[{"constant":false,"id":61809,"mutability":"mutable","name":"stakeForEpoch","nameLocation":"19065:13:114","nodeType":"VariableDeclaration","scope":61845,"src":"19057:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61808,"name":"uint256","nodeType":"ElementaryTypeName","src":"19057:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61816,"initialValue":{"arguments":[{"id":61811,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61799,"src":"19103:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61812,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61801,"src":"19123:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61813,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61803,"src":"19142:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61814,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61805,"src":"19165:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61810,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61273,"src":"19081:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":61815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19081:102:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19057:126:114"},{"assignments":[61818],"declarations":[{"constant":false,"id":61818,"mutability":"mutable","name":"targetEpoch","nameLocation":"19201:11:114","nodeType":"VariableDeclaration","scope":61845,"src":"19193:19:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61817,"name":"uint256","nodeType":"ElementaryTypeName","src":"19193:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61822,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61821,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61819,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61801,"src":"19215:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":61820,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19223:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"19215:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19193:31:114"},{"assignments":[61824],"declarations":[{"constant":false,"id":61824,"mutability":"mutable","name":"unstakeForEpoch","nameLocation":"19242:15:114","nodeType":"VariableDeclaration","scope":61845,"src":"19234:23:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61823,"name":"uint256","nodeType":"ElementaryTypeName","src":"19234:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61831,"initialValue":{"arguments":[{"id":61826,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61799,"src":"19284:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61827,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61818,"src":"19304:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61828,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61803,"src":"19329:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61829,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61805,"src":"19352:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61825,"name":"getUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61320,"src":"19260:10:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":61830,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19260:110:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19234:136:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61832,"name":"unstakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61824,"src":"19385:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"id":61833,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61809,"src":"19403:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19385:31:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61844,"nodeType":"IfStatement","src":"19381:351:114","trueBody":{"id":61843,"nodeType":"Block","src":"19418:314:114","statements":[{"expression":{"arguments":[{"id":61836,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61799,"src":"19588:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61837,"name":"targetEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61818,"src":"19612:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61838,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61803,"src":"19641:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61839,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61805,"src":"19668:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61840,"name":"stakeForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61809,"src":"19694:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61835,"name":"_setUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61168,"src":"19559:11:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":61841,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19559:162:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61842,"nodeType":"ExpressionStatement","src":"19559:162:114"}]}}]},"documentation":{"id":61797,"nodeType":"StructuredDocumentation","src":"18524:321:114","text":" @dev Slash an attester's unstake\n @param domain The domain of the attester\n @param epoch The epoch in which the slash is attempted, i.e., epoch - 1 of the epoch where the unstake will be removed\n @param custodian The custodian of the token\n @param attester The attester to slash"},"implemented":true,"kind":"function","modifiers":[],"name":"_slashUnstake","nameLocation":"18859:13:114","parameters":{"id":61806,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61799,"mutability":"mutable","name":"domain","nameLocation":"18890:6:114","nodeType":"VariableDeclaration","scope":61846,"src":"18882:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61798,"name":"address","nodeType":"ElementaryTypeName","src":"18882:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61801,"mutability":"mutable","name":"epoch","nameLocation":"18914:5:114","nodeType":"VariableDeclaration","scope":61846,"src":"18906:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61800,"name":"uint256","nodeType":"ElementaryTypeName","src":"18906:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61803,"mutability":"mutable","name":"custodian","nameLocation":"18937:9:114","nodeType":"VariableDeclaration","scope":61846,"src":"18929:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61802,"name":"address","nodeType":"ElementaryTypeName","src":"18929:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61805,"mutability":"mutable","name":"attester","nameLocation":"18964:8:114","nodeType":"VariableDeclaration","scope":61846,"src":"18956:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61804,"name":"address","nodeType":"ElementaryTypeName","src":"18956:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"18872:106:114"},"returnParameters":{"id":61807,"nodeType":"ParameterList","parameters":[],"src":"18988:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61954,"nodeType":"FunctionDefinition","src":"19744:1588:114","nodes":[],"body":{"id":61953,"nodeType":"Block","src":"19940:1392:114","nodes":[],"statements":[{"body":{"id":61951,"nodeType":"Block","src":"19997:1329:114","statements":[{"assignments":[61875],"declarations":[{"constant":false,"id":61875,"mutability":"mutable","name":"refundAmount","nameLocation":"20246:12:114","nodeType":"VariableDeclaration","scope":61951,"src":"20238:20:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61874,"name":"uint256","nodeType":"ElementaryTypeName","src":"20238:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61903,"initialValue":{"arguments":[{"arguments":[{"expression":{"id":61879,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20317:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61880,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20321:6:114","memberName":"sender","nodeType":"MemberAccess","src":"20317:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"baseExpression":{"id":61882,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61852,"src":"20367:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":61884,"indexExpression":{"id":61883,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61864,"src":"20377:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20367:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61881,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"20349:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61885,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20349:31:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":61886,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61849,"src":"20402:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":61888,"indexExpression":{"id":61887,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61864,"src":"20413:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20402:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":61889,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61852,"src":"20437:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":61891,"indexExpression":{"id":61890,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61864,"src":"20447:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20437:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61878,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61273,"src":"20287:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":61892,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20287:180:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"arguments":[{"baseExpression":{"id":61895,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61855,"src":"20494:7:114","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":61897,"indexExpression":{"id":61896,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61864,"src":"20502:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20494:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":61898,"name":"refundAmounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61858,"src":"20506:13:114","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":61900,"indexExpression":{"id":61899,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61864,"src":"20520:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20506:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":61893,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48141,"src":"20485:4:114","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$48141_$","typeString":"type(library Math)"}},"id":61894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20490:3:114","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":46770,"src":"20485:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":61901,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20485:38:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":61876,"name":"Math","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":48141,"src":"20261:4:114","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_Math_$48141_$","typeString":"type(library Math)"}},"id":61877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20266:3:114","memberName":"min","nodeType":"MemberAccess","referencedDeclaration":46770,"src":"20261:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_pure$_t_uint256_$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256,uint256) pure returns (uint256)"}},"id":61902,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20261:276:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"20238:299:114"},{"expression":{"arguments":[{"arguments":[{"id":61907,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"20601:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}],"id":61906,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"20593:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61905,"name":"address","nodeType":"ElementaryTypeName","src":"20593:7:114","typeDescriptions":{}}},"id":61908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20593:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":61909,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61852,"src":"20702:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":61911,"indexExpression":{"id":61910,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61864,"src":"20712:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20702:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":61912,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61849,"src":"20732:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":61914,"indexExpression":{"id":61913,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61864,"src":"20743:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20732:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61915,"name":"refundAmount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61875,"src":"20763:12:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61904,"name":"_payAttesterWithSelector","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62022,"src":"20551:24:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":61916,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20551:238:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61917,"nodeType":"ExpressionStatement","src":"20551:238:114"},{"expression":{"arguments":[{"expression":{"id":61919,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"20977:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61920,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20981:6:114","memberName":"sender","nodeType":"MemberAccess","src":"20977:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":61922,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"21023:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61923,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21027:6:114","memberName":"sender","nodeType":"MemberAccess","src":"21023:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61921,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"21005:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61924,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21005:29:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":61925,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61849,"src":"21052:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":61927,"indexExpression":{"id":61926,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61864,"src":"21063:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21052:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":61928,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61852,"src":"21083:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":61930,"indexExpression":{"id":61929,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61864,"src":"21093:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21083:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":61931,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61855,"src":"21113:7:114","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":61933,"indexExpression":{"id":61932,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61864,"src":"21121:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21113:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61918,"name":"_slashStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61796,"src":"20948:11:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256,address,address,uint256)"}},"id":61934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20948:189:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61935,"nodeType":"ExpressionStatement","src":"20948:189:114"},{"expression":{"arguments":[{"expression":{"id":61937,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"21183:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61938,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21187:6:114","memberName":"sender","nodeType":"MemberAccess","src":"21183:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"expression":{"id":61940,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"21229:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61941,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"21233:6:114","memberName":"sender","nodeType":"MemberAccess","src":"21229:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61939,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"21211:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61942,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21211:29:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":61943,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61849,"src":"21258:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":61945,"indexExpression":{"id":61944,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61864,"src":"21269:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21258:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":61946,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61852,"src":"21289:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":61948,"indexExpression":{"id":61947,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61864,"src":"21299:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21289:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61936,"name":"_slashUnstake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61846,"src":"21152:13:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$__$","typeString":"function (address,uint256,address,address)"}},"id":61949,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21152:163:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61950,"nodeType":"ExpressionStatement","src":"21152:163:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61867,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61864,"src":"19970:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61868,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61852,"src":"19974:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":61869,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19984:6:114","memberName":"length","nodeType":"MemberAccess","src":"19974:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"19970:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61952,"initializationExpression":{"assignments":[61864],"declarations":[{"constant":false,"id":61864,"mutability":"mutable","name":"i","nameLocation":"19963:1:114","nodeType":"VariableDeclaration","scope":61952,"src":"19955:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61863,"name":"uint256","nodeType":"ElementaryTypeName","src":"19955:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61866,"initialValue":{"hexValue":"30","id":61865,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"19967:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"19955:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61872,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"19992:3:114","subExpression":{"id":61871,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61864,"src":"19992:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61873,"nodeType":"ExpressionStatement","src":"19992:3:114"},"nodeType":"ForStatement","src":"19950:1376:114"}]},"baseFunctions":[62678],"functionSelector":"a885c975","implemented":true,"kind":"function","modifiers":[{"id":61861,"kind":"modifierInvocation","modifierName":{"id":61860,"name":"nonReentrant","nameLocations":["19927:12:114"],"nodeType":"IdentifierPath","referencedDeclaration":44717,"src":"19927:12:114"},"nodeType":"ModifierInvocation","src":"19927:12:114"}],"name":"slash","nameLocation":"19753:5:114","parameters":{"id":61859,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61849,"mutability":"mutable","name":"custodians","nameLocation":"19787:10:114","nodeType":"VariableDeclaration","scope":61954,"src":"19768:29:114","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61847,"name":"address","nodeType":"ElementaryTypeName","src":"19768:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61848,"nodeType":"ArrayTypeName","src":"19768:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":61852,"mutability":"mutable","name":"attesters","nameLocation":"19826:9:114","nodeType":"VariableDeclaration","scope":61954,"src":"19807:28:114","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61850,"name":"address","nodeType":"ElementaryTypeName","src":"19807:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61851,"nodeType":"ArrayTypeName","src":"19807:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":61855,"mutability":"mutable","name":"amounts","nameLocation":"19864:7:114","nodeType":"VariableDeclaration","scope":61954,"src":"19845:26:114","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":61853,"name":"uint256","nodeType":"ElementaryTypeName","src":"19845:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61854,"nodeType":"ArrayTypeName","src":"19845:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":61858,"mutability":"mutable","name":"refundAmounts","nameLocation":"19900:13:114","nodeType":"VariableDeclaration","scope":61954,"src":"19881:32:114","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":61856,"name":"uint256","nodeType":"ElementaryTypeName","src":"19881:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61857,"nodeType":"ArrayTypeName","src":"19881:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"}],"src":"19758:161:114"},"returnParameters":{"id":61862,"nodeType":"ParameterList","parameters":[],"src":"19940:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":62022,"nodeType":"FunctionDefinition","src":"21690:1458:114","nodes":[],"body":{"id":62021,"nodeType":"Block","src":"21838:1310:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":61971,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61966,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61957,"src":"21852:4:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":61969,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"21868:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}],"id":61968,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21860:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61967,"name":"address","nodeType":"ElementaryTypeName","src":"21860:7:114","typeDescriptions":{}}},"id":61970,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21860:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21852:21:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":62019,"nodeType":"Block","src":"22370:772:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":62001,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":61998,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62398,"src":"22752:5:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}],"id":61997,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"22744:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61996,"name":"address","nodeType":"ElementaryTypeName","src":"22744:7:114","typeDescriptions":{}}},"id":61999,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22744:14:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":62000,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61961,"src":"22762:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"22744:27:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":62017,"nodeType":"Block","src":"22951:181:114","statements":[{"expression":{"arguments":[{"id":62011,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61957,"src":"23083:4:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62012,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61959,"src":"23089:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62013,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61961,"src":"23099:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62014,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61963,"src":"23110:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":62010,"name":"_payAttesterFromExternalViaCustodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62195,"src":"23046:36:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":62015,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23046:71:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62016,"nodeType":"ExpressionStatement","src":"23046:71:114"}]},"id":62018,"nodeType":"IfStatement","src":"22740:392:114","trueBody":{"id":62009,"nodeType":"Block","src":"22773:172:114","statements":[{"expression":{"arguments":[{"id":62003,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61957,"src":"22896:4:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62004,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61959,"src":"22902:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62005,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61961,"src":"22912:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62006,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61963,"src":"22923:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":62002,"name":"_payAttesterFromExternalDirectly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62152,"src":"22863:32:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":62007,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22863:67:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62008,"nodeType":"ExpressionStatement","src":"22863:67:114"}]}}]},"id":62020,"nodeType":"IfStatement","src":"21848:1294:114","trueBody":{"id":61995,"nodeType":"Block","src":"21875:489:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":61977,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":61974,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62398,"src":"21953:5:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}],"id":61973,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"21945:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61972,"name":"address","nodeType":"ElementaryTypeName","src":"21945:7:114","typeDescriptions":{}}},"id":61975,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21945:14:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":61976,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61961,"src":"21963:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21945:27:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":61993,"nodeType":"Block","src":"22156:198:114","statements":[{"expression":{"arguments":[{"id":61987,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61957,"src":"22305:4:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61988,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61959,"src":"22311:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61989,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61961,"src":"22321:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61990,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61963,"src":"22332:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61986,"name":"_payAttesterFromContractViaCustodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62110,"src":"22268:36:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":61991,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22268:71:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61992,"nodeType":"ExpressionStatement","src":"22268:71:114"}]},"id":61994,"nodeType":"IfStatement","src":"21941:413:114","trueBody":{"id":61985,"nodeType":"Block","src":"21974:176:114","statements":[{"expression":{"arguments":[{"id":61979,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61957,"src":"22101:4:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61980,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61959,"src":"22107:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61981,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61961,"src":"22117:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61982,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61963,"src":"22128:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61978,"name":"_payAttesterFromContractDirectly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62062,"src":"22068:32:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":61983,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22068:67:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61984,"nodeType":"ExpressionStatement","src":"22068:67:114"}]}}]}}]},"documentation":{"id":61955,"nodeType":"StructuredDocumentation","src":"21338:347:114","text":"@notice Routes attester payment to appropriate function based on conditions\n @param from The address initiating the payment (this contract or external)\n @param attester The address receiving the payment\n @param custodian The custodian token address (or base token if direct payment)\n @param amount The amount to pay"},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttesterWithSelector","nameLocation":"21699:24:114","parameters":{"id":61964,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61957,"mutability":"mutable","name":"from","nameLocation":"21741:4:114","nodeType":"VariableDeclaration","scope":62022,"src":"21733:12:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61956,"name":"address","nodeType":"ElementaryTypeName","src":"21733:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61959,"mutability":"mutable","name":"attester","nameLocation":"21763:8:114","nodeType":"VariableDeclaration","scope":62022,"src":"21755:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61958,"name":"address","nodeType":"ElementaryTypeName","src":"21755:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61961,"mutability":"mutable","name":"custodian","nameLocation":"21789:9:114","nodeType":"VariableDeclaration","scope":62022,"src":"21781:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61960,"name":"address","nodeType":"ElementaryTypeName","src":"21781:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61963,"mutability":"mutable","name":"amount","nameLocation":"21816:6:114","nodeType":"VariableDeclaration","scope":62022,"src":"21808:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61962,"name":"uint256","nodeType":"ElementaryTypeName","src":"21808:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"21723:105:114"},"returnParameters":{"id":61965,"nodeType":"ParameterList","parameters":[],"src":"21838:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":62062,"nodeType":"FunctionDefinition","src":"23282:313:114","nodes":[],"body":{"id":62061,"nodeType":"Block","src":"23400:195:114","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":62040,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62035,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62025,"src":"23418:4:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":62038,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"23434:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}],"id":62037,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23426:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":62036,"name":"address","nodeType":"ElementaryTypeName","src":"23426:7:114","typeDescriptions":{}}},"id":62039,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23426:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23418:21:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c792031","id":62041,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23441:35:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_0f1708bf867ac54e96e29dd93f681d12908fbf35a8ede654650d46510a77cb5d","typeString":"literal_string \"Only contract can call directly 1\""},"value":"Only contract can call directly 1"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0f1708bf867ac54e96e29dd93f681d12908fbf35a8ede654650d46510a77cb5d","typeString":"literal_string \"Only contract can call directly 1\""}],"id":62034,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23410:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":62042,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23410:67:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62043,"nodeType":"ExpressionStatement","src":"23410:67:114"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":62050,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62047,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62398,"src":"23503:5:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}],"id":62046,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23495:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":62045,"name":"address","nodeType":"ElementaryTypeName","src":"23495:7:114","typeDescriptions":{}}},"id":62048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23495:14:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":62049,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62029,"src":"23513:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23495:27:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d75737420757365206261736520746f6b656e","id":62051,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23524:21:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_bc613066773cc3393ba2034b10aecd37cf0fd2b9ca236e3823d8166e2e771fe3","typeString":"literal_string \"Must use base token\""},"value":"Must use base token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bc613066773cc3393ba2034b10aecd37cf0fd2b9ca236e3823d8166e2e771fe3","typeString":"literal_string \"Must use base token\""}],"id":62044,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23487:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":62052,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23487:59:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62053,"nodeType":"ExpressionStatement","src":"23487:59:114"},{"expression":{"arguments":[{"id":62057,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62027,"src":"23571:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62058,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62031,"src":"23581:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":62054,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62398,"src":"23556:5:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}},"id":62056,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23562:8:114","memberName":"transfer","nodeType":"MemberAccess","referencedDeclaration":43771,"src":"23556:14:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":62059,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23556:32:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62060,"nodeType":"ExpressionStatement","src":"23556:32:114"}]},"documentation":{"id":62023,"nodeType":"StructuredDocumentation","src":"23154:59:114","text":"@notice Contract pays attester directly with base token"},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttesterFromContractDirectly","nameLocation":"23291:32:114","parameters":{"id":62032,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62025,"mutability":"mutable","name":"from","nameLocation":"23332:4:114","nodeType":"VariableDeclaration","scope":62062,"src":"23324:12:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62024,"name":"address","nodeType":"ElementaryTypeName","src":"23324:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62027,"mutability":"mutable","name":"attester","nameLocation":"23346:8:114","nodeType":"VariableDeclaration","scope":62062,"src":"23338:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62026,"name":"address","nodeType":"ElementaryTypeName","src":"23338:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62029,"mutability":"mutable","name":"custodian","nameLocation":"23364:9:114","nodeType":"VariableDeclaration","scope":62062,"src":"23356:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62028,"name":"address","nodeType":"ElementaryTypeName","src":"23356:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62031,"mutability":"mutable","name":"amount","nameLocation":"23383:6:114","nodeType":"VariableDeclaration","scope":62062,"src":"23375:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62030,"name":"uint256","nodeType":"ElementaryTypeName","src":"23375:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23323:67:114"},"returnParameters":{"id":62033,"nodeType":"ParameterList","parameters":[],"src":"23400:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":62110,"nodeType":"FunctionDefinition","src":"23664:394:114","nodes":[],"body":{"id":62109,"nodeType":"Block","src":"23786:272:114","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":62080,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62075,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62065,"src":"23804:4:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"arguments":[{"id":62078,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"23820:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}],"id":62077,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23812:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":62076,"name":"address","nodeType":"ElementaryTypeName","src":"23812:7:114","typeDescriptions":{}}},"id":62079,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23812:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23804:21:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f6e6c7920636f6e74726163742063616e2063616c6c206469726563746c792032","id":62081,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23827:35:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_55315d8a57d191891b5e288e7e61a0e55314dfa6f15f2961a8a3eb948b6a731c","typeString":"literal_string \"Only contract can call directly 2\""},"value":"Only contract can call directly 2"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_55315d8a57d191891b5e288e7e61a0e55314dfa6f15f2961a8a3eb948b6a731c","typeString":"literal_string \"Only contract can call directly 2\""}],"id":62074,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23796:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":62082,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23796:67:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62083,"nodeType":"ExpressionStatement","src":"23796:67:114"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":62090,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62087,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62398,"src":"23889:5:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}],"id":62086,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"23881:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":62085,"name":"address","nodeType":"ElementaryTypeName","src":"23881:7:114","typeDescriptions":{}}},"id":62088,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23881:14:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":62089,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62069,"src":"23899:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"23881:27:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d7573742075736520637573746f6469616e20746f6b656e","id":62091,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"23910:26:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_625c61961be03bbe0874e1337fdd6dfea88bf797382890551820b152199956ec","typeString":"literal_string \"Must use custodian token\""},"value":"Must use custodian token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_625c61961be03bbe0874e1337fdd6dfea88bf797382890551820b152199956ec","typeString":"literal_string \"Must use custodian token\""}],"id":62084,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"23873:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":62092,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23873:64:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62093,"nodeType":"ExpressionStatement","src":"23873:64:114"},{"expression":{"arguments":[{"id":62097,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62069,"src":"23961:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62098,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62071,"src":"23972:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":62094,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62398,"src":"23947:5:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}},"id":62096,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23953:7:114","memberName":"approve","nodeType":"MemberAccess","referencedDeclaration":43791,"src":"23947:13:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,uint256) external returns (bool)"}},"id":62099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23947:32:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62100,"nodeType":"ExpressionStatement","src":"23947:32:114"},{"expression":{"arguments":[{"id":62105,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62067,"src":"24034:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62106,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62071,"src":"24044:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":62102,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62069,"src":"24005:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62101,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63461,"src":"23989:15:114","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICustodianToken_$63461_$","typeString":"type(contract ICustodianToken)"}},"id":62103,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23989:26:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICustodianToken_$63461","typeString":"contract ICustodianToken"}},"id":62104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24016:17:114","memberName":"buyCustodialToken","nodeType":"MemberAccess","referencedDeclaration":63451,"src":"23989:44:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":62107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23989:62:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62108,"nodeType":"ExpressionStatement","src":"23989:62:114"}]},"documentation":{"id":62063,"nodeType":"StructuredDocumentation","src":"23601:58:114","text":"@notice Contract pays attester through custodian token"},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttesterFromContractViaCustodian","nameLocation":"23673:36:114","parameters":{"id":62072,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62065,"mutability":"mutable","name":"from","nameLocation":"23718:4:114","nodeType":"VariableDeclaration","scope":62110,"src":"23710:12:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62064,"name":"address","nodeType":"ElementaryTypeName","src":"23710:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62067,"mutability":"mutable","name":"attester","nameLocation":"23732:8:114","nodeType":"VariableDeclaration","scope":62110,"src":"23724:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62066,"name":"address","nodeType":"ElementaryTypeName","src":"23724:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62069,"mutability":"mutable","name":"custodian","nameLocation":"23750:9:114","nodeType":"VariableDeclaration","scope":62110,"src":"23742:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62068,"name":"address","nodeType":"ElementaryTypeName","src":"23742:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62071,"mutability":"mutable","name":"amount","nameLocation":"23769:6:114","nodeType":"VariableDeclaration","scope":62110,"src":"23761:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62070,"name":"uint256","nodeType":"ElementaryTypeName","src":"23761:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"23709:67:114"},"returnParameters":{"id":62073,"nodeType":"ParameterList","parameters":[],"src":"23786:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":62152,"nodeType":"FunctionDefinition","src":"24467:315:114","nodes":[],"body":{"id":62151,"nodeType":"Block","src":"24585:197:114","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":62129,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":62123,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"24603:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":62124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24607:6:114","memberName":"sender","nodeType":"MemberAccess","src":"24603:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":62127,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"24625:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}],"id":62126,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24617:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":62125,"name":"address","nodeType":"ElementaryTypeName","src":"24617:7:114","typeDescriptions":{}}},"id":62128,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24617:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24603:27:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f6e6c792065787465726e616c2063616c6c73","id":62130,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24632:21:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_367278d280804749c40a2b54193b2d030c9f08a76b2a9338e0b2e7109240e55e","typeString":"literal_string \"Only external calls\""},"value":"Only external calls"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_367278d280804749c40a2b54193b2d030c9f08a76b2a9338e0b2e7109240e55e","typeString":"literal_string \"Only external calls\""}],"id":62122,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"24595:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":62131,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24595:59:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62132,"nodeType":"ExpressionStatement","src":"24595:59:114"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":62139,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62136,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62398,"src":"24680:5:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}],"id":62135,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"24672:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":62134,"name":"address","nodeType":"ElementaryTypeName","src":"24672:7:114","typeDescriptions":{}}},"id":62137,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24672:14:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":62138,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62117,"src":"24690:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24672:27:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d75737420757365206261736520746f6b656e","id":62140,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"24701:21:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_bc613066773cc3393ba2034b10aecd37cf0fd2b9ca236e3823d8166e2e771fe3","typeString":"literal_string \"Must use base token\""},"value":"Must use base token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_bc613066773cc3393ba2034b10aecd37cf0fd2b9ca236e3823d8166e2e771fe3","typeString":"literal_string \"Must use base token\""}],"id":62133,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"24664:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":62141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24664:59:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62142,"nodeType":"ExpressionStatement","src":"24664:59:114"},{"expression":{"arguments":[{"id":62146,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62113,"src":"24752:4:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62147,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62115,"src":"24758:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62148,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62119,"src":"24768:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":62143,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62398,"src":"24733:5:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}},"id":62145,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24739:12:114","memberName":"transferFrom","nodeType":"MemberAccess","referencedDeclaration":43803,"src":"24733:18:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$_t_bool_$","typeString":"function (address,address,uint256) external returns (bool)"}},"id":62149,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24733:42:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62150,"nodeType":"ExpressionStatement","src":"24733:42:114"}]},"documentation":{"id":62111,"nodeType":"StructuredDocumentation","src":"24064:67:114","text":"@notice External account pays attester directly with base token"},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttesterFromExternalDirectly","nameLocation":"24476:32:114","parameters":{"id":62120,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62113,"mutability":"mutable","name":"from","nameLocation":"24517:4:114","nodeType":"VariableDeclaration","scope":62152,"src":"24509:12:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62112,"name":"address","nodeType":"ElementaryTypeName","src":"24509:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62115,"mutability":"mutable","name":"attester","nameLocation":"24531:8:114","nodeType":"VariableDeclaration","scope":62152,"src":"24523:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62114,"name":"address","nodeType":"ElementaryTypeName","src":"24523:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62117,"mutability":"mutable","name":"custodian","nameLocation":"24549:9:114","nodeType":"VariableDeclaration","scope":62152,"src":"24541:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62116,"name":"address","nodeType":"ElementaryTypeName","src":"24541:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62119,"mutability":"mutable","name":"amount","nameLocation":"24568:6:114","nodeType":"VariableDeclaration","scope":62152,"src":"24560:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62118,"name":"uint256","nodeType":"ElementaryTypeName","src":"24560:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24508:67:114"},"returnParameters":{"id":62121,"nodeType":"ParameterList","parameters":[],"src":"24585:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":62195,"nodeType":"FunctionDefinition","src":"24859:354:114","nodes":[],"body":{"id":62194,"nodeType":"Block","src":"24981:232:114","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":62171,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":62165,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"24999:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":62166,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25003:6:114","memberName":"sender","nodeType":"MemberAccess","src":"24999:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"arguments":[{"id":62169,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"25021:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_MovementStaking_$62379","typeString":"contract MovementStaking"}],"id":62168,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25013:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":62167,"name":"address","nodeType":"ElementaryTypeName","src":"25013:7:114","typeDescriptions":{}}},"id":62170,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25013:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"24999:27:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4f6e6c792065787465726e616c2063616c6c73","id":62172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"25028:21:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_367278d280804749c40a2b54193b2d030c9f08a76b2a9338e0b2e7109240e55e","typeString":"literal_string \"Only external calls\""},"value":"Only external calls"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_367278d280804749c40a2b54193b2d030c9f08a76b2a9338e0b2e7109240e55e","typeString":"literal_string \"Only external calls\""}],"id":62164,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"24991:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":62173,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24991:59:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62174,"nodeType":"ExpressionStatement","src":"24991:59:114"},{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":62181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":62178,"name":"token","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62398,"src":"25076:5:114","typeDescriptions":{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_IERC20_$43804","typeString":"contract IERC20"}],"id":62177,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"25068:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":62176,"name":"address","nodeType":"ElementaryTypeName","src":"25068:7:114","typeDescriptions":{}}},"id":62179,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25068:14:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":62180,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62159,"src":"25086:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"25068:27:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4d7573742075736520637573746f6469616e20746f6b656e","id":62182,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"25097:26:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_625c61961be03bbe0874e1337fdd6dfea88bf797382890551820b152199956ec","typeString":"literal_string \"Must use custodian token\""},"value":"Must use custodian token"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_625c61961be03bbe0874e1337fdd6dfea88bf797382890551820b152199956ec","typeString":"literal_string \"Must use custodian token\""}],"id":62175,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"25060:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":62183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25060:64:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62184,"nodeType":"ExpressionStatement","src":"25060:64:114"},{"expression":{"arguments":[{"id":62189,"name":"from","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62155,"src":"25183:4:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62190,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62157,"src":"25189:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62191,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62161,"src":"25199:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"arguments":[{"id":62186,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62159,"src":"25150:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62185,"name":"ICustodianToken","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63461,"src":"25134:15:114","typeDescriptions":{"typeIdentifier":"t_type$_t_contract$_ICustodianToken_$63461_$","typeString":"type(contract ICustodianToken)"}},"id":62187,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25134:26:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_contract$_ICustodianToken_$63461","typeString":"contract ICustodianToken"}},"id":62188,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25161:21:114","memberName":"buyCustodialTokenFrom","nodeType":"MemberAccess","referencedDeclaration":63460,"src":"25134:48:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,uint256) external"}},"id":62192,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25134:72:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62193,"nodeType":"ExpressionStatement","src":"25134:72:114"}]},"documentation":{"id":62153,"nodeType":"StructuredDocumentation","src":"24788:66:114","text":"@notice External account pays attester through custodian token"},"implemented":true,"kind":"function","modifiers":[],"name":"_payAttesterFromExternalViaCustodian","nameLocation":"24868:36:114","parameters":{"id":62162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62155,"mutability":"mutable","name":"from","nameLocation":"24913:4:114","nodeType":"VariableDeclaration","scope":62195,"src":"24905:12:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62154,"name":"address","nodeType":"ElementaryTypeName","src":"24905:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62157,"mutability":"mutable","name":"attester","nameLocation":"24927:8:114","nodeType":"VariableDeclaration","scope":62195,"src":"24919:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62156,"name":"address","nodeType":"ElementaryTypeName","src":"24919:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62159,"mutability":"mutable","name":"custodian","nameLocation":"24945:9:114","nodeType":"VariableDeclaration","scope":62195,"src":"24937:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62158,"name":"address","nodeType":"ElementaryTypeName","src":"24937:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62161,"mutability":"mutable","name":"amount","nameLocation":"24964:6:114","nodeType":"VariableDeclaration","scope":62195,"src":"24956:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62160,"name":"uint256","nodeType":"ElementaryTypeName","src":"24956:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"24904:67:114"},"returnParameters":{"id":62163,"nodeType":"ParameterList","parameters":[],"src":"24981:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":62216,"nodeType":"FunctionDefinition","src":"25461:244:114","nodes":[],"body":{"id":62215,"nodeType":"Block","src":"25615:90:114","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":62208,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"25658:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":62209,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25662:6:114","memberName":"sender","nodeType":"MemberAccess","src":"25658:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62210,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62198,"src":"25670:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62211,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62202,"src":"25680:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62212,"name":"amount","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62200,"src":"25691:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":62207,"name":"_payAttesterFromExternalDirectly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62152,"src":"25625:32:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":62213,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25625:73:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62214,"nodeType":"ExpressionStatement","src":"25625:73:114"}]},"baseFunctions":[62769],"documentation":{"id":62196,"nodeType":"StructuredDocumentation","src":"25219:237:114","text":"@notice Domain rewards an attester\n @param attester The attester to reward\n @param amount The amount to reward\n @param custodian The custodian of the token from which to reward the attester, here it is the domain"},"functionSelector":"5e00bf46","implemented":true,"kind":"function","modifiers":[{"id":62205,"kind":"modifierInvocation","modifierName":{"id":62204,"name":"nonReentrant","nameLocations":["25602:12:114"],"nodeType":"IdentifierPath","referencedDeclaration":44717,"src":"25602:12:114"},"nodeType":"ModifierInvocation","src":"25602:12:114"}],"name":"rewardFromDomain","nameLocation":"25470:16:114","parameters":{"id":62203,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62198,"mutability":"mutable","name":"attester","nameLocation":"25504:8:114","nodeType":"VariableDeclaration","scope":62216,"src":"25496:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62197,"name":"address","nodeType":"ElementaryTypeName","src":"25496:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62200,"mutability":"mutable","name":"amount","nameLocation":"25530:6:114","nodeType":"VariableDeclaration","scope":62216,"src":"25522:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62199,"name":"uint256","nodeType":"ElementaryTypeName","src":"25522:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":62202,"mutability":"mutable","name":"custodian","nameLocation":"25554:9:114","nodeType":"VariableDeclaration","scope":62216,"src":"25546:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62201,"name":"address","nodeType":"ElementaryTypeName","src":"25546:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"25486:108:114"},"returnParameters":{"id":62206,"nodeType":"ParameterList","parameters":[],"src":"25615:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":62259,"nodeType":"FunctionDefinition","src":"25966:457:114","nodes":[],"body":{"id":62258,"nodeType":"Block","src":"26126:297:114","nodes":[],"statements":[{"body":{"id":62256,"nodeType":"Block","src":"26307:110:114","statements":[{"expression":{"arguments":[{"expression":{"id":62243,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"26354:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":62244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26358:6:114","memberName":"sender","nodeType":"MemberAccess","src":"26354:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":62245,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62220,"src":"26366:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":62247,"indexExpression":{"id":62246,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62232,"src":"26376:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26366:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":62248,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62226,"src":"26380:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":62250,"indexExpression":{"id":62249,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62232,"src":"26391:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26380:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":62251,"name":"amounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62223,"src":"26395:7:114","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[] calldata"}},"id":62253,"indexExpression":{"id":62252,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62232,"src":"26403:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26395:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":62242,"name":"_payAttesterFromExternalDirectly","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62152,"src":"26321:32:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_address_$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,address,address,uint256)"}},"id":62254,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26321:85:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62255,"nodeType":"ExpressionStatement","src":"26321:85:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62235,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62232,"src":"26280:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":62236,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62220,"src":"26284:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[] calldata"}},"id":62237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26294:6:114","memberName":"length","nodeType":"MemberAccess","src":"26284:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26280:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62257,"initializationExpression":{"assignments":[62232],"declarations":[{"constant":false,"id":62232,"mutability":"mutable","name":"i","nameLocation":"26273:1:114","nodeType":"VariableDeclaration","scope":62257,"src":"26265:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62231,"name":"uint256","nodeType":"ElementaryTypeName","src":"26265:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62234,"initialValue":{"hexValue":"30","id":62233,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26277:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"26265:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62240,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"26302:3:114","subExpression":{"id":62239,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62232,"src":"26302:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62241,"nodeType":"ExpressionStatement","src":"26302:3:114"},"nodeType":"ForStatement","src":"26260:157:114"}]},"baseFunctions":[62781],"documentation":{"id":62217,"nodeType":"StructuredDocumentation","src":"25711:250:114","text":"@notice An array of custodians reward an array of attesters\n @param attesters The attesters to reward\n @param amounts The amounts to reward\n @param custodians The custodians of the token from which to reward the attesters "},"functionSelector":"4e76a139","implemented":true,"kind":"function","modifiers":[{"id":62229,"kind":"modifierInvocation","modifierName":{"id":62228,"name":"nonReentrant","nameLocations":["26113:12:114"],"nodeType":"IdentifierPath","referencedDeclaration":44717,"src":"26113:12:114"},"nodeType":"ModifierInvocation","src":"26113:12:114"}],"name":"rewardArray","nameLocation":"25975:11:114","parameters":{"id":62227,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62220,"mutability":"mutable","name":"attesters","nameLocation":"26015:9:114","nodeType":"VariableDeclaration","scope":62259,"src":"25996:28:114","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62218,"name":"address","nodeType":"ElementaryTypeName","src":"25996:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62219,"nodeType":"ArrayTypeName","src":"25996:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":62223,"mutability":"mutable","name":"amounts","nameLocation":"26053:7:114","nodeType":"VariableDeclaration","scope":62259,"src":"26034:26:114","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_calldata_ptr","typeString":"uint256[]"},"typeName":{"baseType":{"id":62221,"name":"uint256","nodeType":"ElementaryTypeName","src":"26034:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62222,"nodeType":"ArrayTypeName","src":"26034:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_uint256_$dyn_storage_ptr","typeString":"uint256[]"}},"visibility":"internal"},{"constant":false,"id":62226,"mutability":"mutable","name":"custodians","nameLocation":"26089:10:114","nodeType":"VariableDeclaration","scope":62259,"src":"26070:29:114","stateVariable":false,"storageLocation":"calldata","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_calldata_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62224,"name":"address","nodeType":"ElementaryTypeName","src":"26070:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62225,"nodeType":"ArrayTypeName","src":"26070:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"25986:119:114"},"returnParameters":{"id":62230,"nodeType":"ParameterList","parameters":[],"src":"26126:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":62274,"nodeType":"FunctionDefinition","src":"26593:140:114","nodes":[],"body":{"id":62273,"nodeType":"Block","src":"26685:48:114","nodes":[],"statements":[{"expression":{"arguments":[{"id":62269,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62458,"src":"26705:14:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":62270,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62262,"src":"26721:4:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62268,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39276,"src":"26695:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":62271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26695:31:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62272,"nodeType":"ExpressionStatement","src":"26695:31:114"}]},"baseFunctions":[62683],"documentation":{"id":62260,"nodeType":"StructuredDocumentation","src":"26431:157:114","text":"@notice Whitelist an address to be used as an attester or custodian. \n @notice Whitelisting means that the address is allowed to stake and unstake"},"functionSelector":"41566585","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":62265,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39114,"src":"26665:18:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":62266,"kind":"modifierInvocation","modifierName":{"id":62264,"name":"onlyRole","nameLocations":["26656:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39143,"src":"26656:8:114"},"nodeType":"ModifierInvocation","src":"26656:28:114"}],"name":"whitelistAddress","nameLocation":"26602:16:114","parameters":{"id":62263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62262,"mutability":"mutable","name":"addr","nameLocation":"26636:4:114","nodeType":"VariableDeclaration","scope":62274,"src":"26628:12:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62261,"name":"address","nodeType":"ElementaryTypeName","src":"26628:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26618:28:114"},"returnParameters":{"id":62267,"nodeType":"ParameterList","parameters":[],"src":"26685:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":62288,"nodeType":"FunctionDefinition","src":"26739:151:114","nodes":[],"body":{"id":62287,"nodeType":"Block","src":"26841:49:114","nodes":[],"statements":[{"expression":{"arguments":[{"id":62283,"name":"WHITELIST_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62458,"src":"26862:14:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":62284,"name":"addr","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62276,"src":"26878:4:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62282,"name":"revokeRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39295,"src":"26851:10:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":62285,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26851:32:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":62286,"nodeType":"ExpressionStatement","src":"26851:32:114"}]},"baseFunctions":[62688],"functionSelector":"286dd3f5","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":62279,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39114,"src":"26821:18:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":62280,"kind":"modifierInvocation","modifierName":{"id":62278,"name":"onlyRole","nameLocations":["26812:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39143,"src":"26812:8:114"},"nodeType":"ModifierInvocation","src":"26812:28:114"}],"name":"removeAddressFromWhitelist","nameLocation":"26748:26:114","parameters":{"id":62277,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62276,"mutability":"mutable","name":"addr","nameLocation":"26792:4:114","nodeType":"VariableDeclaration","scope":62288,"src":"26784:12:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62275,"name":"address","nodeType":"ElementaryTypeName","src":"26784:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"26774:28:114"},"returnParameters":{"id":62281,"nodeType":"ParameterList","parameters":[],"src":"26841:0:114"},"scope":62379,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":62362,"nodeType":"FunctionDefinition","src":"26982:542:114","nodes":[],"body":{"id":62361,"nodeType":"Block","src":"27090:434:114","nodes":[],"statements":[{"assignments":[62302],"declarations":[{"constant":false,"id":62302,"mutability":"mutable","name":"custodians","nameLocation":"27117:10:114","nodeType":"VariableDeclaration","scope":62361,"src":"27100:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62300,"name":"address","nodeType":"ElementaryTypeName","src":"27100:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62301,"nodeType":"ArrayTypeName","src":"27100:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":62306,"initialValue":{"arguments":[{"id":62304,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62291,"src":"27154:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62303,"name":"getRegisteredCustodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60675,"src":"27130:23:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view returns (address[] memory)"}},"id":62305,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27130:31:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"27100:61:114"},{"assignments":[62311],"declarations":[{"constant":false,"id":62311,"mutability":"mutable","name":"attesters","nameLocation":"27188:9:114","nodeType":"VariableDeclaration","scope":62361,"src":"27171:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":62309,"name":"address","nodeType":"ElementaryTypeName","src":"27171:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":62310,"nodeType":"ArrayTypeName","src":"27171:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":62315,"initialValue":{"arguments":[{"id":62313,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62291,"src":"27223:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62312,"name":"getRegisteredAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60729,"src":"27200:22:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view returns (address[] memory)"}},"id":62314,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27200:30:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"27171:59:114"},{"assignments":[62317],"declarations":[{"constant":false,"id":62317,"mutability":"mutable","name":"totalStake","nameLocation":"27248:10:114","nodeType":"VariableDeclaration","scope":62361,"src":"27240:18:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62316,"name":"uint256","nodeType":"ElementaryTypeName","src":"27240:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62319,"initialValue":{"hexValue":"30","id":62318,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27261:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"27240:22:114"},{"body":{"id":62357,"nodeType":"Block","src":"27321:170:114","statements":[{"body":{"id":62355,"nodeType":"Block","src":"27382:99:114","statements":[{"expression":{"id":62353,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":62342,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62317,"src":"27400:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":62344,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62291,"src":"27423:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":62345,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62293,"src":"27431:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":62346,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62302,"src":"27438:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":62348,"indexExpression":{"id":62347,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62321,"src":"27449:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27438:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":62349,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62311,"src":"27453:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":62351,"indexExpression":{"id":62350,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62332,"src":"27463:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"27453:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":62343,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61273,"src":"27414:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view returns (uint256)"}},"id":62352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27414:52:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27400:66:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62354,"nodeType":"ExpressionStatement","src":"27400:66:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62338,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62335,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62332,"src":"27355:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":62336,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62311,"src":"27359:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":62337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27369:6:114","memberName":"length","nodeType":"MemberAccess","src":"27359:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27355:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62356,"initializationExpression":{"assignments":[62332],"declarations":[{"constant":false,"id":62332,"mutability":"mutable","name":"j","nameLocation":"27348:1:114","nodeType":"VariableDeclaration","scope":62356,"src":"27340:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62331,"name":"uint256","nodeType":"ElementaryTypeName","src":"27340:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62334,"initialValue":{"hexValue":"30","id":62333,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27352:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"27340:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62340,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"27377:3:114","subExpression":{"id":62339,"name":"j","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62332,"src":"27377:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62341,"nodeType":"ExpressionStatement","src":"27377:3:114"},"nodeType":"ForStatement","src":"27335:146:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":62327,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":62324,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62321,"src":"27293:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":62325,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62302,"src":"27297:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":62326,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"27308:6:114","memberName":"length","nodeType":"MemberAccess","src":"27297:17:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27293:21:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":62358,"initializationExpression":{"assignments":[62321],"declarations":[{"constant":false,"id":62321,"mutability":"mutable","name":"i","nameLocation":"27286:1:114","nodeType":"VariableDeclaration","scope":62358,"src":"27278:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62320,"name":"uint256","nodeType":"ElementaryTypeName","src":"27278:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":62323,"initialValue":{"hexValue":"30","id":62322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27290:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"27278:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":62329,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"27316:3:114","subExpression":{"id":62328,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62321,"src":"27316:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":62330,"nodeType":"ExpressionStatement","src":"27316:3:114"},"nodeType":"ForStatement","src":"27273:218:114"},{"expression":{"id":62359,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62317,"src":"27507:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62297,"id":62360,"nodeType":"Return","src":"27500:17:114"}]},"documentation":{"id":62289,"nodeType":"StructuredDocumentation","src":"26896:81:114","text":"@notice Computes total stake across all custodians and attesters for an epoch"},"functionSelector":"55bdbe4c","implemented":true,"kind":"function","modifiers":[],"name":"computeAllStake","nameLocation":"26991:15:114","parameters":{"id":62294,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62291,"mutability":"mutable","name":"domain","nameLocation":"27024:6:114","nodeType":"VariableDeclaration","scope":62362,"src":"27016:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62290,"name":"address","nodeType":"ElementaryTypeName","src":"27016:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":62293,"mutability":"mutable","name":"epoch","nameLocation":"27048:5:114","nodeType":"VariableDeclaration","scope":62362,"src":"27040:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62292,"name":"uint256","nodeType":"ElementaryTypeName","src":"27040:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27006:53:114"},"returnParameters":{"id":62297,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62296,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62362,"src":"27081:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62295,"name":"uint256","nodeType":"ElementaryTypeName","src":"27081:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27080:9:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":62378,"nodeType":"FunctionDefinition","src":"27695:176:114","nodes":[],"body":{"id":62377,"nodeType":"Block","src":"27797:74:114","nodes":[],"statements":[{"expression":{"arguments":[{"id":62371,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62365,"src":"27830:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"arguments":[{"id":62373,"name":"domain","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62365,"src":"27856:6:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":62372,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61204,"src":"27838:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":62374,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27838:25:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":62370,"name":"computeAllStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62362,"src":"27814:15:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$_t_uint256_$returns$_t_uint256_$","typeString":"function (address,uint256) view returns (uint256)"}},"id":62375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27814:50:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":62369,"id":62376,"nodeType":"Return","src":"27807:57:114"}]},"baseFunctions":[62751],"documentation":{"id":62363,"nodeType":"StructuredDocumentation","src":"27530:160:114","text":"@notice Computes total stake across all custodians and attesters for the current accepting epoch\n @param domain The domain to compute total stake for"},"functionSelector":"574663a9","implemented":true,"kind":"function","modifiers":[],"name":"computeAllStakeForAcceptingEpoch","nameLocation":"27704:32:114","parameters":{"id":62366,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62365,"mutability":"mutable","name":"domain","nameLocation":"27754:6:114","nodeType":"VariableDeclaration","scope":62378,"src":"27746:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":62364,"name":"address","nodeType":"ElementaryTypeName","src":"27746:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"27736:30:114"},"returnParameters":{"id":62369,"nodeType":"ParameterList","parameters":[{"constant":false,"id":62368,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":62378,"src":"27788:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":62367,"name":"uint256","nodeType":"ElementaryTypeName","src":"27788:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"27787:9:114"},"scope":62379,"stateMutability":"view","virtual":false,"visibility":"public"}],"abstract":false,"baseContracts":[{"baseName":{"id":60546,"name":"MovementStakingStorage","nameLocations":["798:22:114"],"nodeType":"IdentifierPath","referencedDeclaration":62459,"src":"798:22:114"},"id":60547,"nodeType":"InheritanceSpecifier","src":"798:22:114"},{"baseName":{"id":60548,"name":"IMovementStaking","nameLocations":["826:16:114"],"nodeType":"IdentifierPath","referencedDeclaration":62796,"src":"826:16:114"},"id":60549,"nodeType":"InheritanceSpecifier","src":"826:16:114"},{"baseName":{"id":60550,"name":"BaseStaking","nameLocations":["848:11:114"],"nodeType":"IdentifierPath","referencedDeclaration":62514,"src":"848:11:114"},"id":60551,"nodeType":"InheritanceSpecifier","src":"848:11:114"},{"baseName":{"id":60552,"name":"ReentrancyGuard","nameLocations":["865:15:114"],"nodeType":"IdentifierPath","referencedDeclaration":44753,"src":"865:15:114"},"id":60553,"nodeType":"InheritanceSpecifier","src":"865:15:114"}],"canonicalName":"MovementStaking","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[62379,44753,62514,39884,42904,39448,41211,46535,41590,40716,39702,62796,62459],"name":"MovementStaking","nameLocation":"775:15:114","scope":62380,"usedErrors":[39465,39468,39729,39734,41517,41520,43099,43112,44330,44623,44698,60560,62732,62734,62736],"usedEvents":[39473,41529,41538,41547,42852,62700,62712,62724,62730]}],"license":"UNLICENSED"},"id":114} \ No newline at end of file diff --git a/protocol/pcp/cli/client/abis/PCP.json b/protocol/pcp/cli/client/abis/PCP.json index 8a666980..c1229ace 100644 --- a/protocol/pcp/cli/client/abis/PCP.json +++ b/protocol/pcp/cli/client/abis/PCP.json @@ -1 +1 @@ -{"abi":[{"type":"function","name":"COMMITMENT_ADMIN","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"TRUSTED_ATTESTER","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"acceptGenesisCeremony","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"attesterRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"points","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchGrantCommitmentAdmin","inputs":[{"name":"accounts","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"batchGrantTrustedAttester","inputs":[{"name":"attesters","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitmentFirstSeenAt","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"timestamp","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"commitmentStake","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"commitement","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"commitments","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"createSuperBlockCommitment","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"pure"},{"type":"function","name":"forceLatestCommitment","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStakeForAcceptingEpoch","inputs":[{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCommitmentByAttester","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"getCommitmentFirstSeenAt","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStakeForAcceptingEpoch","inputs":[{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochStartTime","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getLastPostconfirmedSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getMaxTolerableSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getMinCommitmentAgeForPostconfirmation","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextAcceptingEpochWithException","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmedCommitment","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerPrivilegeDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"postconfirmer","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerStartTime","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPresentEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakeForAcceptingEpoch","inputs":[{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakedAttestersForAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getSuperBlockHeightAssignedEpoch","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStakeForAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getValidatorCommitmentAtSuperBlockHeight","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"grantCommitmentAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantTrustedAttester","inputs":[{"name":"attester","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_stakingContract","type":"address","internalType":"contract IMovementStaking"},{"name":"_lastPostconfirmedSuperBlockHeight","type":"uint256","internalType":"uint256"},{"name":"_leadingSuperBlockTolerance","type":"uint256","internalType":"uint256"},{"name":"_epochDuration","type":"uint256","internalType":"uint256"},{"name":"_custodians","type":"address[]","internalType":"address[]"},{"name":"_postconfirmerDuration","type":"uint256","internalType":"uint256"},{"name":"_moveTokenAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isCommitted","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isPostconfirmed","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isWithinPostconfirmerPrivilegeDuration","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"lastPostconfirmedSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"leadingSuperBlockTolerance","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"minCommitmentAgeForPostconfirmation","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"moveTokenAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"openAttestationEnabled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"postconfirmSuperBlocksAndRollover","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"postconfirmedAtL1BlockHeight","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockHeight","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedAtL1BlockHeightByPostconfirmer","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockHeight","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedAtL1BlockTimestamp","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockTimestamp","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedBy","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"attester","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedByPostconfirmer","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedSuperBlocks","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedSuperBlocksVersion","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmerDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmerPrivilegeDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmerRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"postconfirmer","type":"address","internalType":"address"}],"outputs":[{"name":"points","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardPerAttestationPoint","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"rewardPerPostconfirmationPoint","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"setAcceptingEpoch","inputs":[{"name":"newEpoch","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMinCommitmentAgeForPostconfirmation","inputs":[{"name":"_minCommitmentAgeForPostconfirmation","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOpenAttestationEnabled","inputs":[{"name":"enabled","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPostconfirmedCommitmentAtBlockHeight","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPostconfirmerDuration","inputs":[{"name":"_postconfirmerDuration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPostconfirmerPrivilegeDuration","inputs":[{"name":"_postconfirmerPrivilegeDuration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRewardPerAttestationPoint","inputs":[{"name":"rewardPerPoint","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRewardPerPostconfirmationPoint","inputs":[{"name":"rewardPerPoint","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakingContract","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IMovementStaking"}],"stateMutability":"view"},{"type":"function","name":"submitBatchSuperBlockCommitment","inputs":[{"name":"superBlockCommitments","type":"tuple[]","internalType":"struct PCPStorage.SuperBlockCommitment[]","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitSuperBlockCommitment","inputs":[{"name":"commitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"superBlockHeightAssignedEpoch","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epoch","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"versionedPostconfirmedSuperBlocks","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SuperBlockCommitmentSubmitted","inputs":[{"name":"blockHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"stateCommitment","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"attesterStake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SuperBlockPostconfirmed","inputs":[{"name":"blockHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"stateCommitment","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"height","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AttesterAlreadyCommitted","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"PostconfirmerDurationTooLong","inputs":[]},{"type":"error","name":"PostconfirmerDurationTooLongForEpoch","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"UnacceptableSuperBlockCommitment","inputs":[]},{"type":"error","name":"minCommitmentAgeForPostconfirmationTooLong","inputs":[]},{"type":"error","name":"postconfirmerPrivilegeDurationTooLong","inputs":[]}],"bytecode":{"object":"0x60a0604052306080523480156012575f80fd5b50608051613a736100395f395f81816125e10152818161260a015261274b0152613a735ff3fe6080604052600436106104b0575f3560e01c80636c713af81161026d578063bff92c8c1161014a578063e07472ef116100be578063ed8a1d5911610083578063ed8a1d591461102b578063eda67fc41461106c578063ee99205c146110a6578063ef9ae15c146110c4578063f1949add1461092e578063fdafe9ca146110dd575f80fd5b8063e07472ef14610f25578063e4a3fb7414610f5f578063e90d4c0614610f97578063ec18c18614610fdc578063ec23ec2e14610ff1575f80fd5b8063d283392e1161010f578063d283392e14610e52578063d3eef4cc14610e7d578063d440116d14610e92578063d547741f14610eb1578063d783068814610ed0578063da7d28b614610f06575f80fd5b8063bff92c8c14610daa578063c19b406c14610dbf578063cf6772ad14610df5578063d03509ec14610e14578063d2526fef14610e33575f80fd5b806391d14854116101e1578063a217fddf116101a6578063a217fddf14610ce7578063aa0d6fcd14610cfa578063ab208ebd14610d1b578063ad3cb1cc14610d2f578063ba26513e14610d6c578063bb04bd2f14610d8b575f80fd5b806391d1485414610c5657806392a2ebf314610c75578063943b79e214610c89578063949d7c2a14610c9d578063a207fe2f14610cbc575f80fd5b806380e460f01161023257806380e460f014610b905780638129fc1c14610bb057806381df174614610bc457806385e6b8c214610be357806390879f6414610c0e57806391807e4f14610c22575f80fd5b80636c713af814610ad15780636f86529414610ae55780637aa81c2a14610b1b5780637ac561c814610b3a5780637cfd820514610b65575f80fd5b806336568abe1161039b578063556d97c81161030f5780635d3ea8f1116102d45780635d3ea8f114610a145780635db916ab14610a285780635f4d642e14610a485780635f83c7d514610a5c578063622e361614610a715780636978ab1214610a90575f80fd5b8063556d97c81461092e57806355b8119d146109ad57806357342282146109c257806358376877146109e157806359b9959714610a00575f80fd5b806345367f231161036057806345367f2314610895578063491d0467146108b45780634b47d955146108d35780634ceb2e66146108f25780634f1ef2861461090757806352d1902d1461091a575f80fd5b806336568abe146107cf5780633752d675146107ee57806337d7f58f146108025780633ba18005146108165780633d64592714610876575f80fd5b80631241ebe311610432578063248a9ca3116103f7578063248a9ca3146106c357806326624e37146106e25780632bfd11d6146106f65780632f2ff15d146107655780633119edd41461078457806335ea1c63146107a3575f80fd5b80631241ebe31461062757806314e380261461063b5780631db859c71461064f5780631de38fe1146106855780631f83e2a3146106a4575f80fd5b806308c7050f1161047857806308c7050f1461058a5780630cf6b6bd146105ab5780630d39f7f0146105ca5780630e74b609146105e9578063107e21ca14610608575f80fd5b806301ffc9a7146104b4578063026583d7146104e8578063028e490a1461052957806303d3f7fd1461054757806308750a321461055c575b5f80fd5b3480156104bf575f80fd5b506104d36104ce366004613279565b6110f2565b60405190151581526020015b60405180910390f35b3480156104f3575f80fd5b506105076105023660046132a0565b611128565b60408051825181526020808401519082015291810151908201526060016104df565b348015610534575f80fd5b506006545b6040519081526020016104df565b348015610552575f80fd5b5061053960025481565b348015610567575f80fd5b506104d36105763660046132c9565b600c6020525f908152604090205460ff1681565b348015610595575f80fd5b506105a96105a436600461337a565b611161565b005b3480156105b6575f80fd5b506104d36105c536600461337a565b6111ee565b3480156105d5575f80fd5b506105a96105e43660046132c9565b61126d565b3480156105f4575f80fd5b506105a961060336600461337a565b61128a565b348015610613575f80fd5b506105a961062236600461343d565b6112d3565b348015610632575f80fd5b50600454610539565b348015610646575f80fd5b5061053961149e565b34801561065a575f80fd5b506105396106693660046134c1565b601560209081525f928352604080842090915290825290205481565b348015610690575f80fd5b5061053961069f3660046134c1565b6114af565b3480156106af575f80fd5b506105a96106be3660046132c9565b611528565b3480156106ce575f80fd5b506105396106dd3660046132c9565b6115da565b3480156106ed575f80fd5b506105a96115fa565b348015610701575f80fd5b506105076107103660046132c9565b60408051606080820183525f8083526020808401829052928401819052601354815260128352838120948152938252928290208251938401835280548452600181015491840191909152600201549082015290565b348015610770575f80fd5b506105a961077f3660046134c1565b611605565b34801561078f575f80fd5b506105a961079e36600461337a565b611627565b3480156107ae575f80fd5b506107b76116f3565b6040516001600160a01b0390911681526020016104df565b3480156107da575f80fd5b506105a96107e93660046134c1565b6117f2565b3480156107f9575f80fd5b5061053961182a565b34801561080d575f80fd5b50610539611895565b348015610821575f80fd5b5061085b6108303660046134ef565b601260209081525f928352604080842090915290825290208054600182015460029092015490919083565b604080519384526020840192909252908201526060016104df565b348015610881575f80fd5b506105a96108903660046132c9565b6118c5565b3480156108a0575f80fd5b506105396108af3660046132c9565b611979565b3480156108bf575f80fd5b506105396108ce36600461350f565b611a32565b3480156108de575f80fd5b506105a96108ed36600461352a565b611a44565b3480156108fd575f80fd5b5061053960045481565b6105a961091536600461355b565b611ab1565b348015610925575f80fd5b50610539611acc565b348015610939575f80fd5b506105076109483660046134c1565b604080516060810182525f8082526020820181905291810191909152505f9182526008602090815260408084206001600160a01b0393909316845291815291819020815160608101835281548152600182015493810193909352600201549082015290565b3480156109b8575f80fd5b5061053960065481565b3480156109cd575f80fd5b506105a96109dc3660046132c9565b611ae7565b3480156109ec575f80fd5b506001546107b7906001600160a01b031681565b348015610a0b575f80fd5b50600354610539565b348015610a1f575f80fd5b50610539611b04565b348015610a33575f80fd5b506105395f80516020613a1e83398151915281565b348015610a53575f80fd5b50610539611b34565b348015610a67575f80fd5b5061053960165481565b348015610a7c575f80fd5b506105a9610a8b366004613600565b611bcd565b348015610a9b575f80fd5b50610539610aaa3660046134c1565b5f9182526014602090815260408084206001600160a01b0393909316845291905290205490565b348015610adc575f80fd5b50610539611c42565b348015610af0575f80fd5b50610539610aff3660046134c1565b601460209081525f928352604080842090915290825290205481565b348015610b26575f80fd5b50610539610b3536600461369a565b611c72565b348015610b45575f80fd5b50610539610b543660046132c9565b600d6020525f908152604090205481565b348015610b70575f80fd5b50610539610b7f3660046132c9565b600f6020525f908152604090205481565b348015610b9b575f80fd5b506105395f805160206139be83398151915281565b348015610bbb575f80fd5b506105a9611cfb565b348015610bcf575f80fd5b506105a9610bde36600461350f565b611df0565b348015610bee575f80fd5b50610539610bfd3660046132c9565b60076020525f908152604090205481565b348015610c19575f80fd5b50610539611e1e565b348015610c2d575f80fd5b506107b7610c3c3660046132c9565b600b6020525f90815260409020546001600160a01b031681565b348015610c61575f80fd5b506104d3610c703660046134c1565b611ea2565b348015610c80575f80fd5b506105a9611ed8565b348015610c94575f80fd5b50610539611f8d565b348015610ca8575f80fd5b506105a9610cb736600461350f565b611f9e565b348015610cc7575f80fd5b50610539610cd63660046132c9565b600e6020525f908152604090205481565b348015610cf2575f80fd5b506105395f81565b348015610d05575f80fd5b50610d0e611fdb565b6040516104df919061371c565b348015610d26575f80fd5b50600554610539565b348015610d3a575f80fd5b50610d5f604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516104df919061372e565b348015610d77575f80fd5b50610539610d863660046134c1565b612047565b348015610d96575f80fd5b50610539610da5366004613763565b612102565b348015610db5575f80fd5b5061053960055481565b348015610dca575f80fd5b50610539610dd93660046134ef565b600960209081525f928352604080842090915290825290205481565b348015610e00575f80fd5b506105a9610e0f36600461352a565b612115565b348015610e1f575f80fd5b506105a9610e2e3660046132c9565b612162565b348015610e3e575f80fd5b506105a9610e4d36600461378f565b6121db565b348015610e5d575f80fd5b50610539610e6c3660046132c9565b5f9081526007602052604090205490565b348015610e88575f80fd5b5061053960175481565b348015610e9d575f80fd5b50610539610eac36600461350f565b612206565b348015610ebc575f80fd5b506105a9610ecb3660046134c1565b612218565b348015610edb575f80fd5b50610539610eea3660046134ef565b600a60209081525f928352604080842090915290825290205481565b348015610f11575f80fd5b506105a9610f203660046132c9565b612234565b348015610f30575f80fd5b50610539610f3f36600461337a565b80515f908152600a60209081526040808320938201518352929052205490565b348015610f6a575f80fd5b506104d3610f793660046132c9565b5f908152600860209081526040808320338452909152902054151590565b348015610fa2575f80fd5b5061085b610fb13660046134c1565b600860209081525f928352604080842090915290825290208054600182015460029092015490919083565b348015610fe7575f80fd5b5061053960135481565b348015610ffc575f80fd5b506104d361100b3660046132c9565b6013545f9081526012602090815260408083209383529290522054151590565b348015611036575f80fd5b506105396110453660046134c1565b5f9182526015602090815260408084206001600160a01b0393909316845291905290205490565b348015611077575f80fd5b5061085b6110863660046132c9565b60106020525f908152604090208054600182015460029092015490919083565b3480156110b1575f80fd5b505f546107b7906001600160a01b031681565b3480156110cf575f80fd5b506011546104d39060ff1681565b3480156110e8575f80fd5b5061053960035481565b5f6001600160e01b03198216637965db0b60e01b148061112257506301ffc9a760e01b6001600160e01b03198316145b92915050565b60408051606080820183525f808352602080840182905292840152825190810183528581529081018490529081018290525b9392505050565b6111785f805160206139be83398151915233611ea2565b6111e25760405162461bcd60e51b815260206004820152603060248201527f464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d4960448201526f544d454e545f41444d494e5f4f4e4c5960801b60648201526084015b60405180910390fd5b6111eb81611627565b50565b80515f908152600a602090815260408083208285015184529091528120545f0361121957505f919050565b4261122360065490565b60055484515f908152600a6020908152604080832082890151845290915290205461124e91906137c2565b61125891906137c2565b101561126557505f919050565b506001919050565b5f805160206139be833981519152611284816122e6565b50601655565b60115460ff16806112ad57506112ad5f80516020613a1e83398151915233611ea2565b6112c95760405162461bcd60e51b81526004016111d9906137d5565b6111eb33826122f0565b5f6112dc612464565b805490915060ff600160401b82041615906001600160401b03165f811580156113025750825b90505f826001600160401b0316600114801561131d5750303b155b90508115801561132b575080155b156113495760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561137357845460ff60401b1916600160401b1785555b61137b61248c565b5f80546001600160a01b0319166001600160a01b038e1690811790915560028b905560038c9055604051631a6e609f60e31b815263d37304f8906113c5908c908c90600401613817565b5f604051808303815f87803b1580156113dc575f80fd5b505af11580156113ee573d5f803e3d5ffd5b505050506113fb33611f9e565b61140433611df0565b6004879055600180546001600160a01b0319166001600160a01b03881617905561142f600a8a613843565b60055561143d600a8a613843565b60065560016016819055601755831561149057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b5f6114aa6108af611c42565b905090565b5f8054604051630ce52af560e01b8152306004820152602481018590526001600160a01b03848116604483015290911690630ce52af590606401602060405180830381865afa158015611504573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115a9190613856565b5f805160206139be83398151915261153f816122e6565b6006545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015611587573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ab9190613856565b6115b5919061386d565b82106115d45760405163a7075e5f60e01b815260040160405180910390fd5b50600555565b5f9081525f805160206139fe833981519152602052604090206001015490565b6116033361249e565b565b61160e826115da565b611617816122e6565b61162183836124bc565b50505050565b61163e5f805160206139be83398151915233611ea2565b6116be5760405162461bcd60e51b8152602060048201526044602482018190527f5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e908201527f545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f6064820152634f4e4c5960e01b608482015260a4016111d9565b6013545f9081526012602090815260408083208451845282529182902083518155908301516001820155910151600290910155565b5f806116fd611b34565b90505f611708611e1e565b5f8054604051634234a47960e01b815230600482015292935090916001600160a01b0390911690634234a479906024015f60405180830381865afa158015611752573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526117799190810190613880565b905080515f0361178c575f935050505090565b5f815184846040516020016117ab929190918252602082015260400190565b604051602081830303815290604052805190602001205f1c6117cd919061390f565b90508181815181106117e1576117e1613922565b602002602001015194505050505090565b6001600160a01b038116331461181b5760405163334bd91960e11b815260040160405180910390fd5b611825828261255d565b505050565b5f8054604051631dc7f3f160e21b81523060048201526001600160a01b039091169063771fcfc4906024015b602060405180830381865afa158015611871573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114aa9190613856565b5f805460405163d980b40d60e01b81523060048201526001600160a01b039091169063d980b40d90602401611856565b5f805160206139be8339815191526118dc816122e6565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015611922573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119469190613856565b905080611954846002613936565b10611972576040516360bc402f60e01b815260040160405180910390fd5b5050600455565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa1580156119be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119e59190810190613880565b90505f805b8251811015611a2a57611a1685848381518110611a0957611a09613922565b60200260200101516114af565b611a2090836137c2565b91506001016119ea565b509392505050565b5f611122611a3e611c42565b83612047565b611a4e5f33611ea2565b611a6a5760405162461bcd60e51b81526004016111d99061394d565b5f5b8151811015611aad57611aa55f805160206139be833981519152838381518110611a9857611a98613922565b6020026020010151611605565b600101611a6c565b5050565b611ab96125d6565b611ac28261267a565b611aad8282612684565b5f611ad5612740565b505f805160206139de83398151915290565b5f805160206139be833981519152611afe816122e6565b50601755565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401611856565b5f8054604051635c53435960e01b8152306004820152429183916001600160a01b0390911690635c53435990602401602060405180830381865afa158015611b7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ba29190613856565b611bac908361390f565b905060045481611bbc919061390f565b611bc6908261386d565b9250505090565b60115460ff1680611bf05750611bf05f80516020613a1e83398151915233611ea2565b611c0c5760405162461bcd60e51b81526004016111d9906137d5565b5f5b8151811015611aad57611c3a33838381518110611c2d57611c2d613922565b60200260200101516122f0565b600101611c0e565b5f80546040516322fceb7560e01b81523060048201526001600160a01b03909116906322fceb7590602401611856565b5f80546040516324f7ee1760e21b8152306004820152602481018690526001600160a01b0385811660448301528481166064830152909116906393dfb85c90608401602060405180830381865afa158015611ccf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf39190613856565b949350505050565b5f611d04612464565b805490915060ff600160401b82041615906001600160401b03165f81158015611d2a5750825b90505f826001600160401b03166001148015611d455750303b155b905081158015611d53575080155b15611d715760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611d9b57845460ff60401b1916600160401b1785555b611da3612789565b8315611de957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f805160206139be833981519152611e07816122e6565b611aad5f80516020613a1e83398151915283611605565b5f8054604051635c53435960e01b815230600482015242916001600160a01b031690635c53435990602401602060405180830381865afa158015611e64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e889190613856565b611e92908261390f565b611e9c908261386d565b91505090565b5f9182525f805160206139fe833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611ee25f33611ea2565b611f3c5760405162461bcd60e51b815260206004820152602560248201527f4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e6044820152645f4f4e4c5960d81b60648201526084016111d9565b5f8054604080516392a2ebf360e01b815290516001600160a01b03909216926392a2ebf39260048084019382900301818387803b158015611f7b575f80fd5b505af1158015611621573d5f803e3d5ffd5b5f6002546003546114aa91906137c2565b611fa85f33611ea2565b611fc45760405162461bcd60e51b81526004016111d99061394d565b6111eb5f805160206139be83398151915282611605565b5f54604051634234a47960e01b81523060048201526060916001600160a01b031690634234a479906024015f60405180830381865afa158015612020573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114aa9190810190613880565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa15801561208c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120b39190810190613880565b90505f805b82518110156120f9576120e5868483815181106120d7576120d7613922565b602002602001015187611c72565b6120ef90836137c2565b91506001016120b8565b50949350505050565b5f61115a61210e611c42565b8484611c72565b5f805160206139be83398151915261212c816122e6565b5f5b82518110156118255761215a5f80516020613a1e833981519152848381518110611a9857611a98613922565b60010161212e565b5f805160206139be833981519152612179816122e6565b5f54604051631dc8b94960e01b8152306004820152602481018490526001600160a01b0390911690631dc8b949906044015f604051808303815f87803b1580156121c1575f80fd5b505af11580156121d3573d5f803e3d5ffd5b505050505050565b5f805160206139be8339815191526121f2816122e6565b506011805460ff1916911515919091179055565b5f611122612212611c42565b836114af565b612221826115da565b61222a816122e6565b611621838361255d565b5f805160206139be83398151915261224b816122e6565b6005545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015612293573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122b79190613856565b6122c1919061386d565b82106122e057604051633c9f1a5360e01b815260040160405180910390fd5b50600655565b6111eb8133612799565b80515f9081526008602090815260408083206001600160a01b03861684529091529020541561233257604051630ae09ad960e41b815260040160405180910390fd5b805160025460035461234491906137c2565b101561236357604051630ae09ad960e41b815260040160405180910390fd5b80515f90815260076020526040812054900361239257612381611895565b81515f908152600760205260409020555b80515f9081526008602090815260408083206001600160a01b038616845282529182902083518082559184015160018201819055928401516002909101556123da91426127d2565b5f6123e483611a32565b82515f9081526009602090815260408083208287015184529091528120805492935083929091906124169084906137c2565b9091555050604080830151602080850151835190815290810184905290917fa8445a6b8a16633ad62fbc0954848ec55c4d5323d90b9745dbda4121ec5ce12b910160405180910390a2505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00611122565b61249461281c565b6111eb5f336124bc565b6124b560035460016124b091906137c2565b612841565b61249e5750565b5f5f805160206139fe8339815191526124d58484611ea2565b612554575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561250a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050611122565b5f915050611122565b5f5f805160206139fe8339815191526125768484611ea2565b15612554575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050611122565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061265c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126505f805160206139de833981519152546001600160a01b031690565b6001600160a01b031614155b156116035760405163703e46dd60e11b815260040160405180910390fd5b5f611aad816122e6565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156126de575060408051601f3d908101601f191682019092526126db91810190613856565b60015b61270657604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111d9565b5f805160206139de833981519152811461273657604051632a87526960e21b8152600481018290526024016111d9565b6118258383612aaa565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116035760405163703e46dd60e11b815260040160405180910390fd5b61279161281c565b61160361248c565b6127a38282611ea2565b611aad5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111d9565b5f838152600a60209081526040808320858452909152902054156127f557505050565b805f0361280157505050565b5f928352600a60209081526040808520938552929052912055565b612824612aff565b61160357604051631afcd79f60e31b815260040160405180910390fd5b5f818152600760205260408120546003541561290d575f60078161286660018761386d565b81526020019081526020015f205490508082101561290b575f612887611fdb565b90505f5b81518110156129055760085f8781526020019081526020015f205f8383815181106128b8576128b8613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f01545f146128fd575f868152600760205260409020839055612905565b60010161288b565b50819250505b505b80612916611c42565b101561292957612924612b18565b61290d565b5f600361293583611979565b612940906002613936565b61294a9190613843565b6129559060016137c2565b90505f612960611fdb565b90505f805b8251811015612a6a575f83828151811061298157612981613922565b6020908102919091018101515f8a81526008835260408082206001600160a01b038416835284529081902081516060810183528154808252600183015495820195909552600290910154918101919091529092509089146129e3575050612a62565b80515f908152600960209081526040808320828501518452909152902054868110612a5e5781515f908152600a60209081526040808320828601518452909152902054600554612a3390826137c2565b421015612a435750505050612a6a565b612a4d8333612e58565b5060019a9950505050505050505050565b5050505b600101612965565b5080158015612a865750612a7c611c42565b612a84611895565b115b15612a9f57612a93612b18565b50600195945050505050565b505f95945050505050565b612ab382613100565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612af7576118258282613163565b611aad6131d5565b5f612b08612464565b54600160401b900460ff16919050565b5f612b21611c42565b90505f612b2c611fdb565b90505f5b8151811015612e18575f83815260146020526040812083518290859085908110612b5c57612b5c613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612cab575f612bad838381518110612ba057612ba0613922565b6020026020010151611a32565b60165460145f8781526020019081526020015f205f868681518110612bd457612bd4613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612c069190613936565b612c109190613936565b5f5484519192506001600160a01b031690635e00bf4690859085908110612c3957612c39613922565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612c93575f80fd5b505af1158015612ca5573d5f803e3d5ffd5b50505050505b5f83815260156020526040812083518290859085908110612cce57612cce613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612e10575f612d12838381518110612ba057612ba0613922565b60175460155f8781526020019081526020015f205f868681518110612d3957612d39613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612d6b9190613936565b612d759190613936565b5f5484519192506001600160a01b031690635e00bf4690859085908110612d9e57612d9e613922565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612df8575f80fd5b505af1158015612e0a573d5f803e3d5ffd5b50505050505b600101612b30565b505f805460408051632a21edc760e21b815290516001600160a01b039092169263a887b71c9260048084019382900301818387803b1580156121c1575f80fd5b5f612e61611c42565b83515f908152600760205260409020549091508114612e9357604051631f2d18b160e31b815260040160405180910390fd5b8251612ea19060019061386d565b60035414612ec257604051631f2d18b160e31b815260040160405180910390fd5b5f612ecb611fdb565b90505f5b8151811015612f9d57846020015160085f875f015181526020019081526020015f205f848481518110612f0457612f04613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206001015403612f955760145f8481526020019081526020015f205f838381518110612f5857612f58613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f815480929190612f8f9061398f565b91905055505b600101612ecf565b50612fa7846111ee565b612fe8575f8281526015602090815260408083206001600160a01b03871684529091528120805460019290612fdd9084906137c2565b909155506130409050565b826001600160a01b0316612ffa6116f3565b6001600160a01b031603613040575f8281526015602090815260408083206001600160a01b0387168452909152812080546001929061303a9084906137c2565b90915550505b6013545f90815260126020908152604080832087518452825280832087518082558884018051600184015589840180516002909401939093556003829055908552600b845282852080546001600160a01b0319166001600160a01b038a1617905588518552600d845282852043905588518552600e84529382902042905551925187518251918252928101929092527fc28fbeddd1d6ba9496d1b91564f9aa2bc4dffed78aae631bbc6ef67296ad3c3c910160405180910390a250505050565b806001600160a01b03163b5f0361313557604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111d9565b5f805160206139de83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b03168460405161317f91906139a7565b5f60405180830381855af49150503d805f81146131b7576040519150601f19603f3d011682016040523d82523d5f602084013e6131bc565b606091505b50915091506131cc8583836131f4565b95945050505050565b34156116035760405163b398979f60e01b815260040160405180910390fd5b6060826132095761320482613250565b61115a565b815115801561322057506001600160a01b0384163b155b1561324957604051639996b31560e01b81526001600160a01b03851660048201526024016111d9565b508061115a565b8051156132605780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215613289575f80fd5b81356001600160e01b03198116811461115a575f80fd5b5f805f606084860312156132b2575f80fd5b505081359360208301359350604090920135919050565b5f602082840312156132d9575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561331c5761331c6132e0565b604052919050565b5f60608284031215613334575f80fd5b604051606081016001600160401b0381118282101715613356576133566132e0565b60409081528335825260208085013590830152928301359281019290925250919050565b5f6060828403121561338a575f80fd5b61115a8383613324565b6001600160a01b03811681146111eb575f80fd5b5f6001600160401b038211156133c0576133c06132e0565b5060051b60200190565b5f82601f8301126133d9575f80fd5b81356133ec6133e7826133a8565b6132f4565b8082825260208201915060208360051b86010192508583111561340d575f80fd5b602085015b8381101561343357803561342581613394565b835260209283019201613412565b5095945050505050565b5f805f805f805f60e0888a031215613453575f80fd5b873561345e81613394565b965060208801359550604088013594506060880135935060808801356001600160401b0381111561348d575f80fd5b6134998a828b016133ca565b93505060a0880135915060c08801356134b181613394565b8091505092959891949750929550565b5f80604083850312156134d2575f80fd5b8235915060208301356134e481613394565b809150509250929050565b5f8060408385031215613500575f80fd5b50508035926020909101359150565b5f6020828403121561351f575f80fd5b813561115a81613394565b5f6020828403121561353a575f80fd5b81356001600160401b0381111561354f575f80fd5b611cf3848285016133ca565b5f806040838503121561356c575f80fd5b823561357781613394565b915060208301356001600160401b03811115613591575f80fd5b8301601f810185136135a1575f80fd5b80356001600160401b038111156135ba576135ba6132e0565b6135cd601f8201601f19166020016132f4565b8181528660208385010111156135e1575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f60208284031215613610575f80fd5b81356001600160401b03811115613625575f80fd5b8201601f81018413613635575f80fd5b80356136436133e7826133a8565b80828252602082019150602060608402850101925086831115613664575f80fd5b6020840193505b828410156136905761367d8785613324565b825260208201915060608401935061366b565b9695505050505050565b5f805f606084860312156136ac575f80fd5b8335925060208401356136be81613394565b915060408401356136ce81613394565b809150509250925092565b5f8151808452602084019350602083015f5b828110156137125781516001600160a01b03168652602095860195909101906001016136eb565b5093949350505050565b602081525f61115a60208301846136d9565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215613774575f80fd5b823561377f81613394565b915060208301356134e481613394565b5f6020828403121561379f575f80fd5b8135801515811461115a575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115611122576111226137ae565b60208082526022908201527f554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d45604082015261139560f21b606082015260800190565b828152604060208201525f611cf360408301846136d9565b634e487b7160e01b5f52601260045260245ffd5b5f826138515761385161382f565b500490565b5f60208284031215613866575f80fd5b5051919050565b81810381811115611122576111226137ae565b5f60208284031215613890575f80fd5b81516001600160401b038111156138a5575f80fd5b8201601f810184136138b5575f80fd5b80516138c36133e7826133a8565b8082825260208201915060208360051b8501019250868311156138e4575f80fd5b6020840193505b828410156136905783516138fe81613394565b8252602093840193909101906138eb565b5f8261391d5761391d61382f565b500690565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417611122576111226137ae565b60208082526022908201527f4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e6040820152614c5960f01b606082015260800190565b5f600182016139a0576139a06137ae565b5060010190565b5f82518060208501845e5f92019182525091905056fedb2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18a26469706673582212205c57ace4d11ef4f14745cfa900bbfba3b877027ff6007e947931e207f05d43d964736f6c634300081a0033","sourceMap":"545:34540:114:-:0;;;1171:4:22;1128:48;;545:34540:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106104b0575f3560e01c80636c713af81161026d578063bff92c8c1161014a578063e07472ef116100be578063ed8a1d5911610083578063ed8a1d591461102b578063eda67fc41461106c578063ee99205c146110a6578063ef9ae15c146110c4578063f1949add1461092e578063fdafe9ca146110dd575f80fd5b8063e07472ef14610f25578063e4a3fb7414610f5f578063e90d4c0614610f97578063ec18c18614610fdc578063ec23ec2e14610ff1575f80fd5b8063d283392e1161010f578063d283392e14610e52578063d3eef4cc14610e7d578063d440116d14610e92578063d547741f14610eb1578063d783068814610ed0578063da7d28b614610f06575f80fd5b8063bff92c8c14610daa578063c19b406c14610dbf578063cf6772ad14610df5578063d03509ec14610e14578063d2526fef14610e33575f80fd5b806391d14854116101e1578063a217fddf116101a6578063a217fddf14610ce7578063aa0d6fcd14610cfa578063ab208ebd14610d1b578063ad3cb1cc14610d2f578063ba26513e14610d6c578063bb04bd2f14610d8b575f80fd5b806391d1485414610c5657806392a2ebf314610c75578063943b79e214610c89578063949d7c2a14610c9d578063a207fe2f14610cbc575f80fd5b806380e460f01161023257806380e460f014610b905780638129fc1c14610bb057806381df174614610bc457806385e6b8c214610be357806390879f6414610c0e57806391807e4f14610c22575f80fd5b80636c713af814610ad15780636f86529414610ae55780637aa81c2a14610b1b5780637ac561c814610b3a5780637cfd820514610b65575f80fd5b806336568abe1161039b578063556d97c81161030f5780635d3ea8f1116102d45780635d3ea8f114610a145780635db916ab14610a285780635f4d642e14610a485780635f83c7d514610a5c578063622e361614610a715780636978ab1214610a90575f80fd5b8063556d97c81461092e57806355b8119d146109ad57806357342282146109c257806358376877146109e157806359b9959714610a00575f80fd5b806345367f231161036057806345367f2314610895578063491d0467146108b45780634b47d955146108d35780634ceb2e66146108f25780634f1ef2861461090757806352d1902d1461091a575f80fd5b806336568abe146107cf5780633752d675146107ee57806337d7f58f146108025780633ba18005146108165780633d64592714610876575f80fd5b80631241ebe311610432578063248a9ca3116103f7578063248a9ca3146106c357806326624e37146106e25780632bfd11d6146106f65780632f2ff15d146107655780633119edd41461078457806335ea1c63146107a3575f80fd5b80631241ebe31461062757806314e380261461063b5780631db859c71461064f5780631de38fe1146106855780631f83e2a3146106a4575f80fd5b806308c7050f1161047857806308c7050f1461058a5780630cf6b6bd146105ab5780630d39f7f0146105ca5780630e74b609146105e9578063107e21ca14610608575f80fd5b806301ffc9a7146104b4578063026583d7146104e8578063028e490a1461052957806303d3f7fd1461054757806308750a321461055c575b5f80fd5b3480156104bf575f80fd5b506104d36104ce366004613279565b6110f2565b60405190151581526020015b60405180910390f35b3480156104f3575f80fd5b506105076105023660046132a0565b611128565b60408051825181526020808401519082015291810151908201526060016104df565b348015610534575f80fd5b506006545b6040519081526020016104df565b348015610552575f80fd5b5061053960025481565b348015610567575f80fd5b506104d36105763660046132c9565b600c6020525f908152604090205460ff1681565b348015610595575f80fd5b506105a96105a436600461337a565b611161565b005b3480156105b6575f80fd5b506104d36105c536600461337a565b6111ee565b3480156105d5575f80fd5b506105a96105e43660046132c9565b61126d565b3480156105f4575f80fd5b506105a961060336600461337a565b61128a565b348015610613575f80fd5b506105a961062236600461343d565b6112d3565b348015610632575f80fd5b50600454610539565b348015610646575f80fd5b5061053961149e565b34801561065a575f80fd5b506105396106693660046134c1565b601560209081525f928352604080842090915290825290205481565b348015610690575f80fd5b5061053961069f3660046134c1565b6114af565b3480156106af575f80fd5b506105a96106be3660046132c9565b611528565b3480156106ce575f80fd5b506105396106dd3660046132c9565b6115da565b3480156106ed575f80fd5b506105a96115fa565b348015610701575f80fd5b506105076107103660046132c9565b60408051606080820183525f8083526020808401829052928401819052601354815260128352838120948152938252928290208251938401835280548452600181015491840191909152600201549082015290565b348015610770575f80fd5b506105a961077f3660046134c1565b611605565b34801561078f575f80fd5b506105a961079e36600461337a565b611627565b3480156107ae575f80fd5b506107b76116f3565b6040516001600160a01b0390911681526020016104df565b3480156107da575f80fd5b506105a96107e93660046134c1565b6117f2565b3480156107f9575f80fd5b5061053961182a565b34801561080d575f80fd5b50610539611895565b348015610821575f80fd5b5061085b6108303660046134ef565b601260209081525f928352604080842090915290825290208054600182015460029092015490919083565b604080519384526020840192909252908201526060016104df565b348015610881575f80fd5b506105a96108903660046132c9565b6118c5565b3480156108a0575f80fd5b506105396108af3660046132c9565b611979565b3480156108bf575f80fd5b506105396108ce36600461350f565b611a32565b3480156108de575f80fd5b506105a96108ed36600461352a565b611a44565b3480156108fd575f80fd5b5061053960045481565b6105a961091536600461355b565b611ab1565b348015610925575f80fd5b50610539611acc565b348015610939575f80fd5b506105076109483660046134c1565b604080516060810182525f8082526020820181905291810191909152505f9182526008602090815260408084206001600160a01b0393909316845291815291819020815160608101835281548152600182015493810193909352600201549082015290565b3480156109b8575f80fd5b5061053960065481565b3480156109cd575f80fd5b506105a96109dc3660046132c9565b611ae7565b3480156109ec575f80fd5b506001546107b7906001600160a01b031681565b348015610a0b575f80fd5b50600354610539565b348015610a1f575f80fd5b50610539611b04565b348015610a33575f80fd5b506105395f80516020613a1e83398151915281565b348015610a53575f80fd5b50610539611b34565b348015610a67575f80fd5b5061053960165481565b348015610a7c575f80fd5b506105a9610a8b366004613600565b611bcd565b348015610a9b575f80fd5b50610539610aaa3660046134c1565b5f9182526014602090815260408084206001600160a01b0393909316845291905290205490565b348015610adc575f80fd5b50610539611c42565b348015610af0575f80fd5b50610539610aff3660046134c1565b601460209081525f928352604080842090915290825290205481565b348015610b26575f80fd5b50610539610b3536600461369a565b611c72565b348015610b45575f80fd5b50610539610b543660046132c9565b600d6020525f908152604090205481565b348015610b70575f80fd5b50610539610b7f3660046132c9565b600f6020525f908152604090205481565b348015610b9b575f80fd5b506105395f805160206139be83398151915281565b348015610bbb575f80fd5b506105a9611cfb565b348015610bcf575f80fd5b506105a9610bde36600461350f565b611df0565b348015610bee575f80fd5b50610539610bfd3660046132c9565b60076020525f908152604090205481565b348015610c19575f80fd5b50610539611e1e565b348015610c2d575f80fd5b506107b7610c3c3660046132c9565b600b6020525f90815260409020546001600160a01b031681565b348015610c61575f80fd5b506104d3610c703660046134c1565b611ea2565b348015610c80575f80fd5b506105a9611ed8565b348015610c94575f80fd5b50610539611f8d565b348015610ca8575f80fd5b506105a9610cb736600461350f565b611f9e565b348015610cc7575f80fd5b50610539610cd63660046132c9565b600e6020525f908152604090205481565b348015610cf2575f80fd5b506105395f81565b348015610d05575f80fd5b50610d0e611fdb565b6040516104df919061371c565b348015610d26575f80fd5b50600554610539565b348015610d3a575f80fd5b50610d5f604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516104df919061372e565b348015610d77575f80fd5b50610539610d863660046134c1565b612047565b348015610d96575f80fd5b50610539610da5366004613763565b612102565b348015610db5575f80fd5b5061053960055481565b348015610dca575f80fd5b50610539610dd93660046134ef565b600960209081525f928352604080842090915290825290205481565b348015610e00575f80fd5b506105a9610e0f36600461352a565b612115565b348015610e1f575f80fd5b506105a9610e2e3660046132c9565b612162565b348015610e3e575f80fd5b506105a9610e4d36600461378f565b6121db565b348015610e5d575f80fd5b50610539610e6c3660046132c9565b5f9081526007602052604090205490565b348015610e88575f80fd5b5061053960175481565b348015610e9d575f80fd5b50610539610eac36600461350f565b612206565b348015610ebc575f80fd5b506105a9610ecb3660046134c1565b612218565b348015610edb575f80fd5b50610539610eea3660046134ef565b600a60209081525f928352604080842090915290825290205481565b348015610f11575f80fd5b506105a9610f203660046132c9565b612234565b348015610f30575f80fd5b50610539610f3f36600461337a565b80515f908152600a60209081526040808320938201518352929052205490565b348015610f6a575f80fd5b506104d3610f793660046132c9565b5f908152600860209081526040808320338452909152902054151590565b348015610fa2575f80fd5b5061085b610fb13660046134c1565b600860209081525f928352604080842090915290825290208054600182015460029092015490919083565b348015610fe7575f80fd5b5061053960135481565b348015610ffc575f80fd5b506104d361100b3660046132c9565b6013545f9081526012602090815260408083209383529290522054151590565b348015611036575f80fd5b506105396110453660046134c1565b5f9182526015602090815260408084206001600160a01b0393909316845291905290205490565b348015611077575f80fd5b5061085b6110863660046132c9565b60106020525f908152604090208054600182015460029092015490919083565b3480156110b1575f80fd5b505f546107b7906001600160a01b031681565b3480156110cf575f80fd5b506011546104d39060ff1681565b3480156110e8575f80fd5b5061053960035481565b5f6001600160e01b03198216637965db0b60e01b148061112257506301ffc9a760e01b6001600160e01b03198316145b92915050565b60408051606080820183525f808352602080840182905292840152825190810183528581529081018490529081018290525b9392505050565b6111785f805160206139be83398151915233611ea2565b6111e25760405162461bcd60e51b815260206004820152603060248201527f464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d4960448201526f544d454e545f41444d494e5f4f4e4c5960801b60648201526084015b60405180910390fd5b6111eb81611627565b50565b80515f908152600a602090815260408083208285015184529091528120545f0361121957505f919050565b4261122360065490565b60055484515f908152600a6020908152604080832082890151845290915290205461124e91906137c2565b61125891906137c2565b101561126557505f919050565b506001919050565b5f805160206139be833981519152611284816122e6565b50601655565b60115460ff16806112ad57506112ad5f80516020613a1e83398151915233611ea2565b6112c95760405162461bcd60e51b81526004016111d9906137d5565b6111eb33826122f0565b5f6112dc612464565b805490915060ff600160401b82041615906001600160401b03165f811580156113025750825b90505f826001600160401b0316600114801561131d5750303b155b90508115801561132b575080155b156113495760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561137357845460ff60401b1916600160401b1785555b61137b61248c565b5f80546001600160a01b0319166001600160a01b038e1690811790915560028b905560038c9055604051631a6e609f60e31b815263d37304f8906113c5908c908c90600401613817565b5f604051808303815f87803b1580156113dc575f80fd5b505af11580156113ee573d5f803e3d5ffd5b505050506113fb33611f9e565b61140433611df0565b6004879055600180546001600160a01b0319166001600160a01b03881617905561142f600a8a613843565b60055561143d600a8a613843565b60065560016016819055601755831561149057845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b5f6114aa6108af611c42565b905090565b5f8054604051630ce52af560e01b8152306004820152602481018590526001600160a01b03848116604483015290911690630ce52af590606401602060405180830381865afa158015611504573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115a9190613856565b5f805160206139be83398151915261153f816122e6565b6006545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015611587573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115ab9190613856565b6115b5919061386d565b82106115d45760405163a7075e5f60e01b815260040160405180910390fd5b50600555565b5f9081525f805160206139fe833981519152602052604090206001015490565b6116033361249e565b565b61160e826115da565b611617816122e6565b61162183836124bc565b50505050565b61163e5f805160206139be83398151915233611ea2565b6116be5760405162461bcd60e51b8152602060048201526044602482018190527f5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e908201527f545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f6064820152634f4e4c5960e01b608482015260a4016111d9565b6013545f9081526012602090815260408083208451845282529182902083518155908301516001820155910151600290910155565b5f806116fd611b34565b90505f611708611e1e565b5f8054604051634234a47960e01b815230600482015292935090916001600160a01b0390911690634234a479906024015f60405180830381865afa158015611752573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526117799190810190613880565b905080515f0361178c575f935050505090565b5f815184846040516020016117ab929190918252602082015260400190565b604051602081830303815290604052805190602001205f1c6117cd919061390f565b90508181815181106117e1576117e1613922565b602002602001015194505050505090565b6001600160a01b038116331461181b5760405163334bd91960e11b815260040160405180910390fd5b611825828261255d565b505050565b5f8054604051631dc7f3f160e21b81523060048201526001600160a01b039091169063771fcfc4906024015b602060405180830381865afa158015611871573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114aa9190613856565b5f805460405163d980b40d60e01b81523060048201526001600160a01b039091169063d980b40d90602401611856565b5f805160206139be8339815191526118dc816122e6565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015611922573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906119469190613856565b905080611954846002613936565b10611972576040516360bc402f60e01b815260040160405180910390fd5b5050600455565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa1580156119be573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119e59190810190613880565b90505f805b8251811015611a2a57611a1685848381518110611a0957611a09613922565b60200260200101516114af565b611a2090836137c2565b91506001016119ea565b509392505050565b5f611122611a3e611c42565b83612047565b611a4e5f33611ea2565b611a6a5760405162461bcd60e51b81526004016111d99061394d565b5f5b8151811015611aad57611aa55f805160206139be833981519152838381518110611a9857611a98613922565b6020026020010151611605565b600101611a6c565b5050565b611ab96125d6565b611ac28261267a565b611aad8282612684565b5f611ad5612740565b505f805160206139de83398151915290565b5f805160206139be833981519152611afe816122e6565b50601755565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401611856565b5f8054604051635c53435960e01b8152306004820152429183916001600160a01b0390911690635c53435990602401602060405180830381865afa158015611b7e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611ba29190613856565b611bac908361390f565b905060045481611bbc919061390f565b611bc6908261386d565b9250505090565b60115460ff1680611bf05750611bf05f80516020613a1e83398151915233611ea2565b611c0c5760405162461bcd60e51b81526004016111d9906137d5565b5f5b8151811015611aad57611c3a33838381518110611c2d57611c2d613922565b60200260200101516122f0565b600101611c0e565b5f80546040516322fceb7560e01b81523060048201526001600160a01b03909116906322fceb7590602401611856565b5f80546040516324f7ee1760e21b8152306004820152602481018690526001600160a01b0385811660448301528481166064830152909116906393dfb85c90608401602060405180830381865afa158015611ccf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611cf39190613856565b949350505050565b5f611d04612464565b805490915060ff600160401b82041615906001600160401b03165f81158015611d2a5750825b90505f826001600160401b03166001148015611d455750303b155b905081158015611d53575080155b15611d715760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611d9b57845460ff60401b1916600160401b1785555b611da3612789565b8315611de957845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f805160206139be833981519152611e07816122e6565b611aad5f80516020613a1e83398151915283611605565b5f8054604051635c53435960e01b815230600482015242916001600160a01b031690635c53435990602401602060405180830381865afa158015611e64573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611e889190613856565b611e92908261390f565b611e9c908261386d565b91505090565b5f9182525f805160206139fe833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611ee25f33611ea2565b611f3c5760405162461bcd60e51b815260206004820152602560248201527f4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e6044820152645f4f4e4c5960d81b60648201526084016111d9565b5f8054604080516392a2ebf360e01b815290516001600160a01b03909216926392a2ebf39260048084019382900301818387803b158015611f7b575f80fd5b505af1158015611621573d5f803e3d5ffd5b5f6002546003546114aa91906137c2565b611fa85f33611ea2565b611fc45760405162461bcd60e51b81526004016111d99061394d565b6111eb5f805160206139be83398151915282611605565b5f54604051634234a47960e01b81523060048201526060916001600160a01b031690634234a479906024015f60405180830381865afa158015612020573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114aa9190810190613880565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa15801561208c573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120b39190810190613880565b90505f805b82518110156120f9576120e5868483815181106120d7576120d7613922565b602002602001015187611c72565b6120ef90836137c2565b91506001016120b8565b50949350505050565b5f61115a61210e611c42565b8484611c72565b5f805160206139be83398151915261212c816122e6565b5f5b82518110156118255761215a5f80516020613a1e833981519152848381518110611a9857611a98613922565b60010161212e565b5f805160206139be833981519152612179816122e6565b5f54604051631dc8b94960e01b8152306004820152602481018490526001600160a01b0390911690631dc8b949906044015f604051808303815f87803b1580156121c1575f80fd5b505af11580156121d3573d5f803e3d5ffd5b505050505050565b5f805160206139be8339815191526121f2816122e6565b506011805460ff1916911515919091179055565b5f611122612212611c42565b836114af565b612221826115da565b61222a816122e6565b611621838361255d565b5f805160206139be83398151915261224b816122e6565b6005545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015612293573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122b79190613856565b6122c1919061386d565b82106122e057604051633c9f1a5360e01b815260040160405180910390fd5b50600655565b6111eb8133612799565b80515f9081526008602090815260408083206001600160a01b03861684529091529020541561233257604051630ae09ad960e41b815260040160405180910390fd5b805160025460035461234491906137c2565b101561236357604051630ae09ad960e41b815260040160405180910390fd5b80515f90815260076020526040812054900361239257612381611895565b81515f908152600760205260409020555b80515f9081526008602090815260408083206001600160a01b038616845282529182902083518082559184015160018201819055928401516002909101556123da91426127d2565b5f6123e483611a32565b82515f9081526009602090815260408083208287015184529091528120805492935083929091906124169084906137c2565b9091555050604080830151602080850151835190815290810184905290917fa8445a6b8a16633ad62fbc0954848ec55c4d5323d90b9745dbda4121ec5ce12b910160405180910390a2505050565b5f807ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a00611122565b61249461281c565b6111eb5f336124bc565b6124b560035460016124b091906137c2565b612841565b61249e5750565b5f5f805160206139fe8339815191526124d58484611ea2565b612554575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561250a3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050611122565b5f915050611122565b5f5f805160206139fe8339815191526125768484611ea2565b15612554575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050611122565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061265c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126505f805160206139de833981519152546001600160a01b031690565b6001600160a01b031614155b156116035760405163703e46dd60e11b815260040160405180910390fd5b5f611aad816122e6565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156126de575060408051601f3d908101601f191682019092526126db91810190613856565b60015b61270657604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111d9565b5f805160206139de833981519152811461273657604051632a87526960e21b8152600481018290526024016111d9565b6118258383612aaa565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116035760405163703e46dd60e11b815260040160405180910390fd5b61279161281c565b61160361248c565b6127a38282611ea2565b611aad5760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111d9565b5f838152600a60209081526040808320858452909152902054156127f557505050565b805f0361280157505050565b5f928352600a60209081526040808520938552929052912055565b612824612aff565b61160357604051631afcd79f60e31b815260040160405180910390fd5b5f818152600760205260408120546003541561290d575f60078161286660018761386d565b81526020019081526020015f205490508082101561290b575f612887611fdb565b90505f5b81518110156129055760085f8781526020019081526020015f205f8383815181106128b8576128b8613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f01545f146128fd575f868152600760205260409020839055612905565b60010161288b565b50819250505b505b80612916611c42565b101561292957612924612b18565b61290d565b5f600361293583611979565b612940906002613936565b61294a9190613843565b6129559060016137c2565b90505f612960611fdb565b90505f805b8251811015612a6a575f83828151811061298157612981613922565b6020908102919091018101515f8a81526008835260408082206001600160a01b038416835284529081902081516060810183528154808252600183015495820195909552600290910154918101919091529092509089146129e3575050612a62565b80515f908152600960209081526040808320828501518452909152902054868110612a5e5781515f908152600a60209081526040808320828601518452909152902054600554612a3390826137c2565b421015612a435750505050612a6a565b612a4d8333612e58565b5060019a9950505050505050505050565b5050505b600101612965565b5080158015612a865750612a7c611c42565b612a84611895565b115b15612a9f57612a93612b18565b50600195945050505050565b505f95945050505050565b612ab382613100565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612af7576118258282613163565b611aad6131d5565b5f612b08612464565b54600160401b900460ff16919050565b5f612b21611c42565b90505f612b2c611fdb565b90505f5b8151811015612e18575f83815260146020526040812083518290859085908110612b5c57612b5c613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612cab575f612bad838381518110612ba057612ba0613922565b6020026020010151611a32565b60165460145f8781526020019081526020015f205f868681518110612bd457612bd4613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612c069190613936565b612c109190613936565b5f5484519192506001600160a01b031690635e00bf4690859085908110612c3957612c39613922565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612c93575f80fd5b505af1158015612ca5573d5f803e3d5ffd5b50505050505b5f83815260156020526040812083518290859085908110612cce57612cce613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612e10575f612d12838381518110612ba057612ba0613922565b60175460155f8781526020019081526020015f205f868681518110612d3957612d39613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612d6b9190613936565b612d759190613936565b5f5484519192506001600160a01b031690635e00bf4690859085908110612d9e57612d9e613922565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612df8575f80fd5b505af1158015612e0a573d5f803e3d5ffd5b50505050505b600101612b30565b505f805460408051632a21edc760e21b815290516001600160a01b039092169263a887b71c9260048084019382900301818387803b1580156121c1575f80fd5b5f612e61611c42565b83515f908152600760205260409020549091508114612e9357604051631f2d18b160e31b815260040160405180910390fd5b8251612ea19060019061386d565b60035414612ec257604051631f2d18b160e31b815260040160405180910390fd5b5f612ecb611fdb565b90505f5b8151811015612f9d57846020015160085f875f015181526020019081526020015f205f848481518110612f0457612f04613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206001015403612f955760145f8481526020019081526020015f205f838381518110612f5857612f58613922565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f815480929190612f8f9061398f565b91905055505b600101612ecf565b50612fa7846111ee565b612fe8575f8281526015602090815260408083206001600160a01b03871684529091528120805460019290612fdd9084906137c2565b909155506130409050565b826001600160a01b0316612ffa6116f3565b6001600160a01b031603613040575f8281526015602090815260408083206001600160a01b0387168452909152812080546001929061303a9084906137c2565b90915550505b6013545f90815260126020908152604080832087518452825280832087518082558884018051600184015589840180516002909401939093556003829055908552600b845282852080546001600160a01b0319166001600160a01b038a1617905588518552600d845282852043905588518552600e84529382902042905551925187518251918252928101929092527fc28fbeddd1d6ba9496d1b91564f9aa2bc4dffed78aae631bbc6ef67296ad3c3c910160405180910390a250505050565b806001600160a01b03163b5f0361313557604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111d9565b5f805160206139de83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b03168460405161317f91906139a7565b5f60405180830381855af49150503d805f81146131b7576040519150601f19603f3d011682016040523d82523d5f602084013e6131bc565b606091505b50915091506131cc8583836131f4565b95945050505050565b34156116035760405163b398979f60e01b815260040160405180910390fd5b6060826132095761320482613250565b61115a565b815115801561322057506001600160a01b0384163b155b1561324957604051639996b31560e01b81526001600160a01b03851660048201526024016111d9565b508061115a565b8051156132605780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215613289575f80fd5b81356001600160e01b03198116811461115a575f80fd5b5f805f606084860312156132b2575f80fd5b505081359360208301359350604090920135919050565b5f602082840312156132d9575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b038111828210171561331c5761331c6132e0565b604052919050565b5f60608284031215613334575f80fd5b604051606081016001600160401b0381118282101715613356576133566132e0565b60409081528335825260208085013590830152928301359281019290925250919050565b5f6060828403121561338a575f80fd5b61115a8383613324565b6001600160a01b03811681146111eb575f80fd5b5f6001600160401b038211156133c0576133c06132e0565b5060051b60200190565b5f82601f8301126133d9575f80fd5b81356133ec6133e7826133a8565b6132f4565b8082825260208201915060208360051b86010192508583111561340d575f80fd5b602085015b8381101561343357803561342581613394565b835260209283019201613412565b5095945050505050565b5f805f805f805f60e0888a031215613453575f80fd5b873561345e81613394565b965060208801359550604088013594506060880135935060808801356001600160401b0381111561348d575f80fd5b6134998a828b016133ca565b93505060a0880135915060c08801356134b181613394565b8091505092959891949750929550565b5f80604083850312156134d2575f80fd5b8235915060208301356134e481613394565b809150509250929050565b5f8060408385031215613500575f80fd5b50508035926020909101359150565b5f6020828403121561351f575f80fd5b813561115a81613394565b5f6020828403121561353a575f80fd5b81356001600160401b0381111561354f575f80fd5b611cf3848285016133ca565b5f806040838503121561356c575f80fd5b823561357781613394565b915060208301356001600160401b03811115613591575f80fd5b8301601f810185136135a1575f80fd5b80356001600160401b038111156135ba576135ba6132e0565b6135cd601f8201601f19166020016132f4565b8181528660208385010111156135e1575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f60208284031215613610575f80fd5b81356001600160401b03811115613625575f80fd5b8201601f81018413613635575f80fd5b80356136436133e7826133a8565b80828252602082019150602060608402850101925086831115613664575f80fd5b6020840193505b828410156136905761367d8785613324565b825260208201915060608401935061366b565b9695505050505050565b5f805f606084860312156136ac575f80fd5b8335925060208401356136be81613394565b915060408401356136ce81613394565b809150509250925092565b5f8151808452602084019350602083015f5b828110156137125781516001600160a01b03168652602095860195909101906001016136eb565b5093949350505050565b602081525f61115a60208301846136d9565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215613774575f80fd5b823561377f81613394565b915060208301356134e481613394565b5f6020828403121561379f575f80fd5b8135801515811461115a575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115611122576111226137ae565b60208082526022908201527f554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d45604082015261139560f21b606082015260800190565b828152604060208201525f611cf360408301846136d9565b634e487b7160e01b5f52601260045260245ffd5b5f826138515761385161382f565b500490565b5f60208284031215613866575f80fd5b5051919050565b81810381811115611122576111226137ae565b5f60208284031215613890575f80fd5b81516001600160401b038111156138a5575f80fd5b8201601f810184136138b5575f80fd5b80516138c36133e7826133a8565b8082825260208201915060208360051b8501019250868311156138e4575f80fd5b6020840193505b828410156136905783516138fe81613394565b8252602093840193909101906138eb565b5f8261391d5761391d61382f565b500690565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417611122576111226137ae565b60208082526022908201527f4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e6040820152614c5960f01b606082015260800190565b5f600182016139a0576139a06137ae565b5060010190565b5f82518060208501845e5f92019182525091905056fedb2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18a26469706673582212205c57ace4d11ef4f14745cfa900bbfba3b877027ff6007e947931e207f05d43d964736f6c634300081a0033","sourceMap":"545:34540:114:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:20;;;;;;;;;;-1:-1:-1;3443:202:20;;;;;:::i;:::-;;:::i;:::-;;;470:14:147;;463:22;445:41;;433:2;418:18;3443:202:20;;;;;;;;11507:242:114;;;;;;;;;;-1:-1:-1;11507:242:114;;;;;:::i;:::-;;:::i;:::-;;;;1210:13:147;;1192:32;;1280:4;1268:17;;;1262:24;1240:20;;;1233:54;1331:17;;;1325:24;1303:20;;;1296:54;1180:2;1165:18;11507:242:114;968:388:147;6474:129:114;;;;;;;;;;-1:-1:-1;6566:30:114;;6474:129;;;1507:25:147;;;1495:2;1480:18;6474:129:114;1361:177:147;1406:41:115;;;;;;;;;;;;;;;;3846:77;;;;;;;;;;-1:-1:-1;3846:77:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;18915:308:114;;;;;;;;;;-1:-1:-1;18915:308:114;;;;;:::i;:::-;;:::i;:::-;;24939:683;;;;;;;;;;-1:-1:-1;24939:683:114;;;;;:::i;:::-;;:::i;33669:155::-;;;;;;;;;;-1:-1:-1;33669:155:114;;;;;:::i;:::-;;:::i;13996:317::-;;;;;;;;;;-1:-1:-1;13996:317:114;;;;;:::i;:::-;;:::i;2789:1624::-;;;;;;;;;;-1:-1:-1;2789:1624:114;;;;;:::i;:::-;;:::i;5413:111::-;;;;;;;;;;-1:-1:-1;5496:21:114;;5413:111;;33505:158;;;;;;;;;;;;;:::i;5318:107:115:-;;;;;;;;;;-1:-1:-1;5318:107:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;32341:287:114;;;;;;;;;;-1:-1:-1;32341:287:114;;;;;:::i;:::-;;:::i;7053:533::-;;;;;;;;;;-1:-1:-1;7053:533:114;;;;;:::i;:::-;;:::i;4759:191:20:-;;;;;;;;;;-1:-1:-1;4759:191:20;;;;;:::i;:::-;;:::i;17025:115:114:-;;;;;;;;;;;;;:::i;19229:200::-;;;;;;;;;;-1:-1:-1;19229:200:114;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;19382:31:114;;19348:66;;:33;:66;;;;;:74;;;;;;;;;;19341:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19229:200;5246:136:20;;;;;;;;;;-1:-1:-1;5246:136:20;;;;;:::i;:::-;;:::i;18315:405:114:-;;;;;;;;;;-1:-1:-1;18315:405:114;;;;;:::i;:::-;;:::i;9951:929::-;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;6818:32:147;;;6800:51;;6788:2;6773:18;9951:929:114;6654:203:147;6348:245:20;;;;;;;;;;-1:-1:-1;6348:245:20;;;;;:::i;:::-;;:::i;8946:165:114:-;;;;;;;;;;;;;:::i;8574:133::-;;;;;;;;;;;;;:::i;4950:118:115:-;;;;;;;;;;-1:-1:-1;4950:118:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7415:25:147;;;7471:2;7456:18;;7449:34;;;;7499:18;;;7492:34;7403:2;7388:18;4950:118:115;7213:319:147;4837:570:114;;;;;;;;;;-1:-1:-1;4837:570:114;;;;;:::i;:::-;;:::i;32634:607::-;;;;;;;;;;-1:-1:-1;32634:607:114;;;;;:::i;:::-;;:::i;32088:176::-;;;;;;;;;;-1:-1:-1;32088:176:114;;;;;:::i;:::-;;:::i;1866:326::-;;;;;;;;;;-1:-1:-1;1866:326:114;;;;;:::i;:::-;;:::i;1978:36:115:-;;;;;;;;;;;;;;;;4161:214:22;;;;;;:::i;:::-;;:::i;3708:134::-;;;;;;;;;;;;;:::i;14754:209:114:-;;;;;;;;;;-1:-1:-1;14754:209:114;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;14927:19:114;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;14927:29:114;;;;;;;;;;;;;14920:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14754:209;2261:45:115;;;;;;;;;;;;;;;;33830:165:114;;;;;;;;;;-1:-1:-1;33830:165:114;;;;;:::i;:::-;;:::i;405:31:115:-;;;;;;;;;;-1:-1:-1;405:31:115;;;;-1:-1:-1;;;;;405:31:115;;;16884:135:114;;;;;;;;;;-1:-1:-1;16979:33:114;;16884:135;;8131:129;;;;;;;;;;;;;:::i;764:72::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;764:72:114;;9197:414;;;;;;;;;;;;;:::i;5480:40:115:-;;;;;;;;;;;;;;;;14319:430:114;;;;;;;;;;-1:-1:-1;14319:430:114;;;;;:::i;:::-;;:::i;34073:157::-;;;;;;;;;;-1:-1:-1;34073:157:114;;;;;:::i;:::-;34160:7;34186:27;;;:20;:27;;;;;;;;-1:-1:-1;;;;;34186:37:114;;;;;;;;;;;;;34073:157;8745:131;;;;;;;;;;;;;:::i;5168:97:115:-;;;;;;;;;;-1:-1:-1;5168:97:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;30780:311:114;;;;;;;;;;-1:-1:-1;30780:311:114;;;;;:::i;:::-;;:::i;4005:94:115:-;;;;;;;;;;-1:-1:-1;4005:94:115;;;;;:::i;:::-;;;;;;;;;;;;;;4539:109;;;;;;;;;;-1:-1:-1;4539:109:115;;;;;:::i;:::-;;;;;;;;;;;;;;654:72:114;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;654:72:114;;528:89:117;;;;;;;;;;;;;:::i;2198:136:114:-;;;;;;;;;;-1:-1:-1;2198:136:114;;;;;:::i;:::-;;:::i;2880:87:115:-;;;;;;;;;;-1:-1:-1;2880:87:115;;;;;:::i;:::-;;;;;;;;;;;;;;8331:207:114;;;;;;;;;;;;;:::i;3625:76:115:-;;;;;;;;;;-1:-1:-1;3625:76:115;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3625:76:115;;;3732:207:20;;;;;;;;;;-1:-1:-1;3732:207:20;;;;;:::i;:::-;;:::i;4465:195:114:-;;;;;;;;;;;;;:::i;15017:159::-;;;;;;;;;;;;;:::i;1623:237::-;;;;;;;;;;-1:-1:-1;1623:237:114;;;;;:::i;:::-;;:::i;4336:100:115:-;;;;;;;;;;-1:-1:-1;4336:100:115;;;;;:::i;:::-;;;;;;;;;;;;;;2317:49:20;;;;;;;;;;-1:-1:-1;2317:49:20;2362:4;2317:49;;34580:177:114;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7592:139::-;;;;;;;;;;-1:-1:-1;7689:35:114;;7592:139;;1819:58:22;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:22;;;;;;;;;;;;:::i;31523:484:114:-;;;;;;;;;;-1:-1:-1;31523:484:114;;;;;:::i;:::-;;:::i;31191:198::-;;;;;;;;;;-1:-1:-1;31191:198:114;;;;;:::i;:::-;;:::i;2106:50:115:-;;;;;;;;;;;;;;;;3248:105;;;;;;;;;;-1:-1:-1;3248:105:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2340:226:114;;;;;;;;;;-1:-1:-1;2340:226:114;;;;;:::i;:::-;;:::i;11026:250::-;;;;;;;;;;-1:-1:-1;11026:250:114;;;;;:::i;:::-;;:::i;7737:132::-;;;;;;;;;;-1:-1:-1;7737:132:114;;;;;:::i;:::-;;:::i;15500:149::-;;;;;;;;;;-1:-1:-1;15500:149:114;;;;;:::i;:::-;15579:7;15605:37;;;:29;:37;;;;;;;15500:149;5580:45:115;;;;;;;;;;;;;;;;33319:180:114;;;;;;;;;;-1:-1:-1;33319:180:114;;;;;:::i;:::-;;:::i;5662:138:20:-;;;;;;;;;;-1:-1:-1;5662:138:20;;;;;:::i;:::-;;:::i;3436:114:115:-;;;;;;;;;;-1:-1:-1;3436:114:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;5787:464:114;;;;;;;;;;-1:-1:-1;5787:464:114;;;;;:::i;:::-;;:::i;15855:221::-;;;;;;;;;;-1:-1:-1;15855:221:114;;;;;:::i;:::-;16008:27;;15960:7;15986:50;;;:21;:50;;;;;;;;16037:31;;;;15986:83;;;;;;;;15855:221;34763:133;;;;;;;;;;-1:-1:-1;34763:133:114;;;;;:::i;:::-;34823:4;34846:19;;;:11;:19;;;;;;;;34866:10;34846:31;;;;;;;:38;:43;;;34763:133;3049:105:115;;;;;;;;;;-1:-1:-1;3049:105:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5074:46;;;;;;;;;;;;;;;;34902:180:114;;;;;;;;;;-1:-1:-1;34902:180:114;;;;;:::i;:::-;35023:31;;34966:4;34989:66;;;:33;:66;;;;;;;;:74;;;;;;;:81;:86;;;34902:180;34316:177;;;;;;;;;;-1:-1:-1;34316:177:114;;;;;:::i;:::-;34413:7;34439:32;;;:25;:32;;;;;;;;-1:-1:-1;;;;;34439:47:114;;;;;;;;;;;;;34316:177;4718:89:115;;;;;;;;;;-1:-1:-1;4718:89:115;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;261:39;;;;;;;;;;-1:-1:-1;261:39:115;;;;-1:-1:-1;;;;;261:39:115;;;4855:34;;;;;;;;;;-1:-1:-1;4855:34:115;;;;;;;;1598:48;;;;;;;;;;;;;;;;3443:202:20;3528:4;-1:-1:-1;;;;;;3551:47:20;;-1:-1:-1;;;3551:47:20;;:87;;-1:-1:-1;;;;;;;;;;1134:40:28;;;3602:36:20;3544:94;3443:202;-1:-1:-1;;3443:202:20:o;11507:242:114:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;11693:49:114;;;;;;;;;;;;;;;;;;;;;;11507:242;;;;;;:::o;18915:308::-;19034:37;-1:-1:-1;;;;;;;;;;;19060:10:114;19034:7;:37::i;:::-;19013:132;;;;-1:-1:-1;;;19013:132:114;;13236:2:147;19013:132:114;;;13218:21:147;13275:2;13255:18;;;13248:30;13314:34;13294:18;;;13287:62;-1:-1:-1;;;13365:18:147;;;13358:46;13421:19;;19013:132:114;;;;;;;;;19155:61;19195:20;19155:39;:61::i;:::-;18915:308;:::o;24939:683::-;16008:27;;25058:4;15986:50;;;:21;:50;;;;;;;;16037:31;;;;15986:83;;;;;;;;25128:1;25078:51;25074:94;;-1:-1:-1;25152:5:114;;24939:683;-1:-1:-1;24939:683:114:o;25074:94::-;25541:15;25490:35;6566:30;;;6474:129;25490:35;7689;;16008:27;;15960:7;15986:50;;;:21;:50;;;;;;;;16037:31;;;;15986:83;;;;;;;;25372:102;;;;:::i;:::-;:153;;;;:::i;:::-;:184;25368:227;;;-1:-1:-1;25579:5:114;;24939:683;-1:-1:-1;24939:683:114:o;25368:227::-;-1:-1:-1;25611:4:114;;24939:683;-1:-1:-1;24939:683:114:o;33669:155::-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;-1:-1:-1;33775:25:114::1;:42:::0;33669:155::o;13996:317::-;14112:22;;;;;:63;;;14138:37;-1:-1:-1;;;;;;;;;;;14164:10:114;14138:7;:37::i;:::-;14091:144;;;;-1:-1:-1;;;14091:144:114;;;;;;;:::i;:::-;14245:61;14283:10;14295;14245:37;:61::i;2789:1624::-;4158:30:21;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:21;-1:-1:-1;;;4302:15:21;;;4301:16;;-1:-1:-1;;;;;4348:14:21;4279:19;4724:16;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4788:11;-1:-1:-1;;;;;4788:16:21;4803:1;4788:16;:50;;;;-1:-1:-1;4816:4:21;4808:25;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;-1:-1:-1;;;4906:23:21;;;;;;;;;;;4849:91;4949:18;;-1:-1:-1;;4949:18:21;4966:1;4949:18;;;4977:67;;;;5011:22;;-1:-1:-1;;;;5011:22:21;-1:-1:-1;;;5011:22:21;;;4977:67;3225:33:114::1;:31;:33::i;:::-;3268:15;:34:::0;;-1:-1:-1;;;;;;3268:34:114::1;-1:-1:-1::0;;;;;3268:34:114;::::1;::::0;;::::1;::::0;;;3312:26:::1;:56:::0;;;3378:33:::1;:70:::0;;;3458:59:::1;::::0;-1:-1:-1;;;3458:59:114;;:30:::1;::::0;:59:::1;::::0;3489:14;;3505:11;;3458:59:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3527:32;3548:10;3527:20;:32::i;:::-;3569;3590:10;3569:20;:32::i;:::-;3611:21;:46:::0;;;3667:16:::1;:36:::0;;-1:-1:-1;;;;;;3667:36:114::1;-1:-1:-1::0;;;;;3667:36:114;::::1;;::::0;;4242:19:::1;4259:2;4242:14:::0;:19:::1;:::i;:::-;4204:35;:57:::0;4304:19:::1;4321:2;4304:14:::0;:19:::1;:::i;:::-;4271:30;:52:::0;4361:1:::1;4333:25;:29:::0;;;4372:30:::1;:34:::0;5064:101:21;;;;5098:23;;-1:-1:-1;;;;5098:23:21;;;5140:14;;-1:-1:-1;14863:50:147;;5140:14:21;;14851:2:147;14836:18;5140:14:21;;;;;;;5064:101;4092:1079;;;;;2789:1624:114;;;;;;;:::o;33505:158::-;33592:7;33622:34;33636:19;:17;:19::i;33622:34::-;33615:41;;33505:158;:::o;32341:287::-;32445:7;32483:15;;:138;;-1:-1:-1;;;32483:138:114;;32542:4;32483:138;;;15126:51:147;15193:18;;;15186:34;;;-1:-1:-1;;;;;15256:32:147;;;15236:18;;;15229:60;32483:15:114;;;;:33;;15099:18:147;;32483:138:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7053:533::-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;6566:30:114;;7333:15:::1;::::0;:47:::1;::::0;-1:-1:-1;;;7333:47:114;;7374:4:::1;7333:47;::::0;::::1;6800:51:147::0;-1:-1:-1;;;;;7333:15:114;;::::1;::::0;:32:::1;::::0;6773:18:147;;7333:47:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:85;;;;:::i;:::-;7293:36;:125;7289:207;;7441:44;;-1:-1:-1::0;;;7441:44:114::1;;;;;;;;;;;7289:207;-1:-1:-1::0;7505:35:114::1;:74:::0;7053:533::o;4759:191:20:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:20;;;;;:24;;;;4759:191::o;17025:115:114:-;17087:46;17122:10;17087:34;:46::i;:::-;17025:115::o;5246:136:20:-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;18315:405:114:-;18452:37;-1:-1:-1;;;;;;;;;;;18478:10:114;18452:7;:37::i;:::-;18431:152;;;;-1:-1:-1;;;18431:152:114;;15824:2:147;18431:152:114;;;15806:21:147;15863:2;15843:18;;;15836:30;;;15902:34;15882:18;;;15875:62;15973:34;15953:18;;;15946:62;-1:-1:-1;;;16024:19:147;;;16017:35;16069:19;;18431:152:114;15622:472:147;18431:152:114;18627:31;;18593:66;;;;:33;:66;;;;;;;;18660:27;;18593:95;;;;;;;;:118;;;;;;;;;;;;;;;;;;;;18315:405::o;9951:929::-;10000:7;10392:17;10412:27;:25;:27::i;:::-;10392:47;;10449:17;10469:19;:17;:19::i;:::-;10498:26;10527:15;;:66;;-1:-1:-1;;;10527:66:114;;10587:4;10527:66;;;6800:51:147;10449:39:114;;-1:-1:-1;10498:26:114;;-1:-1:-1;;;;;10527:15:114;;;;:51;;6773:18:147;;10527:66:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10527:66:114;;;;;;;;;;;;:::i;:::-;10498:95;;10607:9;:16;10627:1;10607:21;10603:69;;10659:1;10644:17;;;;;9951:929;:::o;10603:69::-;10681:26;10771:9;:16;10745:9;10756;10728:38;;;;;;;;17230:19:147;;;17274:2;17265:12;;17258:28;17311:2;17302:12;;17073:247;10728:38:114;;;;;;;;;;;;;10718:49;;;;;;10710:58;;:77;;;;:::i;:::-;10681:106;;10844:9;10854:18;10844:29;;;;;;;;:::i;:::-;;;;;;;10837:36;;;;;;9951:929;:::o;6348:245:20:-;-1:-1:-1;;;;;6441:34:20;;966:10:25;6441:34:20;6437:102;;6498:30;;-1:-1:-1;;;6498:30:20;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;8946:165:114:-;9013:7;9039:15;;:65;;-1:-1:-1;;;9039:65:114;;9098:4;9039:65;;;6800:51:147;-1:-1:-1;;;;;9039:15:114;;;;:50;;6773:18:147;;9039:65:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8574:133::-;8622:7;8648:15;;:52;;-1:-1:-1;;;8648:52:114;;8694:4;8648:52;;;6800:51:147;-1:-1:-1;;;;;8648:15:114;;;;:37;;6773:18:147;;8648:52:114;6654:203:147;4837:570:114;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;5033:21:114::1;5057:15:::0;;:47:::1;::::0;-1:-1:-1;;;5057:47:114;;5098:4:::1;5057:47;::::0;::::1;6800:51:147::0;-1:-1:-1;;;;;5057:15:114;;::::1;::::0;:32:::1;::::0;6773:18:147;;5057:47:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5033:71:::0;-1:-1:-1;5033:71:114;5229:26:::1;5233:22:::0;5229:1:::1;:26;:::i;:::-;:43;5225:120;;5296:38;;-1:-1:-1::0;;;5296:38:114::1;;;;;;;;;;;5225:120;-1:-1:-1::0;;5354:21:114::1;:46:::0;4837:570::o;32634:607::-;32707:7;32909:15;;:76;;-1:-1:-1;;;32909:76:114;;32970:4;32909:76;;;6800:51:147;32707:7:114;;-1:-1:-1;;;;;32909:15:114;;:39;;6773:18:147;;32909:76:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32909:76:114;;;;;;;;;;;;:::i;:::-;32879:106;;32995:18;33032:9;33027:181;33051:10;:17;33047:1;:21;33027:181;;;33158:39;33176:5;33183:10;33194:1;33183:13;;;;;;;;:::i;:::-;;;;;;;33158:17;:39::i;:::-;33144:53;;;;:::i;:::-;;-1:-1:-1;33070:3:114;;33027:181;;;-1:-1:-1;33224:10:114;32634:607;-1:-1:-1;;;32634:607:114:o;32088:176::-;32184:7;32210:47;32227:19;:17;:19::i;:::-;32248:8;32210:16;:47::i;1866:326::-;1966:39;2362:4:20;1994:10:114;1966:7;:39::i;:::-;1945:120;;;;-1:-1:-1;;;1945:120:114;;;;;;;:::i;:::-;2080:9;2075:111;2099:8;:15;2095:1;:19;2075:111;;;2135:40;-1:-1:-1;;;;;;;;;;;2163:8:114;2172:1;2163:11;;;;;;;;:::i;:::-;;;;;;;2135:9;:40::i;:::-;2116:3;;2075:111;;;;1866:326;:::o;4161:214:22:-;2655:13;:11;:13::i;:::-;4276:36:::1;4294:17;4276;:36::i;:::-;4322:46;4344:17;4363:4;4322:21;:46::i;3708:134::-:0;3777:7;2926:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3708:134:22;:::o;33830:165:114:-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;-1:-1:-1;33941:30:114::1;:47:::0;33830:165::o;8131:129::-;8180:7;8206:15;;:47;;-1:-1:-1;;;8206:47:114;;8247:4;8206:47;;;6800:51:147;-1:-1:-1;;;;;8206:15:114;;;;:32;;6773:18:147;;8206:47:114;6654:203:147;9197:414:114;9255:7;9471:15;;:47;;-1:-1:-1;;;9471:47:114;;9512:4;9471:47;;;6800:51:147;9296:15:114;;9255:7;;-1:-1:-1;;;;;9471:15:114;;;;:32;;6773:18:147;;9471:47:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9457:61;;:11;:61;:::i;:::-;9426:92;;9582:21;;9559:20;:44;;;;:::i;:::-;9535:69;;:20;:69;:::i;:::-;9528:76;;;;9197:414;:::o;14319:430::-;14451:22;;;;;:63;;;14477:37;-1:-1:-1;;;;;;;;;;;14503:10:114;14477:7;:37::i;:::-;14430:144;;;;-1:-1:-1;;;14430:144:114;;;;;;;:::i;:::-;14589:9;14584:159;14608:21;:28;14604:1;:32;14584:159;;;14657:75;14695:10;14707:21;14729:1;14707:24;;;;;;;;:::i;:::-;;;;;;;14657:37;:75::i;:::-;14638:3;;14584:159;;8745:131;8795:7;8821:15;;:48;;-1:-1:-1;;;8821:48:114;;8863:4;8821:48;;;6800:51:147;-1:-1:-1;;;;;8821:15:114;;;;:33;;6773:18:147;;8821:48:114;6654:203:147;30780:311:114;30901:7;30939:15;;:145;;-1:-1:-1;;;30939:145:114;;30989:4;30939:145;;;18381:51:147;18448:18;;;18441:34;;;-1:-1:-1;;;;;18511:32:147;;;18491:18;;;18484:60;18580:32;;;18560:18;;;18553:60;30939:15:114;;;;:24;;18353:19:147;;30939:145:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30920:164;30780:311;-1:-1:-1;;;;30780:311:114:o;528:89:117:-;4158:30:21;4191:26;:24;:26::i;:::-;4302:15;;4158:59;;-1:-1:-1;4302:15:21;-1:-1:-1;;;4302:15:21;;;4301:16;;-1:-1:-1;;;;;4348:14:21;4279:19;4724:16;;:34;;;;;4744:14;4724:34;4704:54;;4768:17;4788:11;-1:-1:-1;;;;;4788:16:21;4803:1;4788:16;:50;;;;-1:-1:-1;4816:4:21;4808:25;:30;4788:50;4768:70;;4854:12;4853:13;:30;;;;;4871:12;4870:13;4853:30;4849:91;;;4906:23;;-1:-1:-1;;;4906:23:21;;;;;;;;;;;4849:91;4949:18;;-1:-1:-1;;4949:18:21;4966:1;4949:18;;;4977:67;;;;5011:22;;-1:-1:-1;;;;5011:22:21;-1:-1:-1;;;5011:22:21;;;4977:67;587:23:117::1;:21;:23::i;:::-;5068:14:21::0;5064:101;;;5098:23;;-1:-1:-1;;;;5098:23:21;;;5140:14;;-1:-1:-1;14863:50:147;;5140:14:21;;14851:2:147;14836:18;5140:14:21;;;;;;;5064:101;4092:1079;;;;;528:89:117:o;2198:136:114:-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;2290:37:114::1;-1:-1:-1::0;;;;;;;;;;;2318:8:114::1;2290:9;:37::i;8331:207::-:0;8381:7;8483:15;;:47;;-1:-1:-1;;;8483:47:114;;8524:4;8483:47;;;6800:51:147;8422:15:114;;-1:-1:-1;;;;;8483:15:114;;:32;;6773:18:147;;8483:47:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8469:61;;:11;:61;:::i;:::-;8454:77;;:11;:77;:::i;:::-;8447:84;;;8331:207;:::o;3732::20:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:20;;;;;;;;-1:-1:-1;;;;;3901:31:20;;;;;;;;;;;;;;;3732:207::o;4465:195:114:-;4523:39;2362:4:20;4551:10:114;4523:7;:39::i;:::-;4515:89;;;;-1:-1:-1;;;4515:89:114;;18826:2:147;4515:89:114;;;18808:21:147;18865:2;18845:18;;;18838:30;18904:34;18884:18;;;18877:62;-1:-1:-1;;;18955:18:147;;;18948:35;19000:19;;4515:89:114;18624:401:147;4515:89:114;4614:15;;;:39;;;-1:-1:-1;;;4614:39:114;;;;-1:-1:-1;;;;;4614:15:114;;;;:37;;:39;;;;;;;;;;:15;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;15017:159;15081:7;15143:26;;15107:33;;:62;;;;:::i;1623:237::-;1708:39;2362:4:20;1736:10:114;1708:7;:39::i;:::-;1687:120;;;;-1:-1:-1;;;1687:120:114;;;;;;;:::i;:::-;1817:36;-1:-1:-1;;;;;;;;;;;1845:7:114;1817:9;:36::i;34580:177::-;34683:15;;:66;;-1:-1:-1;;;34683:66:114;;34743:4;34683:66;;;6800:51:147;34648:16:114;;-1:-1:-1;;;;;34683:15:114;;:51;;6773:18:147;;34683:66:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34683:66:114;;;;;;;;;;;;:::i;31523:484::-;31625:7;31674:15;;:76;;-1:-1:-1;;;31674:76:114;;31735:4;31674:76;;;6800:51:147;31625:7:114;;-1:-1:-1;;;;;31674:15:114;;:39;;6773:18:147;;31674:76:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31674:76:114;;;;;;;;;;;;:::i;:::-;31644:106;;31760:18;31797:9;31792:182;31816:10;:17;31812:1;:21;31792:182;;;31923:40;31932:5;31939:10;31950:1;31939:13;;;;;;;;:::i;:::-;;;;;;;31954:8;31923;:40::i;:::-;31909:54;;;;:::i;:::-;;-1:-1:-1;31835:3:114;;31792:182;;;-1:-1:-1;31990:10:114;31523:484;-1:-1:-1;;;;31523:484:114:o;31191:198::-;31306:7;31332:50;31341:19;:17;:19::i;:::-;31362:9;31373:8;31332;:50::i;2340:226::-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;2452:9:114::1;2447:113;2471:9;:16;2467:1;:20;2447:113;;;2508:41;-1:-1:-1::0;;;;;;;;;;;2536:9:114::1;2546:1;2536:12;;;;;;;;:::i;2508:41::-;2489:3;;2447:113;;11026:250:::0;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;11211:15:114::1;::::0;:58:::1;::::0;-1:-1:-1;;;11211:58:114;;11253:4:::1;11211:58;::::0;::::1;19204:51:147::0;19271:18;;;19264:34;;;-1:-1:-1;;;;;11211:15:114;;::::1;::::0;:33:::1;::::0;19177:18:147;;11211:58:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11026:250:::0;;:::o;7737:132::-;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;-1:-1:-1;7830:22:114::1;:32:::0;;-1:-1:-1;;7830:32:114::1;::::0;::::1;;::::0;;;::::1;::::0;;7737:132::o;33319:180::-;33417:7;33443:49;33461:19;:17;:19::i;:::-;33482:9;33443:17;:49::i;5662:138:20:-;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;5787:464:114:-:0;-1:-1:-1;;;;;;;;;;;3191:16:20;3202:4;3191:10;:16::i;:::-;7689:35:114;;6008:15:::1;::::0;:47:::1;::::0;-1:-1:-1;;;6008:47:114;;6049:4:::1;6008:47;::::0;::::1;6800:51:147::0;-1:-1:-1;;;;;6008:15:114;;::::1;::::0;:32:::1;::::0;6773:18:147;;6008:47:114::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:90;;;;:::i;:::-;5973:31;:125;5969:202;;6121:39;;-1:-1:-1::0;;;6121:39:114::1;;;;;;;;;;;5969:202;-1:-1:-1::0;6180:30:114::1;:64:::0;5787:464::o;4148:103:20:-;4214:30;4225:4;966:10:25;4214::20;:30::i;11817:2174:114:-;12062:27;;12050:40;;;;:11;:40;;;;;;;;-1:-1:-1;;;;;12050:50:114;;;;;;;;;:57;:62;12046:113;;12133:26;;-1:-1:-1;;;12133:26:114;;;;;;;;;;;12046:113;12630:27;;12601:26;;12565:33;;:62;;12601:26;12565:62;:::i;:::-;:92;12561:156;;;12680:26;;-1:-1:-1;;;12680:26:114;;;;;;;;;;;12561:156;13081:27;;13051:58;;;;:29;:58;;;;;;:63;;13047:172;;13191:17;:15;:17::i;:::-;13160:27;;13130:58;;;;:29;:58;;;;;:78;13047:172;13287:27;;13275:40;;;;:11;:40;;;;;;;;-1:-1:-1;;;;;13275:50:114;;;;;;;;;;:73;;;;;;;;;;;;;;;;;;;;;;;;13425:106;;13515:15;13425:27;:106::i;:::-;13593:38;13634:43;13668:8;13634:33;:43::i;:::-;13703:27;;13687:44;;;;:15;:44;;;;;;;;13732:31;;;;13687:77;;;;;;;:111;;13593:84;;-1:-1:-1;13593:84:114;;13687:77;;:44;:111;;13593:84;;13687:111;:::i;:::-;;;;-1:-1:-1;;13857:28:114;;;;;13899:31;;;;;13814:170;;19483:25:147;;;19524:18;;;19517:34;;;13857:28:114;;13814:170;;19456:18:147;13814:170:114;;;;;;;11963:2028;11817:2174;;:::o;9071:205:21:-;9129:30;;3147:66;9186:27;8819:122;738:128:117;6929:20:21;:18;:20::i;:::-;817:42:117::1;2362:4:20;848:10:117;817;:42::i;17754:485:114:-:0;18153:67;18182:33;;18218:1;18182:37;;;;:::i;:::-;18153:28;:67::i;:::-;18146:87;;17754:485;:::o;7270:387:20:-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:20;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:20;;;;;;;;;:38;;-1:-1:-1;;7475:38:20;7509:4;7475:38;;;7559:12;966:10:25;;887:96;7559:12:20;-1:-1:-1;;;;;7532:40:20;7550:7;-1:-1:-1;;;;;7532:40:20;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7894:388;7972:4;-1:-1:-1;;;;;;;;;;;8061:22:20;8069:4;8075:7;8061;:22::i;:::-;8057:219;;;8133:5;8099:14;;;;;;;;;;;-1:-1:-1;;;;;8099:31:20;;;;;;;;;;:39;;-1:-1:-1;;8099:39:20;;;8157:40;966:10:25;;8099:14:20;;8157:40;;8133:5;8157:40;8218:4;8211:11;;;;;4578:312:22;4658:4;-1:-1:-1;;;;;4667:6:22;4650:23;;;:120;;;4764:6;-1:-1:-1;;;;;4728:42:22;:32;-1:-1:-1;;;;;;;;;;;1519:53:41;-1:-1:-1;;;;;1519:53:41;;1441:138;4728:32:22;-1:-1:-1;;;;;4728:42:22;;;4650:120;4633:251;;;4844:29;;-1:-1:-1;;;4844:29:22;;;;;;;;;;;991:117:117;2362:4:20;3191:16;2362:4;3191:10;:16::i;6032:538:22:-;6149:17;-1:-1:-1;;;;;6131:50:22;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6131:52:22;;;;;;;;-1:-1:-1;;6131:52:22;;;;;;;;;;;;:::i;:::-;;;6127:437;;6493:60;;-1:-1:-1;;;6493:60:22;;-1:-1:-1;;;;;6818:32:147;;6493:60:22;;;6800:51:147;6773:18;;6493:60:22;6654:203:147;6127:437:22;-1:-1:-1;;;;;;;;;;;6225:40:22;;6221:120;;6292:34;;-1:-1:-1;;;6292:34:22;;;;;1507:25:147;;;1480:18;;6292:34:22;1361:177:147;6221:120:22;6354:54;6384:17;6403:4;6354:29;:54::i;5007:213::-;5081:4;-1:-1:-1;;;;;5090:6:22;5073:23;;5069:145;;5174:29;;-1:-1:-1;;;5174:29:22;;;;;;;;;;;623:109:117;6929:20:21;:18;:20::i;:::-;692:33:117::1;:31;:33::i;4381:197:20:-:0;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:20;;-1:-1:-1;;;;;19222:32:147;;4514:47:20;;;19204:51:147;19271:18;;;19264:34;;;19177:18;;4514:47:20;19030:274:147;16150:443:114;16265:29;;;;:21;:29;;;;;;;;:41;;;;;;;;;:46;16261:263;;16150:443;;;:::o;16261:263::-;16395:9;16408:1;16395:14;16391:133;;16150:443;;;:::o;16391:133::-;16533:29;;;;:21;:29;;;;;;;;:41;;;;;;;;:53;16150:443::o;7082:141:21:-;7149:17;:15;:17::i;:::-;7144:73;;7189:17;;-1:-1:-1;;;7189:17:21;;;;;;;;;;;25967:4503:114;26049:4;26091:47;;;:29;:47;;;;;;16979:33;;26148:1014;;;26406:31;26440:29;26406:31;26470:18;26487:1;26470:16;:18;:::i;:::-;26440:49;;;;;;;;;;;;26406:83;;26525:23;26507:15;:41;26503:649;;;26571:32;26606:37;:35;:37::i;:::-;26571:72;;26771:9;26766:313;26790:15;:22;26786:1;:26;26766:313;;;26845:11;:29;26857:16;26845:29;;;;;;;;;;;:49;26875:15;26891:1;26875:18;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;26845:49:114;-1:-1:-1;;;;;26845:49:114;;;;;;;;;;;;:56;;;26905:1;26845:61;26841:220;;26934:47;;;;:29;:47;;;;;:73;;;27033:5;;26841:220;26814:3;;26766:313;;;;27114:23;27096:41;;26553:599;26503:649;26287:875;26148:1014;27480:15;27458:19;:17;:19::i;:::-;:37;27451:249;;;27674:15;:13;:15::i;:::-;27451:249;;;27885:21;27948:1;27914:30;27928:15;27914:13;:30::i;:::-;27910:34;;:1;:34;:::i;:::-;27909:40;;;;:::i;:::-;:44;;27952:1;27909:44;:::i;:::-;27885:68;;27963:26;27992:37;:35;:37::i;:::-;27963:66;;28291:31;28345:9;28340:1688;28364:9;:16;28360:1;:20;28340:1688;;;28401:16;28420:9;28430:1;28420:12;;;;;;;;:::i;:::-;;;;;;;;;;;;28446:48;28497:29;;;:11;:29;;;;;;-1:-1:-1;;;;;28497:39:114;;;;;;;;;;28446:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28420:12;;-1:-1:-1;28446:90:114;28739:47;;28735:61;;28788:8;;;;28735:61;28915:27;;28866:30;28899:44;;;:15;:44;;;;;;;;28944:31;;;;28899:77;;;;;;;;28995:39;;;28991:1027;;16008:27;;29242:17;15986:50;;;:21;:50;;;;;;;;16037:31;;;;15986:83;;;;;;;;29423:35;;29411:47;;15986:83;29411:47;:::i;:::-;29393:15;:65;29389:76;;;29460:5;;;;;;29389:76;29484:66;29517:20;29539:10;29484:32;:66::i;:::-;-1:-1:-1;29597:4:114;;25967:4503;-1:-1:-1;;;;;;;;;;25967:4503:114:o;28991:1027::-;28387:1641;;;28340:1688;28382:3;;28340:1688;;;;30241:26;30240:27;:70;;;;;30291:19;:17;:19::i;:::-;30271:17;:15;:17::i;:::-;:39;30240:70;30236:206;;;30326:15;:13;:15::i;:::-;-1:-1:-1;30362:4:114;;25967:4503;-1:-1:-1;;;;;25967:4503:114:o;30236:206::-;-1:-1:-1;30458:5:114;;25967:4503;-1:-1:-1;;;;;25967:4503:114:o;2264:344:41:-;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:41;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;2454:148::-;2573:18;:16;:18::i;8485:120:21:-;8535:4;8558:26;:24;:26::i;:::-;:40;-1:-1:-1;;;8558:40:21;;;;;;-1:-1:-1;8485:120:21:o;22765:1897:114:-;22877:22;22902:19;:17;:19::i;:::-;22877:44;;22931:26;22960:37;:35;:37::i;:::-;22931:66;;23039:9;23034:1580;23058:9;:16;23054:1;:20;23034:1580;;;23152:1;23099:36;;;:20;:36;;;;;23136:12;;23152:1;;23136:9;;23146:1;;23136:12;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23099:50:114;-1:-1:-1;;;;;23099:50:114;;;;;;;;;;;;;:54;23095:697;;;23253:14;23351:47;23385:9;23395:1;23385:12;;;;;;;;:::i;:::-;;;;;;;23351:33;:47::i;:::-;23323:25;;23270:20;:36;23291:14;23270:36;;;;;;;;;;;:50;23307:9;23317:1;23307:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23270:50:114;-1:-1:-1;;;;;23270:50:114;;;;;;;;;;;;;:78;;;;:::i;:::-;:128;;;;:::i;:::-;23543:15;;23576:12;;23253:145;;-1:-1:-1;;;;;;23543:15:114;;:32;;23576:9;;23586:1;;23576:12;;;;;;:::i;:::-;;;;;;;;;;;23598:16;;23543:72;;-1:-1:-1;;;;;;23543:72:114;;;;;;;-1:-1:-1;;;;;15144:32:147;;;23543:72:114;;;15126:51:147;15193:18;;;15186:34;;;23598:16:114;;15236:18:147;;;15229:60;15099:18;;23543:72:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23155:637;23095:697;23912:1;23854:41;;;:25;:41;;;;;23896:12;;23912:1;;23896:9;;23906:1;;23896:12;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23854:55:114;-1:-1:-1;;;;;23854:55:114;;;;;;;;;;;;;:59;23850:754;;;23933:14;24041:47;24075:9;24085:1;24075:12;;;;;;;;:::i;24041:47::-;24008:30;;23950:25;:41;23976:14;23950:41;;;;;;;;;;;:55;23992:9;24002:1;23992:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23950:55:114;-1:-1:-1;;;;;23950:55:114;;;;;;;;;;;;;:88;;;;:::i;:::-;:138;;;;:::i;:::-;24106:15;;24139:12;;23933:155;;-1:-1:-1;;;;;;24106:15:114;;:32;;24139:9;;24149:1;;24139:12;;;;;;:::i;:::-;;;;;;;;;;;24161:16;;24106:72;;-1:-1:-1;;;;;;24106:72:114;;;;;;;-1:-1:-1;;;;;15144:32:147;;;24106:72:114;;;15126:51:147;15193:18;;;15186:34;;;24161:16:114;;15236:18:147;;;15229:60;15099:18;;24106:72:114;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23915:689;23850:754;23076:3;;23034:1580;;;-1:-1:-1;24624:15:114;;;:31;;;-1:-1:-1;;;24624:31:114;;;;-1:-1:-1;;;;;24624:15:114;;;;:29;;:31;;;;;;;;;;:15;;:31;;;;;;;;;;19627:2891;19756:29;19788:19;:17;:19::i;:::-;20082:27;;20052:58;;;;:29;:58;;;;;;19756:51;;-1:-1:-1;20052:83:114;;20048:155;;20158:34;;-1:-1:-1;;;20158:34:114;;;;;;;;;;;20048:155;20352:27;;:31;;20382:1;;20352:31;:::i;:::-;20315:33;;:68;20311:140;;20406:34;;-1:-1:-1;;;20406:34:114;;;;;;;;;;;20311:140;20551:26;20580:37;:35;:37::i;:::-;20551:66;;20632:9;20627:269;20651:9;:16;20647:1;:20;20627:269;;;20761:20;:31;;;20692:11;:40;20704:20;:27;;;20692:40;;;;;;;;;;;:54;20733:9;20743:1;20733:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;20692:54:114;-1:-1:-1;;;;;20692:54:114;;;;;;;;;;;;:65;;;:100;20688:198;;20812:20;:43;20833:21;20812:43;;;;;;;;;;;:57;20856:9;20866:1;20856:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;20812:57:114;-1:-1:-1;;;;;20812:57:114;;;;;;;;;;;;;:59;;;;;;;;;:::i;:::-;;;;;;20688:198;20669:3;;20627:269;;;;20952:60;20991:20;20952:38;:60::i;:::-;20947:900;;21137:48;;;;:25;:48;;;;;;;;-1:-1:-1;;;;;21137:58:114;;;;;;;;;:63;;21199:1;;21137:48;:63;;21199:1;;21137:63;:::i;:::-;;;;-1:-1:-1;20947:900:114;;-1:-1:-1;20947:900:114;;21731:8;-1:-1:-1;;;;;21709:30:114;:18;:16;:18::i;:::-;-1:-1:-1;;;;;21709:30:114;;21705:132;;21759:48;;;;:25;:48;;;;;;;;-1:-1:-1;;;;;21759:58:114;;;;;;;;;:63;;21821:1;;21759:48;:63;;21821:1;;21759:63;:::i;:::-;;;;-1:-1:-1;;21705:132:114;21891:31;;21857:66;;;;:33;:66;;;;;;;;21924:27;;21857:95;;;;;;;:118;;;;;;;;;;;;;;;;;;;;;;;;;;;21985:33;:63;;;22058:44;;;:15;:44;;;;;:55;;-1:-1:-1;;;;;;22058:55:114;-1:-1:-1;;;;;22058:55:114;;;;;22152:27;;22123:57;;:28;:57;;;;;22183:12;22123:72;;22237:27;;22205:60;;:31;:60;;;;;;22268:15;22205:78;;22387:28;22429:31;;22474:27;;22350:161;;19483:25:147;;;19524:18;;;19517:34;;;;22350:161:114;;19456:18:147;22350:161:114;;;;;;;19746:2772;;19627:2891;;:::o;1671:281:41:-;1748:17;-1:-1:-1;;;;;1748:29:41;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:41;;-1:-1:-1;;;;;6818:32:147;;1805:47:41;;;6800:51:147;6773:18;;1805:47:41;6654:203:147;1744:119:41;-1:-1:-1;;;;;;;;;;;1872:73:41;;-1:-1:-1;;;;;;1872:73:41;-1:-1:-1;;;;;1872:73:41;;;;;;;;;;1671:281::o;3916:253:54:-;3999:12;4024;4038:23;4065:6;-1:-1:-1;;;;;4065:19:54;4085:4;4065:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4023:67;;;;4107:55;4134:6;4142:7;4151:10;4107:26;:55::i;:::-;4100:62;3916:253;-1:-1:-1;;;;;3916:253:54:o;6113:122:41:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:41;;;;;;;;;;;4437:582:54;4581:12;4610:7;4605:408;;4633:19;4641:10;4633:7;:19::i;:::-;4605:408;;;4857:17;;:22;:49;;;;-1:-1:-1;;;;;;4883:18:54;;;:23;4857:49;4853:119;;;4933:24;;-1:-1:-1;;;4933:24:54;;-1:-1:-1;;;;;6818:32:147;;4933:24:54;;;6800:51:147;6773:18;;4933:24:54;6654:203:147;4853:119:54;-1:-1:-1;4992:10:54;4985:17;;5559:487;5690:17;;:21;5686:354;;5887:10;5881:17;5943:15;5930:10;5926:2;5922:19;5915:44;5686:354;6010:19;;-1:-1:-1;;;6010:19:54;;;;;;;;;;;14:286:147;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:147;;209:43;;199:71;;266:1;263;256:12;497:466;574:6;582;590;643:2;631:9;622:7;618:23;614:32;611:52;;;659:1;656;649:12;611:52;-1:-1:-1;;704:23:147;;;824:2;809:18;;796:32;;-1:-1:-1;927:2:147;912:18;;;899:32;;497:466;-1:-1:-1;497:466:147:o;1543:226::-;1602:6;1655:2;1643:9;1634:7;1630:23;1626:32;1623:52;;;1671:1;1668;1661:12;1623:52;-1:-1:-1;1716:23:147;;1543:226;-1:-1:-1;1543:226:147:o;1774:127::-;1835:10;1830:3;1826:20;1823:1;1816:31;1866:4;1863:1;1856:15;1890:4;1887:1;1880:15;1906:275;1977:2;1971:9;2042:2;2023:13;;-1:-1:-1;;2019:27:147;2007:40;;-1:-1:-1;;;;;2062:34:147;;2098:22;;;2059:62;2056:88;;;2124:18;;:::i;:::-;2160:2;2153:22;1906:275;;-1:-1:-1;1906:275:147:o;2186:727::-;2253:5;2301:4;2289:9;2284:3;2280:19;2276:30;2273:50;;;2319:1;2316;2309:12;2273:50;2372:2;2366:9;2414:4;2402:17;;-1:-1:-1;;;;;2434:34:147;;2470:22;;;2431:62;2428:88;;;2496:18;;:::i;:::-;2532:2;2525:22;;;2616:23;;2648;;2744:2;2729:18;;;2716:32;2764:15;;;2757:32;2847:18;;;2834:32;2882:15;;;2875:32;;;;-1:-1:-1;2565:6:147;2186:727;-1:-1:-1;2186:727:147:o;2918:254::-;3016:6;3069:2;3057:9;3048:7;3044:23;3040:32;3037:52;;;3085:1;3082;3075:12;3037:52;3108:58;3158:7;3147:9;3108:58;:::i;3177:149::-;-1:-1:-1;;;;;3270:31:147;;3260:42;;3250:70;;3316:1;3313;3306:12;3331:183;3391:4;-1:-1:-1;;;;;3416:6:147;3413:30;3410:56;;;3446:18;;:::i;:::-;-1:-1:-1;3491:1:147;3487:14;3503:4;3483:25;;3331:183::o;3519:762::-;3573:5;3626:3;3619:4;3611:6;3607:17;3603:27;3593:55;;3644:1;3641;3634:12;3593:55;3684:6;3671:20;3711:64;3727:47;3767:6;3727:47;:::i;:::-;3711:64;:::i;:::-;3799:3;3823:6;3818:3;3811:19;3855:4;3850:3;3846:14;3839:21;;3916:4;3906:6;3903:1;3899:14;3891:6;3887:27;3883:38;3869:52;;3944:3;3936:6;3933:15;3930:35;;;3961:1;3958;3951:12;3930:35;3997:4;3989:6;3985:17;4011:239;4027:6;4022:3;4019:15;4011:239;;;4109:3;4096:17;4126:49;4169:5;4126:49;:::i;:::-;4188:18;;4235:4;4226:14;;;;4044;4011:239;;;-1:-1:-1;4268:7:147;3519:762;-1:-1:-1;;;;;3519:762:147:o;4286:1170::-;4450:6;4458;4466;4474;4482;4490;4498;4551:3;4539:9;4530:7;4526:23;4522:33;4519:53;;;4568:1;4565;4558:12;4519:53;4607:9;4594:23;4626:49;4669:5;4626:49;:::i;:::-;4694:5;-1:-1:-1;4772:2:147;4757:18;;4744:32;;-1:-1:-1;4875:2:147;4860:18;;4847:32;;-1:-1:-1;4978:2:147;4963:18;;4950:32;;-1:-1:-1;5059:3:147;5044:19;;5031:33;-1:-1:-1;;;;;5076:30:147;;5073:50;;;5119:1;5116;5109:12;5073:50;5142:61;5195:7;5186:6;5175:9;5171:22;5142:61;:::i;:::-;5132:71;-1:-1:-1;;5276:3:147;5261:19;;5248:33;;-1:-1:-1;5359:3:147;5344:19;;5331:33;5373:51;5331:33;5373:51;:::i;:::-;5443:7;5433:17;;;4286:1170;;;;;;;;;;:::o;5461:385::-;5529:6;5537;5590:2;5578:9;5569:7;5565:23;5561:32;5558:52;;;5606:1;5603;5596:12;5558:52;5651:23;;;-1:-1:-1;5750:2:147;5735:18;;5722:32;5763:51;5722:32;5763:51;:::i;:::-;5833:7;5823:17;;;5461:385;;;;;:::o;6862:346::-;6930:6;6938;6991:2;6979:9;6970:7;6966:23;6962:32;6959:52;;;7007:1;7004;6997:12;6959:52;-1:-1:-1;;7052:23:147;;;7172:2;7157:18;;;7144:32;;-1:-1:-1;6862:346:147:o;7537:265::-;7596:6;7649:2;7637:9;7628:7;7624:23;7620:32;7617:52;;;7665:1;7662;7655:12;7617:52;7704:9;7691:23;7723:49;7766:5;7723:49;:::i;7807:348::-;7891:6;7944:2;7932:9;7923:7;7919:23;7915:32;7912:52;;;7960:1;7957;7950:12;7912:52;8000:9;7987:23;-1:-1:-1;;;;;8025:6:147;8022:30;8019:50;;;8065:1;8062;8055:12;8019:50;8088:61;8141:7;8132:6;8121:9;8117:22;8088:61;:::i;8160:918::-;8237:6;8245;8298:2;8286:9;8277:7;8273:23;8269:32;8266:52;;;8314:1;8311;8304:12;8266:52;8353:9;8340:23;8372:49;8415:5;8372:49;:::i;:::-;8440:5;-1:-1:-1;8496:2:147;8481:18;;8468:32;-1:-1:-1;;;;;8512:30:147;;8509:50;;;8555:1;8552;8545:12;8509:50;8578:22;;8631:4;8623:13;;8619:27;-1:-1:-1;8609:55:147;;8660:1;8657;8650:12;8609:55;8700:2;8687:16;-1:-1:-1;;;;;8718:6:147;8715:30;8712:56;;;8748:18;;:::i;:::-;8790:57;8837:2;8814:17;;-1:-1:-1;;8810:31:147;8843:2;8806:40;8790:57;:::i;:::-;8870:6;8863:5;8856:21;8918:7;8913:2;8904:6;8900:2;8896:15;8892:24;8889:37;8886:57;;;8939:1;8936;8929:12;8886:57;8994:6;8989:2;8985;8981:11;8976:2;8969:5;8965:14;8952:49;9046:1;9041:2;9032:6;9025:5;9021:18;9017:27;9010:38;9067:5;9057:15;;;;;8160:918;;;;;:::o;9083:965::-;9206:6;9259:2;9247:9;9238:7;9234:23;9230:32;9227:52;;;9275:1;9272;9265:12;9227:52;9315:9;9302:23;-1:-1:-1;;;;;9340:6:147;9337:30;9334:50;;;9380:1;9377;9370:12;9334:50;9403:22;;9456:4;9448:13;;9444:27;-1:-1:-1;9434:55:147;;9485:1;9482;9475:12;9434:55;9525:2;9512:16;9548:64;9564:47;9604:6;9564:47;:::i;9548:64::-;9634:3;9658:6;9653:3;9646:19;9690:2;9685:3;9681:12;9674:19;;9748:2;9740:4;9732:6;9728:17;9724:2;9720:26;9716:35;9702:49;;9774:7;9766:6;9763:19;9760:39;;;9795:1;9792;9785:12;9760:39;9827:2;9823;9819:11;9808:22;;9839:179;9855:6;9850:3;9847:15;9839:179;;;9923:52;9967:7;9962:3;9923:52;:::i;:::-;9918:3;9911:65;10005:2;10000:3;9996:12;9989:19;;9881:4;9876:3;9872:14;9865:21;;9839:179;;;10037:5;9083:965;-1:-1:-1;;;;;;9083:965:147:o;10053:544::-;10130:6;10138;10146;10199:2;10187:9;10178:7;10174:23;10170:32;10167:52;;;10215:1;10212;10205:12;10167:52;10260:23;;;-1:-1:-1;10359:2:147;10344:18;;10331:32;10372:51;10331:32;10372:51;:::i;:::-;10442:7;-1:-1:-1;10501:2:147;10486:18;;10473:32;10514:51;10473:32;10514:51;:::i;:::-;10584:7;10574:17;;;10053:544;;;;;:::o;10602:446::-;10655:3;10693:5;10687:12;10720:6;10715:3;10708:19;10752:4;10747:3;10743:14;10736:21;;10791:4;10784:5;10780:16;10814:1;10824:199;10838:6;10835:1;10832:13;10824:199;;;10903:13;;-1:-1:-1;;;;;10899:39:147;10887:52;;10968:4;10959:14;;;;10996:17;;;;10935:1;10853:9;10824:199;;;-1:-1:-1;11039:3:147;;10602:446;-1:-1:-1;;;;10602:446:147:o;11053:261::-;11232:2;11221:9;11214:21;11195:4;11252:56;11304:2;11293:9;11289:18;11281:6;11252:56;:::i;11319:418::-;11468:2;11457:9;11450:21;11431:4;11500:6;11494:13;11543:6;11538:2;11527:9;11523:18;11516:34;11602:6;11597:2;11589:6;11585:15;11580:2;11569:9;11565:18;11559:50;11658:1;11653:2;11644:6;11633:9;11629:22;11625:31;11618:42;11728:2;11721;11717:7;11712:2;11704:6;11700:15;11696:29;11685:9;11681:45;11677:54;11669:62;;;11319:418;;;;:::o;11742:424::-;11810:6;11818;11871:2;11859:9;11850:7;11846:23;11842:32;11839:52;;;11887:1;11884;11877:12;11839:52;11926:9;11913:23;11945:49;11988:5;11945:49;:::i;:::-;12013:5;-1:-1:-1;12070:2:147;12055:18;;12042:32;12083:51;12042:32;12083:51;:::i;12522:273::-;12578:6;12631:2;12619:9;12610:7;12606:23;12602:32;12599:52;;;12647:1;12644;12637:12;12599:52;12686:9;12673:23;12739:5;12732:13;12725:21;12718:5;12715:32;12705:60;;12761:1;12758;12751:12;13451:127;13512:10;13507:3;13503:20;13500:1;13493:31;13543:4;13540:1;13533:15;13567:4;13564:1;13557:15;13583:125;13648:9;;;13669:10;;;13666:36;;;13682:18;;:::i;13713:398::-;13915:2;13897:21;;;13954:2;13934:18;;;13927:30;13993:34;13988:2;13973:18;;13966:62;-1:-1:-1;;;14059:2:147;14044:18;;14037:32;14101:3;14086:19;;13713:398::o;14116:332::-;14323:6;14312:9;14305:25;14366:2;14361;14350:9;14346:18;14339:30;14286:4;14386:56;14438:2;14427:9;14423:18;14415:6;14386:56;:::i;14453:127::-;14514:10;14509:3;14505:20;14502:1;14495:31;14545:4;14542:1;14535:15;14569:4;14566:1;14559:15;14585:120;14625:1;14651;14641:35;;14656:18;;:::i;:::-;-1:-1:-1;14690:9:147;;14585:120::o;15300:184::-;15370:6;15423:2;15411:9;15402:7;15398:23;15394:32;15391:52;;;15439:1;15436;15429:12;15391:52;-1:-1:-1;15462:16:147;;15300:184;-1:-1:-1;15300:184:147:o;15489:128::-;15556:9;;;15577:11;;;15574:37;;;15591:18;;:::i;16099:969::-;16194:6;16247:2;16235:9;16226:7;16222:23;16218:32;16215:52;;;16263:1;16260;16253:12;16215:52;16296:9;16290:16;-1:-1:-1;;;;;16321:6:147;16318:30;16315:50;;;16361:1;16358;16351:12;16315:50;16384:22;;16437:4;16429:13;;16425:27;-1:-1:-1;16415:55:147;;16466:1;16463;16456:12;16415:55;16499:2;16493:9;16522:64;16538:47;16578:6;16538:47;:::i;16522:64::-;16608:3;16632:6;16627:3;16620:19;16664:2;16659:3;16655:12;16648:19;;16719:2;16709:6;16706:1;16702:14;16698:2;16694:23;16690:32;16676:46;;16745:7;16737:6;16734:19;16731:39;;;16766:1;16763;16756:12;16731:39;16798:2;16794;16790:11;16779:22;;16810:228;16826:6;16821:3;16818:15;16810:228;;;16899:3;16893:10;16916:49;16959:5;16916:49;:::i;:::-;16978:18;;17025:2;16843:12;;;;17016;;;;16810:228;;17325:112;17357:1;17383;17373:35;;17388:18;;:::i;:::-;-1:-1:-1;17422:9:147;;17325:112::o;17442:127::-;17503:10;17498:3;17494:20;17491:1;17484:31;17534:4;17531:1;17524:15;17558:4;17555:1;17548:15;17574:168;17647:9;;;17678;;17695:15;;;17689:22;;17675:37;17665:71;;17716:18;;:::i;17747:398::-;17949:2;17931:21;;;17988:2;17968:18;;;17961:30;18027:34;18022:2;18007:18;;18000:62;-1:-1:-1;;;18093:2:147;18078:18;;18071:32;18135:3;18120:19;;17747:398::o;20030:135::-;20069:3;20090:17;;;20087:43;;20110:18;;:::i;:::-;-1:-1:-1;20157:1:147;20146:13;;20030:135::o;20170:301::-;20299:3;20337:6;20331:13;20383:6;20376:4;20368:6;20364:17;20359:3;20353:37;20445:1;20409:16;;20434:13;;;-1:-1:-1;20409:16:147;20170:301;-1:-1:-1;20170:301:147:o","linkReferences":{},"immutableReferences":{"39766":[{"start":9697,"length":32},{"start":9738,"length":32},{"start":10059,"length":32}]}},"methodIdentifiers":{"COMMITMENT_ADMIN()":"80e460f0","DEFAULT_ADMIN_ROLE()":"a217fddf","TRUSTED_ATTESTER()":"5db916ab","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","acceptGenesisCeremony()":"92a2ebf3","attesterRewardPoints(uint256,address)":"6f865294","batchGrantCommitmentAdmin(address[])":"4b47d955","batchGrantTrustedAttester(address[])":"cf6772ad","commitmentFirstSeenAt(uint256,bytes32)":"d7830688","commitmentStake(uint256,bytes32)":"c19b406c","commitments(uint256,address)":"e90d4c06","createSuperBlockCommitment(uint256,bytes32,bytes32)":"026583d7","forceLatestCommitment((uint256,bytes32,bytes32))":"08c7050f","getAcceptingEpoch()":"6c713af8","getAttesterRewardPoints(uint256,address)":"6978ab12","getAttesterStake(uint256,address)":"ba26513e","getAttesterStakeForAcceptingEpoch(address)":"491d0467","getCommitmentByAttester(uint256,address)":"f1949add","getCommitmentFirstSeenAt((uint256,bytes32,bytes32))":"e07472ef","getCustodianStake(uint256,address)":"1de38fe1","getCustodianStakeForAcceptingEpoch(address)":"d440116d","getEpochDuration()":"5d3ea8f1","getEpochStartTime()":"90879f64","getLastPostconfirmedSuperBlockHeight()":"59b99597","getMaxTolerableSuperBlockHeight()":"943b79e2","getMinCommitmentAgeForPostconfirmation()":"ab208ebd","getNextAcceptingEpochWithException()":"3752d675","getPostconfirmedCommitment(uint256)":"2bfd11d6","getPostconfirmer()":"35ea1c63","getPostconfirmerDuration()":"1241ebe3","getPostconfirmerPrivilegeDuration()":"028e490a","getPostconfirmerRewardPoints(uint256,address)":"ed8a1d59","getPostconfirmerStartTime()":"5f4d642e","getPresentEpoch()":"37d7f58f","getRoleAdmin(bytes32)":"248a9ca3","getStake(uint256,address,address)":"7aa81c2a","getStakeForAcceptingEpoch(address,address)":"bb04bd2f","getStakedAttestersForAcceptingEpoch()":"aa0d6fcd","getSuperBlockHeightAssignedEpoch(uint256)":"d283392e","getTotalStake(uint256)":"45367f23","getTotalStakeForAcceptingEpoch()":"14e38026","getValidatorCommitmentAtSuperBlockHeight(uint256,address)":"556d97c8","grantCommitmentAdmin(address)":"949d7c2a","grantRole(bytes32,address)":"2f2ff15d","grantTrustedAttester(address)":"81df1746","hasRole(bytes32,address)":"91d14854","initialize()":"8129fc1c","initialize(address,uint256,uint256,uint256,address[],uint256,address)":"107e21ca","isCommitted(uint256)":"e4a3fb74","isPostconfirmed(uint256)":"ec23ec2e","isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))":"0cf6b6bd","lastPostconfirmedSuperBlockHeight()":"fdafe9ca","leadingSuperBlockTolerance()":"03d3f7fd","minCommitmentAgeForPostconfirmation()":"bff92c8c","moveTokenAddress()":"58376877","openAttestationEnabled()":"ef9ae15c","postconfirmSuperBlocksAndRollover()":"26624e37","postconfirmedAtL1BlockHeight(uint256)":"7ac561c8","postconfirmedAtL1BlockHeightByPostconfirmer(uint256)":"7cfd8205","postconfirmedAtL1BlockTimestamp(uint256)":"a207fe2f","postconfirmedBy(uint256)":"91807e4f","postconfirmedByPostconfirmer(uint256)":"08750a32","postconfirmedSuperBlocks(uint256)":"eda67fc4","postconfirmedSuperBlocksVersion()":"ec18c186","postconfirmerDuration()":"4ceb2e66","postconfirmerPrivilegeDuration()":"55b8119d","postconfirmerRewardPoints(uint256,address)":"1db859c7","proxiableUUID()":"52d1902d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","rewardPerAttestationPoint()":"5f83c7d5","rewardPerPostconfirmationPoint()":"d3eef4cc","setAcceptingEpoch(uint256)":"d03509ec","setMinCommitmentAgeForPostconfirmation(uint256)":"1f83e2a3","setOpenAttestationEnabled(bool)":"d2526fef","setPostconfirmedCommitmentAtBlockHeight((uint256,bytes32,bytes32))":"3119edd4","setPostconfirmerDuration(uint256)":"3d645927","setPostconfirmerPrivilegeDuration(uint256)":"da7d28b6","setRewardPerAttestationPoint(uint256)":"0d39f7f0","setRewardPerPostconfirmationPoint(uint256)":"57342282","stakingContract()":"ee99205c","submitBatchSuperBlockCommitment((uint256,bytes32,bytes32)[])":"622e3616","submitSuperBlockCommitment((uint256,bytes32,bytes32))":"0e74b609","superBlockHeightAssignedEpoch(uint256)":"85e6b8c2","supportsInterface(bytes4)":"01ffc9a7","upgradeToAndCall(address,bytes)":"4f1ef286","versionedPostconfirmedSuperBlocks(uint256,uint256)":"3ba18005"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AttesterAlreadyCommitted\",\"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\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PostconfirmerDurationTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PostconfirmerDurationTooLongForEpoch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnacceptableSuperBlockCommitment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"minCommitmentAgeForPostconfirmationTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"postconfirmerPrivilegeDurationTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateCommitment\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"attesterStake\",\"type\":\"uint256\"}],\"name\":\"SuperBlockCommitmentSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateCommitment\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"SuperBlockPostconfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COMMITMENT_ADMIN\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRUSTED_ATTESTER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"attesterRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"points\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"}],\"name\":\"batchGrantCommitmentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"}],\"name\":\"batchGrantTrustedAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"commitmentFirstSeenAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitement\",\"type\":\"bytes32\"}],\"name\":\"commitmentStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"commitments\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"name\":\"createSuperBlockCommitment\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"forceLatestCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getCommitmentByAttester\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"getCommitmentFirstSeenAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochStartTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastPostconfirmedSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxTolerableSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinCommitmentAgeForPostconfirmation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextAcceptingEpochWithException\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"getPostconfirmedCommitment\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmerDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmerPrivilegeDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"postconfirmer\",\"type\":\"address\"}],\"name\":\"getPostconfirmerRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmerStartTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPresentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakedAttestersForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"getSuperBlockHeightAssignedEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"getTotalStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getValidatorCommitmentAtSuperBlockHeight\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantCommitmentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"grantTrustedAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IMovementStaking\",\"name\":\"_stakingContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_lastPostconfirmedSuperBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_leadingSuperBlockTolerance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_epochDuration\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_custodians\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_postconfirmerDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_moveTokenAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"isCommitted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"isPostconfirmed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"isWithinPostconfirmerPrivilegeDuration\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPostconfirmedSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"leadingSuperBlockTolerance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minCommitmentAgeForPostconfirmation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"moveTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"openAttestationEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmSuperBlocksAndRollover\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockHeight\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockHeightByPostconfirmer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockHeight\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedBy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedByPostconfirmer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedSuperBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmedSuperBlocksVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmerDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmerPrivilegeDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"postconfirmer\",\"type\":\"address\"}],\"name\":\"postconfirmerRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"points\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPerAttestationPoint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPerPostconfirmationPoint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newEpoch\",\"type\":\"uint256\"}],\"name\":\"setAcceptingEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minCommitmentAgeForPostconfirmation\",\"type\":\"uint256\"}],\"name\":\"setMinCommitmentAgeForPostconfirmation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOpenAttestationEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"setPostconfirmedCommitmentAtBlockHeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_postconfirmerDuration\",\"type\":\"uint256\"}],\"name\":\"setPostconfirmerDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_postconfirmerPrivilegeDuration\",\"type\":\"uint256\"}],\"name\":\"setPostconfirmerPrivilegeDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rewardPerPoint\",\"type\":\"uint256\"}],\"name\":\"setRewardPerAttestationPoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rewardPerPoint\",\"type\":\"uint256\"}],\"name\":\"setRewardPerPostconfirmationPoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakingContract\",\"outputs\":[{\"internalType\":\"contract IMovementStaking\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment[]\",\"name\":\"superBlockCommitments\",\"type\":\"tuple[]\"}],\"name\":\"submitBatchSuperBlockCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"commitment\",\"type\":\"tuple\"}],\"name\":\"submitSuperBlockCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"superBlockHeightAssignedEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"versionedPostconfirmedSuperBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"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.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted to signal this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"getPostconfirmerPrivilegeDuration()\":{\"returns\":{\"_0\":\"The maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize()\":{\"details\":\"Initialize the contract\"},\"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))\":{\"details\":\"The postconfirmer's privilege window is the time period when only the postconfirmer will get rewarded for postconfirmation\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setAcceptingEpoch(uint256)\":{\"params\":{\"newEpoch\":\"The new accepting epoch value\"}},\"setMinCommitmentAgeForPostconfirmation(uint256)\":{\"params\":{\"_minCommitmentAgeForPostconfirmation\":\"New minimum commitment age \"}},\"setPostconfirmerDuration(uint256)\":{\"params\":{\"_postconfirmerDuration\":\"New postconfirmer term duration in time units\"}},\"setPostconfirmerPrivilegeDuration(uint256)\":{\"params\":{\"_postconfirmerPrivilegeDuration\":\"maximum time the postconfirmer is permitted to be non-reactive to an honest superBlock commitment\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"PostconfirmerDurationTooLong()\":[{\"notice\":\"Error thrown when postconfirmer term is greater than 256 blocks\"}],\"PostconfirmerDurationTooLongForEpoch()\":[{\"notice\":\"Error thrown when postconfirmer term is too large for epoch duration\"}],\"minCommitmentAgeForPostconfirmationTooLong()\":[{\"notice\":\"Error thrown when minimum commitment age is greater than epoch duration\"}],\"postconfirmerPrivilegeDurationTooLong()\":[{\"notice\":\"Error thrown when maximum postconfirmer non-reactivity time is greater than epoch duration\"}]},\"kind\":\"user\",\"methods\":{\"COMMITMENT_ADMIN()\":{\"notice\":\"The role that allows the commitment admin to set the accepting epoch\"},\"TRUSTED_ATTESTER()\":{\"notice\":\"The role that allows attesters to submit commitments\"},\"acceptGenesisCeremony()\":{\"notice\":\"Accepts the genesis ceremony.\"},\"getAcceptingEpoch()\":{\"notice\":\"get the accepting epoch\"},\"getAttesterRewardPoints(uint256,address)\":{\"notice\":\"Gets the reward points for an attester in a given epoch\"},\"getAttesterStake(uint256,address)\":{\"notice\":\"Gets the stake for a given attester at a given epoch\"},\"getAttesterStakeForAcceptingEpoch(address)\":{\"notice\":\"Gets the stake for a given attester at the accepting epoch\"},\"getCommitmentByAttester(uint256,address)\":{\"notice\":\"Gets the commitment submitted by an attester for a given height\"},\"getCommitmentFirstSeenAt((uint256,bytes32,bytes32))\":{\"notice\":\"get the timestamp when a commitment was first seen\"},\"getCustodianStake(uint256,address)\":{\"notice\":\"Gets the stake for a given custodian for a given epoch\"},\"getEpochDuration()\":{\"notice\":\"Gets the epoch duration\"},\"getEpochStartTime()\":{\"notice\":\"Gets the time at which the current epoch started\"},\"getLastPostconfirmedSuperBlockHeight()\":{\"notice\":\"Gets the height of the last postconfirmed superblock\"},\"getPostconfirmedCommitment(uint256)\":{\"notice\":\"get the postconfirmed commitment for a given height\"},\"getPostconfirmer()\":{\"notice\":\"Determines the postconfirmer in the accepting epoch using L1 block hash as a source of randomness\"},\"getPostconfirmerDuration()\":{\"notice\":\"Gets the postconfirmer duration\"},\"getPostconfirmerPrivilegeDuration()\":{\"notice\":\"Gets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\"},\"getPostconfirmerRewardPoints(uint256,address)\":{\"notice\":\"Gets the reward points for a postconfirmer in a given epoch\"},\"getPostconfirmerStartTime()\":{\"notice\":\"Gets the time at which the current postconfirmer's term started\"},\"getPresentEpoch()\":{\"notice\":\"get the present epoch\"},\"getStake(uint256,address,address)\":{\"notice\":\"Gets the stake for a given tuple (custodian, attester) at a given epoch\"},\"getStakeForAcceptingEpoch(address,address)\":{\"notice\":\"Gets the stake for a given tuple (custodian, attester) at the accepting epoch\"},\"getStakedAttestersForAcceptingEpoch()\":{\"notice\":\"Gets the attesters who have stake in the current accepting epoch\"},\"getSuperBlockHeightAssignedEpoch(uint256)\":{\"notice\":\"Gets the epoch assigned to a superblock height\"},\"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))\":{\"notice\":\"Checks, for a given superBlock commitment, if the current L1 block time is within the postconfirmer's privilege window\"},\"minCommitmentAgeForPostconfirmation()\":{\"notice\":\"Minimum time that must pass before a commitment can be postconfirmed\"},\"postconfirmSuperBlocksAndRollover()\":{\"notice\":\"postconfirm superblocks and rollover\"},\"postconfirmerDuration()\":{\"notice\":\"Postconfirmer term time in seconds. The postconfirmer remains the same for postconfirmerDuration period.\"},\"postconfirmerPrivilegeDuration()\":{\"notice\":\"Max time the postconfirmer can be non-reactive to an honest superBlock commitment\"},\"setAcceptingEpoch(uint256)\":{\"notice\":\"Sets the accepting epoch to a new value (must be higher than current)\"},\"setMinCommitmentAgeForPostconfirmation(uint256)\":{\"notice\":\"Sets the minimum time that must pass before a commitment can be postconfirmed\"},\"setPostconfirmerDuration(uint256)\":{\"notice\":\"Sets the postconfirmer term duration, must be less than epoch duration\"},\"setPostconfirmerPrivilegeDuration(uint256)\":{\"notice\":\"Sets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\"},\"submitSuperBlockCommitment((uint256,bytes32,bytes32))\":{\"notice\":\"submit a superblock commitment\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/settlement/PCP.sol\":\"PCP\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x949f1b87232ce60ae1d7651dfc4272f258a388448e08b4d624b1acbe05d8b39b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://469b7e1cab4c319957fddef8ad610ce347e2494d15389f3d3f689c4be66c1f7d\",\"dweb:/ipfs/QmdC9UdUZAYzjyZ2ULJgJ5QxhDHRtVJ8MJhHKjiotNfCeY\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol\":{\"keccak256\":\"0x13c2d19041c51b246233f96874a66c0094b8a5ff78af3b85ea27867f302dcbbb\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f1bc47de2e6e12b3680e47a4dd5b6e3c1e85b65851378aa1d617309edbc1200d\",\"dweb:/ipfs/QmSPcJ9HmkmsSDvMS4KZijnxoGMAEn8HbQuY4fe8DroZEE\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0xe1448f559716952220b5c696a5cc34d1f11f958bfbfcd05988543f6fd8bfff96\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ebd19cec65d3998dad25dc9beecd33055b1900f26c3f61377c78926ca0637c9a\",\"dweb:/ipfs/QmUda1jFjWf2ptQrahTgU6953SZY7ZWksRaTo2dKGX4BMK\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x37b2d71a3d12d55076e87942fb75e80ec8b6bacecd19b6562474952f6973d87b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4261c708ec31ae8764d242089617dc60c5e54a20ec781a42704886eda988a37a\",\"dweb:/ipfs/QmQqFiotrcCfB36B2pSfwGz4Bi4zhRgwwGAJ8VFBaEtzQ1\"]},\"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/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89\",\"dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xccb9b54747f3733f9ca435191745881587b2b48a12d6903358b59bc8ae39ea6b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://021b637b39bddc68e1beed71677cb52919d27880804b1c7160d53064342786bc\",\"dweb:/ipfs/QmV3wgNQmoi9d6U3P7xwHAEKDoaQzGqGGjcSXsyWMf9rsK\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70\",\"dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"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/utils/SafeERC20.sol\":{\"keccak256\":\"0x6dd0cb67846da3fa1241c520faaa215d6bec8226e37beac6056c51e8af44d24e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://650e533e62b30dcc6edea2b6c91358d5659da3bde42e56adf7316c493b916a15\",\"dweb:/ipfs/QmYkmK2vPE6FjdAoQVpZSJxamTLGno9wzGS495TcMNFViV\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e\",\"dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR\"]},\"lib/openzeppelin-contracts/contracts/utils/Arrays.sol\":{\"keccak256\":\"0xb4d040e2cc1d4a66d08b174b97332aa3dbf330bc74f91c725d7ff653efca7eb1\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9da205f459aac15cadd00538691b525eef81f098a95bc3eedea12968bcb70706\",\"dweb:/ipfs/QmcqTJET3rNsXMGT3UvqLgFS3RrKaHe5x97m4dcfUCWMoW\"]},\"lib/openzeppelin-contracts/contracts/utils/Comparators.sol\":{\"keccak256\":\"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd\",\"dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC\"]},\"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/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol\":{\"keccak256\":\"0x91832f9744a308318ef3344caf2122345d6a949e25017461322d13a4ede53f10\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://77f5fa6ce1145a3637406a77940cd1ab50523187c8ac7281805b3fc2bd6ffd5e\",\"dweb:/ipfs/QmewJyTg2SoBee1bKwks3vktT2wTQhB7TtzZg9xKvzvfUf\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"lib/openzeppelin-contracts/contracts/utils/math/Math.sol\":{\"keccak256\":\"0xc240f71206795cead02e49f999b3523414c230cec53423298d8457a7ce9d3ea4\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://7d5813c665d5ea1b73e27844800eb45831b9ba608b2a9216ead318e246fd5e8f\",\"dweb:/ipfs/QmNStA3tbwHZm1tXgdmY4wB3NbYKJtzYWADjKmDMhYHjyA\"]},\"lib/openzeppelin-contracts/contracts/utils/math/SafeCast.sol\":{\"keccak256\":\"0x195533c86d0ef72bcc06456a4f66a9b941f38eb403739b00f21fd7c1abd1ae54\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://b1d578337048cad08c1c03041cca5978eff5428aa130c781b271ad9e5566e1f8\",\"dweb:/ipfs/QmPFKL2r9CBsMwmUqqdcFPfHZB2qcs9g1HDrPxzWSxomvy\"]},\"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol\":{\"keccak256\":\"0x804753930b59f27c3a6747a4cf58b4d291f2c942a2a76edd43d4571a5f6b02bc\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6f05286cf2babfc5bf1c347c447477ca24147bea09bb4f5ba01fe9afd98ab409\",\"dweb:/ipfs/QmUcTFzF4y2U9VoBbv7kx3PDTACdNMoYQuTe89ot2pAqqA\"]},\"src/settlement/PCP.sol\":{\"keccak256\":\"0x55938993344c74fd0bc722fe4fc713ca41ef116f7590eb7fac43e29375914902\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://4d3f02dec5922f7e6cebfa6514795b6727024a0ce066e1aa8d87beb3048ab0c6\",\"dweb:/ipfs/QmbgQ4WAnh8dJ99xRkhhhLuEr164JXWkGipPVrCLuucdn4\"]},\"src/settlement/PCPStorage.sol\":{\"keccak256\":\"0xf8531c966b1c84b009146a45614c016a1e4fe1d27d03d77ed97f5a6e728eb2a1\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://e6e97f51c06ee9d80c212c6f8c1b814ceec46df5836341249e4b6d31137f3cff\",\"dweb:/ipfs/QmVzSLbaveGiCFBLWWiPpR7Ta5xuF9rWhffDeTntwAfiss\"]},\"src/settlement/interfaces/IPCP.sol\":{\"keccak256\":\"0xf9247e3839660b3386697a2cd3882a4557ddc551929f01d8e877de6d2e4d0e89\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://54625a2912af7fa78ae3fb873f3a6db80fc6044d3f8994701d4845032032578f\",\"dweb:/ipfs/QmR5m72PohfHMeFFw2ASDQQgJhkeknbo9R2aGmEQU7a8zg\"]},\"src/settlement/settlement/BaseSettlement.sol\":{\"keccak256\":\"0xf3f6ea0ae8db122d1c6dade60057ea8fa03b8efc8108f03e48049bb9548d2c9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e340fdd89c1872461ec0f98195ef56aaf583ebf2897890ee74c1eefad8e8c86e\",\"dweb:/ipfs/QmWCcRibYEJZEvY1ugrw7jkumrHNxr8z3dMeP457PkbJED\"]},\"src/staking/MovementStaking.sol\":{\"keccak256\":\"0xb61e04fbc6fce5f3d2e64269f2adccea1f27060f714259634ec20eab1cff468f\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0bf80557c4c9156a247c44cc476c5747028fddd392f9d3e3c7cea1a7fac1f670\",\"dweb:/ipfs/QmQ6A6bPUsm2b7yy5eSsJ7MXgQGAF8zWEkJf7uL7sZNXi9\"]},\"src/staking/MovementStakingStorage.sol\":{\"keccak256\":\"0xcb909fbdd31da45891f983aca5387eff88693b31c60d304b6ab7c1128c814225\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fcfd3aadf8c9e714c6e0f5b8b7f6000b54a1a0eeb219d25cb23848411ae17edb\",\"dweb:/ipfs/QmTKyTFmGKHKWk1wKncaAvXBZH9MwJfkdhFbmTUAwTX7UP\"]},\"src/staking/base/BaseStaking.sol\":{\"keccak256\":\"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46\",\"dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx\"]},\"src/staking/interfaces/IMovementStaking.sol\":{\"keccak256\":\"0x250f5a72809b363ebefe5fbcdce50b62a9ff49672a863c8273e0fbe4d59f8933\",\"urls\":[\"bzz-raw://5a4385f838da317ce90fb84cdd83a724d132f7e6c287191673f4e2ce1a486bbe\",\"dweb:/ipfs/Qmbwq1kBumZDyREvc4ryHMNMQ4sgT39fNAK4bUNRoXqchj\"]},\"src/token/base/BaseToken.sol\":{\"keccak256\":\"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e\",\"dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd\"]},\"src/token/base/MintableToken.sol\":{\"keccak256\":\"0xba4c9b5e900564cb3abb081d11b95f23e5f39a5ee799cda54c9f1a49a7aa8a13\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://94ca441f7acc6b312fc3d1d6ce4dab9971fd1cdf176ae5251fe2f28c4c52a35a\",\"dweb:/ipfs/QmXAuDzaJqydZho7CFyKKKtyYATHedyAUHTKAS839oji3o\"]},\"src/token/base/WrappedToken.sol\":{\"keccak256\":\"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885\",\"dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4\"]},\"src/token/base/WrappedTokenStorage.sol\":{\"keccak256\":\"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08\",\"dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj\"]},\"src/token/custodian/CustodianToken.sol\":{\"keccak256\":\"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04\",\"dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"AttesterAlreadyCommitted"},{"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":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"PostconfirmerDurationTooLong"},{"inputs":[],"type":"error","name":"PostconfirmerDurationTooLongForEpoch"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[],"type":"error","name":"UnacceptableSuperBlockCommitment"},{"inputs":[],"type":"error","name":"minCommitmentAgeForPostconfirmationTooLong"},{"inputs":[],"type":"error","name":"postconfirmerPrivilegeDurationTooLong"},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"stateCommitment","type":"bytes32","indexed":false},{"internalType":"uint256","name":"attesterStake","type":"uint256","indexed":false}],"type":"event","name":"SuperBlockCommitmentSubmitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"stateCommitment","type":"bytes32","indexed":false},{"internalType":"uint256","name":"height","type":"uint256","indexed":false}],"type":"event","name":"SuperBlockPostconfirmed","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"COMMITMENT_ADMIN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TRUSTED_ATTESTER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptGenesisCeremony"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"attesterRewardPoints","outputs":[{"internalType":"uint256","name":"points","type":"uint256"}]},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"batchGrantCommitmentAdmin"},{"inputs":[{"internalType":"address[]","name":"attesters","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"batchGrantTrustedAttester"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"stateMutability":"view","type":"function","name":"commitmentFirstSeenAt","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"bytes32","name":"commitement","type":"bytes32"}],"stateMutability":"view","type":"function","name":"commitmentStake","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"commitments","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"createSuperBlockCommitment","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"forceLatestCommitment"},{"inputs":[],"stateMutability":"view","type":"function","name":"getAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterRewardPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getCommitmentByAttester","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"view","type":"function","name":"getCommitmentFirstSeenAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getEpochDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getEpochStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getLastPostconfirmedSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getMaxTolerableSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getMinCommitmentAgeForPostconfirmation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getNextAcceptingEpochWithException","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"getPostconfirmedCommitment","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmer","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmerDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmerPrivilegeDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"postconfirmer","type":"address"}],"stateMutability":"view","type":"function","name":"getPostconfirmerRewardPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmerStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPresentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getStakedAttestersForAcceptingEpoch","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"getSuperBlockHeightAssignedEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}],"stateMutability":"view","type":"function","name":"getTotalStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getTotalStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getValidatorCommitmentAtSuperBlockHeight","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantCommitmentAdmin"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantTrustedAttester"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"contract IMovementStaking","name":"_stakingContract","type":"address"},{"internalType":"uint256","name":"_lastPostconfirmedSuperBlockHeight","type":"uint256"},{"internalType":"uint256","name":"_leadingSuperBlockTolerance","type":"uint256"},{"internalType":"uint256","name":"_epochDuration","type":"uint256"},{"internalType":"address[]","name":"_custodians","type":"address[]"},{"internalType":"uint256","name":"_postconfirmerDuration","type":"uint256"},{"internalType":"address","name":"_moveTokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"isCommitted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"isPostconfirmed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"view","type":"function","name":"isWithinPostconfirmerPrivilegeDuration","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"lastPostconfirmedSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"leadingSuperBlockTolerance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"minCommitmentAgeForPostconfirmation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"moveTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"openAttestationEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"postconfirmSuperBlocksAndRollover"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockHeight","outputs":[{"internalType":"uint256","name":"L1BlockHeight","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockHeightByPostconfirmer","outputs":[{"internalType":"uint256","name":"L1BlockHeight","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockTimestamp","outputs":[{"internalType":"uint256","name":"L1BlockTimestamp","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedBy","outputs":[{"internalType":"address","name":"attester","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedByPostconfirmer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedSuperBlocks","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"postconfirmedSuperBlocksVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"postconfirmerDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"postconfirmerPrivilegeDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"postconfirmer","type":"address"}],"stateMutability":"view","type":"function","name":"postconfirmerRewardPoints","outputs":[{"internalType":"uint256","name":"points","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[],"stateMutability":"view","type":"function","name":"rewardPerAttestationPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"rewardPerPostconfirmationPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"newEpoch","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setAcceptingEpoch"},{"inputs":[{"internalType":"uint256","name":"_minCommitmentAgeForPostconfirmation","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setMinCommitmentAgeForPostconfirmation"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setOpenAttestationEnabled"},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"setPostconfirmedCommitmentAtBlockHeight"},{"inputs":[{"internalType":"uint256","name":"_postconfirmerDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setPostconfirmerDuration"},{"inputs":[{"internalType":"uint256","name":"_postconfirmerPrivilegeDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setPostconfirmerPrivilegeDuration"},{"inputs":[{"internalType":"uint256","name":"rewardPerPoint","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setRewardPerAttestationPoint"},{"inputs":[{"internalType":"uint256","name":"rewardPerPoint","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setRewardPerPostconfirmationPoint"},{"inputs":[],"stateMutability":"view","type":"function","name":"stakingContract","outputs":[{"internalType":"contract IMovementStaking","name":"","type":"address"}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment[]","name":"superBlockCommitments","type":"tuple[]","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"submitBatchSuperBlockCommitment"},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"commitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"submitSuperBlockCommitment"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"superBlockHeightAssignedEpoch","outputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}]},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"versionedPostconfirmedSuperBlocks","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"getPostconfirmerPrivilegeDuration()":{"returns":{"_0":"The maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"}},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize()":{"details":"Initialize the contract"},"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))":{"details":"The postconfirmer's privilege window is the time period when only the postconfirmer will get rewarded for postconfirmation"},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"setAcceptingEpoch(uint256)":{"params":{"newEpoch":"The new accepting epoch value"}},"setMinCommitmentAgeForPostconfirmation(uint256)":{"params":{"_minCommitmentAgeForPostconfirmation":"New minimum commitment age "}},"setPostconfirmerDuration(uint256)":{"params":{"_postconfirmerDuration":"New postconfirmer term duration in time units"}},"setPostconfirmerPrivilegeDuration(uint256)":{"params":{"_postconfirmerPrivilegeDuration":"maximum time the postconfirmer is permitted to be non-reactive to an honest superBlock commitment"}},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"COMMITMENT_ADMIN()":{"notice":"The role that allows the commitment admin to set the accepting epoch"},"TRUSTED_ATTESTER()":{"notice":"The role that allows attesters to submit commitments"},"acceptGenesisCeremony()":{"notice":"Accepts the genesis ceremony."},"getAcceptingEpoch()":{"notice":"get the accepting epoch"},"getAttesterRewardPoints(uint256,address)":{"notice":"Gets the reward points for an attester in a given epoch"},"getAttesterStake(uint256,address)":{"notice":"Gets the stake for a given attester at a given epoch"},"getAttesterStakeForAcceptingEpoch(address)":{"notice":"Gets the stake for a given attester at the accepting epoch"},"getCommitmentByAttester(uint256,address)":{"notice":"Gets the commitment submitted by an attester for a given height"},"getCommitmentFirstSeenAt((uint256,bytes32,bytes32))":{"notice":"get the timestamp when a commitment was first seen"},"getCustodianStake(uint256,address)":{"notice":"Gets the stake for a given custodian for a given epoch"},"getEpochDuration()":{"notice":"Gets the epoch duration"},"getEpochStartTime()":{"notice":"Gets the time at which the current epoch started"},"getLastPostconfirmedSuperBlockHeight()":{"notice":"Gets the height of the last postconfirmed superblock"},"getPostconfirmedCommitment(uint256)":{"notice":"get the postconfirmed commitment for a given height"},"getPostconfirmer()":{"notice":"Determines the postconfirmer in the accepting epoch using L1 block hash as a source of randomness"},"getPostconfirmerDuration()":{"notice":"Gets the postconfirmer duration"},"getPostconfirmerPrivilegeDuration()":{"notice":"Gets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"},"getPostconfirmerRewardPoints(uint256,address)":{"notice":"Gets the reward points for a postconfirmer in a given epoch"},"getPostconfirmerStartTime()":{"notice":"Gets the time at which the current postconfirmer's term started"},"getPresentEpoch()":{"notice":"get the present epoch"},"getStake(uint256,address,address)":{"notice":"Gets the stake for a given tuple (custodian, attester) at a given epoch"},"getStakeForAcceptingEpoch(address,address)":{"notice":"Gets the stake for a given tuple (custodian, attester) at the accepting epoch"},"getStakedAttestersForAcceptingEpoch()":{"notice":"Gets the attesters who have stake in the current accepting epoch"},"getSuperBlockHeightAssignedEpoch(uint256)":{"notice":"Gets the epoch assigned to a superblock height"},"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))":{"notice":"Checks, for a given superBlock commitment, if the current L1 block time is within the postconfirmer's privilege window"},"minCommitmentAgeForPostconfirmation()":{"notice":"Minimum time that must pass before a commitment can be postconfirmed"},"postconfirmSuperBlocksAndRollover()":{"notice":"postconfirm superblocks and rollover"},"postconfirmerDuration()":{"notice":"Postconfirmer term time in seconds. The postconfirmer remains the same for postconfirmerDuration period."},"postconfirmerPrivilegeDuration()":{"notice":"Max time the postconfirmer can be non-reactive to an honest superBlock commitment"},"setAcceptingEpoch(uint256)":{"notice":"Sets the accepting epoch to a new value (must be higher than current)"},"setMinCommitmentAgeForPostconfirmation(uint256)":{"notice":"Sets the minimum time that must pass before a commitment can be postconfirmed"},"setPostconfirmerDuration(uint256)":{"notice":"Sets the postconfirmer term duration, must be less than epoch duration"},"setPostconfirmerPrivilegeDuration(uint256)":{"notice":"Sets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"},"submitSuperBlockCommitment((uint256,bytes32,bytes32))":{"notice":"submit a superblock commitment"}},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/settlement/PCP.sol":"PCP"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x949f1b87232ce60ae1d7651dfc4272f258a388448e08b4d624b1acbe05d8b39b","urls":["bzz-raw://469b7e1cab4c319957fddef8ad610ce347e2494d15389f3d3f689c4be66c1f7d","dweb:/ipfs/QmdC9UdUZAYzjyZ2ULJgJ5QxhDHRtVJ8MJhHKjiotNfCeY"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol":{"keccak256":"0x13c2d19041c51b246233f96874a66c0094b8a5ff78af3b85ea27867f302dcbbb","urls":["bzz-raw://f1bc47de2e6e12b3680e47a4dd5b6e3c1e85b65851378aa1d617309edbc1200d","dweb:/ipfs/QmSPcJ9HmkmsSDvMS4KZijnxoGMAEn8HbQuY4fe8DroZEE"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0xe1448f559716952220b5c696a5cc34d1f11f958bfbfcd05988543f6fd8bfff96","urls":["bzz-raw://ebd19cec65d3998dad25dc9beecd33055b1900f26c3f61377c78926ca0637c9a","dweb:/ipfs/QmUda1jFjWf2ptQrahTgU6953SZY7ZWksRaTo2dKGX4BMK"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x37b2d71a3d12d55076e87942fb75e80ec8b6bacecd19b6562474952f6973d87b","urls":["bzz-raw://4261c708ec31ae8764d242089617dc60c5e54a20ec781a42704886eda988a37a","dweb:/ipfs/QmQqFiotrcCfB36B2pSfwGz4Bi4zhRgwwGAJ8VFBaEtzQ1"],"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/introspection/ERC165Upgradeable.sol":{"keccak256":"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab","urls":["bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89","dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xccb9b54747f3733f9ca435191745881587b2b48a12d6903358b59bc8ae39ea6b","urls":["bzz-raw://021b637b39bddc68e1beed71677cb52919d27880804b1c7160d53064342786bc","dweb:/ipfs/QmV3wgNQmoi9d6U3P7xwHAEKDoaQzGqGGjcSXsyWMf9rsK"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol":{"keccak256":"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7","urls":["bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b","dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"keccak256":"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724","urls":["bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a","dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486","urls":["bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d","dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c","urls":["bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba","dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d","urls":["bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196","dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA"],"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/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898","urls":["bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70","dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2"],"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/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/utils/SafeERC20.sol":{"keccak256":"0x6dd0cb67846da3fa1241c520faaa215d6bec8226e37beac6056c51e8af44d24e","urls":["bzz-raw://650e533e62b30dcc6edea2b6c91358d5659da3bde42e56adf7316c493b916a15","dweb:/ipfs/QmYkmK2vPE6FjdAoQVpZSJxamTLGno9wzGS495TcMNFViV"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c","urls":["bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e","dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Arrays.sol":{"keccak256":"0xb4d040e2cc1d4a66d08b174b97332aa3dbf330bc74f91c725d7ff653efca7eb1","urls":["bzz-raw://9da205f459aac15cadd00538691b525eef81f098a95bc3eedea12968bcb70706","dweb:/ipfs/QmcqTJET3rNsXMGT3UvqLgFS3RrKaHe5x97m4dcfUCWMoW"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Comparators.sol":{"keccak256":"0x302eecd8cf323b4690e3494a7d960b3cbce077032ab8ef655b323cdd136cec58","urls":["bzz-raw://49ba706f1bc476d68fe6c1fad75517acea4e9e275be0989b548e292eb3a3eacd","dweb:/ipfs/QmeBpvcdGWzWMKTQESUCEhHgnEQYYATVwPxLMxa6vMT7jC"],"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/ReentrancyGuard.sol":{"keccak256":"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3","urls":["bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a","dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/SlotDerivation.sol":{"keccak256":"0x91832f9744a308318ef3344caf2122345d6a949e25017461322d13a4ede53f10","urls":["bzz-raw://77f5fa6ce1145a3637406a77940cd1ab50523187c8ac7281805b3fc2bd6ffd5e","dweb:/ipfs/QmewJyTg2SoBee1bKwks3vktT2wTQhB7TtzZg9xKvzvfUf"],"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/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/math/Math.sol":{"keccak256":"0xc240f71206795cead02e49f999b3523414c230cec53423298d8457a7ce9d3ea4","urls":["bzz-raw://7d5813c665d5ea1b73e27844800eb45831b9ba608b2a9216ead318e246fd5e8f","dweb:/ipfs/QmNStA3tbwHZm1tXgdmY4wB3NbYKJtzYWADjKmDMhYHjyA"],"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/structs/EnumerableSet.sol":{"keccak256":"0x804753930b59f27c3a6747a4cf58b4d291f2c942a2a76edd43d4571a5f6b02bc","urls":["bzz-raw://6f05286cf2babfc5bf1c347c447477ca24147bea09bb4f5ba01fe9afd98ab409","dweb:/ipfs/QmUcTFzF4y2U9VoBbv7kx3PDTACdNMoYQuTe89ot2pAqqA"],"license":"MIT"},"src/settlement/PCP.sol":{"keccak256":"0x55938993344c74fd0bc722fe4fc713ca41ef116f7590eb7fac43e29375914902","urls":["bzz-raw://4d3f02dec5922f7e6cebfa6514795b6727024a0ce066e1aa8d87beb3048ab0c6","dweb:/ipfs/QmbgQ4WAnh8dJ99xRkhhhLuEr164JXWkGipPVrCLuucdn4"],"license":"UNLICENSED"},"src/settlement/PCPStorage.sol":{"keccak256":"0xf8531c966b1c84b009146a45614c016a1e4fe1d27d03d77ed97f5a6e728eb2a1","urls":["bzz-raw://e6e97f51c06ee9d80c212c6f8c1b814ceec46df5836341249e4b6d31137f3cff","dweb:/ipfs/QmVzSLbaveGiCFBLWWiPpR7Ta5xuF9rWhffDeTntwAfiss"],"license":"UNLICENSED"},"src/settlement/interfaces/IPCP.sol":{"keccak256":"0xf9247e3839660b3386697a2cd3882a4557ddc551929f01d8e877de6d2e4d0e89","urls":["bzz-raw://54625a2912af7fa78ae3fb873f3a6db80fc6044d3f8994701d4845032032578f","dweb:/ipfs/QmR5m72PohfHMeFFw2ASDQQgJhkeknbo9R2aGmEQU7a8zg"],"license":"UNLICENSED"},"src/settlement/settlement/BaseSettlement.sol":{"keccak256":"0xf3f6ea0ae8db122d1c6dade60057ea8fa03b8efc8108f03e48049bb9548d2c9a","urls":["bzz-raw://e340fdd89c1872461ec0f98195ef56aaf583ebf2897890ee74c1eefad8e8c86e","dweb:/ipfs/QmWCcRibYEJZEvY1ugrw7jkumrHNxr8z3dMeP457PkbJED"],"license":"MIT"},"src/staking/MovementStaking.sol":{"keccak256":"0xb61e04fbc6fce5f3d2e64269f2adccea1f27060f714259634ec20eab1cff468f","urls":["bzz-raw://0bf80557c4c9156a247c44cc476c5747028fddd392f9d3e3c7cea1a7fac1f670","dweb:/ipfs/QmQ6A6bPUsm2b7yy5eSsJ7MXgQGAF8zWEkJf7uL7sZNXi9"],"license":"UNLICENSED"},"src/staking/MovementStakingStorage.sol":{"keccak256":"0xcb909fbdd31da45891f983aca5387eff88693b31c60d304b6ab7c1128c814225","urls":["bzz-raw://fcfd3aadf8c9e714c6e0f5b8b7f6000b54a1a0eeb219d25cb23848411ae17edb","dweb:/ipfs/QmTKyTFmGKHKWk1wKncaAvXBZH9MwJfkdhFbmTUAwTX7UP"],"license":"UNLICENSED"},"src/staking/base/BaseStaking.sol":{"keccak256":"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393","urls":["bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46","dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx"],"license":"MIT"},"src/staking/interfaces/IMovementStaking.sol":{"keccak256":"0x250f5a72809b363ebefe5fbcdce50b62a9ff49672a863c8273e0fbe4d59f8933","urls":["bzz-raw://5a4385f838da317ce90fb84cdd83a724d132f7e6c287191673f4e2ce1a486bbe","dweb:/ipfs/Qmbwq1kBumZDyREvc4ryHMNMQ4sgT39fNAK4bUNRoXqchj"],"license":null},"src/token/base/BaseToken.sol":{"keccak256":"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2","urls":["bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e","dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd"],"license":"MIT"},"src/token/base/MintableToken.sol":{"keccak256":"0xba4c9b5e900564cb3abb081d11b95f23e5f39a5ee799cda54c9f1a49a7aa8a13","urls":["bzz-raw://94ca441f7acc6b312fc3d1d6ce4dab9971fd1cdf176ae5251fe2f28c4c52a35a","dweb:/ipfs/QmXAuDzaJqydZho7CFyKKKtyYATHedyAUHTKAS839oji3o"],"license":"MIT"},"src/token/base/WrappedToken.sol":{"keccak256":"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45","urls":["bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885","dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4"],"license":"MIT"},"src/token/base/WrappedTokenStorage.sol":{"keccak256":"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e","urls":["bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08","dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj"],"license":"MIT"},"src/token/custodian/CustodianToken.sol":{"keccak256":"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350","urls":["bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04","dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":61820,"contract":"src/settlement/PCP.sol:PCP","label":"stakingContract","offset":0,"slot":"0","type":"t_contract(IMovementStaking)64348"},{"astId":61822,"contract":"src/settlement/PCP.sol:PCP","label":"moveTokenAddress","offset":0,"slot":"1","type":"t_address"},{"astId":61824,"contract":"src/settlement/PCP.sol:PCP","label":"leadingSuperBlockTolerance","offset":0,"slot":"2","type":"t_uint256"},{"astId":61826,"contract":"src/settlement/PCP.sol:PCP","label":"lastPostconfirmedSuperBlockHeight","offset":0,"slot":"3","type":"t_uint256"},{"astId":61829,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmerDuration","offset":0,"slot":"4","type":"t_uint256"},{"astId":61832,"contract":"src/settlement/PCP.sol:PCP","label":"minCommitmentAgeForPostconfirmation","offset":0,"slot":"5","type":"t_uint256"},{"astId":61835,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmerPrivilegeDuration","offset":0,"slot":"6","type":"t_uint256"},{"astId":61847,"contract":"src/settlement/PCP.sol:PCP","label":"superBlockHeightAssignedEpoch","offset":0,"slot":"7","type":"t_mapping(t_uint256,t_uint256)"},{"astId":61854,"contract":"src/settlement/PCP.sol:PCP","label":"commitments","offset":0,"slot":"8","type":"t_mapping(t_uint256,t_mapping(t_address,t_struct(SuperBlockCommitment)61843_storage))"},{"astId":61860,"contract":"src/settlement/PCP.sol:PCP","label":"commitmentStake","offset":0,"slot":"9","type":"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))"},{"astId":61866,"contract":"src/settlement/PCP.sol:PCP","label":"commitmentFirstSeenAt","offset":0,"slot":"10","type":"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))"},{"astId":61870,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedBy","offset":0,"slot":"11","type":"t_mapping(t_uint256,t_address)"},{"astId":61874,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedByPostconfirmer","offset":0,"slot":"12","type":"t_mapping(t_uint256,t_bool)"},{"astId":61878,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedAtL1BlockHeight","offset":0,"slot":"13","type":"t_mapping(t_uint256,t_uint256)"},{"astId":61882,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedAtL1BlockTimestamp","offset":0,"slot":"14","type":"t_mapping(t_uint256,t_uint256)"},{"astId":61886,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedAtL1BlockHeightByPostconfirmer","offset":0,"slot":"15","type":"t_mapping(t_uint256,t_uint256)"},{"astId":61891,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedSuperBlocks","offset":0,"slot":"16","type":"t_mapping(t_uint256,t_struct(SuperBlockCommitment)61843_storage)"},{"astId":61893,"contract":"src/settlement/PCP.sol:PCP","label":"openAttestationEnabled","offset":0,"slot":"17","type":"t_bool"},{"astId":61900,"contract":"src/settlement/PCP.sol:PCP","label":"versionedPostconfirmedSuperBlocks","offset":0,"slot":"18","type":"t_mapping(t_uint256,t_mapping(t_uint256,t_struct(SuperBlockCommitment)61843_storage))"},{"astId":61902,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedSuperBlocksVersion","offset":0,"slot":"19","type":"t_uint256"},{"astId":61908,"contract":"src/settlement/PCP.sol:PCP","label":"attesterRewardPoints","offset":0,"slot":"20","type":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},{"astId":61914,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmerRewardPoints","offset":0,"slot":"21","type":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},{"astId":61916,"contract":"src/settlement/PCP.sol:PCP","label":"rewardPerAttestationPoint","offset":0,"slot":"22","type":"t_uint256"},{"astId":61918,"contract":"src/settlement/PCP.sol:PCP","label":"rewardPerPostconfirmationPoint","offset":0,"slot":"23","type":"t_uint256"},{"astId":61922,"contract":"src/settlement/PCP.sol:PCP","label":"__gap","offset":0,"slot":"24","type":"t_array(t_uint256)45_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)45_storage":{"encoding":"inplace","label":"uint256[45]","numberOfBytes":"1440","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IMovementStaking)64348":{"encoding":"inplace","label":"contract IMovementStaking","numberOfBytes":"20"},"t_mapping(t_address,t_struct(SuperBlockCommitment)61843_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct PCPStorage.SuperBlockCommitment)","numberOfBytes":"32","value":"t_struct(SuperBlockCommitment)61843_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint256,t_bool)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_uint256,t_mapping(t_address,t_struct(SuperBlockCommitment)61843_storage))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment))","numberOfBytes":"32","value":"t_mapping(t_address,t_struct(SuperBlockCommitment)61843_storage)"},"t_mapping(t_uint256,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_uint256,t_mapping(t_uint256,t_struct(SuperBlockCommitment)61843_storage))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_struct(SuperBlockCommitment)61843_storage)"},"t_mapping(t_uint256,t_struct(SuperBlockCommitment)61843_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment)","numberOfBytes":"32","value":"t_struct(SuperBlockCommitment)61843_storage"},"t_mapping(t_uint256,t_uint256)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_struct(SuperBlockCommitment)61843_storage":{"encoding":"inplace","label":"struct PCPStorage.SuperBlockCommitment","numberOfBytes":"96","members":[{"astId":61838,"contract":"src/settlement/PCP.sol:PCP","label":"height","offset":0,"slot":"0","type":"t_uint256"},{"astId":61840,"contract":"src/settlement/PCP.sol:PCP","label":"commitment","offset":0,"slot":"1","type":"t_bytes32"},{"astId":61842,"contract":"src/settlement/PCP.sol:PCP","label":"blockId","offset":0,"slot":"2","type":"t_bytes32"}]},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/settlement/PCP.sol","id":61811,"exportedSymbols":{"BaseSettlement":[62077],"EnumerableSet":[52215],"IMovementStaking":[64348],"IPCP":[62022],"Initializable":[39746],"MovementStaking":[63931],"PCP":[61810],"PCPStorage":[61923],"ReentrancyGuard":[45862]},"nodeType":"SourceUnit","src":"39:35047:114","nodes":[{"id":60030,"nodeType":"PragmaDirective","src":"39:24:114","nodes":[],"literals":["solidity","^","0.8",".13"]},{"id":60032,"nodeType":"ImportDirective","src":"65:86:114","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol","file":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":52216,"symbolAliases":[{"foreign":{"id":60031,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":52215,"src":"73:13:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60034,"nodeType":"ImportDirective","src":"152:96:114","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":39747,"symbolAliases":[{"foreign":{"id":60033,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39746,"src":"160:13:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60037,"nodeType":"ImportDirective","src":"249:81:114","nodes":[],"absolutePath":"src/staking/MovementStaking.sol","file":"../staking/MovementStaking.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":63932,"symbolAliases":[{"foreign":{"id":60035,"name":"MovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":63931,"src":"257:15:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":60036,"name":"IMovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":64348,"src":"274:16:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60039,"nodeType":"ImportDirective","src":"331:44:114","nodes":[],"absolutePath":"src/settlement/PCPStorage.sol","file":"./PCPStorage.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":61924,"symbolAliases":[{"foreign":{"id":60038,"name":"PCPStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61923,"src":"339:10:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60041,"nodeType":"ImportDirective","src":"376:63:114","nodes":[],"absolutePath":"src/settlement/settlement/BaseSettlement.sol","file":"./settlement/BaseSettlement.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":62078,"symbolAliases":[{"foreign":{"id":60040,"name":"BaseSettlement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62077,"src":"384:14:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60043,"nodeType":"ImportDirective","src":"440:43:114","nodes":[],"absolutePath":"src/settlement/interfaces/IPCP.sol","file":"./interfaces/IPCP.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":62023,"symbolAliases":[{"foreign":{"id":60042,"name":"IPCP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62022,"src":"448:4:114","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":60044,"nodeType":"ImportDirective","src":"484:59:114","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","nameLocation":"-1:-1:-1","scope":61811,"sourceUnit":45863,"symbolAliases":[],"unitAlias":""},{"id":61810,"nodeType":"ContractDefinition","src":"545:34540:114","nodes":[{"id":60057,"nodeType":"VariableDeclaration","src":"654:72:114","nodes":[],"baseFunctions":[62021],"constant":true,"functionSelector":"80e460f0","mutability":"constant","name":"COMMITMENT_ADMIN","nameLocation":"678:16:114","scope":61810,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60053,"name":"bytes32","nodeType":"ElementaryTypeName","src":"654:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"434f4d4d49544d454e545f41444d494e","id":60055,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"707:18:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_db2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c","typeString":"literal_string \"COMMITMENT_ADMIN\""},"value":"COMMITMENT_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_db2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c","typeString":"literal_string \"COMMITMENT_ADMIN\""}],"id":60054,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"697:9:114","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":60056,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"697:29:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":60062,"nodeType":"VariableDeclaration","src":"764:72:114","nodes":[],"baseFunctions":[62015],"constant":true,"functionSelector":"5db916ab","mutability":"constant","name":"TRUSTED_ATTESTER","nameLocation":"788:16:114","scope":61810,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60058,"name":"bytes32","nodeType":"ElementaryTypeName","src":"764:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"545255535445445f4154544553544552","id":60060,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"817:18:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18","typeString":"literal_string \"TRUSTED_ATTESTER\""},"value":"TRUSTED_ATTESTER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18","typeString":"literal_string \"TRUSTED_ATTESTER\""}],"id":60059,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"807:9:114","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":60061,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"807:29:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":60065,"nodeType":"ErrorDefinition","src":"923:37:114","nodes":[],"documentation":{"id":60063,"nodeType":"StructuredDocumentation","src":"843:75:114","text":"@notice Error thrown when postconfirmer term is greater than 256 blocks"},"errorSelector":"38d443c8","name":"PostconfirmerDurationTooLong","nameLocation":"929:28:114","parameters":{"id":60064,"nodeType":"ParameterList","parameters":[],"src":"957:2:114"}},{"id":60068,"nodeType":"ErrorDefinition","src":"1051:45:114","nodes":[],"documentation":{"id":60066,"nodeType":"StructuredDocumentation","src":"966:80:114","text":"@notice Error thrown when postconfirmer term is too large for epoch duration"},"errorSelector":"60bc402f","name":"PostconfirmerDurationTooLongForEpoch","nameLocation":"1057:36:114","parameters":{"id":60067,"nodeType":"ParameterList","parameters":[],"src":"1093:2:114"}},{"id":60071,"nodeType":"ErrorDefinition","src":"1190:51:114","nodes":[],"documentation":{"id":60069,"nodeType":"StructuredDocumentation","src":"1102:83:114","text":"@notice Error thrown when minimum commitment age is greater than epoch duration"},"errorSelector":"a7075e5f","name":"minCommitmentAgeForPostconfirmationTooLong","nameLocation":"1196:42:114","parameters":{"id":60070,"nodeType":"ParameterList","parameters":[],"src":"1238:2:114"}},{"id":60074,"nodeType":"ErrorDefinition","src":"1354:46:114","nodes":[],"documentation":{"id":60072,"nodeType":"StructuredDocumentation","src":"1247:102:114","text":"@notice Error thrown when maximum postconfirmer non-reactivity time is greater than epoch duration"},"errorSelector":"3c9f1a53","name":"postconfirmerPrivilegeDurationTooLong","nameLocation":"1360:37:114","parameters":{"id":60073,"nodeType":"ParameterList","parameters":[],"src":"1397:2:114"}},{"id":60094,"nodeType":"FunctionDefinition","src":"1623:237:114","nodes":[],"body":{"id":60093,"nodeType":"Block","src":"1677:183:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60081,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39144,"src":"1716:18:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60082,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1736:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60083,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1740:6:114","memberName":"sender","nodeType":"MemberAccess","src":"1736:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60080,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"1708:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60084,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1708:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e4c59","id":60085,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1761:36:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""},"value":"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""}],"id":60079,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1687:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60086,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1687:120:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60087,"nodeType":"ExpressionStatement","src":"1687:120:114"},{"expression":{"arguments":[{"id":60089,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"1827:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":60090,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60076,"src":"1845:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60088,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39306,"src":"1817:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":60091,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1817:36:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60092,"nodeType":"ExpressionStatement","src":"1817:36:114"}]},"functionSelector":"949d7c2a","implemented":true,"kind":"function","modifiers":[],"name":"grantCommitmentAdmin","nameLocation":"1632:20:114","parameters":{"id":60077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60076,"mutability":"mutable","name":"account","nameLocation":"1661:7:114","nodeType":"VariableDeclaration","scope":60094,"src":"1653:15:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60075,"name":"address","nodeType":"ElementaryTypeName","src":"1653:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1652:17:114"},"returnParameters":{"id":60078,"nodeType":"ParameterList","parameters":[],"src":"1677:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60130,"nodeType":"FunctionDefinition","src":"1866:326:114","nodes":[],"body":{"id":60129,"nodeType":"Block","src":"1935:257:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60102,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39144,"src":"1974:18:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60103,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1994:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60104,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1998:6:114","memberName":"sender","nodeType":"MemberAccess","src":"1994:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60101,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"1966:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60105,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1966:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e4c59","id":60106,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2019:36:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""},"value":"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""}],"id":60100,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1945:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60107,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1945:120:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60108,"nodeType":"ExpressionStatement","src":"1945:120:114"},{"body":{"id":60127,"nodeType":"Block","src":"2121:65:114","statements":[{"expression":{"arguments":[{"id":60121,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"2145:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":60122,"name":"accounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60097,"src":"2163:8:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60124,"indexExpression":{"id":60123,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60110,"src":"2172:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2163:11:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60120,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39306,"src":"2135:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":60125,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2135:40:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60126,"nodeType":"ExpressionStatement","src":"2135:40:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60113,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60110,"src":"2095:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":60114,"name":"accounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60097,"src":"2099:8:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2108:6:114","memberName":"length","nodeType":"MemberAccess","src":"2099:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2095:19:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60128,"initializationExpression":{"assignments":[60110],"declarations":[{"constant":false,"id":60110,"mutability":"mutable","name":"i","nameLocation":"2088:1:114","nodeType":"VariableDeclaration","scope":60128,"src":"2080:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60109,"name":"uint256","nodeType":"ElementaryTypeName","src":"2080:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60112,"initialValue":{"hexValue":"30","id":60111,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2092:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2080:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60118,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2116:3:114","subExpression":{"id":60117,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60110,"src":"2116:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60119,"nodeType":"ExpressionStatement","src":"2116:3:114"},"nodeType":"ForStatement","src":"2075:111:114"}]},"functionSelector":"4b47d955","implemented":true,"kind":"function","modifiers":[],"name":"batchGrantCommitmentAdmin","nameLocation":"1875:25:114","parameters":{"id":60098,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60097,"mutability":"mutable","name":"accounts","nameLocation":"1918:8:114","nodeType":"VariableDeclaration","scope":60130,"src":"1901:25:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60095,"name":"address","nodeType":"ElementaryTypeName","src":"1901:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60096,"nodeType":"ArrayTypeName","src":"1901:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1900:27:114"},"returnParameters":{"id":60099,"nodeType":"ParameterList","parameters":[],"src":"1935:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60144,"nodeType":"FunctionDefinition","src":"2198:136:114","nodes":[],"body":{"id":60143,"nodeType":"Block","src":"2280:54:114","nodes":[],"statements":[{"expression":{"arguments":[{"id":60139,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60062,"src":"2300:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":60140,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60132,"src":"2318:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60138,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39306,"src":"2290:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":60141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2290:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60142,"nodeType":"ExpressionStatement","src":"2290:37:114"}]},"functionSelector":"81df1746","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60135,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"2262:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60136,"kind":"modifierInvocation","modifierName":{"id":60134,"name":"onlyRole","nameLocations":["2253:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"2253:8:114"},"nodeType":"ModifierInvocation","src":"2253:26:114"}],"name":"grantTrustedAttester","nameLocation":"2207:20:114","parameters":{"id":60133,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60132,"mutability":"mutable","name":"attester","nameLocation":"2236:8:114","nodeType":"VariableDeclaration","scope":60144,"src":"2228:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60131,"name":"address","nodeType":"ElementaryTypeName","src":"2228:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2227:18:114"},"returnParameters":{"id":60137,"nodeType":"ParameterList","parameters":[],"src":"2280:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60174,"nodeType":"FunctionDefinition","src":"2340:226:114","nodes":[],"body":{"id":60173,"nodeType":"Block","src":"2437:129:114","nodes":[],"statements":[{"body":{"id":60171,"nodeType":"Block","src":"2494:66:114","statements":[{"expression":{"arguments":[{"id":60165,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60062,"src":"2518:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":60166,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60147,"src":"2536:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60168,"indexExpression":{"id":60167,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60154,"src":"2546:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2536:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60164,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39306,"src":"2508:9:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":60169,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2508:41:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60170,"nodeType":"ExpressionStatement","src":"2508:41:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60157,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60154,"src":"2467:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":60158,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60147,"src":"2471:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60159,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2481:6:114","memberName":"length","nodeType":"MemberAccess","src":"2471:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2467:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60172,"initializationExpression":{"assignments":[60154],"declarations":[{"constant":false,"id":60154,"mutability":"mutable","name":"i","nameLocation":"2460:1:114","nodeType":"VariableDeclaration","scope":60172,"src":"2452:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60153,"name":"uint256","nodeType":"ElementaryTypeName","src":"2452:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60156,"initialValue":{"hexValue":"30","id":60155,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2464:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2452:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60162,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2489:3:114","subExpression":{"id":60161,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60154,"src":"2489:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60163,"nodeType":"ExpressionStatement","src":"2489:3:114"},"nodeType":"ForStatement","src":"2447:113:114"}]},"functionSelector":"cf6772ad","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60150,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"2419:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60151,"kind":"modifierInvocation","modifierName":{"id":60149,"name":"onlyRole","nameLocations":["2410:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"2410:8:114"},"nodeType":"ModifierInvocation","src":"2410:26:114"}],"name":"batchGrantTrustedAttester","nameLocation":"2349:25:114","parameters":{"id":60148,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60147,"mutability":"mutable","name":"attesters","nameLocation":"2392:9:114","nodeType":"VariableDeclaration","scope":60174,"src":"2375:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60145,"name":"address","nodeType":"ElementaryTypeName","src":"2375:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60146,"nodeType":"ArrayTypeName","src":"2375:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2374:28:114"},"returnParameters":{"id":60152,"nodeType":"ParameterList","parameters":[],"src":"2437:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60256,"nodeType":"FunctionDefinition","src":"2789:1624:114","nodes":[],"body":{"id":60255,"nodeType":"Block","src":"3215:1198:114","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":60195,"name":"__BaseSettlement_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62065,"src":"3225:31:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":60196,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3225:33:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60197,"nodeType":"ExpressionStatement","src":"3225:33:114"},{"expression":{"id":60200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60198,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"3268:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60199,"name":"_stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60177,"src":"3286:16:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"src":"3268:34:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60201,"nodeType":"ExpressionStatement","src":"3268:34:114"},{"expression":{"id":60204,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60202,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61824,"src":"3312:26:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60203,"name":"_leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60181,"src":"3341:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3312:56:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60205,"nodeType":"ExpressionStatement","src":"3312:56:114"},{"expression":{"id":60208,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60206,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"3378:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60207,"name":"_lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60179,"src":"3414:34:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3378:70:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60209,"nodeType":"ExpressionStatement","src":"3378:70:114"},{"expression":{"arguments":[{"id":60213,"name":"_epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60183,"src":"3489:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":60214,"name":"_custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60186,"src":"3505:11:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"expression":{"id":60210,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"3458:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3474:14:114","memberName":"registerDomain","nodeType":"MemberAccess","referencedDeclaration":64078,"src":"3458:30:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (uint256,address[] memory) external"}},"id":60215,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3458:59:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60216,"nodeType":"ExpressionStatement","src":"3458:59:114"},{"expression":{"arguments":[{"expression":{"id":60218,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3548:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60219,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3552:6:114","memberName":"sender","nodeType":"MemberAccess","src":"3548:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60217,"name":"grantCommitmentAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60094,"src":"3527:20:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":60220,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3527:32:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60221,"nodeType":"ExpressionStatement","src":"3527:32:114"},{"expression":{"arguments":[{"expression":{"id":60223,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3590:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60224,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3594:6:114","memberName":"sender","nodeType":"MemberAccess","src":"3590:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60222,"name":"grantTrustedAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60144,"src":"3569:20:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":60225,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3569:32:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60226,"nodeType":"ExpressionStatement","src":"3569:32:114"},{"expression":{"id":60229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60227,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61829,"src":"3611:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60228,"name":"_postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60188,"src":"3635:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3611:46:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60230,"nodeType":"ExpressionStatement","src":"3611:46:114"},{"expression":{"id":60233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60231,"name":"moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61822,"src":"3667:16:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60232,"name":"_moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60190,"src":"3686:17:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3667:36:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60234,"nodeType":"ExpressionStatement","src":"3667:36:114"},{"expression":{"id":60239,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60235,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61832,"src":"4204:35:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60238,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60236,"name":"_epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60183,"src":"4242:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":60237,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4259:2:114","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"4242:19:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4204:57:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60240,"nodeType":"ExpressionStatement","src":"4204:57:114"},{"expression":{"id":60245,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60241,"name":"postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61835,"src":"4271:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60244,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60242,"name":"_epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60183,"src":"4304:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":60243,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4321:2:114","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"4304:19:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4271:52:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60246,"nodeType":"ExpressionStatement","src":"4271:52:114"},{"expression":{"id":60249,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60247,"name":"rewardPerAttestationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61916,"src":"4333:25:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":60248,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4361:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4333:29:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60250,"nodeType":"ExpressionStatement","src":"4333:29:114"},{"expression":{"id":60253,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60251,"name":"rewardPerPostconfirmationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61918,"src":"4372:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":60252,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4405:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4372:34:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60254,"nodeType":"ExpressionStatement","src":"4372:34:114"}]},"functionSelector":"107e21ca","implemented":true,"kind":"function","modifiers":[{"id":60193,"kind":"modifierInvocation","modifierName":{"id":60192,"name":"initializer","nameLocations":["3203:11:114"],"nodeType":"IdentifierPath","referencedDeclaration":39586,"src":"3203:11:114"},"nodeType":"ModifierInvocation","src":"3203:11:114"}],"name":"initialize","nameLocation":"2798:10:114","parameters":{"id":60191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60177,"mutability":"mutable","name":"_stakingContract","nameLocation":"2835:16:114","nodeType":"VariableDeclaration","scope":60256,"src":"2818:33:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"},"typeName":{"id":60176,"nodeType":"UserDefinedTypeName","pathNode":{"id":60175,"name":"IMovementStaking","nameLocations":["2818:16:114"],"nodeType":"IdentifierPath","referencedDeclaration":64348,"src":"2818:16:114"},"referencedDeclaration":64348,"src":"2818:16:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"visibility":"internal"},{"constant":false,"id":60179,"mutability":"mutable","name":"_lastPostconfirmedSuperBlockHeight","nameLocation":"2869:34:114","nodeType":"VariableDeclaration","scope":60256,"src":"2861:42:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60178,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60181,"mutability":"mutable","name":"_leadingSuperBlockTolerance","nameLocation":"2921:27:114","nodeType":"VariableDeclaration","scope":60256,"src":"2913:35:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60180,"name":"uint256","nodeType":"ElementaryTypeName","src":"2913:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60183,"mutability":"mutable","name":"_epochDuration","nameLocation":"2966:14:114","nodeType":"VariableDeclaration","scope":60256,"src":"2958:22:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60182,"name":"uint256","nodeType":"ElementaryTypeName","src":"2958:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60186,"mutability":"mutable","name":"_custodians","nameLocation":"3024:11:114","nodeType":"VariableDeclaration","scope":60256,"src":"3007:28:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60184,"name":"address","nodeType":"ElementaryTypeName","src":"3007:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60185,"nodeType":"ArrayTypeName","src":"3007:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":60188,"mutability":"mutable","name":"_postconfirmerDuration","nameLocation":"3053:22:114","nodeType":"VariableDeclaration","scope":60256,"src":"3045:30:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60187,"name":"uint256","nodeType":"ElementaryTypeName","src":"3045:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60190,"mutability":"mutable","name":"_moveTokenAddress","nameLocation":"3110:17:114","nodeType":"VariableDeclaration","scope":60256,"src":"3102:25:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60189,"name":"address","nodeType":"ElementaryTypeName","src":"3102:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2808:387:114"},"returnParameters":{"id":60194,"nodeType":"ParameterList","parameters":[],"src":"3215:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60275,"nodeType":"FunctionDefinition","src":"4465:195:114","nodes":[],"body":{"id":60274,"nodeType":"Block","src":"4505:155:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60262,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39144,"src":"4531:18:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60263,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4551:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4555:6:114","memberName":"sender","nodeType":"MemberAccess","src":"4551:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60261,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"4523:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60265,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4523:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e5f4f4e4c59","id":60266,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4564:39:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_b077b31285a16307062fcb4fde0e57e8246ea6dc3cdd1c5dd5880d32a26fbf54","typeString":"literal_string \"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY\""},"value":"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b077b31285a16307062fcb4fde0e57e8246ea6dc3cdd1c5dd5880d32a26fbf54","typeString":"literal_string \"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY\""}],"id":60260,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4515:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60267,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4515:89:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60268,"nodeType":"ExpressionStatement","src":"4515:89:114"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":60269,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"4614:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60271,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4630:21:114","memberName":"acceptGenesisCeremony","nodeType":"MemberAccess","referencedDeclaration":64081,"src":"4614:37:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":60272,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4614:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60273,"nodeType":"ExpressionStatement","src":"4614:39:114"}]},"documentation":{"id":60257,"nodeType":"StructuredDocumentation","src":"4419:41:114","text":"@notice Accepts the genesis ceremony."},"functionSelector":"92a2ebf3","implemented":true,"kind":"function","modifiers":[],"name":"acceptGenesisCeremony","nameLocation":"4474:21:114","parameters":{"id":60258,"nodeType":"ParameterList","parameters":[],"src":"4495:2:114"},"returnParameters":{"id":60259,"nodeType":"ParameterList","parameters":[],"src":"4505:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60309,"nodeType":"FunctionDefinition","src":"4837:570:114","nodes":[],"body":{"id":60308,"nodeType":"Block","src":"4937:470:114","nodes":[],"statements":[{"assignments":[60285],"declarations":[{"constant":false,"id":60285,"mutability":"mutable","name":"epochDuration","nameLocation":"5041:13:114","nodeType":"VariableDeclaration","scope":60308,"src":"5033:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60284,"name":"uint256","nodeType":"ElementaryTypeName","src":"5033:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60293,"initialValue":{"arguments":[{"arguments":[{"id":60290,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5098:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60289,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5090:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60288,"name":"address","nodeType":"ElementaryTypeName","src":"5090:7:114","typeDescriptions":{}}},"id":60291,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5090:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60286,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"5057:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60287,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5073:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"5057:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60292,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5057:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5033:71:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60298,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60296,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":60294,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5229:1:114","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":60295,"name":"_postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60278,"src":"5233:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5229:26:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":60297,"name":"epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60285,"src":"5259:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5229:43:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60303,"nodeType":"IfStatement","src":"5225:120:114","trueBody":{"id":60302,"nodeType":"Block","src":"5275:70:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60299,"name":"PostconfirmerDurationTooLongForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60068,"src":"5296:36:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60300,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5296:38:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60301,"nodeType":"RevertStatement","src":"5289:45:114"}]}},{"expression":{"id":60306,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60304,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61829,"src":"5354:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60305,"name":"_postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60278,"src":"5378:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5354:46:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60307,"nodeType":"ExpressionStatement","src":"5354:46:114"}]},"documentation":{"id":60276,"nodeType":"StructuredDocumentation","src":"4666:166:114","text":"@notice Sets the postconfirmer term duration, must be less than epoch duration\n @param _postconfirmerDuration New postconfirmer term duration in time units"},"functionSelector":"3d645927","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60281,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"4919:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60282,"kind":"modifierInvocation","modifierName":{"id":60280,"name":"onlyRole","nameLocations":["4910:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"4910:8:114"},"nodeType":"ModifierInvocation","src":"4910:26:114"}],"name":"setPostconfirmerDuration","nameLocation":"4846:24:114","parameters":{"id":60279,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60278,"mutability":"mutable","name":"_postconfirmerDuration","nameLocation":"4879:22:114","nodeType":"VariableDeclaration","scope":60309,"src":"4871:30:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60277,"name":"uint256","nodeType":"ElementaryTypeName","src":"4871:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4870:32:114"},"returnParameters":{"id":60283,"nodeType":"ParameterList","parameters":[],"src":"4937:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60317,"nodeType":"FunctionDefinition","src":"5413:111:114","nodes":[],"body":{"id":60316,"nodeType":"Block","src":"5479:45:114","nodes":[],"statements":[{"expression":{"id":60314,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61829,"src":"5496:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60313,"id":60315,"nodeType":"Return","src":"5489:28:114"}]},"baseFunctions":[61959],"functionSelector":"1241ebe3","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerDuration","nameLocation":"5422:24:114","parameters":{"id":60310,"nodeType":"ParameterList","parameters":[],"src":"5446:2:114"},"returnParameters":{"id":60313,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60312,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60317,"src":"5470:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60311,"name":"uint256","nodeType":"ElementaryTypeName","src":"5470:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5469:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60348,"nodeType":"FunctionDefinition","src":"5787:464:114","nodes":[],"body":{"id":60347,"nodeType":"Block","src":"5905:346:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60337,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60326,"name":"_postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60320,"src":"5973:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60336,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":60331,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6049:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60330,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6041:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60329,"name":"address","nodeType":"ElementaryTypeName","src":"6041:7:114","typeDescriptions":{}}},"id":60332,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6041:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60327,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"6008:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60328,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6024:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"6008:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60333,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6008:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":60334,"name":"getMinCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60396,"src":"6058:38:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60335,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6058:40:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6008:90:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5973:125:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60342,"nodeType":"IfStatement","src":"5969:202:114","trueBody":{"id":60341,"nodeType":"Block","src":"6100:71:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60338,"name":"postconfirmerPrivilegeDurationTooLong","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60074,"src":"6121:37:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60339,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6121:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60340,"nodeType":"RevertStatement","src":"6114:46:114"}]}},{"expression":{"id":60345,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60343,"name":"postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61835,"src":"6180:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60344,"name":"_postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60320,"src":"6213:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6180:64:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60346,"nodeType":"ExpressionStatement","src":"6180:64:114"}]},"documentation":{"id":60318,"nodeType":"StructuredDocumentation","src":"5530:252:114","text":"@notice Sets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\n @param _postconfirmerPrivilegeDuration maximum time the postconfirmer is permitted to be non-reactive to an honest superBlock commitment"},"functionSelector":"da7d28b6","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60323,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"5887:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60324,"kind":"modifierInvocation","modifierName":{"id":60322,"name":"onlyRole","nameLocations":["5878:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"5878:8:114"},"nodeType":"ModifierInvocation","src":"5878:26:114"}],"name":"setPostconfirmerPrivilegeDuration","nameLocation":"5796:33:114","parameters":{"id":60321,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60320,"mutability":"mutable","name":"_postconfirmerPrivilegeDuration","nameLocation":"5838:31:114","nodeType":"VariableDeclaration","scope":60348,"src":"5830:39:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60319,"name":"uint256","nodeType":"ElementaryTypeName","src":"5830:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5829:41:114"},"returnParameters":{"id":60325,"nodeType":"ParameterList","parameters":[],"src":"5905:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60357,"nodeType":"FunctionDefinition","src":"6474:129:114","nodes":[],"body":{"id":60356,"nodeType":"Block","src":"6549:54:114","nodes":[],"statements":[{"expression":{"id":60354,"name":"postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61835,"src":"6566:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60353,"id":60355,"nodeType":"Return","src":"6559:37:114"}]},"documentation":{"id":60349,"nodeType":"StructuredDocumentation","src":"6257:212:114","text":"@notice Gets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\n @return The maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"},"functionSelector":"028e490a","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerPrivilegeDuration","nameLocation":"6483:33:114","parameters":{"id":60350,"nodeType":"ParameterList","parameters":[],"src":"6516:2:114"},"returnParameters":{"id":60353,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60352,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60357,"src":"6540:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60351,"name":"uint256","nodeType":"ElementaryTypeName","src":"6540:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6539:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60388,"nodeType":"FunctionDefinition","src":"7053:533:114","nodes":[],"body":{"id":60387,"nodeType":"Block","src":"7181:405:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60377,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60366,"name":"_minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60360,"src":"7293:36:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60376,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":60371,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7374:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60370,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7366:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60369,"name":"address","nodeType":"ElementaryTypeName","src":"7366:7:114","typeDescriptions":{}}},"id":60372,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7366:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60367,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"7333:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60368,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7349:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"7333:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60373,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7333:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":60374,"name":"getPostconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60357,"src":"7383:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60375,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7383:35:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7333:85:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7293:125:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60382,"nodeType":"IfStatement","src":"7289:207:114","trueBody":{"id":60381,"nodeType":"Block","src":"7420:76:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60378,"name":"minCommitmentAgeForPostconfirmationTooLong","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60071,"src":"7441:42:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60379,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7441:44:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60380,"nodeType":"RevertStatement","src":"7434:51:114"}]}},{"expression":{"id":60385,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60383,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61832,"src":"7505:35:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60384,"name":"_minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60360,"src":"7543:36:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7505:74:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60386,"nodeType":"ExpressionStatement","src":"7505:74:114"}]},"documentation":{"id":60358,"nodeType":"StructuredDocumentation","src":"6609:169:114","text":"@notice Sets the minimum time that must pass before a commitment can be postconfirmed\n @param _minCommitmentAgeForPostconfirmation New minimum commitment age "},"functionSelector":"1f83e2a3","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60363,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"7163:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60364,"kind":"modifierInvocation","modifierName":{"id":60362,"name":"onlyRole","nameLocations":["7154:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"7154:8:114"},"nodeType":"ModifierInvocation","src":"7154:26:114"}],"name":"setMinCommitmentAgeForPostconfirmation","nameLocation":"7062:38:114","parameters":{"id":60361,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60360,"mutability":"mutable","name":"_minCommitmentAgeForPostconfirmation","nameLocation":"7109:36:114","nodeType":"VariableDeclaration","scope":60388,"src":"7101:44:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60359,"name":"uint256","nodeType":"ElementaryTypeName","src":"7101:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7100:46:114"},"returnParameters":{"id":60365,"nodeType":"ParameterList","parameters":[],"src":"7181:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60396,"nodeType":"FunctionDefinition","src":"7592:139:114","nodes":[],"body":{"id":60395,"nodeType":"Block","src":"7672:59:114","nodes":[],"statements":[{"expression":{"id":60393,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61832,"src":"7689:35:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60392,"id":60394,"nodeType":"Return","src":"7682:42:114"}]},"functionSelector":"ab208ebd","implemented":true,"kind":"function","modifiers":[],"name":"getMinCommitmentAgeForPostconfirmation","nameLocation":"7601:38:114","parameters":{"id":60389,"nodeType":"ParameterList","parameters":[],"src":"7639:2:114"},"returnParameters":{"id":60392,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60391,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60396,"src":"7663:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60390,"name":"uint256","nodeType":"ElementaryTypeName","src":"7663:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7662:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60409,"nodeType":"FunctionDefinition","src":"7737:132:114","nodes":[],"body":{"id":60408,"nodeType":"Block","src":"7820:49:114","nodes":[],"statements":[{"expression":{"id":60406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60404,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61893,"src":"7830:22:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60405,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60398,"src":"7855:7:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7830:32:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60407,"nodeType":"ExpressionStatement","src":"7830:32:114"}]},"functionSelector":"d2526fef","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60401,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"7802:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60402,"kind":"modifierInvocation","modifierName":{"id":60400,"name":"onlyRole","nameLocations":["7793:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"7793:8:114"},"nodeType":"ModifierInvocation","src":"7793:26:114"}],"name":"setOpenAttestationEnabled","nameLocation":"7746:25:114","parameters":{"id":60399,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60398,"mutability":"mutable","name":"enabled","nameLocation":"7777:7:114","nodeType":"VariableDeclaration","scope":60409,"src":"7772:12:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":60397,"name":"bool","nodeType":"ElementaryTypeName","src":"7772:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7771:14:114"},"returnParameters":{"id":60403,"nodeType":"ParameterList","parameters":[],"src":"7820:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60424,"nodeType":"FunctionDefinition","src":"8131:129:114","nodes":[],"body":{"id":60423,"nodeType":"Block","src":"8189:71:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60419,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8247:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60418,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8239:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60417,"name":"address","nodeType":"ElementaryTypeName","src":"8239:7:114","typeDescriptions":{}}},"id":60420,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8239:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60415,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"8206:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60416,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8222:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"8206:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60421,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8206:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60414,"id":60422,"nodeType":"Return","src":"8199:54:114"}]},"baseFunctions":[61953],"documentation":{"id":60410,"nodeType":"StructuredDocumentation","src":"8091:35:114","text":"@notice Gets the epoch duration"},"functionSelector":"5d3ea8f1","implemented":true,"kind":"function","modifiers":[],"name":"getEpochDuration","nameLocation":"8140:16:114","parameters":{"id":60411,"nodeType":"ParameterList","parameters":[],"src":"8156:2:114"},"returnParameters":{"id":60414,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60413,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60424,"src":"8180:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60412,"name":"uint256","nodeType":"ElementaryTypeName","src":"8180:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8179:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60449,"nodeType":"FunctionDefinition","src":"8331:207:114","nodes":[],"body":{"id":60448,"nodeType":"Block","src":"8390:148:114","nodes":[],"statements":[{"assignments":[60431],"declarations":[{"constant":false,"id":60431,"mutability":"mutable","name":"currentTime","nameLocation":"8408:11:114","nodeType":"VariableDeclaration","scope":60448,"src":"8400:19:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60430,"name":"uint256","nodeType":"ElementaryTypeName","src":"8400:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60434,"initialValue":{"expression":{"id":60432,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"8422:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":60433,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8428:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"8422:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8400:37:114"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60446,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60435,"name":"currentTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60431,"src":"8454:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60436,"name":"currentTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60431,"src":"8469:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"arguments":[{"arguments":[{"id":60441,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8524:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60440,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8516:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60439,"name":"address","nodeType":"ElementaryTypeName","src":"8516:7:114","typeDescriptions":{}}},"id":60442,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8516:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60437,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"8483:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60438,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8499:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"8483:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60443,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8483:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8469:61:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":60445,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8468:63:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8454:77:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60429,"id":60447,"nodeType":"Return","src":"8447:84:114"}]},"documentation":{"id":60425,"nodeType":"StructuredDocumentation","src":"8266:60:114","text":"@notice Gets the time at which the current epoch started"},"functionSelector":"90879f64","implemented":true,"kind":"function","modifiers":[],"name":"getEpochStartTime","nameLocation":"8340:17:114","parameters":{"id":60426,"nodeType":"ParameterList","parameters":[],"src":"8357:2:114"},"returnParameters":{"id":60429,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60428,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60449,"src":"8381:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60427,"name":"uint256","nodeType":"ElementaryTypeName","src":"8381:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8380:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60463,"nodeType":"FunctionDefinition","src":"8574:133:114","nodes":[],"body":{"id":60462,"nodeType":"Block","src":"8631:76:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60458,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8694:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60457,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8686:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60456,"name":"address","nodeType":"ElementaryTypeName","src":"8686:7:114","typeDescriptions":{}}},"id":60459,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8686:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60454,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"8648:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8664:21:114","memberName":"getEpochByL1BlockTime","nodeType":"MemberAccess","referencedDeclaration":64088,"src":"8648:37:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60460,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8648:52:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60453,"id":60461,"nodeType":"Return","src":"8641:59:114"}]},"baseFunctions":[61990],"functionSelector":"37d7f58f","implemented":true,"kind":"function","modifiers":[],"name":"getPresentEpoch","nameLocation":"8583:15:114","parameters":{"id":60450,"nodeType":"ParameterList","parameters":[],"src":"8598:2:114"},"returnParameters":{"id":60453,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60452,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60463,"src":"8622:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60451,"name":"uint256","nodeType":"ElementaryTypeName","src":"8622:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8621:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60477,"nodeType":"FunctionDefinition","src":"8745:131:114","nodes":[],"body":{"id":60476,"nodeType":"Block","src":"8804:72:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60472,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8863:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60471,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8855:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60470,"name":"address","nodeType":"ElementaryTypeName","src":"8855:7:114","typeDescriptions":{}}},"id":60473,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8855:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60468,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"8821:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60469,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8837:17:114","memberName":"getAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":64095,"src":"8821:33:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60474,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8821:48:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60467,"id":60475,"nodeType":"Return","src":"8814:55:114"}]},"baseFunctions":[61984],"functionSelector":"6c713af8","implemented":true,"kind":"function","modifiers":[],"name":"getAcceptingEpoch","nameLocation":"8754:17:114","parameters":{"id":60464,"nodeType":"ParameterList","parameters":[],"src":"8771:2:114"},"returnParameters":{"id":60467,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60466,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60477,"src":"8795:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60465,"name":"uint256","nodeType":"ElementaryTypeName","src":"8795:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8794:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60491,"nodeType":"FunctionDefinition","src":"8946:165:114","nodes":[],"body":{"id":60490,"nodeType":"Block","src":"9022:89:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60486,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9098:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60485,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9090:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60484,"name":"address","nodeType":"ElementaryTypeName","src":"9090:7:114","typeDescriptions":{}}},"id":60487,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9090:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60482,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"9039:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60483,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9055:34:114","memberName":"getNextAcceptingEpochWithException","nodeType":"MemberAccess","referencedDeclaration":64102,"src":"9039:50:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60488,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9039:65:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60481,"id":60489,"nodeType":"Return","src":"9032:72:114"}]},"functionSelector":"3752d675","implemented":true,"kind":"function","modifiers":[],"name":"getNextAcceptingEpochWithException","nameLocation":"8955:34:114","parameters":{"id":60478,"nodeType":"ParameterList","parameters":[],"src":"8989:2:114"},"returnParameters":{"id":60481,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60480,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60491,"src":"9013:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60479,"name":"uint256","nodeType":"ElementaryTypeName","src":"9013:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9012:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60522,"nodeType":"FunctionDefinition","src":"9197:414:114","nodes":[],"body":{"id":60521,"nodeType":"Block","src":"9264:347:114","nodes":[],"statements":[{"assignments":[60498],"declarations":[{"constant":false,"id":60498,"mutability":"mutable","name":"currentTime","nameLocation":"9282:11:114","nodeType":"VariableDeclaration","scope":60521,"src":"9274:19:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60497,"name":"uint256","nodeType":"ElementaryTypeName","src":"9274:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60501,"initialValue":{"expression":{"id":60499,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"9296:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":60500,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9302:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"9296:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9274:37:114"},{"assignments":[60503],"declarations":[{"constant":false,"id":60503,"mutability":"mutable","name":"currentTimeCorrected","nameLocation":"9434:20:114","nodeType":"VariableDeclaration","scope":60521,"src":"9426:28:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60502,"name":"uint256","nodeType":"ElementaryTypeName","src":"9426:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60513,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60504,"name":"currentTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60498,"src":"9457:11:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"arguments":[{"arguments":[{"id":60509,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9512:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9504:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60507,"name":"address","nodeType":"ElementaryTypeName","src":"9504:7:114","typeDescriptions":{}}},"id":60510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9504:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60505,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"9471:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9487:16:114","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":64340,"src":"9471:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":60511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9471:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9457:61:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9426:92:114"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60514,"name":"currentTimeCorrected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60503,"src":"9535:20:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60517,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60515,"name":"currentTimeCorrected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60503,"src":"9559:20:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":60516,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61829,"src":"9582:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9559:44:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":60518,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9558:46:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9535:69:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60496,"id":60520,"nodeType":"Return","src":"9528:76:114"}]},"documentation":{"id":60492,"nodeType":"StructuredDocumentation","src":"9117:75:114","text":"@notice Gets the time at which the current postconfirmer's term started"},"functionSelector":"5f4d642e","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerStartTime","nameLocation":"9206:25:114","parameters":{"id":60493,"nodeType":"ParameterList","parameters":[],"src":"9231:2:114"},"returnParameters":{"id":60496,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60495,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60522,"src":"9255:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60494,"name":"uint256","nodeType":"ElementaryTypeName","src":"9255:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9254:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60583,"nodeType":"FunctionDefinition","src":"9951:929:114","nodes":[],"body":{"id":60582,"nodeType":"Block","src":"10009:871:114","nodes":[],"statements":[{"assignments":[60529],"declarations":[{"constant":false,"id":60529,"mutability":"mutable","name":"randSeed1","nameLocation":"10400:9:114","nodeType":"VariableDeclaration","scope":60582,"src":"10392:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60528,"name":"uint256","nodeType":"ElementaryTypeName","src":"10392:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60532,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":60530,"name":"getPostconfirmerStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60522,"src":"10412:25:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60531,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10412:27:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10392:47:114"},{"assignments":[60534],"declarations":[{"constant":false,"id":60534,"mutability":"mutable","name":"randSeed2","nameLocation":"10457:9:114","nodeType":"VariableDeclaration","scope":60582,"src":"10449:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60533,"name":"uint256","nodeType":"ElementaryTypeName","src":"10449:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60537,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":60535,"name":"getEpochStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60449,"src":"10469:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60536,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10469:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10449:39:114"},{"assignments":[60542],"declarations":[{"constant":false,"id":60542,"mutability":"mutable","name":"attesters","nameLocation":"10515:9:114","nodeType":"VariableDeclaration","scope":60582,"src":"10498:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60540,"name":"address","nodeType":"ElementaryTypeName","src":"10498:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60541,"nodeType":"ArrayTypeName","src":"10498:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":60550,"initialValue":{"arguments":[{"arguments":[{"id":60547,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10587:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60546,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10579:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60545,"name":"address","nodeType":"ElementaryTypeName","src":"10579:7:114","typeDescriptions":{}}},"id":60548,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10579:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60543,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"10527:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60544,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10543:35:114","memberName":"getStakedAttestersForAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":64296,"src":"10527:51:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":60549,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10527:66:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10498:95:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60554,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":60551,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60542,"src":"10607:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10617:6:114","memberName":"length","nodeType":"MemberAccess","src":"10607:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":60553,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10627:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10607:21:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60561,"nodeType":"IfStatement","src":"10603:69:114","trueBody":{"id":60560,"nodeType":"Block","src":"10630:42:114","statements":[{"expression":{"arguments":[{"hexValue":"30","id":60557,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10659:1:114","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":60556,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10651:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60555,"name":"address","nodeType":"ElementaryTypeName","src":"10651:7:114","typeDescriptions":{}}},"id":60558,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10651:10:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":60527,"id":60559,"nodeType":"Return","src":"10644:17:114"}]}},{"assignments":[60563],"declarations":[{"constant":false,"id":60563,"mutability":"mutable","name":"postconfirmerIndex","nameLocation":"10689:18:114","nodeType":"VariableDeclaration","scope":60582,"src":"10681:26:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60562,"name":"uint256","nodeType":"ElementaryTypeName","src":"10681:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60577,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60576,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":60569,"name":"randSeed1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60529,"src":"10745:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":60570,"name":"randSeed2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60534,"src":"10756:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":60567,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10728:3:114","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":60568,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10732:12:114","memberName":"encodePacked","nodeType":"MemberAccess","src":"10728:16:114","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":60571,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10728:38:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":60566,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10718:9:114","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":60572,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10718:49:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":60565,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10710:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":60564,"name":"uint256","nodeType":"ElementaryTypeName","src":"10710:7:114","typeDescriptions":{}}},"id":60573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10710:58:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"expression":{"id":60574,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60542,"src":"10771:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60575,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10781:6:114","memberName":"length","nodeType":"MemberAccess","src":"10771:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10710:77:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10681:106:114"},{"expression":{"baseExpression":{"id":60578,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60542,"src":"10844:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60580,"indexExpression":{"id":60579,"name":"postconfirmerIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60563,"src":"10854:18:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10844:29:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":60527,"id":60581,"nodeType":"Return","src":"10837:36:114"}]},"baseFunctions":[61965],"documentation":{"id":60523,"nodeType":"StructuredDocumentation","src":"9617:109:114","text":"@notice Determines the postconfirmer in the accepting epoch using L1 block hash as a source of randomness"},"functionSelector":"35ea1c63","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmer","nameLocation":"9960:16:114","parameters":{"id":60524,"nodeType":"ParameterList","parameters":[],"src":"9976:2:114"},"returnParameters":{"id":60527,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60526,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60583,"src":"10000:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60525,"name":"address","nodeType":"ElementaryTypeName","src":"10000:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9999:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60603,"nodeType":"FunctionDefinition","src":"11026:250:114","nodes":[],"body":{"id":60602,"nodeType":"Block","src":"11107:169:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60597,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11253:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":60596,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11245:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60595,"name":"address","nodeType":"ElementaryTypeName","src":"11245:7:114","typeDescriptions":{}}},"id":60598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11245:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":60599,"name":"newEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60586,"src":"11260:8:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":60592,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"11211:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":60594,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11227:17:114","memberName":"setAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":64347,"src":"11211:33:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":60600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11211:58:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60601,"nodeType":"ExpressionStatement","src":"11211:58:114"}]},"baseFunctions":[62009],"documentation":{"id":60584,"nodeType":"StructuredDocumentation","src":"10886:135:114","text":"@notice Sets the accepting epoch to a new value (must be higher than current)\n @param newEpoch The new accepting epoch value"},"functionSelector":"d03509ec","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60589,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"11089:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60590,"kind":"modifierInvocation","modifierName":{"id":60588,"name":"onlyRole","nameLocations":["11080:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"11080:8:114"},"nodeType":"ModifierInvocation","src":"11080:26:114"}],"name":"setAcceptingEpoch","nameLocation":"11035:17:114","parameters":{"id":60587,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60586,"mutability":"mutable","name":"newEpoch","nameLocation":"11061:8:114","nodeType":"VariableDeclaration","scope":60603,"src":"11053:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60585,"name":"uint256","nodeType":"ElementaryTypeName","src":"11053:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11052:18:114"},"returnParameters":{"id":60591,"nodeType":"ParameterList","parameters":[],"src":"11107:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":60622,"nodeType":"FunctionDefinition","src":"11507:242:114","nodes":[],"body":{"id":60621,"nodeType":"Block","src":"11676:73:114","nodes":[],"statements":[{"expression":{"arguments":[{"id":60616,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60605,"src":"11714:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":60617,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60607,"src":"11722:10:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":60618,"name":"blockId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60609,"src":"11734:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":60615,"name":"SuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61843,"src":"11693:20:114","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SuperBlockCommitment_$61843_storage_ptr_$","typeString":"type(struct PCPStorage.SuperBlockCommitment storage pointer)"}},"id":60619,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11693:49:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"functionReturnParameters":60614,"id":60620,"nodeType":"Return","src":"11686:56:114"}]},"functionSelector":"026583d7","implemented":true,"kind":"function","modifiers":[],"name":"createSuperBlockCommitment","nameLocation":"11516:26:114","parameters":{"id":60610,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60605,"mutability":"mutable","name":"height","nameLocation":"11560:6:114","nodeType":"VariableDeclaration","scope":60622,"src":"11552:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60604,"name":"uint256","nodeType":"ElementaryTypeName","src":"11552:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60607,"mutability":"mutable","name":"commitment","nameLocation":"11584:10:114","nodeType":"VariableDeclaration","scope":60622,"src":"11576:18:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60606,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11576:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":60609,"mutability":"mutable","name":"blockId","nameLocation":"11612:7:114","nodeType":"VariableDeclaration","scope":60622,"src":"11604:15:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60608,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11604:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11542:83:114"},"returnParameters":{"id":60614,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60613,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60622,"src":"11647:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60612,"nodeType":"UserDefinedTypeName","pathNode":{"id":60611,"name":"SuperBlockCommitment","nameLocations":["11647:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"11647:20:114"},"referencedDeclaration":61843,"src":"11647:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"11646:29:114"},"scope":61810,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":60714,"nodeType":"FunctionDefinition","src":"11817:2174:114","nodes":[],"body":{"id":60713,"nodeType":"Block","src":"11963:2028:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60639,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":60631,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"12050:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60634,"indexExpression":{"expression":{"id":60632,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"12062:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60633,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12083:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"12062:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12050:40:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60636,"indexExpression":{"id":60635,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60625,"src":"12091:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12050:50:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":60637,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12101:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"12050:57:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":60638,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12111:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12050:62:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60643,"nodeType":"IfStatement","src":"12046:113:114","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60640,"name":"AttesterAlreadyCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61947,"src":"12133:24:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12133:26:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60642,"nodeType":"RevertStatement","src":"12126:33:114"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60649,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60646,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60644,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"12565:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":60645,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61824,"src":"12601:26:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12565:62:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":60647,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"12630:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60648,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12651:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"12630:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12565:92:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60654,"nodeType":"IfStatement","src":"12561:156:114","trueBody":{"id":60653,"nodeType":"Block","src":"12659:58:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":60650,"name":"AttesterAlreadyCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61947,"src":"12680:24:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":60651,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12680:26:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":60652,"nodeType":"RevertStatement","src":"12673:33:114"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":60655,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"13051:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":60658,"indexExpression":{"expression":{"id":60656,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13081:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60657,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13102:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"13081:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13051:58:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":60659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13113:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13051:63:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60670,"nodeType":"IfStatement","src":"13047:172:114","trueBody":{"id":60669,"nodeType":"Block","src":"13116:103:114","statements":[{"expression":{"id":60667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":60661,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"13130:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":60664,"indexExpression":{"expression":{"id":60662,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13160:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60663,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13181:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"13160:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13130:58:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":60665,"name":"getPresentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60463,"src":"13191:15:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60666,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13191:17:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13130:78:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60668,"nodeType":"ExpressionStatement","src":"13130:78:114"}]}},{"expression":{"id":60678,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":60671,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"13275:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60675,"indexExpression":{"expression":{"id":60672,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13287:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60673,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13308:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"13287:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13275:40:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60676,"indexExpression":{"id":60674,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60625,"src":"13316:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13275:50:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60677,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13328:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"src":"13275:73:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":60679,"nodeType":"ExpressionStatement","src":"13275:73:114"},{"expression":{"arguments":[{"expression":{"id":60681,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13453:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60682,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13474:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"13453:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":60683,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13482:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60684,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13503:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"13482:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60685,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"13515:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":60686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13521:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"13515:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":60680,"name":"TrySetCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60889,"src":"13425:27:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (uint256,bytes32,uint256)"}},"id":60687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13425:106:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60688,"nodeType":"ExpressionStatement","src":"13425:106:114"},{"assignments":[60690],"declarations":[{"constant":false,"id":60690,"mutability":"mutable","name":"attesterStakeForAcceptingEpoch","nameLocation":"13601:30:114","nodeType":"VariableDeclaration","scope":60713,"src":"13593:38:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60689,"name":"uint256","nodeType":"ElementaryTypeName","src":"13593:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60694,"initialValue":{"arguments":[{"id":60692,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60625,"src":"13668:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60691,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61603,"src":"13634:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":60693,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13634:43:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13593:84:114"},{"expression":{"id":60703,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":60695,"name":"commitmentStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61860,"src":"13687:15:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":60700,"indexExpression":{"expression":{"id":60696,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13703:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60697,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13724:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"13703:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13687:44:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":60701,"indexExpression":{"expression":{"id":60698,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13732:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60699,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13753:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"13732:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13687:77:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":60702,"name":"attesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60690,"src":"13768:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13687:111:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60704,"nodeType":"ExpressionStatement","src":"13687:111:114"},{"eventCall":{"arguments":[{"expression":{"id":60706,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13857:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60707,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13878:7:114","memberName":"blockId","nodeType":"MemberAccess","referencedDeclaration":61842,"src":"13857:28:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60708,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60628,"src":"13899:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60709,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13920:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"13899:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":60710,"name":"attesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60690,"src":"13944:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":60705,"name":"SuperBlockCommitmentSubmitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61943,"src":"13814:29:114","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,uint256)"}},"id":60711,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13814:170:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60712,"nodeType":"EmitStatement","src":"13809:175:114"}]},"documentation":{"id":60623,"nodeType":"StructuredDocumentation","src":"11755:57:114","text":"@dev submits a superBlock commitment for an attester."},"implemented":true,"kind":"function","modifiers":[],"name":"submitSuperBlockCommitmentForAttester","nameLocation":"11826:37:114","parameters":{"id":60629,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60625,"mutability":"mutable","name":"attester","nameLocation":"11881:8:114","nodeType":"VariableDeclaration","scope":60714,"src":"11873:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60624,"name":"address","nodeType":"ElementaryTypeName","src":"11873:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":60628,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"11927:20:114","nodeType":"VariableDeclaration","scope":60714,"src":"11899:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60627,"nodeType":"UserDefinedTypeName","pathNode":{"id":60626,"name":"SuperBlockCommitment","nameLocations":["11899:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"11899:20:114"},"referencedDeclaration":61843,"src":"11899:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"11863:90:114"},"returnParameters":{"id":60630,"nodeType":"ParameterList","parameters":[],"src":"11963:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":60738,"nodeType":"FunctionDefinition","src":"13996:317:114","nodes":[],"body":{"id":60737,"nodeType":"Block","src":"14081:232:114","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":60727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60721,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61893,"src":"14112:22:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":60723,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60062,"src":"14146:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60724,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14164:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14168:6:114","memberName":"sender","nodeType":"MemberAccess","src":"14164:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60722,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"14138:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60726,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14138:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14112:63:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d454e54","id":60728,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14189:36:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""},"value":"UNAUTHORIZED_SUPERBLOCK_COMMITMENT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""}],"id":60720,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14091:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60729,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14091:144:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60730,"nodeType":"ExpressionStatement","src":"14091:144:114"},{"expression":{"arguments":[{"expression":{"id":60732,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14283:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60733,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14287:6:114","memberName":"sender","nodeType":"MemberAccess","src":"14283:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":60734,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60717,"src":"14295:10:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":60731,"name":"submitSuperBlockCommitmentForAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60714,"src":"14245:37:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$__$","typeString":"function (address,struct PCPStorage.SuperBlockCommitment memory)"}},"id":60735,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14245:61:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60736,"nodeType":"ExpressionStatement","src":"14245:61:114"}]},"baseFunctions":[61972],"functionSelector":"0e74b609","implemented":true,"kind":"function","modifiers":[],"name":"submitSuperBlockCommitment","nameLocation":"14005:26:114","parameters":{"id":60718,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60717,"mutability":"mutable","name":"commitment","nameLocation":"14060:10:114","nodeType":"VariableDeclaration","scope":60738,"src":"14032:38:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60716,"nodeType":"UserDefinedTypeName","pathNode":{"id":60715,"name":"SuperBlockCommitment","nameLocations":["14032:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"14032:20:114"},"referencedDeclaration":61843,"src":"14032:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"14031:40:114"},"returnParameters":{"id":60719,"nodeType":"ParameterList","parameters":[],"src":"14081:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":60778,"nodeType":"FunctionDefinition","src":"14319:430:114","nodes":[],"body":{"id":60777,"nodeType":"Block","src":"14420:329:114","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":60752,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60746,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61893,"src":"14451:22:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":60748,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60062,"src":"14485:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60749,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14503:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60750,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14507:6:114","memberName":"sender","nodeType":"MemberAccess","src":"14503:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60747,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"14477:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14477:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14451:63:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d454e54","id":60753,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14528:36:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""},"value":"UNAUTHORIZED_SUPERBLOCK_COMMITMENT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""}],"id":60745,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14430:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60754,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14430:144:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60755,"nodeType":"ExpressionStatement","src":"14430:144:114"},{"body":{"id":60775,"nodeType":"Block","src":"14643:100:114","statements":[{"expression":{"arguments":[{"expression":{"id":60768,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14695:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60769,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14699:6:114","memberName":"sender","nodeType":"MemberAccess","src":"14695:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":60770,"name":"superBlockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60742,"src":"14707:21:114","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$dyn_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory[] memory"}},"id":60772,"indexExpression":{"id":60771,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60757,"src":"14729:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14707:24:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":60767,"name":"submitSuperBlockCommitmentForAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60714,"src":"14657:37:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$__$","typeString":"function (address,struct PCPStorage.SuperBlockCommitment memory)"}},"id":60773,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14657:75:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60774,"nodeType":"ExpressionStatement","src":"14657:75:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60763,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60760,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60757,"src":"14604:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":60761,"name":"superBlockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60742,"src":"14608:21:114","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$dyn_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory[] memory"}},"id":60762,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14630:6:114","memberName":"length","nodeType":"MemberAccess","src":"14608:28:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14604:32:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60776,"initializationExpression":{"assignments":[60757],"declarations":[{"constant":false,"id":60757,"mutability":"mutable","name":"i","nameLocation":"14597:1:114","nodeType":"VariableDeclaration","scope":60776,"src":"14589:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60756,"name":"uint256","nodeType":"ElementaryTypeName","src":"14589:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60759,"initialValue":{"hexValue":"30","id":60758,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14601:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"14589:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"14638:3:114","subExpression":{"id":60764,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60757,"src":"14638:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60766,"nodeType":"ExpressionStatement","src":"14638:3:114"},"nodeType":"ForStatement","src":"14584:159:114"}]},"functionSelector":"622e3616","implemented":true,"kind":"function","modifiers":[],"name":"submitBatchSuperBlockCommitment","nameLocation":"14328:31:114","parameters":{"id":60743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60742,"mutability":"mutable","name":"superBlockCommitments","nameLocation":"14390:21:114","nodeType":"VariableDeclaration","scope":60778,"src":"14360:51:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$dyn_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment[]"},"typeName":{"baseType":{"id":60740,"nodeType":"UserDefinedTypeName","pathNode":{"id":60739,"name":"SuperBlockCommitment","nameLocations":["14360:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"14360:20:114"},"referencedDeclaration":61843,"src":"14360:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"id":60741,"nodeType":"ArrayTypeName","src":"14360:22:114","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$61843_storage_$dyn_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment[]"}},"visibility":"internal"}],"src":"14359:53:114"},"returnParameters":{"id":60744,"nodeType":"ParameterList","parameters":[],"src":"14420:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60795,"nodeType":"FunctionDefinition","src":"14754:209:114","nodes":[],"body":{"id":60794,"nodeType":"Block","src":"14910:53:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":60788,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"14927:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60790,"indexExpression":{"id":60789,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60780,"src":"14939:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14927:19:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60792,"indexExpression":{"id":60791,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60782,"src":"14947:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14927:29:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":60787,"id":60793,"nodeType":"Return","src":"14920:36:114"}]},"functionSelector":"556d97c8","implemented":true,"kind":"function","modifiers":[],"name":"getValidatorCommitmentAtSuperBlockHeight","nameLocation":"14763:40:114","parameters":{"id":60783,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60780,"mutability":"mutable","name":"height","nameLocation":"14821:6:114","nodeType":"VariableDeclaration","scope":60795,"src":"14813:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60779,"name":"uint256","nodeType":"ElementaryTypeName","src":"14813:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60782,"mutability":"mutable","name":"attester","nameLocation":"14845:8:114","nodeType":"VariableDeclaration","scope":60795,"src":"14837:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60781,"name":"address","nodeType":"ElementaryTypeName","src":"14837:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14803:56:114"},"returnParameters":{"id":60787,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60786,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60795,"src":"14881:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60785,"nodeType":"UserDefinedTypeName","pathNode":{"id":60784,"name":"SuperBlockCommitment","nameLocations":["14881:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"14881:20:114"},"referencedDeclaration":61843,"src":"14881:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"14880:29:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60805,"nodeType":"FunctionDefinition","src":"15017:159:114","nodes":[],"body":{"id":60804,"nodeType":"Block","src":"15090:86:114","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60802,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60800,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"15107:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":60801,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61824,"src":"15143:26:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15107:62:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60799,"id":60803,"nodeType":"Return","src":"15100:69:114"}]},"functionSelector":"943b79e2","implemented":true,"kind":"function","modifiers":[],"name":"getMaxTolerableSuperBlockHeight","nameLocation":"15026:31:114","parameters":{"id":60796,"nodeType":"ParameterList","parameters":[],"src":"15057:2:114"},"returnParameters":{"id":60799,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60798,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60805,"src":"15081:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60797,"name":"uint256","nodeType":"ElementaryTypeName","src":"15081:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15080:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60823,"nodeType":"FunctionDefinition","src":"15261:170:114","nodes":[],"body":{"id":60822,"nodeType":"Block","src":"15378:53:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":60816,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"15395:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60818,"indexExpression":{"id":60817,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60808,"src":"15407:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15395:19:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60820,"indexExpression":{"id":60819,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60810,"src":"15415:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15395:29:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":60815,"id":60821,"nodeType":"Return","src":"15388:36:114"}]},"documentation":{"id":60806,"nodeType":"StructuredDocumentation","src":"15181:75:114","text":"@notice Gets the commitment submitted by an attester for a given height"},"functionSelector":"f1949add","implemented":true,"kind":"function","modifiers":[],"name":"getCommitmentByAttester","nameLocation":"15270:23:114","parameters":{"id":60811,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60808,"mutability":"mutable","name":"height","nameLocation":"15302:6:114","nodeType":"VariableDeclaration","scope":60823,"src":"15294:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60807,"name":"uint256","nodeType":"ElementaryTypeName","src":"15294:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60810,"mutability":"mutable","name":"attester","nameLocation":"15318:8:114","nodeType":"VariableDeclaration","scope":60823,"src":"15310:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60809,"name":"address","nodeType":"ElementaryTypeName","src":"15310:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15293:34:114"},"returnParameters":{"id":60815,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60814,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60823,"src":"15349:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60813,"nodeType":"UserDefinedTypeName","pathNode":{"id":60812,"name":"SuperBlockCommitment","nameLocations":["15349:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"15349:20:114"},"referencedDeclaration":61843,"src":"15349:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"15348:29:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60836,"nodeType":"FunctionDefinition","src":"15500:149:114","nodes":[],"body":{"id":60835,"nodeType":"Block","src":"15588:61:114","nodes":[],"statements":[{"expression":{"baseExpression":{"id":60831,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"15605:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":60833,"indexExpression":{"id":60832,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60826,"src":"15635:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15605:37:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60830,"id":60834,"nodeType":"Return","src":"15598:44:114"}]},"documentation":{"id":60824,"nodeType":"StructuredDocumentation","src":"15437:58:114","text":"@notice Gets the epoch assigned to a superblock height"},"functionSelector":"d283392e","implemented":true,"kind":"function","modifiers":[],"name":"getSuperBlockHeightAssignedEpoch","nameLocation":"15509:32:114","parameters":{"id":60827,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60826,"mutability":"mutable","name":"height","nameLocation":"15550:6:114","nodeType":"VariableDeclaration","scope":60836,"src":"15542:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60825,"name":"uint256","nodeType":"ElementaryTypeName","src":"15542:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15541:16:114"},"returnParameters":{"id":60830,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60829,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60836,"src":"15579:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60828,"name":"uint256","nodeType":"ElementaryTypeName","src":"15579:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15578:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60854,"nodeType":"FunctionDefinition","src":"15855:221:114","nodes":[],"body":{"id":60853,"nodeType":"Block","src":"15969:107:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":60845,"name":"commitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61866,"src":"15986:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":60848,"indexExpression":{"expression":{"id":60846,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60840,"src":"16008:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60847,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16029:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"16008:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15986:50:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":60851,"indexExpression":{"expression":{"id":60849,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60840,"src":"16037:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60850,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16058:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"16037:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15986:83:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60844,"id":60852,"nodeType":"Return","src":"15979:90:114"}]},"documentation":{"id":60837,"nodeType":"StructuredDocumentation","src":"15788:62:114","text":"@notice get the timestamp when a commitment was first seen"},"functionSelector":"e07472ef","implemented":true,"kind":"function","modifiers":[],"name":"getCommitmentFirstSeenAt","nameLocation":"15864:24:114","parameters":{"id":60841,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60840,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"15917:20:114","nodeType":"VariableDeclaration","scope":60854,"src":"15889:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60839,"nodeType":"UserDefinedTypeName","pathNode":{"id":60838,"name":"SuperBlockCommitment","nameLocations":["15889:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"15889:20:114"},"referencedDeclaration":61843,"src":"15889:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"15888:50:114"},"returnParameters":{"id":60844,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60843,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60854,"src":"15960:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60842,"name":"uint256","nodeType":"ElementaryTypeName","src":"15960:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15959:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60889,"nodeType":"FunctionDefinition","src":"16150:443:114","nodes":[],"body":{"id":60888,"nodeType":"Block","src":"16251:342:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60870,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":60864,"name":"commitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61866,"src":"16265:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":60866,"indexExpression":{"id":60865,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60857,"src":"16287:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16265:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":60868,"indexExpression":{"id":60867,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60859,"src":"16295:10:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16265:41:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":60869,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16310:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16265:46:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60875,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60873,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60861,"src":"16395:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":60874,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16408:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16395:14:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60878,"nodeType":"IfStatement","src":"16391:133:114","trueBody":{"id":60877,"nodeType":"Block","src":"16411:113:114","statements":[{"functionReturnParameters":60863,"id":60876,"nodeType":"Return","src":"16507:7:114"}]}},"id":60879,"nodeType":"IfStatement","src":"16261:263:114","trueBody":{"id":60872,"nodeType":"Block","src":"16313:72:114","statements":[{"functionReturnParameters":60863,"id":60871,"nodeType":"Return","src":"16368:7:114"}]}},{"expression":{"id":60886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":60880,"name":"commitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61866,"src":"16533:21:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":60883,"indexExpression":{"id":60881,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60857,"src":"16555:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16533:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":60884,"indexExpression":{"id":60882,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60859,"src":"16563:10:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16533:41:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60885,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60861,"src":"16577:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16533:53:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60887,"nodeType":"ExpressionStatement","src":"16533:53:114"}]},"documentation":{"id":60855,"nodeType":"StructuredDocumentation","src":"16082:63:114","text":"@notice Sets the timestamp when a commitment was first seen"},"implemented":true,"kind":"function","modifiers":[],"name":"TrySetCommitmentFirstSeenAt","nameLocation":"16159:27:114","parameters":{"id":60862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60857,"mutability":"mutable","name":"height","nameLocation":"16195:6:114","nodeType":"VariableDeclaration","scope":60889,"src":"16187:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60856,"name":"uint256","nodeType":"ElementaryTypeName","src":"16187:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60859,"mutability":"mutable","name":"commitment","nameLocation":"16211:10:114","nodeType":"VariableDeclaration","scope":60889,"src":"16203:18:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":60858,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16203:7:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":60861,"mutability":"mutable","name":"timestamp","nameLocation":"16231:9:114","nodeType":"VariableDeclaration","scope":60889,"src":"16223:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60860,"name":"uint256","nodeType":"ElementaryTypeName","src":"16223:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16186:55:114"},"returnParameters":{"id":60863,"nodeType":"ParameterList","parameters":[],"src":"16251:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":60898,"nodeType":"FunctionDefinition","src":"16884:135:114","nodes":[],"body":{"id":60897,"nodeType":"Block","src":"16962:57:114","nodes":[],"statements":[{"expression":{"id":60895,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"16979:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60894,"id":60896,"nodeType":"Return","src":"16972:40:114"}]},"baseFunctions":[61978],"documentation":{"id":60890,"nodeType":"StructuredDocumentation","src":"16815:64:114","text":"@notice Gets the height of the last postconfirmed superblock"},"functionSelector":"59b99597","implemented":true,"kind":"function","modifiers":[],"name":"getLastPostconfirmedSuperBlockHeight","nameLocation":"16893:36:114","parameters":{"id":60891,"nodeType":"ParameterList","parameters":[],"src":"16929:2:114"},"returnParameters":{"id":60894,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60893,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60898,"src":"16953:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60892,"name":"uint256","nodeType":"ElementaryTypeName","src":"16953:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16952:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60907,"nodeType":"FunctionDefinition","src":"17025:115:114","nodes":[],"body":{"id":60906,"nodeType":"Block","src":"17077:63:114","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":60902,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17122:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17126:6:114","memberName":"sender","nodeType":"MemberAccess","src":"17122:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":60901,"name":"postconfirmAndRolloverWithAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60921,"src":"17087:34:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":60904,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17087:46:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60905,"nodeType":"ExpressionStatement","src":"17087:46:114"}]},"baseFunctions":[62003],"functionSelector":"26624e37","implemented":true,"kind":"function","modifiers":[],"name":"postconfirmSuperBlocksAndRollover","nameLocation":"17034:33:114","parameters":{"id":60899,"nodeType":"ParameterList","parameters":[],"src":"17067:2:114"},"returnParameters":{"id":60900,"nodeType":"ParameterList","parameters":[],"src":"17077:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60921,"nodeType":"FunctionDefinition","src":"17754:485:114","nodes":[],"body":{"id":60920,"nodeType":"Block","src":"17831:408:114","nodes":[],"statements":[{"body":{"id":60918,"nodeType":"Block","src":"18222:11:114","statements":[]},"condition":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60916,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60914,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"18182:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":60915,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18218:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"18182:37:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":60913,"name":"attemptPostconfirmOrRollover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61493,"src":"18153:28:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) returns (bool)"}},"id":60917,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18153:67:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60919,"nodeType":"WhileStatement","src":"18146:87:114"}]},"documentation":{"id":60908,"nodeType":"StructuredDocumentation","src":"17543:106:114","text":"@notice If the current postconfirmer is not live, we should accept postconfirmations from any attester"},"implemented":true,"kind":"function","modifiers":[],"name":"postconfirmAndRolloverWithAttester","nameLocation":"17763:34:114","parameters":{"id":60911,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60910,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60921,"src":"17798:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60909,"name":"address","nodeType":"ElementaryTypeName","src":"17798:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17797:24:114"},"returnParameters":{"id":60912,"nodeType":"ParameterList","parameters":[],"src":"17831:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":60946,"nodeType":"FunctionDefinition","src":"18315:405:114","nodes":[],"body":{"id":60945,"nodeType":"Block","src":"18421:299:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60929,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"18460:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60930,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18478:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18482:6:114","memberName":"sender","nodeType":"MemberAccess","src":"18478:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60928,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"18452:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18452:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":60933,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18503:70:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_0977ec2248431def5ae1a15f4d76a33486566739fca9c42d9176f889e347a11f","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0977ec2248431def5ae1a15f4d76a33486566739fca9c42d9176f889e347a11f","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":60927,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18431:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60934,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18431:152:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60935,"nodeType":"ExpressionStatement","src":"18431:152:114"},{"expression":{"id":60943,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":60936,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61900,"src":"18593:33:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60940,"indexExpression":{"id":60937,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61902,"src":"18627:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18593:66:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60941,"indexExpression":{"expression":{"id":60938,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60924,"src":"18660:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60939,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18681:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"18660:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18593:95:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60942,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60924,"src":"18691:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"src":"18593:118:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":60944,"nodeType":"ExpressionStatement","src":"18593:118:114"}]},"functionSelector":"3119edd4","implemented":true,"kind":"function","modifiers":[],"name":"setPostconfirmedCommitmentAtBlockHeight","nameLocation":"18324:39:114","parameters":{"id":60925,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60924,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"18392:20:114","nodeType":"VariableDeclaration","scope":60946,"src":"18364:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60923,"nodeType":"UserDefinedTypeName","pathNode":{"id":60922,"name":"SuperBlockCommitment","nameLocations":["18364:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"18364:20:114"},"referencedDeclaration":61843,"src":"18364:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"18363:50:114"},"returnParameters":{"id":60926,"nodeType":"ParameterList","parameters":[],"src":"18421:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60966,"nodeType":"FunctionDefinition","src":"18915:308:114","nodes":[],"body":{"id":60965,"nodeType":"Block","src":"19003:220:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60954,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"19042:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":60955,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19060:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60956,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19064:6:114","memberName":"sender","nodeType":"MemberAccess","src":"19060:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60953,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39232,"src":"19034:7:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":60957,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19034:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":60958,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19085:50:114","typeDescriptions":{"typeIdentifier":"t_stringliteral_769db6d293c786b13b107ddcfdc491f9fdfa9dc0a09944362f64328186fea1df","typeString":"literal_string \"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_769db6d293c786b13b107ddcfdc491f9fdfa9dc0a09944362f64328186fea1df","typeString":"literal_string \"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":60952,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19013:7:114","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":60959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19013:132:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60960,"nodeType":"ExpressionStatement","src":"19013:132:114"},{"expression":{"arguments":[{"id":60962,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60949,"src":"19195:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":60961,"name":"setPostconfirmedCommitmentAtBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60946,"src":"19155:39:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$__$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory)"}},"id":60963,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19155:61:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":60964,"nodeType":"ExpressionStatement","src":"19155:61:114"}]},"functionSelector":"08c7050f","implemented":true,"kind":"function","modifiers":[],"name":"forceLatestCommitment","nameLocation":"18924:21:114","parameters":{"id":60950,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60949,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"18974:20:114","nodeType":"VariableDeclaration","scope":60966,"src":"18946:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60948,"nodeType":"UserDefinedTypeName","pathNode":{"id":60947,"name":"SuperBlockCommitment","nameLocations":["18946:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"18946:20:114"},"referencedDeclaration":61843,"src":"18946:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"18945:50:114"},"returnParameters":{"id":60951,"nodeType":"ParameterList","parameters":[],"src":"19003:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60981,"nodeType":"FunctionDefinition","src":"19229:200:114","nodes":[],"body":{"id":60980,"nodeType":"Block","src":"19331:98:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":60974,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61900,"src":"19348:33:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60976,"indexExpression":{"id":60975,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61902,"src":"19382:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19348:66:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60978,"indexExpression":{"id":60977,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60968,"src":"19415:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19348:74:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":60973,"id":60979,"nodeType":"Return","src":"19341:81:114"}]},"baseFunctions":[61999],"functionSelector":"2bfd11d6","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmedCommitment","nameLocation":"19238:26:114","parameters":{"id":60969,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60968,"mutability":"mutable","name":"height","nameLocation":"19273:6:114","nodeType":"VariableDeclaration","scope":60981,"src":"19265:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60967,"name":"uint256","nodeType":"ElementaryTypeName","src":"19265:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19264:16:114"},"returnParameters":{"id":60973,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60972,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60981,"src":"19302:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60971,"nodeType":"UserDefinedTypeName","pathNode":{"id":60970,"name":"SuperBlockCommitment","nameLocations":["19302:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"19302:20:114"},"referencedDeclaration":61843,"src":"19302:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"19301:29:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61137,"nodeType":"FunctionDefinition","src":"19627:2891:114","nodes":[],"body":{"id":61136,"nodeType":"Block","src":"19746:2772:114","nodes":[],"statements":[{"assignments":[60991],"declarations":[{"constant":false,"id":60991,"mutability":"mutable","name":"currentAcceptingEpoch","nameLocation":"19764:21:114","nodeType":"VariableDeclaration","scope":61136,"src":"19756:29:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60990,"name":"uint256","nodeType":"ElementaryTypeName","src":"19756:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60994,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":60992,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"19788:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60993,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19788:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19756:51:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":60995,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"20052:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":60998,"indexExpression":{"expression":{"id":60996,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"20082:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":60997,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20103:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"20082:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20052:58:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":60999,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60991,"src":"20114:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20052:83:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61005,"nodeType":"IfStatement","src":"20048:155:114","trueBody":{"id":61004,"nodeType":"Block","src":"20137:66:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":61001,"name":"UnacceptableSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61945,"src":"20158:32:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":61002,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20158:34:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":61003,"nodeType":"RevertStatement","src":"20151:41:114"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61011,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61006,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"20315:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61010,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":61007,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"20352:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61008,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20373:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"20352:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":61009,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20382:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20352:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20315:68:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61016,"nodeType":"IfStatement","src":"20311:140:114","trueBody":{"id":61015,"nodeType":"Block","src":"20385:66:114","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":61012,"name":"UnacceptableSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61945,"src":"20406:32:114","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":61013,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20406:34:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":61014,"nodeType":"RevertStatement","src":"20399:41:114"}]}},{"assignments":[61021],"declarations":[{"constant":false,"id":61021,"mutability":"mutable","name":"attesters","nameLocation":"20568:9:114","nodeType":"VariableDeclaration","scope":61136,"src":"20551:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61019,"name":"address","nodeType":"ElementaryTypeName","src":"20551:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61020,"nodeType":"ArrayTypeName","src":"20551:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61024,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":61022,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61774,"src":"20580:35:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":61023,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20580:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"20551:66:114"},{"body":{"id":61059,"nodeType":"Block","src":"20674:222:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":61047,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":61036,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"20692:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61039,"indexExpression":{"expression":{"id":61037,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"20704:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61038,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20725:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"20704:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20692:40:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61043,"indexExpression":{"baseExpression":{"id":61040,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61021,"src":"20733:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61042,"indexExpression":{"id":61041,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61026,"src":"20743:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20733:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20692:54:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":61044,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20747:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"20692:65:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":61045,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"20761:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61046,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20782:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"20761:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"20692:100:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61058,"nodeType":"IfStatement","src":"20688:198:114","trueBody":{"id":61057,"nodeType":"Block","src":"20794:92:114","statements":[{"expression":{"id":61055,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"20812:59:114","subExpression":{"baseExpression":{"baseExpression":{"id":61048,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61908,"src":"20812:20:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61053,"indexExpression":{"id":61049,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60991,"src":"20833:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20812:43:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61054,"indexExpression":{"baseExpression":{"id":61050,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61021,"src":"20856:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61052,"indexExpression":{"id":61051,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61026,"src":"20866:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20856:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20812:57:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61056,"nodeType":"ExpressionStatement","src":"20812:59:114"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61032,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61029,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61026,"src":"20647:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61030,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61021,"src":"20651:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61031,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20661:6:114","memberName":"length","nodeType":"MemberAccess","src":"20651:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20647:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61060,"initializationExpression":{"assignments":[61026],"declarations":[{"constant":false,"id":61026,"mutability":"mutable","name":"i","nameLocation":"20640:1:114","nodeType":"VariableDeclaration","scope":61060,"src":"20632:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61025,"name":"uint256","nodeType":"ElementaryTypeName","src":"20632:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61028,"initialValue":{"hexValue":"30","id":61027,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20644:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"20632:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61034,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"20669:3:114","subExpression":{"id":61033,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61026,"src":"20669:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61035,"nodeType":"ExpressionStatement","src":"20669:3:114"},"nodeType":"ForStatement","src":"20627:269:114"},{"condition":{"id":61064,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"20951:61:114","subExpression":{"arguments":[{"id":61062,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"20991:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":61061,"name":"isWithinPostconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61288,"src":"20952:38:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$_t_bool_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (bool)"}},"id":61063,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20952:60:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":61088,"nodeType":"Block","src":"21217:630:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":61077,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61074,"name":"getPostconfirmer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60583,"src":"21709:16:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":61075,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21709:18:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":61076,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60987,"src":"21731:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21709:30:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61087,"nodeType":"IfStatement","src":"21705:132:114","trueBody":{"id":61086,"nodeType":"Block","src":"21741:96:114","statements":[{"expression":{"id":61084,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":61078,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61914,"src":"21759:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61081,"indexExpression":{"id":61079,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60991,"src":"21785:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21759:48:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61082,"indexExpression":{"id":61080,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60987,"src":"21808:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21759:58:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":61083,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21821:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"21759:63:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61085,"nodeType":"ExpressionStatement","src":"21759:63:114"}]}}]},"id":61089,"nodeType":"IfStatement","src":"20947:900:114","trueBody":{"id":61073,"nodeType":"Block","src":"21014:197:114","statements":[{"expression":{"id":61071,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":61065,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61914,"src":"21137:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61068,"indexExpression":{"id":61066,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60991,"src":"21163:21:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21137:48:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61069,"indexExpression":{"id":61067,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60987,"src":"21186:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21137:58:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":61070,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21199:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"21137:63:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61072,"nodeType":"ExpressionStatement","src":"21137:63:114"}]}},{"expression":{"id":61097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":61090,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61900,"src":"21857:33:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61094,"indexExpression":{"id":61091,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61902,"src":"21891:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21857:66:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61095,"indexExpression":{"expression":{"id":61092,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"21924:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61093,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21945:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"21924:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21857:95:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61096,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"21955:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"src":"21857:118:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":61098,"nodeType":"ExpressionStatement","src":"21857:118:114"},{"expression":{"id":61102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61099,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61826,"src":"21985:33:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":61100,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22021:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61101,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22042:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"22021:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"21985:63:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61103,"nodeType":"ExpressionStatement","src":"21985:63:114"},{"expression":{"id":61109,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":61104,"name":"postconfirmedBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61870,"src":"22058:15:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":61107,"indexExpression":{"expression":{"id":61105,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22074:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61106,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22095:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"22074:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22058:44:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61108,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60987,"src":"22105:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"22058:55:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61110,"nodeType":"ExpressionStatement","src":"22058:55:114"},{"expression":{"id":61117,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":61111,"name":"postconfirmedAtL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61878,"src":"22123:28:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":61114,"indexExpression":{"expression":{"id":61112,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22152:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61113,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22173:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"22152:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22123:57:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":61115,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"22183:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":61116,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22189:6:114","memberName":"number","nodeType":"MemberAccess","src":"22183:12:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22123:72:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61118,"nodeType":"ExpressionStatement","src":"22123:72:114"},{"expression":{"id":61125,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":61119,"name":"postconfirmedAtL1BlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61882,"src":"22205:31:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":61122,"indexExpression":{"expression":{"id":61120,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22237:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22258:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"22237:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22205:60:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":61123,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"22268:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":61124,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22274:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"22268:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22205:78:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61126,"nodeType":"ExpressionStatement","src":"22205:78:114"},{"eventCall":{"arguments":[{"expression":{"id":61128,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22387:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61129,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22408:7:114","memberName":"blockId","nodeType":"MemberAccess","referencedDeclaration":61842,"src":"22387:28:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":61130,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22429:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61131,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22450:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"22429:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":61132,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60985,"src":"22474:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61133,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22495:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"22474:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61127,"name":"SuperBlockPostconfirmed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61935,"src":"22350:23:114","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,uint256)"}},"id":61134,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22350:161:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61135,"nodeType":"EmitStatement","src":"22345:166:114"}]},"documentation":{"id":60982,"nodeType":"StructuredDocumentation","src":"19434:188:114","text":"@dev Postconfirms a superBlock commitment.\n @dev This function and attemptPostconfirmOrRollover() could call each other recursively, so we must ensure it's safe from re-entrancy"},"implemented":true,"kind":"function","modifiers":[],"name":"_postconfirmSuperBlockCommitment","nameLocation":"19636:32:114","parameters":{"id":60988,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60985,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"19697:20:114","nodeType":"VariableDeclaration","scope":61137,"src":"19669:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":60984,"nodeType":"UserDefinedTypeName","pathNode":{"id":60983,"name":"SuperBlockCommitment","nameLocations":["19669:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"19669:20:114"},"referencedDeclaration":61843,"src":"19669:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"},{"constant":false,"id":60987,"mutability":"mutable","name":"attester","nameLocation":"19727:8:114","nodeType":"VariableDeclaration","scope":61137,"src":"19719:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60986,"name":"address","nodeType":"ElementaryTypeName","src":"19719:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19668:68:114"},"returnParameters":{"id":60989,"nodeType":"ParameterList","parameters":[],"src":"19746:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61251,"nodeType":"FunctionDefinition","src":"22765:1897:114","nodes":[],"body":{"id":61250,"nodeType":"Block","src":"22799:1863:114","nodes":[],"statements":[{"assignments":[61142],"declarations":[{"constant":false,"id":61142,"mutability":"mutable","name":"acceptingEpoch","nameLocation":"22885:14:114","nodeType":"VariableDeclaration","scope":61250,"src":"22877:22:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61141,"name":"uint256","nodeType":"ElementaryTypeName","src":"22877:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61145,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":61143,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"22902:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61144,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22902:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22877:44:114"},{"assignments":[61150],"declarations":[{"constant":false,"id":61150,"mutability":"mutable","name":"attesters","nameLocation":"22948:9:114","nodeType":"VariableDeclaration","scope":61250,"src":"22931:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61148,"name":"address","nodeType":"ElementaryTypeName","src":"22931:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61149,"nodeType":"ArrayTypeName","src":"22931:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61153,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":61151,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61774,"src":"22960:35:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":61152,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22960:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"22931:66:114"},{"body":{"id":61243,"nodeType":"Block","src":"23081:1533:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":61165,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61908,"src":"23099:20:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61167,"indexExpression":{"id":61166,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61142,"src":"23120:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23099:36:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61171,"indexExpression":{"baseExpression":{"id":61168,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23136:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61170,"indexExpression":{"id":61169,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23146:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23136:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23099:50:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":61172,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23152:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23099:54:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61203,"nodeType":"IfStatement","src":"23095:697:114","trueBody":{"id":61202,"nodeType":"Block","src":"23155:637:114","statements":[{"assignments":[61175],"declarations":[{"constant":false,"id":61175,"mutability":"mutable","name":"reward","nameLocation":"23261:6:114","nodeType":"VariableDeclaration","scope":61202,"src":"23253:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61174,"name":"uint256","nodeType":"ElementaryTypeName","src":"23253:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61191,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61190,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61184,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":61176,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61908,"src":"23270:20:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61178,"indexExpression":{"id":61177,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61142,"src":"23291:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23270:36:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61182,"indexExpression":{"baseExpression":{"id":61179,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23307:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61181,"indexExpression":{"id":61180,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23317:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23307:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23270:50:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":61183,"name":"rewardPerAttestationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61916,"src":"23323:25:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23270:78:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"baseExpression":{"id":61186,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23385:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61188,"indexExpression":{"id":61187,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23395:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23385:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61185,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61603,"src":"23351:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61189,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23351:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23270:128:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23253:145:114"},{"expression":{"arguments":[{"baseExpression":{"id":61195,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23576:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61197,"indexExpression":{"id":61196,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23586:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23576:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61198,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61175,"src":"23590:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61199,"name":"moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61822,"src":"23598:16:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61192,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"23543:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61194,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23559:16:114","memberName":"rewardFromDomain","nodeType":"MemberAccess","referencedDeclaration":64321,"src":"23543:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,uint256,address) external"}},"id":61200,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23543:72:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61201,"nodeType":"ExpressionStatement","src":"23543:72:114"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61212,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":61204,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61914,"src":"23854:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61206,"indexExpression":{"id":61205,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61142,"src":"23880:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23854:41:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61210,"indexExpression":{"baseExpression":{"id":61207,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23896:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61209,"indexExpression":{"id":61208,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23906:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23896:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23854:55:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":61211,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23912:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23854:59:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61242,"nodeType":"IfStatement","src":"23850:754:114","trueBody":{"id":61241,"nodeType":"Block","src":"23915:689:114","statements":[{"assignments":[61214],"declarations":[{"constant":false,"id":61214,"mutability":"mutable","name":"reward","nameLocation":"23941:6:114","nodeType":"VariableDeclaration","scope":61241,"src":"23933:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61213,"name":"uint256","nodeType":"ElementaryTypeName","src":"23933:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61230,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61229,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61223,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":61215,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61914,"src":"23950:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61217,"indexExpression":{"id":61216,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61142,"src":"23976:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23950:41:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61221,"indexExpression":{"baseExpression":{"id":61218,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23992:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61220,"indexExpression":{"id":61219,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"24002:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23992:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23950:55:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":61222,"name":"rewardPerPostconfirmationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61918,"src":"24008:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23950:88:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"baseExpression":{"id":61225,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"24075:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61227,"indexExpression":{"id":61226,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"24085:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24075:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":61224,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61603,"src":"24041:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":61228,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24041:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23950:138:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23933:155:114"},{"expression":{"arguments":[{"baseExpression":{"id":61234,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"24139:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61236,"indexExpression":{"id":61235,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"24149:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24139:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61237,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61214,"src":"24153:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61238,"name":"moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61822,"src":"24161:16:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61231,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"24106:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24122:16:114","memberName":"rewardFromDomain","nodeType":"MemberAccess","referencedDeclaration":64321,"src":"24106:32:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,uint256,address) external"}},"id":61239,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24106:72:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61240,"nodeType":"ExpressionStatement","src":"24106:72:114"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61161,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61158,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23054:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61159,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61150,"src":"23058:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61160,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23068:6:114","memberName":"length","nodeType":"MemberAccess","src":"23058:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23054:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61244,"initializationExpression":{"assignments":[61155],"declarations":[{"constant":false,"id":61155,"mutability":"mutable","name":"i","nameLocation":"23047:1:114","nodeType":"VariableDeclaration","scope":61244,"src":"23039:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61154,"name":"uint256","nodeType":"ElementaryTypeName","src":"23039:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61157,"initialValue":{"hexValue":"30","id":61156,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23051:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"23039:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61163,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"23076:3:114","subExpression":{"id":61162,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61155,"src":"23076:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61164,"nodeType":"ExpressionStatement","src":"23076:3:114"},"nodeType":"ForStatement","src":"23034:1580:114"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":61245,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"24624:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61247,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24640:13:114","memberName":"rollOverEpoch","nodeType":"MemberAccess","referencedDeclaration":64215,"src":"24624:29:114","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":61248,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24624:31:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61249,"nodeType":"ExpressionStatement","src":"24624:31:114"}]},"documentation":{"id":61138,"nodeType":"StructuredDocumentation","src":"22524:236:114","text":"@dev nonReentrant because there is no need to reenter this function. It should be called iteratively. \n @dev Marked on the internal method to simplify risks from complex calling patterns. This also calls an external contract."},"implemented":true,"kind":"function","modifiers":[],"name":"rollOverEpoch","nameLocation":"22774:13:114","parameters":{"id":61139,"nodeType":"ParameterList","parameters":[],"src":"22787:2:114"},"returnParameters":{"id":61140,"nodeType":"ParameterList","parameters":[],"src":"22799:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61288,"nodeType":"FunctionDefinition","src":"24939:683:114","nodes":[],"body":{"id":61287,"nodeType":"Block","src":"25064:558:114","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61264,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":61261,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61255,"src":"25103:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":61260,"name":"getCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60854,"src":"25078:24:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (uint256)"}},"id":61262,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25078:46:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":61263,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25128:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"25078:51:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61268,"nodeType":"IfStatement","src":"25074:94:114","trueBody":{"id":61267,"nodeType":"Block","src":"25131:37:114","statements":[{"expression":{"hexValue":"66616c7365","id":61265,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25152:5:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":61259,"id":61266,"nodeType":"Return","src":"25145:12:114"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61280,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61277,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61274,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":61270,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61255,"src":"25397:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":61269,"name":"getCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60854,"src":"25372:24:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (uint256)"}},"id":61271,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25372:46:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61272,"name":"getMinCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60396,"src":"25434:38:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61273,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25434:40:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25372:102:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61275,"name":"getPostconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60357,"src":"25490:33:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61276,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25490:35:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25372:153:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61278,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"25541:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":61279,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25547:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"25541:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25372:184:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61284,"nodeType":"IfStatement","src":"25368:227:114","trueBody":{"id":61283,"nodeType":"Block","src":"25558:37:114","statements":[{"expression":{"hexValue":"66616c7365","id":61281,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25579:5:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":61259,"id":61282,"nodeType":"Return","src":"25572:12:114"}]}},{"expression":{"hexValue":"74727565","id":61285,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25611:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":61259,"id":61286,"nodeType":"Return","src":"25604:11:114"}]},"documentation":{"id":61252,"nodeType":"StructuredDocumentation","src":"24668:266:114","text":"@notice Checks, for a given superBlock commitment, if the current L1 block time is within the postconfirmer's privilege window\n @dev The postconfirmer's privilege window is the time period when only the postconfirmer will get rewarded for postconfirmation"},"functionSelector":"0cf6b6bd","implemented":true,"kind":"function","modifiers":[],"name":"isWithinPostconfirmerPrivilegeDuration","nameLocation":"24948:38:114","parameters":{"id":61256,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61255,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"25015:20:114","nodeType":"VariableDeclaration","scope":61288,"src":"24987:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":61254,"nodeType":"UserDefinedTypeName","pathNode":{"id":61253,"name":"SuperBlockCommitment","nameLocations":["24987:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"24987:20:114"},"referencedDeclaration":61843,"src":"24987:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"24986:50:114"},"returnParameters":{"id":61259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61258,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61288,"src":"25058:4:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61257,"name":"bool","nodeType":"ElementaryTypeName","src":"25058:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"25057:6:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61493,"nodeType":"FunctionDefinition","src":"25967:4503:114","nodes":[],"body":{"id":61492,"nodeType":"Block","src":"26055:4415:114","nodes":[],"statements":[{"assignments":[61297],"declarations":[{"constant":false,"id":61297,"mutability":"mutable","name":"superBlockEpoch","nameLocation":"26073:15:114","nodeType":"VariableDeclaration","scope":61492,"src":"26065:23:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61296,"name":"uint256","nodeType":"ElementaryTypeName","src":"26065:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61301,"initialValue":{"baseExpression":{"id":61298,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"26091:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":61300,"indexExpression":{"id":61299,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"26121:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26091:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26065:73:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61305,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61302,"name":"getLastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60898,"src":"26152:36:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61303,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26152:38:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":61304,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26194:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"26152:43:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":61364,"nodeType":"Block","src":"26287:875:114","statements":[{"assignments":[61308],"declarations":[{"constant":false,"id":61308,"mutability":"mutable","name":"previousSuperBlockEpoch","nameLocation":"26414:23:114","nodeType":"VariableDeclaration","scope":61364,"src":"26406:31:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61307,"name":"uint256","nodeType":"ElementaryTypeName","src":"26406:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61314,"initialValue":{"baseExpression":{"id":61309,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"26440:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":61313,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61312,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61310,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"26470:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":61311,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26487:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"26470:18:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26440:49:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26406:83:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61317,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61315,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61297,"src":"26507:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":61316,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61308,"src":"26525:23:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26507:41:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61363,"nodeType":"IfStatement","src":"26503:649:114","trueBody":{"id":61362,"nodeType":"Block","src":"26553:599:114","statements":[{"assignments":[61322],"declarations":[{"constant":false,"id":61322,"mutability":"mutable","name":"stakedAttesters","nameLocation":"26588:15:114","nodeType":"VariableDeclaration","scope":61362,"src":"26571:32:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61320,"name":"address","nodeType":"ElementaryTypeName","src":"26571:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61321,"nodeType":"ArrayTypeName","src":"26571:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61325,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":61323,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61774,"src":"26606:35:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":61324,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26606:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"26571:72:114"},{"body":{"id":61356,"nodeType":"Block","src":"26819:260:114","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61346,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":61337,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"26845:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61339,"indexExpression":{"id":61338,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"26857:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26845:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61343,"indexExpression":{"baseExpression":{"id":61340,"name":"stakedAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61322,"src":"26875:15:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61342,"indexExpression":{"id":61341,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61327,"src":"26891:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26875:18:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26845:49:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":61344,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26895:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"26845:56:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":61345,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26905:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"26845:61:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61355,"nodeType":"IfStatement","src":"26841:220:114","trueBody":{"id":61354,"nodeType":"Block","src":"26908:153:114","statements":[{"expression":{"id":61351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":61347,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61847,"src":"26934:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":61349,"indexExpression":{"id":61348,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"26964:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26934:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61350,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61308,"src":"26984:23:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26934:73:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61352,"nodeType":"ExpressionStatement","src":"26934:73:114"},{"id":61353,"nodeType":"Break","src":"27033:5:114"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61333,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61330,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61327,"src":"26786:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61331,"name":"stakedAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61322,"src":"26790:15:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61332,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26806:6:114","memberName":"length","nodeType":"MemberAccess","src":"26790:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26786:26:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61357,"initializationExpression":{"assignments":[61327],"declarations":[{"constant":false,"id":61327,"mutability":"mutable","name":"i","nameLocation":"26779:1:114","nodeType":"VariableDeclaration","scope":61357,"src":"26771:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61326,"name":"uint256","nodeType":"ElementaryTypeName","src":"26771:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61329,"initialValue":{"hexValue":"30","id":61328,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26783:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"26771:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61335,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"26814:3:114","subExpression":{"id":61334,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61327,"src":"26814:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61336,"nodeType":"ExpressionStatement","src":"26814:3:114"},"nodeType":"ForStatement","src":"26766:313:114"},{"expression":{"id":61360,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61358,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61297,"src":"27096:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61359,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61308,"src":"27114:23:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27096:41:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61361,"nodeType":"ExpressionStatement","src":"27096:41:114"}]}}]},"id":61365,"nodeType":"IfStatement","src":"26148:1014:114","trueBody":{"id":61306,"nodeType":"Block","src":"26197:84:114","statements":[]}},{"body":{"id":61373,"nodeType":"Block","src":"27497:203:114","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":61370,"name":"rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61251,"src":"27674:13:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":61371,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27674:15:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61372,"nodeType":"ExpressionStatement","src":"27674:15:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61369,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61366,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"27458:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61367,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27458:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":61368,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61297,"src":"27480:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27458:37:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61374,"nodeType":"WhileStatement","src":"27451:249:114"},{"assignments":[61376],"declarations":[{"constant":false,"id":61376,"mutability":"mutable","name":"supermajority","nameLocation":"27893:13:114","nodeType":"VariableDeclaration","scope":61492,"src":"27885:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61375,"name":"uint256","nodeType":"ElementaryTypeName","src":"27885:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61387,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61386,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61384,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61381,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":61377,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27910:1:114","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":61379,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61297,"src":"27928:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61378,"name":"getTotalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61673,"src":"27914:13:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":61380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27914:30:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27910:34:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":61382,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27909:36:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":61383,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27948:1:114","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"27909:40:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":61385,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27952:1:114","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27909:44:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"27885:68:114"},{"assignments":[61392],"declarations":[{"constant":false,"id":61392,"mutability":"mutable","name":"attesters","nameLocation":"27980:9:114","nodeType":"VariableDeclaration","scope":61492,"src":"27963:26:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61390,"name":"address","nodeType":"ElementaryTypeName","src":"27963:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61391,"nodeType":"ArrayTypeName","src":"27963:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61395,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":61393,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61774,"src":"27992:35:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":61394,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27992:37:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"27963:66:114"},{"assignments":[61397],"declarations":[{"constant":false,"id":61397,"mutability":"mutable","name":"successfulPostconfirmation","nameLocation":"28296:26:114","nodeType":"VariableDeclaration","scope":61492,"src":"28291:31:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61396,"name":"bool","nodeType":"ElementaryTypeName","src":"28291:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":61399,"initialValue":{"hexValue":"66616c7365","id":61398,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"28325:5:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"28291:39:114"},{"body":{"id":61473,"nodeType":"Block","src":"28387:1641:114","statements":[{"assignments":[61412],"declarations":[{"constant":false,"id":61412,"mutability":"mutable","name":"attester","nameLocation":"28409:8:114","nodeType":"VariableDeclaration","scope":61473,"src":"28401:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61411,"name":"address","nodeType":"ElementaryTypeName","src":"28401:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":61416,"initialValue":{"baseExpression":{"id":61413,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61392,"src":"28420:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61415,"indexExpression":{"id":61414,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61401,"src":"28430:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28420:12:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"28401:31:114"},{"assignments":[61419],"declarations":[{"constant":false,"id":61419,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"28474:20:114","nodeType":"VariableDeclaration","scope":61473,"src":"28446:48:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":61418,"nodeType":"UserDefinedTypeName","pathNode":{"id":61417,"name":"SuperBlockCommitment","nameLocations":["28446:20:114"],"nodeType":"IdentifierPath","referencedDeclaration":61843,"src":"28446:20:114"},"referencedDeclaration":61843,"src":"28446:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"id":61425,"initialValue":{"baseExpression":{"baseExpression":{"id":61420,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"28497:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61422,"indexExpression":{"id":61421,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"28509:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28497:29:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61424,"indexExpression":{"id":61423,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61412,"src":"28527:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28497:39:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"VariableDeclarationStatement","src":"28446:90:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61429,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":61426,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61419,"src":"28739:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61427,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28760:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"28739:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":61428,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61291,"src":"28770:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28739:47:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61431,"nodeType":"IfStatement","src":"28735:61:114","trueBody":{"id":61430,"nodeType":"Continue","src":"28788:8:114"}},{"assignments":[61433],"declarations":[{"constant":false,"id":61433,"mutability":"mutable","name":"totalStakeOnCommitment","nameLocation":"28874:22:114","nodeType":"VariableDeclaration","scope":61473,"src":"28866:30:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61432,"name":"uint256","nodeType":"ElementaryTypeName","src":"28866:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61441,"initialValue":{"baseExpression":{"baseExpression":{"id":61434,"name":"commitmentStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61860,"src":"28899:15:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":61437,"indexExpression":{"expression":{"id":61435,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61419,"src":"28915:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61436,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28936:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"28915:27:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28899:44:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":61440,"indexExpression":{"expression":{"id":61438,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61419,"src":"28944:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":61439,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28965:10:114","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":61840,"src":"28944:31:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28899:77:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28866:110:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61444,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61442,"name":"totalStakeOnCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61433,"src":"28995:22:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":61443,"name":"supermajority","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61376,"src":"29021:13:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28995:39:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61472,"nodeType":"IfStatement","src":"28991:1027:114","trueBody":{"id":61471,"nodeType":"Block","src":"29036:982:114","statements":[{"assignments":[61446],"declarations":[{"constant":false,"id":61446,"mutability":"mutable","name":"firstSeen","nameLocation":"29250:9:114","nodeType":"VariableDeclaration","scope":61471,"src":"29242:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61445,"name":"uint256","nodeType":"ElementaryTypeName","src":"29242:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61450,"initialValue":{"arguments":[{"id":61448,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61419,"src":"29287:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":61447,"name":"getCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60854,"src":"29262:24:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (uint256)"}},"id":61449,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29262:46:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29242:66:114"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61456,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":61451,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"29393:5:114","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":61452,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29399:9:114","memberName":"timestamp","nodeType":"MemberAccess","src":"29393:15:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61455,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61453,"name":"firstSeen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61446,"src":"29411:9:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":61454,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61832,"src":"29423:35:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29411:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29393:65:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61458,"nodeType":"IfStatement","src":"29389:76:114","trueBody":{"id":61457,"nodeType":"Break","src":"29460:5:114"}},{"expression":{"arguments":[{"id":61460,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61419,"src":"29517:20:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},{"expression":{"id":61461,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"29539:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61462,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29543:6:114","memberName":"sender","nodeType":"MemberAccess","src":"29539:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61459,"name":"_postconfirmSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61137,"src":"29484:32:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SuperBlockCommitment_$61843_memory_ptr_$_t_address_$returns$__$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory,address)"}},"id":61463,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29484:66:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61464,"nodeType":"ExpressionStatement","src":"29484:66:114"},{"expression":{"id":61467,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61465,"name":"successfulPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61397,"src":"29568:26:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":61466,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"29597:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"29568:33:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61468,"nodeType":"ExpressionStatement","src":"29568:33:114"},{"expression":{"hexValue":"74727565","id":61469,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"29999:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":61295,"id":61470,"nodeType":"Return","src":"29992:11:114"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61407,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61404,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61401,"src":"28360:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61405,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61392,"src":"28364:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61406,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28374:6:114","memberName":"length","nodeType":"MemberAccess","src":"28364:16:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28360:20:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61474,"initializationExpression":{"assignments":[61401],"declarations":[{"constant":false,"id":61401,"mutability":"mutable","name":"i","nameLocation":"28353:1:114","nodeType":"VariableDeclaration","scope":61474,"src":"28345:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61400,"name":"uint256","nodeType":"ElementaryTypeName","src":"28345:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61403,"initialValue":{"hexValue":"30","id":61402,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28357:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"28345:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61409,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"28382:3:114","subExpression":{"id":61408,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61401,"src":"28382:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61410,"nodeType":"ExpressionStatement","src":"28382:3:114"},"nodeType":"ForStatement","src":"28340:1688:114"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":61482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61476,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"30240:27:114","subExpression":{"id":61475,"name":"successfulPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61397,"src":"30241:26:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61481,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61477,"name":"getPresentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60463,"src":"30271:15:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61478,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30271:17:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":61479,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"30291:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61480,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30291:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30271:39:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"30240:70:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61489,"nodeType":"IfStatement","src":"30236:206:114","trueBody":{"id":61488,"nodeType":"Block","src":"30312:130:114","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":61483,"name":"rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61251,"src":"30326:13:114","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":61484,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30326:15:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":61485,"nodeType":"ExpressionStatement","src":"30326:15:114"},{"expression":{"hexValue":"74727565","id":61486,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"30362:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":61295,"id":61487,"nodeType":"Return","src":"30355:11:114"}]}},{"expression":{"hexValue":"66616c7365","id":61490,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"30458:5:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":61295,"id":61491,"nodeType":"Return","src":"30451:12:114"}]},"documentation":{"id":61289,"nodeType":"StructuredDocumentation","src":"25628:334:114","text":"@dev it is possible if the accepting epoch is behind the presentEpoch that heights dont obtain enough votes in the assigned epoch. \n @dev Moreover, due to the leadingBlockTolerance, the assigned epoch for a height could be ahead of the actual epoch. \n @dev solution is to move to the next epoch and count votes there"},"implemented":true,"kind":"function","modifiers":[],"name":"attemptPostconfirmOrRollover","nameLocation":"25976:28:114","parameters":{"id":61292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61291,"mutability":"mutable","name":"superBlockHeight","nameLocation":"26013:16:114","nodeType":"VariableDeclaration","scope":61493,"src":"26005:24:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61290,"name":"uint256","nodeType":"ElementaryTypeName","src":"26005:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26004:26:114"},"returnParameters":{"id":61295,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61294,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61493,"src":"26049:4:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61293,"name":"bool","nodeType":"ElementaryTypeName","src":"26049:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"26048:6:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":61517,"nodeType":"FunctionDefinition","src":"30780:311:114","nodes":[],"body":{"id":61516,"nodeType":"Block","src":"30910:181:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":61509,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"30989:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":61508,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"30981:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61507,"name":"address","nodeType":"ElementaryTypeName","src":"30981:7:114","typeDescriptions":{}}},"id":61510,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30981:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61511,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61496,"src":"31012:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61512,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61498,"src":"31035:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61513,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61500,"src":"31062:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61505,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"30939:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61506,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30955:8:114","memberName":"getStake","nodeType":"MemberAccess","referencedDeclaration":64122,"src":"30939:24:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view external returns (uint256)"}},"id":61514,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30939:145:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61504,"id":61515,"nodeType":"Return","src":"30920:164:114"}]},"documentation":{"id":61494,"nodeType":"StructuredDocumentation","src":"30692:83:114","text":"@notice Gets the stake for a given tuple (custodian, attester) at a given epoch"},"functionSelector":"7aa81c2a","implemented":true,"kind":"function","modifiers":[],"name":"getStake","nameLocation":"30789:8:114","parameters":{"id":61501,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61496,"mutability":"mutable","name":"epoch","nameLocation":"30815:5:114","nodeType":"VariableDeclaration","scope":61517,"src":"30807:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61495,"name":"uint256","nodeType":"ElementaryTypeName","src":"30807:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61498,"mutability":"mutable","name":"custodian","nameLocation":"30838:9:114","nodeType":"VariableDeclaration","scope":61517,"src":"30830:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61497,"name":"address","nodeType":"ElementaryTypeName","src":"30830:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61500,"mutability":"mutable","name":"attester","nameLocation":"30865:8:114","nodeType":"VariableDeclaration","scope":61517,"src":"30857:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61499,"name":"address","nodeType":"ElementaryTypeName","src":"30857:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30797:82:114"},"returnParameters":{"id":61504,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61503,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61517,"src":"30901:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61502,"name":"uint256","nodeType":"ElementaryTypeName","src":"30901:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30900:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61535,"nodeType":"FunctionDefinition","src":"31191:198:114","nodes":[],"body":{"id":61534,"nodeType":"Block","src":"31315:74:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":61528,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"31341:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61529,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31341:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61530,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61520,"src":"31362:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61531,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61522,"src":"31373:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61527,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61517,"src":"31332:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) view returns (uint256)"}},"id":61532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31332:50:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61526,"id":61533,"nodeType":"Return","src":"31325:57:114"}]},"documentation":{"id":61518,"nodeType":"StructuredDocumentation","src":"31097:89:114","text":"@notice Gets the stake for a given tuple (custodian, attester) at the accepting epoch"},"functionSelector":"bb04bd2f","implemented":true,"kind":"function","modifiers":[],"name":"getStakeForAcceptingEpoch","nameLocation":"31200:25:114","parameters":{"id":61523,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61520,"mutability":"mutable","name":"custodian","nameLocation":"31243:9:114","nodeType":"VariableDeclaration","scope":61535,"src":"31235:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61519,"name":"address","nodeType":"ElementaryTypeName","src":"31235:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":61522,"mutability":"mutable","name":"attester","nameLocation":"31270:8:114","nodeType":"VariableDeclaration","scope":61535,"src":"31262:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61521,"name":"address","nodeType":"ElementaryTypeName","src":"31262:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"31225:59:114"},"returnParameters":{"id":61526,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61525,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61535,"src":"31306:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61524,"name":"uint256","nodeType":"ElementaryTypeName","src":"31306:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31305:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61588,"nodeType":"FunctionDefinition","src":"31523:484:114","nodes":[],"body":{"id":61587,"nodeType":"Block","src":"31634:373:114","nodes":[],"statements":[{"assignments":[61549],"declarations":[{"constant":false,"id":61549,"mutability":"mutable","name":"custodians","nameLocation":"31661:10:114","nodeType":"VariableDeclaration","scope":61587,"src":"31644:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61547,"name":"address","nodeType":"ElementaryTypeName","src":"31644:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61548,"nodeType":"ArrayTypeName","src":"31644:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61557,"initialValue":{"arguments":[{"arguments":[{"id":61554,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"31735:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":61553,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31727:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61552,"name":"address","nodeType":"ElementaryTypeName","src":"31727:7:114","typeDescriptions":{}}},"id":61555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31727:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61550,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"31674:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61551,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31690:23:114","memberName":"getRegisteredCustodians","nodeType":"MemberAccess","referencedDeclaration":64204,"src":"31674:39:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":61556,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31674:76:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"31644:106:114"},{"assignments":[61559],"declarations":[{"constant":false,"id":61559,"mutability":"mutable","name":"totalStake","nameLocation":"31768:10:114","nodeType":"VariableDeclaration","scope":61587,"src":"31760:18:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61558,"name":"uint256","nodeType":"ElementaryTypeName","src":"31760:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61561,"initialValue":{"hexValue":"30","id":61560,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31781:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"31760:22:114"},{"body":{"id":61583,"nodeType":"Block","src":"31840:134:114","statements":[{"expression":{"id":61581,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61573,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61559,"src":"31909:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":61575,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61538,"src":"31932:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":61576,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61549,"src":"31939:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61578,"indexExpression":{"id":61577,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61563,"src":"31950:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31939:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61579,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61540,"src":"31954:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61574,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61517,"src":"31923:8:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) view returns (uint256)"}},"id":61580,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31923:40:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31909:54:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61582,"nodeType":"ExpressionStatement","src":"31909:54:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61569,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61566,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61563,"src":"31812:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61567,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61549,"src":"31816:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61568,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31827:6:114","memberName":"length","nodeType":"MemberAccess","src":"31816:17:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31812:21:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61584,"initializationExpression":{"assignments":[61563],"declarations":[{"constant":false,"id":61563,"mutability":"mutable","name":"i","nameLocation":"31805:1:114","nodeType":"VariableDeclaration","scope":61584,"src":"31797:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61562,"name":"uint256","nodeType":"ElementaryTypeName","src":"31797:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61565,"initialValue":{"hexValue":"30","id":61564,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31809:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"31797:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61571,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"31835:3:114","subExpression":{"id":61570,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61563,"src":"31835:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61572,"nodeType":"ExpressionStatement","src":"31835:3:114"},"nodeType":"ForStatement","src":"31792:182:114"},{"expression":{"id":61585,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61559,"src":"31990:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61544,"id":61586,"nodeType":"Return","src":"31983:17:114"}]},"documentation":{"id":61536,"nodeType":"StructuredDocumentation","src":"31395:64:114","text":"@notice Gets the stake for a given attester at a given epoch"},"functionSelector":"ba26513e","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStake","nameLocation":"31532:16:114","parameters":{"id":61541,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61538,"mutability":"mutable","name":"epoch","nameLocation":"31566:5:114","nodeType":"VariableDeclaration","scope":61588,"src":"31558:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61537,"name":"uint256","nodeType":"ElementaryTypeName","src":"31558:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61540,"mutability":"mutable","name":"attester","nameLocation":"31589:8:114","nodeType":"VariableDeclaration","scope":61588,"src":"31581:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61539,"name":"address","nodeType":"ElementaryTypeName","src":"31581:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"31548:55:114"},"returnParameters":{"id":61544,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61543,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61588,"src":"31625:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61542,"name":"uint256","nodeType":"ElementaryTypeName","src":"31625:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31624:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61603,"nodeType":"FunctionDefinition","src":"32088:176:114","nodes":[],"body":{"id":61602,"nodeType":"Block","src":"32193:71:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":61597,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"32227:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61598,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32227:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61599,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61591,"src":"32248:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61596,"name":"getAttesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61588,"src":"32210:16:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":61600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32210:47:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61595,"id":61601,"nodeType":"Return","src":"32203:54:114"}]},"documentation":{"id":61589,"nodeType":"StructuredDocumentation","src":"32013:70:114","text":"@notice Gets the stake for a given attester at the accepting epoch"},"functionSelector":"491d0467","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStakeForAcceptingEpoch","nameLocation":"32097:33:114","parameters":{"id":61592,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61591,"mutability":"mutable","name":"attester","nameLocation":"32148:8:114","nodeType":"VariableDeclaration","scope":61603,"src":"32140:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61590,"name":"address","nodeType":"ElementaryTypeName","src":"32140:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32130:32:114"},"returnParameters":{"id":61595,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61594,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61603,"src":"32184:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61593,"name":"uint256","nodeType":"ElementaryTypeName","src":"32184:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32183:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61624,"nodeType":"FunctionDefinition","src":"32341:287:114","nodes":[],"body":{"id":61623,"nodeType":"Block","src":"32454:174:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":61617,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"32542:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":61616,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32534:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61615,"name":"address","nodeType":"ElementaryTypeName","src":"32534:7:114","typeDescriptions":{}}},"id":61618,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32534:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":61619,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61606,"src":"32575:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61620,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61608,"src":"32598:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61613,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"32483:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61614,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32499:17:114","memberName":"getCustodianStake","nodeType":"MemberAccess","referencedDeclaration":64168,"src":"32483:33:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view external returns (uint256)"}},"id":61621,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32483:138:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61612,"id":61622,"nodeType":"Return","src":"32464:157:114"}]},"documentation":{"id":61604,"nodeType":"StructuredDocumentation","src":"32270:66:114","text":"@notice Gets the stake for a given custodian for a given epoch"},"functionSelector":"1de38fe1","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStake","nameLocation":"32350:17:114","parameters":{"id":61609,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61606,"mutability":"mutable","name":"epoch","nameLocation":"32385:5:114","nodeType":"VariableDeclaration","scope":61624,"src":"32377:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61605,"name":"uint256","nodeType":"ElementaryTypeName","src":"32377:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61608,"mutability":"mutable","name":"custodian","nameLocation":"32408:9:114","nodeType":"VariableDeclaration","scope":61624,"src":"32400:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61607,"name":"address","nodeType":"ElementaryTypeName","src":"32400:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32367:56:114"},"returnParameters":{"id":61612,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61611,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61624,"src":"32445:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61610,"name":"uint256","nodeType":"ElementaryTypeName","src":"32445:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32444:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61673,"nodeType":"FunctionDefinition","src":"32634:607:114","nodes":[],"body":{"id":61672,"nodeType":"Block","src":"32716:525:114","nodes":[],"statements":[{"assignments":[61635],"declarations":[{"constant":false,"id":61635,"mutability":"mutable","name":"custodians","nameLocation":"32896:10:114","nodeType":"VariableDeclaration","scope":61672,"src":"32879:27:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61633,"name":"address","nodeType":"ElementaryTypeName","src":"32879:7:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61634,"nodeType":"ArrayTypeName","src":"32879:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":61643,"initialValue":{"arguments":[{"arguments":[{"id":61640,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"32970:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":61639,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32962:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61638,"name":"address","nodeType":"ElementaryTypeName","src":"32962:7:114","typeDescriptions":{}}},"id":61641,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32962:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61636,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"32909:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61637,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32925:23:114","memberName":"getRegisteredCustodians","nodeType":"MemberAccess","referencedDeclaration":64204,"src":"32909:39:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":61642,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32909:76:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"32879:106:114"},{"assignments":[61645],"declarations":[{"constant":false,"id":61645,"mutability":"mutable","name":"totalStake","nameLocation":"33003:10:114","nodeType":"VariableDeclaration","scope":61672,"src":"32995:18:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61644,"name":"uint256","nodeType":"ElementaryTypeName","src":"32995:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61647,"initialValue":{"hexValue":"30","id":61646,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33016:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"32995:22:114"},{"body":{"id":61668,"nodeType":"Block","src":"33075:133:114","statements":[{"expression":{"id":61666,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61659,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61645,"src":"33144:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":61661,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61626,"src":"33176:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":61662,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61635,"src":"33183:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61664,"indexExpression":{"id":61663,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61649,"src":"33194:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"33183:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61660,"name":"getCustodianStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61624,"src":"33158:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":61665,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33158:39:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33144:53:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61667,"nodeType":"ExpressionStatement","src":"33144:53:114"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61655,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":61652,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61649,"src":"33047:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":61653,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61635,"src":"33051:10:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":61654,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33062:6:114","memberName":"length","nodeType":"MemberAccess","src":"33051:17:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33047:21:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":61669,"initializationExpression":{"assignments":[61649],"declarations":[{"constant":false,"id":61649,"mutability":"mutable","name":"i","nameLocation":"33040:1:114","nodeType":"VariableDeclaration","scope":61669,"src":"33032:9:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61648,"name":"uint256","nodeType":"ElementaryTypeName","src":"33032:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":61651,"initialValue":{"hexValue":"30","id":61650,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33044:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"33032:13:114"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":61657,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"33070:3:114","subExpression":{"id":61656,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61649,"src":"33070:1:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61658,"nodeType":"ExpressionStatement","src":"33070:3:114"},"nodeType":"ForStatement","src":"33027:181:114"},{"expression":{"id":61670,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61645,"src":"33224:10:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61630,"id":61671,"nodeType":"Return","src":"33217:17:114"}]},"functionSelector":"45367f23","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStake","nameLocation":"32643:13:114","parameters":{"id":61627,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61626,"mutability":"mutable","name":"epoch","nameLocation":"32674:5:114","nodeType":"VariableDeclaration","scope":61673,"src":"32666:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61625,"name":"uint256","nodeType":"ElementaryTypeName","src":"32666:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32656:29:114"},"returnParameters":{"id":61630,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61629,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61673,"src":"32707:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61628,"name":"uint256","nodeType":"ElementaryTypeName","src":"32707:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32706:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61687,"nodeType":"FunctionDefinition","src":"33319:180:114","nodes":[],"body":{"id":61686,"nodeType":"Block","src":"33426:73:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":61681,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"33461:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61682,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33461:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":61683,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61675,"src":"33482:9:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":61680,"name":"getCustodianStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61624,"src":"33443:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":61684,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33443:49:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61679,"id":61685,"nodeType":"Return","src":"33436:56:114"}]},"functionSelector":"d440116d","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStakeForAcceptingEpoch","nameLocation":"33328:34:114","parameters":{"id":61676,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61675,"mutability":"mutable","name":"custodian","nameLocation":"33380:9:114","nodeType":"VariableDeclaration","scope":61687,"src":"33372:17:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61674,"name":"address","nodeType":"ElementaryTypeName","src":"33372:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"33362:33:114"},"returnParameters":{"id":61679,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61678,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61687,"src":"33417:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61677,"name":"uint256","nodeType":"ElementaryTypeName","src":"33417:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33416:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61698,"nodeType":"FunctionDefinition","src":"33505:158:114","nodes":[],"body":{"id":61697,"nodeType":"Block","src":"33605:58:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":61693,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60477,"src":"33636:17:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":61694,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33636:19:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":61692,"name":"getTotalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61673,"src":"33622:13:114","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":61695,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33622:34:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61691,"id":61696,"nodeType":"Return","src":"33615:41:114"}]},"functionSelector":"14e38026","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStakeForAcceptingEpoch","nameLocation":"33514:30:114","parameters":{"id":61688,"nodeType":"ParameterList","parameters":[],"src":"33544:2:114"},"returnParameters":{"id":61691,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61690,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61698,"src":"33592:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61689,"name":"uint256","nodeType":"ElementaryTypeName","src":"33592:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33591:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61711,"nodeType":"FunctionDefinition","src":"33669:155:114","nodes":[],"body":{"id":61710,"nodeType":"Block","src":"33765:59:114","nodes":[],"statements":[{"expression":{"id":61708,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61706,"name":"rewardPerAttestationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61916,"src":"33775:25:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61707,"name":"rewardPerPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61700,"src":"33803:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33775:42:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61709,"nodeType":"ExpressionStatement","src":"33775:42:114"}]},"functionSelector":"0d39f7f0","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":61703,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"33747:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":61704,"kind":"modifierInvocation","modifierName":{"id":61702,"name":"onlyRole","nameLocations":["33738:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"33738:8:114"},"nodeType":"ModifierInvocation","src":"33738:26:114"}],"name":"setRewardPerAttestationPoint","nameLocation":"33678:28:114","parameters":{"id":61701,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61700,"mutability":"mutable","name":"rewardPerPoint","nameLocation":"33715:14:114","nodeType":"VariableDeclaration","scope":61711,"src":"33707:22:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61699,"name":"uint256","nodeType":"ElementaryTypeName","src":"33707:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33706:24:114"},"returnParameters":{"id":61705,"nodeType":"ParameterList","parameters":[],"src":"33765:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":61724,"nodeType":"FunctionDefinition","src":"33830:165:114","nodes":[],"body":{"id":61723,"nodeType":"Block","src":"33931:64:114","nodes":[],"statements":[{"expression":{"id":61721,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":61719,"name":"rewardPerPostconfirmationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61918,"src":"33941:30:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":61720,"name":"rewardPerPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61713,"src":"33974:14:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33941:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":61722,"nodeType":"ExpressionStatement","src":"33941:47:114"}]},"functionSelector":"57342282","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":61716,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60057,"src":"33913:16:114","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":61717,"kind":"modifierInvocation","modifierName":{"id":61715,"name":"onlyRole","nameLocations":["33904:8:114"],"nodeType":"IdentifierPath","referencedDeclaration":39173,"src":"33904:8:114"},"nodeType":"ModifierInvocation","src":"33904:26:114"}],"name":"setRewardPerPostconfirmationPoint","nameLocation":"33839:33:114","parameters":{"id":61714,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61713,"mutability":"mutable","name":"rewardPerPoint","nameLocation":"33881:14:114","nodeType":"VariableDeclaration","scope":61724,"src":"33873:22:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61712,"name":"uint256","nodeType":"ElementaryTypeName","src":"33873:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33872:24:114"},"returnParameters":{"id":61718,"nodeType":"ParameterList","parameters":[],"src":"33931:0:114"},"scope":61810,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":61741,"nodeType":"FunctionDefinition","src":"34073:157:114","nodes":[],"body":{"id":61740,"nodeType":"Block","src":"34169:61:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":61734,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61908,"src":"34186:20:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61736,"indexExpression":{"id":61735,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61727,"src":"34207:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34186:27:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61738,"indexExpression":{"id":61737,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61729,"src":"34214:8:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34186:37:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61733,"id":61739,"nodeType":"Return","src":"34179:44:114"}]},"documentation":{"id":61725,"nodeType":"StructuredDocumentation","src":"34001:67:114","text":"@notice Gets the reward points for an attester in a given epoch"},"functionSelector":"6978ab12","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterRewardPoints","nameLocation":"34082:23:114","parameters":{"id":61730,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61727,"mutability":"mutable","name":"epoch","nameLocation":"34114:5:114","nodeType":"VariableDeclaration","scope":61741,"src":"34106:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61726,"name":"uint256","nodeType":"ElementaryTypeName","src":"34106:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61729,"mutability":"mutable","name":"attester","nameLocation":"34129:8:114","nodeType":"VariableDeclaration","scope":61741,"src":"34121:16:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61728,"name":"address","nodeType":"ElementaryTypeName","src":"34121:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"34105:33:114"},"returnParameters":{"id":61733,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61732,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61741,"src":"34160:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61731,"name":"uint256","nodeType":"ElementaryTypeName","src":"34160:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34159:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61758,"nodeType":"FunctionDefinition","src":"34316:177:114","nodes":[],"body":{"id":61757,"nodeType":"Block","src":"34422:71:114","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":61751,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61914,"src":"34439:25:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":61753,"indexExpression":{"id":61752,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61744,"src":"34465:5:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34439:32:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":61755,"indexExpression":{"id":61754,"name":"postconfirmer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61746,"src":"34472:13:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34439:47:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":61750,"id":61756,"nodeType":"Return","src":"34432:54:114"}]},"documentation":{"id":61742,"nodeType":"StructuredDocumentation","src":"34240:71:114","text":"@notice Gets the reward points for a postconfirmer in a given epoch"},"functionSelector":"ed8a1d59","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerRewardPoints","nameLocation":"34325:28:114","parameters":{"id":61747,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61744,"mutability":"mutable","name":"epoch","nameLocation":"34362:5:114","nodeType":"VariableDeclaration","scope":61758,"src":"34354:13:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61743,"name":"uint256","nodeType":"ElementaryTypeName","src":"34354:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":61746,"mutability":"mutable","name":"postconfirmer","nameLocation":"34377:13:114","nodeType":"VariableDeclaration","scope":61758,"src":"34369:21:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":61745,"name":"address","nodeType":"ElementaryTypeName","src":"34369:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"34353:38:114"},"returnParameters":{"id":61750,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61749,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61758,"src":"34413:7:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61748,"name":"uint256","nodeType":"ElementaryTypeName","src":"34413:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34412:9:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61774,"nodeType":"FunctionDefinition","src":"34580:177:114","nodes":[],"body":{"id":61773,"nodeType":"Block","src":"34666:91:114","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":61769,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"34743:4:114","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$61810","typeString":"contract PCP"}],"id":61768,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34735:7:114","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":61767,"name":"address","nodeType":"ElementaryTypeName","src":"34735:7:114","typeDescriptions":{}}},"id":61770,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34735:13:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":61765,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61820,"src":"34683:15:114","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$64348","typeString":"contract IMovementStaking"}},"id":61766,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34699:35:114","memberName":"getStakedAttestersForAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":64296,"src":"34683:51:114","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":61771,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34683:66:114","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":61764,"id":61772,"nodeType":"Return","src":"34676:73:114"}]},"documentation":{"id":61759,"nodeType":"StructuredDocumentation","src":"34499:76:114","text":"@notice Gets the attesters who have stake in the current accepting epoch"},"functionSelector":"aa0d6fcd","implemented":true,"kind":"function","modifiers":[],"name":"getStakedAttestersForAcceptingEpoch","nameLocation":"34589:35:114","parameters":{"id":61760,"nodeType":"ParameterList","parameters":[],"src":"34624:2:114"},"returnParameters":{"id":61764,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61763,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61774,"src":"34648:16:114","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":61761,"name":"address","nodeType":"ElementaryTypeName","src":"34648:7:114","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":61762,"nodeType":"ArrayTypeName","src":"34648:9:114","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"34647:18:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":61792,"nodeType":"FunctionDefinition","src":"34763:133:114","nodes":[],"body":{"id":61791,"nodeType":"Block","src":"34829:67:114","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61789,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":61781,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61854,"src":"34846:11:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61783,"indexExpression":{"id":61782,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61776,"src":"34858:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34846:19:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61786,"indexExpression":{"expression":{"id":61784,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"34866:3:114","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":61785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34870:6:114","memberName":"sender","nodeType":"MemberAccess","src":"34866:10:114","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34846:31:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":61787,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34878:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"34846:38:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":61788,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34888:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34846:43:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":61780,"id":61790,"nodeType":"Return","src":"34839:50:114"}]},"functionSelector":"e4a3fb74","implemented":true,"kind":"function","modifiers":[],"name":"isCommitted","nameLocation":"34772:11:114","parameters":{"id":61777,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61776,"mutability":"mutable","name":"height","nameLocation":"34792:6:114","nodeType":"VariableDeclaration","scope":61792,"src":"34784:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61775,"name":"uint256","nodeType":"ElementaryTypeName","src":"34784:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34783:16:114"},"returnParameters":{"id":61780,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61779,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61792,"src":"34823:4:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61778,"name":"bool","nodeType":"ElementaryTypeName","src":"34823:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34822:6:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":61809,"nodeType":"FunctionDefinition","src":"34902:180:114","nodes":[],"body":{"id":61808,"nodeType":"Block","src":"34972:110:114","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":61806,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":61799,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61900,"src":"34989:33:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":61801,"indexExpression":{"id":61800,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61902,"src":"35023:31:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34989:66:114","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$61843_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":61803,"indexExpression":{"id":61802,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":61794,"src":"35056:6:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34989:74:114","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$61843_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":61804,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35064:6:114","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":61838,"src":"34989:81:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":61805,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35074:1:114","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34989:86:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":61798,"id":61807,"nodeType":"Return","src":"34982:93:114"}]},"functionSelector":"ec23ec2e","implemented":true,"kind":"function","modifiers":[],"name":"isPostconfirmed","nameLocation":"34911:15:114","parameters":{"id":61795,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61794,"mutability":"mutable","name":"height","nameLocation":"34935:6:114","nodeType":"VariableDeclaration","scope":61809,"src":"34927:14:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":61793,"name":"uint256","nodeType":"ElementaryTypeName","src":"34927:7:114","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34926:16:114"},"returnParameters":{"id":61798,"nodeType":"ParameterList","parameters":[{"constant":false,"id":61797,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":61809,"src":"34966:4:114","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":61796,"name":"bool","nodeType":"ElementaryTypeName","src":"34966:4:114","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34965:6:114"},"scope":61810,"stateMutability":"view","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":60045,"name":"Initializable","nameLocations":["561:13:114"],"nodeType":"IdentifierPath","referencedDeclaration":39746,"src":"561:13:114"},"id":60046,"nodeType":"InheritanceSpecifier","src":"561:13:114"},{"baseName":{"id":60047,"name":"BaseSettlement","nameLocations":["576:14:114"],"nodeType":"IdentifierPath","referencedDeclaration":62077,"src":"576:14:114"},"id":60048,"nodeType":"InheritanceSpecifier","src":"576:14:114"},{"baseName":{"id":60049,"name":"PCPStorage","nameLocations":["592:10:114"],"nodeType":"IdentifierPath","referencedDeclaration":61923,"src":"592:10:114"},"id":60050,"nodeType":"InheritanceSpecifier","src":"592:10:114"},{"baseName":{"id":60051,"name":"IPCP","nameLocations":["604:4:114"],"nodeType":"IdentifierPath","referencedDeclaration":62022,"src":"604:4:114"},"id":60052,"nodeType":"InheritanceSpecifier","src":"604:4:114"}],"canonicalName":"PCP","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[61810,62022,61923,62077,39928,42948,39478,41255,47988,41634,40760,39746],"name":"PCP","nameLocation":"554:3:114","scope":61811,"usedErrors":[39495,39498,39773,39778,41561,41564,43143,43156,44429,45732,60065,60068,60071,60074,61945,61947],"usedEvents":[39503,41573,41582,41591,42896,61935,61943]}],"license":"UNLICENSED"},"id":114} \ No newline at end of file +{"abi":[{"type":"function","name":"COMMITMENT_ADMIN","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"DEFAULT_ADMIN_ROLE","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"TRUSTED_ATTESTER","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"UPGRADE_INTERFACE_VERSION","inputs":[],"outputs":[{"name":"","type":"string","internalType":"string"}],"stateMutability":"view"},{"type":"function","name":"acceptGenesisCeremony","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"attesterRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"points","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"batchGrantCommitmentAdmin","inputs":[{"name":"accounts","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"batchGrantTrustedAttester","inputs":[{"name":"attesters","type":"address[]","internalType":"address[]"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"commitmentFirstSeenAt","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"timestamp","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"commitmentStake","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"commitement","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"stake","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"commitments","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"createSuperBlockCommitment","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"pure"},{"type":"function","name":"forceLatestCommitment","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"getAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getAttesterStakeForAcceptingEpoch","inputs":[{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCommitmentByAttester","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"getCommitmentFirstSeenAt","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getCustodianStakeForAcceptingEpoch","inputs":[{"name":"custodian","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getEpochStartTime","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getLastPostconfirmedSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getMaxTolerableSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getMinCommitmentAgeForPostconfirmation","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getNextAcceptingEpochWithException","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmedCommitment","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmer","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerPrivilegeDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"postconfirmer","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPostconfirmerStartTime","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getPresentEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getRoleAdmin","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"}],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"getStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakeForAcceptingEpoch","inputs":[{"name":"custodian","type":"address","internalType":"address"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getStakedAttestersForAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"address[]","internalType":"address[]"}],"stateMutability":"view"},{"type":"function","name":"getSuperBlockHeightAssignedEpoch","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStake","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getTotalStakeForAcceptingEpoch","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"getValidatorCommitmentAtSuperBlockHeight","inputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"attester","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"stateMutability":"view"},{"type":"function","name":"grantCommitmentAdmin","inputs":[{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"grantTrustedAttester","inputs":[{"name":"attester","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"hasRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"initialize","inputs":[{"name":"_stakingContract","type":"address","internalType":"contract IMovementStaking"},{"name":"_lastPostconfirmedSuperBlockHeight","type":"uint256","internalType":"uint256"},{"name":"_leadingSuperBlockTolerance","type":"uint256","internalType":"uint256"},{"name":"_epochDuration","type":"uint256","internalType":"uint256"},{"name":"_custodians","type":"address[]","internalType":"address[]"},{"name":"_postconfirmerDuration","type":"uint256","internalType":"uint256"},{"name":"_moveTokenAddress","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"initialize","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"isCommitted","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isPostconfirmed","inputs":[{"name":"height","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"isWithinPostconfirmerPrivilegeDuration","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"lastPostconfirmedSuperBlockHeight","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"leadingSuperBlockTolerance","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"minCommitmentAgeForPostconfirmation","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"moveTokenAddress","inputs":[],"outputs":[{"name":"","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"openAttestationEnabled","inputs":[],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"postconfirmSuperBlocksAndRollover","inputs":[],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"postconfirmedAtL1BlockHeight","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockHeight","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedAtL1BlockHeightByPostconfirmer","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockHeight","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedAtL1BlockTimestamp","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"L1BlockTimestamp","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedBy","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"attester","type":"address","internalType":"address"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedByPostconfirmer","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedSuperBlocks","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"postconfirmedSuperBlocksVersion","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmerDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmerPrivilegeDuration","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"postconfirmerRewardPoints","inputs":[{"name":"epoch","type":"uint256","internalType":"uint256"},{"name":"postconfirmer","type":"address","internalType":"address"}],"outputs":[{"name":"points","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"proxiableUUID","inputs":[],"outputs":[{"name":"","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"function","name":"renounceRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"callerConfirmation","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"revokeRole","inputs":[{"name":"role","type":"bytes32","internalType":"bytes32"},{"name":"account","type":"address","internalType":"address"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"rewardPerAttestationPoint","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"rewardPerPostconfirmationPoint","inputs":[],"outputs":[{"name":"","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"setAcceptingEpoch","inputs":[{"name":"newEpoch","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setMinCommitmentAgeForPostconfirmation","inputs":[{"name":"_minCommitmentAgeForPostconfirmation","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setOpenAttestationEnabled","inputs":[{"name":"enabled","type":"bool","internalType":"bool"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPostconfirmedCommitmentAtBlockHeight","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPostconfirmerDuration","inputs":[{"name":"_postconfirmerDuration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setPostconfirmerPrivilegeDuration","inputs":[{"name":"_postconfirmerPrivilegeDuration","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRewardPerAttestationPoint","inputs":[{"name":"rewardPerPoint","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"setRewardPerPostconfirmationPoint","inputs":[{"name":"rewardPerPoint","type":"uint256","internalType":"uint256"}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"stakingContract","inputs":[],"outputs":[{"name":"","type":"address","internalType":"contract IMovementStaking"}],"stateMutability":"view"},{"type":"function","name":"submitBatchSuperBlockCommitment","inputs":[{"name":"superBlockCommitments","type":"tuple[]","internalType":"struct PCPStorage.SuperBlockCommitment[]","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"submitSuperBlockCommitment","inputs":[{"name":"superBlockCommitment","type":"tuple","internalType":"struct PCPStorage.SuperBlockCommitment","components":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}]}],"outputs":[],"stateMutability":"nonpayable"},{"type":"function","name":"superBlockHeightAssignedEpoch","inputs":[{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"epoch","type":"uint256","internalType":"uint256"}],"stateMutability":"view"},{"type":"function","name":"supportsInterface","inputs":[{"name":"interfaceId","type":"bytes4","internalType":"bytes4"}],"outputs":[{"name":"","type":"bool","internalType":"bool"}],"stateMutability":"view"},{"type":"function","name":"upgradeToAndCall","inputs":[{"name":"newImplementation","type":"address","internalType":"address"},{"name":"data","type":"bytes","internalType":"bytes"}],"outputs":[],"stateMutability":"payable"},{"type":"function","name":"versionedPostconfirmedSuperBlocks","inputs":[{"name":"","type":"uint256","internalType":"uint256"},{"name":"superBlockHeight","type":"uint256","internalType":"uint256"}],"outputs":[{"name":"height","type":"uint256","internalType":"uint256"},{"name":"commitment","type":"bytes32","internalType":"bytes32"},{"name":"blockId","type":"bytes32","internalType":"bytes32"}],"stateMutability":"view"},{"type":"event","name":"Initialized","inputs":[{"name":"version","type":"uint64","indexed":false,"internalType":"uint64"}],"anonymous":false},{"type":"event","name":"RoleAdminChanged","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"previousAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"newAdminRole","type":"bytes32","indexed":true,"internalType":"bytes32"}],"anonymous":false},{"type":"event","name":"RoleGranted","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"RoleRevoked","inputs":[{"name":"role","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"account","type":"address","indexed":true,"internalType":"address"},{"name":"sender","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"event","name":"SuperBlockCommitmentSubmitted","inputs":[{"name":"blockHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"stateCommitment","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"attesterStake","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"SuperBlockPostconfirmed","inputs":[{"name":"blockHash","type":"bytes32","indexed":true,"internalType":"bytes32"},{"name":"stateCommitment","type":"bytes32","indexed":false,"internalType":"bytes32"},{"name":"height","type":"uint256","indexed":false,"internalType":"uint256"}],"anonymous":false},{"type":"event","name":"Upgraded","inputs":[{"name":"implementation","type":"address","indexed":true,"internalType":"address"}],"anonymous":false},{"type":"error","name":"AccessControlBadConfirmation","inputs":[]},{"type":"error","name":"AccessControlUnauthorizedAccount","inputs":[{"name":"account","type":"address","internalType":"address"},{"name":"neededRole","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"AddressEmptyCode","inputs":[{"name":"target","type":"address","internalType":"address"}]},{"type":"error","name":"AttesterAlreadyCommitted","inputs":[]},{"type":"error","name":"ERC1967InvalidImplementation","inputs":[{"name":"implementation","type":"address","internalType":"address"}]},{"type":"error","name":"ERC1967NonPayable","inputs":[]},{"type":"error","name":"FailedCall","inputs":[]},{"type":"error","name":"InvalidInitialization","inputs":[]},{"type":"error","name":"NotInitializing","inputs":[]},{"type":"error","name":"PostconfirmerDurationTooLong","inputs":[]},{"type":"error","name":"PostconfirmerDurationTooLongForEpoch","inputs":[]},{"type":"error","name":"UUPSUnauthorizedCallContext","inputs":[]},{"type":"error","name":"UUPSUnsupportedProxiableUUID","inputs":[{"name":"slot","type":"bytes32","internalType":"bytes32"}]},{"type":"error","name":"UnacceptableSuperBlockCommitment","inputs":[]},{"type":"error","name":"minCommitmentAgeForPostconfirmationTooLong","inputs":[]},{"type":"error","name":"postconfirmerPrivilegeDurationTooLong","inputs":[]}],"bytecode":{"object":"0x60a0604052306080523480156012575f80fd5b50608051613a806100395f395f81816125e30152818161260c015261274d0152613a805ff3fe6080604052600436106104b0575f3560e01c80636c713af81161026d578063bff92c8c1161014a578063e07472ef116100be578063ed8a1d5911610083578063ed8a1d591461102b578063eda67fc41461106c578063ee99205c146110a6578063ef9ae15c146110c4578063f1949add1461092e578063fdafe9ca146110dd575f80fd5b8063e07472ef14610f25578063e4a3fb7414610f5f578063e90d4c0614610f97578063ec18c18614610fdc578063ec23ec2e14610ff1575f80fd5b8063d283392e1161010f578063d283392e14610e52578063d3eef4cc14610e7d578063d440116d14610e92578063d547741f14610eb1578063d783068814610ed0578063da7d28b614610f06575f80fd5b8063bff92c8c14610daa578063c19b406c14610dbf578063cf6772ad14610df5578063d03509ec14610e14578063d2526fef14610e33575f80fd5b806391d14854116101e1578063a217fddf116101a6578063a217fddf14610ce7578063aa0d6fcd14610cfa578063ab208ebd14610d1b578063ad3cb1cc14610d2f578063ba26513e14610d6c578063bb04bd2f14610d8b575f80fd5b806391d1485414610c5657806392a2ebf314610c75578063943b79e214610c89578063949d7c2a14610c9d578063a207fe2f14610cbc575f80fd5b806380e460f01161023257806380e460f014610b905780638129fc1c14610bb057806381df174614610bc457806385e6b8c214610be357806390879f6414610c0e57806391807e4f14610c22575f80fd5b80636c713af814610ad15780636f86529414610ae55780637aa81c2a14610b1b5780637ac561c814610b3a5780637cfd820514610b65575f80fd5b806336568abe1161039b578063556d97c81161030f5780635d3ea8f1116102d45780635d3ea8f114610a145780635db916ab14610a285780635f4d642e14610a485780635f83c7d514610a5c578063622e361614610a715780636978ab1214610a90575f80fd5b8063556d97c81461092e57806355b8119d146109ad57806357342282146109c257806358376877146109e157806359b9959714610a00575f80fd5b806345367f231161036057806345367f2314610895578063491d0467146108b45780634b47d955146108d35780634ceb2e66146108f25780634f1ef2861461090757806352d1902d1461091a575f80fd5b806336568abe146107cf5780633752d675146107ee57806337d7f58f146108025780633ba18005146108165780633d64592714610876575f80fd5b80631241ebe311610432578063248a9ca3116103f7578063248a9ca3146106c357806326624e37146106e25780632bfd11d6146106f65780632f2ff15d146107655780633119edd41461078457806335ea1c63146107a3575f80fd5b80631241ebe31461062757806314e380261461063b5780631db859c71461064f5780631de38fe1146106855780631f83e2a3146106a4575f80fd5b806308c7050f1161047857806308c7050f1461058a5780630cf6b6bd146105ab5780630d39f7f0146105ca5780630e74b609146105e9578063107e21ca14610608575f80fd5b806301ffc9a7146104b4578063026583d7146104e8578063028e490a1461052957806303d3f7fd1461054757806308750a321461055c575b5f80fd5b3480156104bf575f80fd5b506104d36104ce366004613286565b6110f2565b60405190151581526020015b60405180910390f35b3480156104f3575f80fd5b506105076105023660046132ad565b611128565b60408051825181526020808401519082015291810151908201526060016104df565b348015610534575f80fd5b506006545b6040519081526020016104df565b348015610552575f80fd5b5061053960025481565b348015610567575f80fd5b506104d36105763660046132d6565b600c6020525f908152604090205460ff1681565b348015610595575f80fd5b506105a96105a4366004613387565b611161565b005b3480156105b6575f80fd5b506104d36105c5366004613387565b6111ee565b3480156105d5575f80fd5b506105a96105e43660046132d6565b61126d565b3480156105f4575f80fd5b506105a9610603366004613387565b61128a565b348015610613575f80fd5b506105a961062236600461344a565b6112d3565b348015610632575f80fd5b50600454610539565b348015610646575f80fd5b506105396114b3565b34801561065a575f80fd5b506105396106693660046134ce565b601560209081525f928352604080842090915290825290205481565b348015610690575f80fd5b5061053961069f3660046134ce565b6114c4565b3480156106af575f80fd5b506105a96106be3660046132d6565b61153d565b3480156106ce575f80fd5b506105396106dd3660046132d6565b6115ef565b3480156106ed575f80fd5b506105a961160f565b348015610701575f80fd5b506105076107103660046132d6565b60408051606080820183525f8083526020808401829052928401819052601354815260128352838120948152938252928290208251938401835280548452600181015491840191909152600201549082015290565b348015610770575f80fd5b506105a961077f3660046134ce565b61161a565b34801561078f575f80fd5b506105a961079e366004613387565b61163c565b3480156107ae575f80fd5b506107b7611708565b6040516001600160a01b0390911681526020016104df565b3480156107da575f80fd5b506105a96107e93660046134ce565b611807565b3480156107f9575f80fd5b5061053961183f565b34801561080d575f80fd5b506105396118aa565b348015610821575f80fd5b5061085b6108303660046134fc565b601260209081525f928352604080842090915290825290208054600182015460029092015490919083565b604080519384526020840192909252908201526060016104df565b348015610881575f80fd5b506105a96108903660046132d6565b6118da565b3480156108a0575f80fd5b506105396108af3660046132d6565b61198e565b3480156108bf575f80fd5b506105396108ce36600461351c565b611a47565b3480156108de575f80fd5b506105a96108ed366004613537565b611a59565b3480156108fd575f80fd5b5061053960045481565b6105a9610915366004613568565b611ac6565b348015610925575f80fd5b50610539611ae1565b348015610939575f80fd5b506105076109483660046134ce565b604080516060810182525f8082526020820181905291810191909152505f9182526008602090815260408084206001600160a01b0393909316845291815291819020815160608101835281548152600182015493810193909352600201549082015290565b3480156109b8575f80fd5b5061053960065481565b3480156109cd575f80fd5b506105a96109dc3660046132d6565b611afc565b3480156109ec575f80fd5b506001546107b7906001600160a01b031681565b348015610a0b575f80fd5b50600354610539565b348015610a1f575f80fd5b50610539611b19565b348015610a33575f80fd5b506105395f80516020613a2b83398151915281565b348015610a53575f80fd5b50610539611b49565b348015610a67575f80fd5b5061053960165481565b348015610a7c575f80fd5b506105a9610a8b36600461360d565b611be2565b348015610a9b575f80fd5b50610539610aaa3660046134ce565b5f9182526014602090815260408084206001600160a01b0393909316845291905290205490565b348015610adc575f80fd5b50610539611c57565b348015610af0575f80fd5b50610539610aff3660046134ce565b601460209081525f928352604080842090915290825290205481565b348015610b26575f80fd5b50610539610b353660046136a7565b611c87565b348015610b45575f80fd5b50610539610b543660046132d6565b600d6020525f908152604090205481565b348015610b70575f80fd5b50610539610b7f3660046132d6565b600f6020525f908152604090205481565b348015610b9b575f80fd5b506105395f805160206139cb83398151915281565b348015610bbb575f80fd5b506105a9611d10565b348015610bcf575f80fd5b506105a9610bde36600461351c565b611e1a565b348015610bee575f80fd5b50610539610bfd3660046132d6565b60076020525f908152604090205481565b348015610c19575f80fd5b50610539611e48565b348015610c2d575f80fd5b506107b7610c3c3660046132d6565b600b6020525f90815260409020546001600160a01b031681565b348015610c61575f80fd5b506104d3610c703660046134ce565b611ecc565b348015610c80575f80fd5b506105a9611f02565b348015610c94575f80fd5b50610539611fb7565b348015610ca8575f80fd5b506105a9610cb736600461351c565b611fc8565b348015610cc7575f80fd5b50610539610cd63660046132d6565b600e6020525f908152604090205481565b348015610cf2575f80fd5b506105395f81565b348015610d05575f80fd5b50610d0e612005565b6040516104df9190613729565b348015610d26575f80fd5b50600554610539565b348015610d3a575f80fd5b50610d5f604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516104df919061373b565b348015610d77575f80fd5b50610539610d863660046134ce565b612071565b348015610d96575f80fd5b50610539610da5366004613770565b61212c565b348015610db5575f80fd5b5061053960055481565b348015610dca575f80fd5b50610539610dd93660046134fc565b600960209081525f928352604080842090915290825290205481565b348015610e00575f80fd5b506105a9610e0f366004613537565b61213f565b348015610e1f575f80fd5b506105a9610e2e3660046132d6565b61218c565b348015610e3e575f80fd5b506105a9610e4d36600461379c565b612205565b348015610e5d575f80fd5b50610539610e6c3660046132d6565b5f9081526007602052604090205490565b348015610e88575f80fd5b5061053960175481565b348015610e9d575f80fd5b50610539610eac36600461351c565b612230565b348015610ebc575f80fd5b506105a9610ecb3660046134ce565b612242565b348015610edb575f80fd5b50610539610eea3660046134fc565b600a60209081525f928352604080842090915290825290205481565b348015610f11575f80fd5b506105a9610f203660046132d6565b61225e565b348015610f30575f80fd5b50610539610f3f366004613387565b80515f908152600a60209081526040808320938201518352929052205490565b348015610f6a575f80fd5b506104d3610f793660046132d6565b5f908152600860209081526040808320338452909152902054151590565b348015610fa2575f80fd5b5061085b610fb13660046134ce565b600860209081525f928352604080842090915290825290208054600182015460029092015490919083565b348015610fe7575f80fd5b5061053960135481565b348015610ffc575f80fd5b506104d361100b3660046132d6565b6013545f9081526012602090815260408083209383529290522054151590565b348015611036575f80fd5b506105396110453660046134ce565b5f9182526015602090815260408084206001600160a01b0393909316845291905290205490565b348015611077575f80fd5b5061085b6110863660046132d6565b60106020525f908152604090208054600182015460029092015490919083565b3480156110b1575f80fd5b505f546107b7906001600160a01b031681565b3480156110cf575f80fd5b506011546104d39060ff1681565b3480156110e8575f80fd5b5061053960035481565b5f6001600160e01b03198216637965db0b60e01b148061112257506301ffc9a760e01b6001600160e01b03198316145b92915050565b60408051606080820183525f808352602080840182905292840152825190810183528581529081018490529081018290525b9392505050565b6111785f805160206139cb83398151915233611ecc565b6111e25760405162461bcd60e51b815260206004820152603060248201527f464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d4960448201526f544d454e545f41444d494e5f4f4e4c5960801b60648201526084015b60405180910390fd5b6111eb8161163c565b50565b80515f908152600a602090815260408083208285015184529091528120545f0361121957505f919050565b4261122360065490565b60055484515f908152600a6020908152604080832082890151845290915290205461124e91906137cf565b61125891906137cf565b101561126557505f919050565b506001919050565b5f805160206139cb83398151915261128481612310565b50601655565b60115460ff16806112ad57506112ad5f80516020613a2b83398151915233611ecc565b6112c95760405162461bcd60e51b81526004016111d9906137e2565b6111eb338261231a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156113175750825b90505f826001600160401b031660011480156113325750303b155b905081158015611340575080155b1561135e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561138857845460ff60401b1916600160401b1785555b61139061248e565b5f80546001600160a01b0319166001600160a01b038e1690811790915560028b905560038c9055604051631a6e609f60e31b815263d37304f8906113da908c908c90600401613824565b5f604051808303815f87803b1580156113f1575f80fd5b505af1158015611403573d5f803e3d5ffd5b5050505061141033611fc8565b61141933611e1a565b6004879055600180546001600160a01b0319166001600160a01b038816179055611444600a8a613850565b600555611452600a8a613850565b6006556001601681905560175583156114a557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b5f6114bf6108af611c57565b905090565b5f8054604051630ce52af560e01b8152306004820152602481018590526001600160a01b03848116604483015290911690630ce52af590606401602060405180830381865afa158015611519573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115a9190613863565b5f805160206139cb83398151915261155481612310565b6006545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa15801561159c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115c09190613863565b6115ca919061387a565b82106115e95760405163a7075e5f60e01b815260040160405180910390fd5b50600555565b5f9081525f80516020613a0b833981519152602052604090206001015490565b611618336124a0565b565b611623826115ef565b61162c81612310565b61163683836124be565b50505050565b6116535f805160206139cb83398151915233611ecc565b6116d35760405162461bcd60e51b8152602060048201526044602482018190527f5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e908201527f545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f6064820152634f4e4c5960e01b608482015260a4016111d9565b6013545f9081526012602090815260408083208451845282529182902083518155908301516001820155910151600290910155565b5f80611712611b49565b90505f61171d611e48565b5f8054604051634234a47960e01b815230600482015292935090916001600160a01b0390911690634234a479906024015f60405180830381865afa158015611767573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261178e919081019061388d565b905080515f036117a1575f935050505090565b5f815184846040516020016117c0929190918252602082015260400190565b604051602081830303815290604052805190602001205f1c6117e2919061391c565b90508181815181106117f6576117f661392f565b602002602001015194505050505090565b6001600160a01b03811633146118305760405163334bd91960e11b815260040160405180910390fd5b61183a828261255f565b505050565b5f8054604051631dc7f3f160e21b81523060048201526001600160a01b039091169063771fcfc4906024015b602060405180830381865afa158015611886573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114bf9190613863565b5f805460405163d980b40d60e01b81523060048201526001600160a01b039091169063d980b40d9060240161186b565b5f805160206139cb8339815191526118f181612310565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015611937573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195b9190613863565b905080611969846002613943565b10611987576040516360bc402f60e01b815260040160405180910390fd5b5050600455565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa1580156119d3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119fa919081019061388d565b90505f805b8251811015611a3f57611a2b85848381518110611a1e57611a1e61392f565b60200260200101516114c4565b611a3590836137cf565b91506001016119ff565b509392505050565b5f611122611a53611c57565b83612071565b611a635f33611ecc565b611a7f5760405162461bcd60e51b81526004016111d99061395a565b5f5b8151811015611ac257611aba5f805160206139cb833981519152838381518110611aad57611aad61392f565b602002602001015161161a565b600101611a81565b5050565b611ace6125d8565b611ad78261267c565b611ac28282612686565b5f611aea612742565b505f805160206139eb83398151915290565b5f805160206139cb833981519152611b1381612310565b50601755565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c5343599060240161186b565b5f8054604051635c53435960e01b8152306004820152429183916001600160a01b0390911690635c53435990602401602060405180830381865afa158015611b93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bb79190613863565b611bc1908361391c565b905060045481611bd1919061391c565b611bdb908261387a565b9250505090565b60115460ff1680611c055750611c055f80516020613a2b83398151915233611ecc565b611c215760405162461bcd60e51b81526004016111d9906137e2565b5f5b8151811015611ac257611c4f33838381518110611c4257611c4261392f565b602002602001015161231a565b600101611c23565b5f80546040516322fceb7560e01b81523060048201526001600160a01b03909116906322fceb759060240161186b565b5f80546040516324f7ee1760e21b8152306004820152602481018690526001600160a01b0385811660448301528481166064830152909116906393dfb85c90608401602060405180830381865afa158015611ce4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d089190613863565b949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015611d545750825b90505f826001600160401b03166001148015611d6f5750303b155b905081158015611d7d575080155b15611d9b5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611dc557845460ff60401b1916600160401b1785555b611dcd61278b565b8315611e1357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f805160206139cb833981519152611e3181612310565b611ac25f80516020613a2b8339815191528361161a565b5f8054604051635c53435960e01b815230600482015242916001600160a01b031690635c53435990602401602060405180830381865afa158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb29190613863565b611ebc908261391c565b611ec6908261387a565b91505090565b5f9182525f80516020613a0b833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611f0c5f33611ecc565b611f665760405162461bcd60e51b815260206004820152602560248201527f4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e6044820152645f4f4e4c5960d81b60648201526084016111d9565b5f8054604080516392a2ebf360e01b815290516001600160a01b03909216926392a2ebf39260048084019382900301818387803b158015611fa5575f80fd5b505af1158015611636573d5f803e3d5ffd5b5f6002546003546114bf91906137cf565b611fd25f33611ecc565b611fee5760405162461bcd60e51b81526004016111d99061395a565b6111eb5f805160206139cb8339815191528261161a565b5f54604051634234a47960e01b81523060048201526060916001600160a01b031690634234a479906024015f60405180830381865afa15801561204a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114bf919081019061388d565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa1580156120b6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120dd919081019061388d565b90505f805b82518110156121235761210f868483815181106121015761210161392f565b602002602001015187611c87565b61211990836137cf565b91506001016120e2565b50949350505050565b5f61115a612138611c57565b8484611c87565b5f805160206139cb83398151915261215681612310565b5f5b825181101561183a576121845f80516020613a2b833981519152848381518110611aad57611aad61392f565b600101612158565b5f805160206139cb8339815191526121a381612310565b5f54604051631dc8b94960e01b8152306004820152602481018490526001600160a01b0390911690631dc8b949906044015f604051808303815f87803b1580156121eb575f80fd5b505af11580156121fd573d5f803e3d5ffd5b505050505050565b5f805160206139cb83398151915261221c81612310565b506011805460ff1916911515919091179055565b5f61112261223c611c57565b836114c4565b61224b826115ef565b61225481612310565b611636838361255f565b5f805160206139cb83398151915261227581612310565b6005545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa1580156122bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122e19190613863565b6122eb919061387a565b821061230a57604051633c9f1a5360e01b815260040160405180910390fd5b50600655565b6111eb813361279b565b80515f9081526008602090815260408083206001600160a01b03861684529091529020541561235c57604051630ae09ad960e41b815260040160405180910390fd5b805160025460035461236e91906137cf565b101561238d57604051630ae09ad960e41b815260040160405180910390fd5b80515f9081526007602052604081205490036123bc576123ab6118aa565b81515f908152600760205260409020555b80515f9081526008602090815260408083206001600160a01b0386168452825291829020835180825591840151600182018190559284015160029091015561240491426127d4565b5f61240e83611a47565b82515f9081526009602090815260408083208287015184529091528120805492935083929091906124409084906137cf565b9091555050604080830151602080850151835190815290810184905290917fa8445a6b8a16633ad62fbc0954848ec55c4d5323d90b9745dbda4121ec5ce12b910160405180910390a2505050565b61249661281e565b6111eb5f336124be565b6124b760035460016124b291906137cf565b612867565b6124a05750565b5f5f80516020613a0b8339815191526124d78484611ecc565b612556575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561250c3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050611122565b5f915050611122565b5f5f80516020613a0b8339815191526125788484611ecc565b15612556575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050611122565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061265e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126525f805160206139eb833981519152546001600160a01b031690565b6001600160a01b031614155b156116185760405163703e46dd60e11b815260040160405180910390fd5b5f611ac281612310565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156126e0575060408051601f3d908101601f191682019092526126dd91810190613863565b60015b61270857604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111d9565b5f805160206139eb833981519152811461273857604051632a87526960e21b8152600481018290526024016111d9565b61183a8383612ad0565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116185760405163703e46dd60e11b815260040160405180910390fd5b61279361281e565b61161861248e565b6127a58282611ecc565b611ac25760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111d9565b5f838152600a60209081526040808320858452909152902054156127f757505050565b805f0361280357505050565b5f928352600a60209081526040808520938552929052912055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661161857604051631afcd79f60e31b815260040160405180910390fd5b5f8181526007602052604081205460035415612933575f60078161288c60018761387a565b81526020019081526020015f2054905080821015612931575f6128ad612005565b90505f5b815181101561292b5760085f8781526020019081526020015f205f8383815181106128de576128de61392f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f01545f14612923575f86815260076020526040902083905561292b565b6001016128b1565b50819250505b505b8061293c611c57565b101561294f5761294a612b25565b612933565b5f600361295b8361198e565b612966906002613943565b6129709190613850565b61297b9060016137cf565b90505f612986612005565b90505f805b8251811015612a90575f8382815181106129a7576129a761392f565b6020908102919091018101515f8a81526008835260408082206001600160a01b03841683528452908190208151606081018352815480825260018301549582019590955260029091015491810191909152909250908914612a09575050612a88565b80515f908152600960209081526040808320828501518452909152902054868110612a845781515f908152600a60209081526040808320828601518452909152902054600554612a5990826137cf565b421015612a695750505050612a90565b612a738333612e65565b5060019a9950505050505050505050565b5050505b60010161298b565b5080158015612aac5750612aa2611c57565b612aaa6118aa565b115b15612ac557612ab9612b25565b50600195945050505050565b505f95945050505050565b612ad98261310d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612b1d5761183a8282613170565b611ac26131e2565b5f612b2e611c57565b90505f612b39612005565b90505f5b8151811015612e25575f83815260146020526040812083518290859085908110612b6957612b6961392f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612cb8575f612bba838381518110612bad57612bad61392f565b6020026020010151611a47565b60165460145f8781526020019081526020015f205f868681518110612be157612be161392f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612c139190613943565b612c1d9190613943565b5f5484519192506001600160a01b031690635e00bf4690859085908110612c4657612c4661392f565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612ca0575f80fd5b505af1158015612cb2573d5f803e3d5ffd5b50505050505b5f83815260156020526040812083518290859085908110612cdb57612cdb61392f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612e1d575f612d1f838381518110612bad57612bad61392f565b60175460155f8781526020019081526020015f205f868681518110612d4657612d4661392f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612d789190613943565b612d829190613943565b5f5484519192506001600160a01b031690635e00bf4690859085908110612dab57612dab61392f565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612e05575f80fd5b505af1158015612e17573d5f803e3d5ffd5b50505050505b600101612b3d565b505f805460408051632a21edc760e21b815290516001600160a01b039092169263a887b71c9260048084019382900301818387803b1580156121eb575f80fd5b5f612e6e611c57565b83515f908152600760205260409020549091508114612ea057604051631f2d18b160e31b815260040160405180910390fd5b8251612eae9060019061387a565b60035414612ecf57604051631f2d18b160e31b815260040160405180910390fd5b5f612ed8612005565b90505f5b8151811015612faa57846020015160085f875f015181526020019081526020015f205f848481518110612f1157612f1161392f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206001015403612fa25760145f8481526020019081526020015f205f838381518110612f6557612f6561392f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f815480929190612f9c9061399c565b91905055505b600101612edc565b50612fb4846111ee565b612ff5575f8281526015602090815260408083206001600160a01b03871684529091528120805460019290612fea9084906137cf565b9091555061304d9050565b826001600160a01b0316613007611708565b6001600160a01b03160361304d575f8281526015602090815260408083206001600160a01b038716845290915281208054600192906130479084906137cf565b90915550505b6013545f90815260126020908152604080832087518452825280832087518082558884018051600184015589840180516002909401939093556003829055908552600b845282852080546001600160a01b0319166001600160a01b038a1617905588518552600d845282852043905588518552600e84529382902042905551925187518251918252928101929092527fc28fbeddd1d6ba9496d1b91564f9aa2bc4dffed78aae631bbc6ef67296ad3c3c910160405180910390a250505050565b806001600160a01b03163b5f0361314257604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111d9565b5f805160206139eb83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b03168460405161318c91906139b4565b5f60405180830381855af49150503d805f81146131c4576040519150601f19603f3d011682016040523d82523d5f602084013e6131c9565b606091505b50915091506131d9858383613201565b95945050505050565b34156116185760405163b398979f60e01b815260040160405180910390fd5b606082613216576132118261325d565b61115a565b815115801561322d57506001600160a01b0384163b155b1561325657604051639996b31560e01b81526001600160a01b03851660048201526024016111d9565b508061115a565b80511561326d5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215613296575f80fd5b81356001600160e01b03198116811461115a575f80fd5b5f805f606084860312156132bf575f80fd5b505081359360208301359350604090920135919050565b5f602082840312156132e6575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613329576133296132ed565b604052919050565b5f60608284031215613341575f80fd5b604051606081016001600160401b0381118282101715613363576133636132ed565b60409081528335825260208085013590830152928301359281019290925250919050565b5f60608284031215613397575f80fd5b61115a8383613331565b6001600160a01b03811681146111eb575f80fd5b5f6001600160401b038211156133cd576133cd6132ed565b5060051b60200190565b5f82601f8301126133e6575f80fd5b81356133f96133f4826133b5565b613301565b8082825260208201915060208360051b86010192508583111561341a575f80fd5b602085015b83811015613440578035613432816133a1565b83526020928301920161341f565b5095945050505050565b5f805f805f805f60e0888a031215613460575f80fd5b873561346b816133a1565b965060208801359550604088013594506060880135935060808801356001600160401b0381111561349a575f80fd5b6134a68a828b016133d7565b93505060a0880135915060c08801356134be816133a1565b8091505092959891949750929550565b5f80604083850312156134df575f80fd5b8235915060208301356134f1816133a1565b809150509250929050565b5f806040838503121561350d575f80fd5b50508035926020909101359150565b5f6020828403121561352c575f80fd5b813561115a816133a1565b5f60208284031215613547575f80fd5b81356001600160401b0381111561355c575f80fd5b611d08848285016133d7565b5f8060408385031215613579575f80fd5b8235613584816133a1565b915060208301356001600160401b0381111561359e575f80fd5b8301601f810185136135ae575f80fd5b80356001600160401b038111156135c7576135c76132ed565b6135da601f8201601f1916602001613301565b8181528660208385010111156135ee575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f6020828403121561361d575f80fd5b81356001600160401b03811115613632575f80fd5b8201601f81018413613642575f80fd5b80356136506133f4826133b5565b80828252602082019150602060608402850101925086831115613671575f80fd5b6020840193505b8284101561369d5761368a8785613331565b8252602082019150606084019350613678565b9695505050505050565b5f805f606084860312156136b9575f80fd5b8335925060208401356136cb816133a1565b915060408401356136db816133a1565b809150509250925092565b5f8151808452602084019350602083015f5b8281101561371f5781516001600160a01b03168652602095860195909101906001016136f8565b5093949350505050565b602081525f61115a60208301846136e6565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215613781575f80fd5b823561378c816133a1565b915060208301356134f1816133a1565b5f602082840312156137ac575f80fd5b8135801515811461115a575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115611122576111226137bb565b60208082526022908201527f554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d45604082015261139560f21b606082015260800190565b828152604060208201525f611d0860408301846136e6565b634e487b7160e01b5f52601260045260245ffd5b5f8261385e5761385e61383c565b500490565b5f60208284031215613873575f80fd5b5051919050565b81810381811115611122576111226137bb565b5f6020828403121561389d575f80fd5b81516001600160401b038111156138b2575f80fd5b8201601f810184136138c2575f80fd5b80516138d06133f4826133b5565b8082825260208201915060208360051b8501019250868311156138f1575f80fd5b6020840193505b8284101561369d57835161390b816133a1565b8252602093840193909101906138f8565b5f8261392a5761392a61383c565b500690565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417611122576111226137bb565b60208082526022908201527f4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e6040820152614c5960f01b606082015260800190565b5f600182016139ad576139ad6137bb565b5060010190565b5f82518060208501845e5f92019182525091905056fedb2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18a264697066735822122001bfe86d56e4a897606f8d5f368223ea57ef6cdc9d172f2374ca3da77409609d64736f6c634300081a0033","sourceMap":"545:34560:110:-:0;;;1171:4:21;1128:48;;545:34560:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","linkReferences":{}},"deployedBytecode":{"object":"0x6080604052600436106104b0575f3560e01c80636c713af81161026d578063bff92c8c1161014a578063e07472ef116100be578063ed8a1d5911610083578063ed8a1d591461102b578063eda67fc41461106c578063ee99205c146110a6578063ef9ae15c146110c4578063f1949add1461092e578063fdafe9ca146110dd575f80fd5b8063e07472ef14610f25578063e4a3fb7414610f5f578063e90d4c0614610f97578063ec18c18614610fdc578063ec23ec2e14610ff1575f80fd5b8063d283392e1161010f578063d283392e14610e52578063d3eef4cc14610e7d578063d440116d14610e92578063d547741f14610eb1578063d783068814610ed0578063da7d28b614610f06575f80fd5b8063bff92c8c14610daa578063c19b406c14610dbf578063cf6772ad14610df5578063d03509ec14610e14578063d2526fef14610e33575f80fd5b806391d14854116101e1578063a217fddf116101a6578063a217fddf14610ce7578063aa0d6fcd14610cfa578063ab208ebd14610d1b578063ad3cb1cc14610d2f578063ba26513e14610d6c578063bb04bd2f14610d8b575f80fd5b806391d1485414610c5657806392a2ebf314610c75578063943b79e214610c89578063949d7c2a14610c9d578063a207fe2f14610cbc575f80fd5b806380e460f01161023257806380e460f014610b905780638129fc1c14610bb057806381df174614610bc457806385e6b8c214610be357806390879f6414610c0e57806391807e4f14610c22575f80fd5b80636c713af814610ad15780636f86529414610ae55780637aa81c2a14610b1b5780637ac561c814610b3a5780637cfd820514610b65575f80fd5b806336568abe1161039b578063556d97c81161030f5780635d3ea8f1116102d45780635d3ea8f114610a145780635db916ab14610a285780635f4d642e14610a485780635f83c7d514610a5c578063622e361614610a715780636978ab1214610a90575f80fd5b8063556d97c81461092e57806355b8119d146109ad57806357342282146109c257806358376877146109e157806359b9959714610a00575f80fd5b806345367f231161036057806345367f2314610895578063491d0467146108b45780634b47d955146108d35780634ceb2e66146108f25780634f1ef2861461090757806352d1902d1461091a575f80fd5b806336568abe146107cf5780633752d675146107ee57806337d7f58f146108025780633ba18005146108165780633d64592714610876575f80fd5b80631241ebe311610432578063248a9ca3116103f7578063248a9ca3146106c357806326624e37146106e25780632bfd11d6146106f65780632f2ff15d146107655780633119edd41461078457806335ea1c63146107a3575f80fd5b80631241ebe31461062757806314e380261461063b5780631db859c71461064f5780631de38fe1146106855780631f83e2a3146106a4575f80fd5b806308c7050f1161047857806308c7050f1461058a5780630cf6b6bd146105ab5780630d39f7f0146105ca5780630e74b609146105e9578063107e21ca14610608575f80fd5b806301ffc9a7146104b4578063026583d7146104e8578063028e490a1461052957806303d3f7fd1461054757806308750a321461055c575b5f80fd5b3480156104bf575f80fd5b506104d36104ce366004613286565b6110f2565b60405190151581526020015b60405180910390f35b3480156104f3575f80fd5b506105076105023660046132ad565b611128565b60408051825181526020808401519082015291810151908201526060016104df565b348015610534575f80fd5b506006545b6040519081526020016104df565b348015610552575f80fd5b5061053960025481565b348015610567575f80fd5b506104d36105763660046132d6565b600c6020525f908152604090205460ff1681565b348015610595575f80fd5b506105a96105a4366004613387565b611161565b005b3480156105b6575f80fd5b506104d36105c5366004613387565b6111ee565b3480156105d5575f80fd5b506105a96105e43660046132d6565b61126d565b3480156105f4575f80fd5b506105a9610603366004613387565b61128a565b348015610613575f80fd5b506105a961062236600461344a565b6112d3565b348015610632575f80fd5b50600454610539565b348015610646575f80fd5b506105396114b3565b34801561065a575f80fd5b506105396106693660046134ce565b601560209081525f928352604080842090915290825290205481565b348015610690575f80fd5b5061053961069f3660046134ce565b6114c4565b3480156106af575f80fd5b506105a96106be3660046132d6565b61153d565b3480156106ce575f80fd5b506105396106dd3660046132d6565b6115ef565b3480156106ed575f80fd5b506105a961160f565b348015610701575f80fd5b506105076107103660046132d6565b60408051606080820183525f8083526020808401829052928401819052601354815260128352838120948152938252928290208251938401835280548452600181015491840191909152600201549082015290565b348015610770575f80fd5b506105a961077f3660046134ce565b61161a565b34801561078f575f80fd5b506105a961079e366004613387565b61163c565b3480156107ae575f80fd5b506107b7611708565b6040516001600160a01b0390911681526020016104df565b3480156107da575f80fd5b506105a96107e93660046134ce565b611807565b3480156107f9575f80fd5b5061053961183f565b34801561080d575f80fd5b506105396118aa565b348015610821575f80fd5b5061085b6108303660046134fc565b601260209081525f928352604080842090915290825290208054600182015460029092015490919083565b604080519384526020840192909252908201526060016104df565b348015610881575f80fd5b506105a96108903660046132d6565b6118da565b3480156108a0575f80fd5b506105396108af3660046132d6565b61198e565b3480156108bf575f80fd5b506105396108ce36600461351c565b611a47565b3480156108de575f80fd5b506105a96108ed366004613537565b611a59565b3480156108fd575f80fd5b5061053960045481565b6105a9610915366004613568565b611ac6565b348015610925575f80fd5b50610539611ae1565b348015610939575f80fd5b506105076109483660046134ce565b604080516060810182525f8082526020820181905291810191909152505f9182526008602090815260408084206001600160a01b0393909316845291815291819020815160608101835281548152600182015493810193909352600201549082015290565b3480156109b8575f80fd5b5061053960065481565b3480156109cd575f80fd5b506105a96109dc3660046132d6565b611afc565b3480156109ec575f80fd5b506001546107b7906001600160a01b031681565b348015610a0b575f80fd5b50600354610539565b348015610a1f575f80fd5b50610539611b19565b348015610a33575f80fd5b506105395f80516020613a2b83398151915281565b348015610a53575f80fd5b50610539611b49565b348015610a67575f80fd5b5061053960165481565b348015610a7c575f80fd5b506105a9610a8b36600461360d565b611be2565b348015610a9b575f80fd5b50610539610aaa3660046134ce565b5f9182526014602090815260408084206001600160a01b0393909316845291905290205490565b348015610adc575f80fd5b50610539611c57565b348015610af0575f80fd5b50610539610aff3660046134ce565b601460209081525f928352604080842090915290825290205481565b348015610b26575f80fd5b50610539610b353660046136a7565b611c87565b348015610b45575f80fd5b50610539610b543660046132d6565b600d6020525f908152604090205481565b348015610b70575f80fd5b50610539610b7f3660046132d6565b600f6020525f908152604090205481565b348015610b9b575f80fd5b506105395f805160206139cb83398151915281565b348015610bbb575f80fd5b506105a9611d10565b348015610bcf575f80fd5b506105a9610bde36600461351c565b611e1a565b348015610bee575f80fd5b50610539610bfd3660046132d6565b60076020525f908152604090205481565b348015610c19575f80fd5b50610539611e48565b348015610c2d575f80fd5b506107b7610c3c3660046132d6565b600b6020525f90815260409020546001600160a01b031681565b348015610c61575f80fd5b506104d3610c703660046134ce565b611ecc565b348015610c80575f80fd5b506105a9611f02565b348015610c94575f80fd5b50610539611fb7565b348015610ca8575f80fd5b506105a9610cb736600461351c565b611fc8565b348015610cc7575f80fd5b50610539610cd63660046132d6565b600e6020525f908152604090205481565b348015610cf2575f80fd5b506105395f81565b348015610d05575f80fd5b50610d0e612005565b6040516104df9190613729565b348015610d26575f80fd5b50600554610539565b348015610d3a575f80fd5b50610d5f604051806040016040528060058152602001640352e302e360dc1b81525081565b6040516104df919061373b565b348015610d77575f80fd5b50610539610d863660046134ce565b612071565b348015610d96575f80fd5b50610539610da5366004613770565b61212c565b348015610db5575f80fd5b5061053960055481565b348015610dca575f80fd5b50610539610dd93660046134fc565b600960209081525f928352604080842090915290825290205481565b348015610e00575f80fd5b506105a9610e0f366004613537565b61213f565b348015610e1f575f80fd5b506105a9610e2e3660046132d6565b61218c565b348015610e3e575f80fd5b506105a9610e4d36600461379c565b612205565b348015610e5d575f80fd5b50610539610e6c3660046132d6565b5f9081526007602052604090205490565b348015610e88575f80fd5b5061053960175481565b348015610e9d575f80fd5b50610539610eac36600461351c565b612230565b348015610ebc575f80fd5b506105a9610ecb3660046134ce565b612242565b348015610edb575f80fd5b50610539610eea3660046134fc565b600a60209081525f928352604080842090915290825290205481565b348015610f11575f80fd5b506105a9610f203660046132d6565b61225e565b348015610f30575f80fd5b50610539610f3f366004613387565b80515f908152600a60209081526040808320938201518352929052205490565b348015610f6a575f80fd5b506104d3610f793660046132d6565b5f908152600860209081526040808320338452909152902054151590565b348015610fa2575f80fd5b5061085b610fb13660046134ce565b600860209081525f928352604080842090915290825290208054600182015460029092015490919083565b348015610fe7575f80fd5b5061053960135481565b348015610ffc575f80fd5b506104d361100b3660046132d6565b6013545f9081526012602090815260408083209383529290522054151590565b348015611036575f80fd5b506105396110453660046134ce565b5f9182526015602090815260408084206001600160a01b0393909316845291905290205490565b348015611077575f80fd5b5061085b6110863660046132d6565b60106020525f908152604090208054600182015460029092015490919083565b3480156110b1575f80fd5b505f546107b7906001600160a01b031681565b3480156110cf575f80fd5b506011546104d39060ff1681565b3480156110e8575f80fd5b5061053960035481565b5f6001600160e01b03198216637965db0b60e01b148061112257506301ffc9a760e01b6001600160e01b03198316145b92915050565b60408051606080820183525f808352602080840182905292840152825190810183528581529081018490529081018290525b9392505050565b6111785f805160206139cb83398151915233611ecc565b6111e25760405162461bcd60e51b815260206004820152603060248201527f464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d4960448201526f544d454e545f41444d494e5f4f4e4c5960801b60648201526084015b60405180910390fd5b6111eb8161163c565b50565b80515f908152600a602090815260408083208285015184529091528120545f0361121957505f919050565b4261122360065490565b60055484515f908152600a6020908152604080832082890151845290915290205461124e91906137cf565b61125891906137cf565b101561126557505f919050565b506001919050565b5f805160206139cb83398151915261128481612310565b50601655565b60115460ff16806112ad57506112ad5f80516020613a2b83398151915233611ecc565b6112c95760405162461bcd60e51b81526004016111d9906137e2565b6111eb338261231a565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f811580156113175750825b90505f826001600160401b031660011480156113325750303b155b905081158015611340575080155b1561135e5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff19166001178555831561138857845460ff60401b1916600160401b1785555b61139061248e565b5f80546001600160a01b0319166001600160a01b038e1690811790915560028b905560038c9055604051631a6e609f60e31b815263d37304f8906113da908c908c90600401613824565b5f604051808303815f87803b1580156113f1575f80fd5b505af1158015611403573d5f803e3d5ffd5b5050505061141033611fc8565b61141933611e1a565b6004879055600180546001600160a01b0319166001600160a01b038816179055611444600a8a613850565b600555611452600a8a613850565b6006556001601681905560175583156114a557845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b505050505050505050505050565b5f6114bf6108af611c57565b905090565b5f8054604051630ce52af560e01b8152306004820152602481018590526001600160a01b03848116604483015290911690630ce52af590606401602060405180830381865afa158015611519573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061115a9190613863565b5f805160206139cb83398151915261155481612310565b6006545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa15801561159c573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906115c09190613863565b6115ca919061387a565b82106115e95760405163a7075e5f60e01b815260040160405180910390fd5b50600555565b5f9081525f80516020613a0b833981519152602052604090206001015490565b611618336124a0565b565b611623826115ef565b61162c81612310565b61163683836124be565b50505050565b6116535f805160206139cb83398151915233611ecc565b6116d35760405162461bcd60e51b8152602060048201526044602482018190527f5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e908201527f545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f6064820152634f4e4c5960e01b608482015260a4016111d9565b6013545f9081526012602090815260408083208451845282529182902083518155908301516001820155910151600290910155565b5f80611712611b49565b90505f61171d611e48565b5f8054604051634234a47960e01b815230600482015292935090916001600160a01b0390911690634234a479906024015f60405180830381865afa158015611767573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f1916820160405261178e919081019061388d565b905080515f036117a1575f935050505090565b5f815184846040516020016117c0929190918252602082015260400190565b604051602081830303815290604052805190602001205f1c6117e2919061391c565b90508181815181106117f6576117f661392f565b602002602001015194505050505090565b6001600160a01b03811633146118305760405163334bd91960e11b815260040160405180910390fd5b61183a828261255f565b505050565b5f8054604051631dc7f3f160e21b81523060048201526001600160a01b039091169063771fcfc4906024015b602060405180830381865afa158015611886573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906114bf9190613863565b5f805460405163d980b40d60e01b81523060048201526001600160a01b039091169063d980b40d9060240161186b565b5f805160206139cb8339815191526118f181612310565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa158015611937573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061195b9190613863565b905080611969846002613943565b10611987576040516360bc402f60e01b815260040160405180910390fd5b5050600455565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa1580156119d3573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526119fa919081019061388d565b90505f805b8251811015611a3f57611a2b85848381518110611a1e57611a1e61392f565b60200260200101516114c4565b611a3590836137cf565b91506001016119ff565b509392505050565b5f611122611a53611c57565b83612071565b611a635f33611ecc565b611a7f5760405162461bcd60e51b81526004016111d99061395a565b5f5b8151811015611ac257611aba5f805160206139cb833981519152838381518110611aad57611aad61392f565b602002602001015161161a565b600101611a81565b5050565b611ace6125d8565b611ad78261267c565b611ac28282612686565b5f611aea612742565b505f805160206139eb83398151915290565b5f805160206139cb833981519152611b1381612310565b50601755565b5f8054604051635c53435960e01b81523060048201526001600160a01b0390911690635c5343599060240161186b565b5f8054604051635c53435960e01b8152306004820152429183916001600160a01b0390911690635c53435990602401602060405180830381865afa158015611b93573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bb79190613863565b611bc1908361391c565b905060045481611bd1919061391c565b611bdb908261387a565b9250505090565b60115460ff1680611c055750611c055f80516020613a2b83398151915233611ecc565b611c215760405162461bcd60e51b81526004016111d9906137e2565b5f5b8151811015611ac257611c4f33838381518110611c4257611c4261392f565b602002602001015161231a565b600101611c23565b5f80546040516322fceb7560e01b81523060048201526001600160a01b03909116906322fceb759060240161186b565b5f80546040516324f7ee1760e21b8152306004820152602481018690526001600160a01b0385811660448301528481166064830152909116906393dfb85c90608401602060405180830381865afa158015611ce4573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611d089190613863565b949350505050565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a008054600160401b810460ff1615906001600160401b03165f81158015611d545750825b90505f826001600160401b03166001148015611d6f5750303b155b905081158015611d7d575080155b15611d9b5760405163f92ee8a960e01b815260040160405180910390fd5b845467ffffffffffffffff191660011785558315611dc557845460ff60401b1916600160401b1785555b611dcd61278b565b8315611e1357845460ff60401b19168555604051600181527fc7f505b2f371ae2175ee4913f4499e1f2633a7b5936321eed1cdaeb6115181d29060200160405180910390a15b5050505050565b5f805160206139cb833981519152611e3181612310565b611ac25f80516020613a2b8339815191528361161a565b5f8054604051635c53435960e01b815230600482015242916001600160a01b031690635c53435990602401602060405180830381865afa158015611e8e573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611eb29190613863565b611ebc908261391c565b611ec6908261387a565b91505090565b5f9182525f80516020613a0b833981519152602090815260408084206001600160a01b0393909316845291905290205460ff1690565b611f0c5f33611ecc565b611f665760405162461bcd60e51b815260206004820152602560248201527f4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e6044820152645f4f4e4c5960d81b60648201526084016111d9565b5f8054604080516392a2ebf360e01b815290516001600160a01b03909216926392a2ebf39260048084019382900301818387803b158015611fa5575f80fd5b505af1158015611636573d5f803e3d5ffd5b5f6002546003546114bf91906137cf565b611fd25f33611ecc565b611fee5760405162461bcd60e51b81526004016111d99061395a565b6111eb5f805160206139cb8339815191528261161a565b5f54604051634234a47960e01b81523060048201526060916001600160a01b031690634234a479906024015f60405180830381865afa15801561204a573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526114bf919081019061388d565b5f805460405163341d5ef560e01b815230600482015282916001600160a01b03169063341d5ef5906024015f60405180830381865afa1580156120b6573d5f803e3d5ffd5b505050506040513d5f823e601f3d908101601f191682016040526120dd919081019061388d565b90505f805b82518110156121235761210f868483815181106121015761210161392f565b602002602001015187611c87565b61211990836137cf565b91506001016120e2565b50949350505050565b5f61115a612138611c57565b8484611c87565b5f805160206139cb83398151915261215681612310565b5f5b825181101561183a576121845f80516020613a2b833981519152848381518110611aad57611aad61392f565b600101612158565b5f805160206139cb8339815191526121a381612310565b5f54604051631dc8b94960e01b8152306004820152602481018490526001600160a01b0390911690631dc8b949906044015f604051808303815f87803b1580156121eb575f80fd5b505af11580156121fd573d5f803e3d5ffd5b505050505050565b5f805160206139cb83398151915261221c81612310565b506011805460ff1916911515919091179055565b5f61112261223c611c57565b836114c4565b61224b826115ef565b61225481612310565b611636838361255f565b5f805160206139cb83398151915261227581612310565b6005545f54604051635c53435960e01b81523060048201526001600160a01b0390911690635c53435990602401602060405180830381865afa1580156122bd573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906122e19190613863565b6122eb919061387a565b821061230a57604051633c9f1a5360e01b815260040160405180910390fd5b50600655565b6111eb813361279b565b80515f9081526008602090815260408083206001600160a01b03861684529091529020541561235c57604051630ae09ad960e41b815260040160405180910390fd5b805160025460035461236e91906137cf565b101561238d57604051630ae09ad960e41b815260040160405180910390fd5b80515f9081526007602052604081205490036123bc576123ab6118aa565b81515f908152600760205260409020555b80515f9081526008602090815260408083206001600160a01b0386168452825291829020835180825591840151600182018190559284015160029091015561240491426127d4565b5f61240e83611a47565b82515f9081526009602090815260408083208287015184529091528120805492935083929091906124409084906137cf565b9091555050604080830151602080850151835190815290810184905290917fa8445a6b8a16633ad62fbc0954848ec55c4d5323d90b9745dbda4121ec5ce12b910160405180910390a2505050565b61249661281e565b6111eb5f336124be565b6124b760035460016124b291906137cf565b612867565b6124a05750565b5f5f80516020613a0b8339815191526124d78484611ecc565b612556575f848152602082815260408083206001600160a01b03871684529091529020805460ff1916600117905561250c3390565b6001600160a01b0316836001600160a01b0316857f2f8788117e7eff1d82e926ec794901d17c78024a50270940304540a733656f0d60405160405180910390a46001915050611122565b5f915050611122565b5f5f80516020613a0b8339815191526125788484611ecc565b15612556575f848152602082815260408083206001600160a01b0387168085529252808320805460ff1916905551339287917ff6391f5c32d9c69d2a47ea670b442974b53935d1edc7fd64eb21e047a839171b9190a46001915050611122565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148061265e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166126525f805160206139eb833981519152546001600160a01b031690565b6001600160a01b031614155b156116185760405163703e46dd60e11b815260040160405180910390fd5b5f611ac281612310565b816001600160a01b03166352d1902d6040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156126e0575060408051601f3d908101601f191682019092526126dd91810190613863565b60015b61270857604051634c9c8ce360e01b81526001600160a01b03831660048201526024016111d9565b5f805160206139eb833981519152811461273857604051632a87526960e21b8152600481018290526024016111d9565b61183a8383612ad0565b306001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016146116185760405163703e46dd60e11b815260040160405180910390fd5b61279361281e565b61161861248e565b6127a58282611ecc565b611ac25760405163e2517d3f60e01b81526001600160a01b0382166004820152602481018390526044016111d9565b5f838152600a60209081526040808320858452909152902054156127f757505050565b805f0361280357505050565b5f928352600a60209081526040808520938552929052912055565b7ff0c57e16840df040f15088dc2f81fe391c3923bec73e23a9662efc9c229c6a0054600160401b900460ff1661161857604051631afcd79f60e31b815260040160405180910390fd5b5f8181526007602052604081205460035415612933575f60078161288c60018761387a565b81526020019081526020015f2054905080821015612931575f6128ad612005565b90505f5b815181101561292b5760085f8781526020019081526020015f205f8383815181106128de576128de61392f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f01545f14612923575f86815260076020526040902083905561292b565b6001016128b1565b50819250505b505b8061293c611c57565b101561294f5761294a612b25565b612933565b5f600361295b8361198e565b612966906002613943565b6129709190613850565b61297b9060016137cf565b90505f612986612005565b90505f805b8251811015612a90575f8382815181106129a7576129a761392f565b6020908102919091018101515f8a81526008835260408082206001600160a01b03841683528452908190208151606081018352815480825260018301549582019590955260029091015491810191909152909250908914612a09575050612a88565b80515f908152600960209081526040808320828501518452909152902054868110612a845781515f908152600a60209081526040808320828601518452909152902054600554612a5990826137cf565b421015612a695750505050612a90565b612a738333612e65565b5060019a9950505050505050505050565b5050505b60010161298b565b5080158015612aac5750612aa2611c57565b612aaa6118aa565b115b15612ac557612ab9612b25565b50600195945050505050565b505f95945050505050565b612ad98261310d565b6040516001600160a01b038316907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b905f90a2805115612b1d5761183a8282613170565b611ac26131e2565b5f612b2e611c57565b90505f612b39612005565b90505f5b8151811015612e25575f83815260146020526040812083518290859085908110612b6957612b6961392f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612cb8575f612bba838381518110612bad57612bad61392f565b6020026020010151611a47565b60165460145f8781526020019081526020015f205f868681518110612be157612be161392f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612c139190613943565b612c1d9190613943565b5f5484519192506001600160a01b031690635e00bf4690859085908110612c4657612c4661392f565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612ca0575f80fd5b505af1158015612cb2573d5f803e3d5ffd5b50505050505b5f83815260156020526040812083518290859085908110612cdb57612cdb61392f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20541115612e1d575f612d1f838381518110612bad57612bad61392f565b60175460155f8781526020019081526020015f205f868681518110612d4657612d4661392f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054612d789190613943565b612d829190613943565b5f5484519192506001600160a01b031690635e00bf4690859085908110612dab57612dab61392f565b60209081029190910101516001546040516001600160e01b031960e085901b1681526001600160a01b03928316600482015260248101869052911660448201526064015f604051808303815f87803b158015612e05575f80fd5b505af1158015612e17573d5f803e3d5ffd5b50505050505b600101612b3d565b505f805460408051632a21edc760e21b815290516001600160a01b039092169263a887b71c9260048084019382900301818387803b1580156121eb575f80fd5b5f612e6e611c57565b83515f908152600760205260409020549091508114612ea057604051631f2d18b160e31b815260040160405180910390fd5b8251612eae9060019061387a565b60035414612ecf57604051631f2d18b160e31b815260040160405180910390fd5b5f612ed8612005565b90505f5b8151811015612faa57846020015160085f875f015181526020019081526020015f205f848481518110612f1157612f1161392f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f206001015403612fa25760145f8481526020019081526020015f205f838381518110612f6557612f6561392f565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205f815480929190612f9c9061399c565b91905055505b600101612edc565b50612fb4846111ee565b612ff5575f8281526015602090815260408083206001600160a01b03871684529091528120805460019290612fea9084906137cf565b9091555061304d9050565b826001600160a01b0316613007611708565b6001600160a01b03160361304d575f8281526015602090815260408083206001600160a01b038716845290915281208054600192906130479084906137cf565b90915550505b6013545f90815260126020908152604080832087518452825280832087518082558884018051600184015589840180516002909401939093556003829055908552600b845282852080546001600160a01b0319166001600160a01b038a1617905588518552600d845282852043905588518552600e84529382902042905551925187518251918252928101929092527fc28fbeddd1d6ba9496d1b91564f9aa2bc4dffed78aae631bbc6ef67296ad3c3c910160405180910390a250505050565b806001600160a01b03163b5f0361314257604051634c9c8ce360e01b81526001600160a01b03821660048201526024016111d9565b5f805160206139eb83398151915280546001600160a01b0319166001600160a01b0392909216919091179055565b60605f80846001600160a01b03168460405161318c91906139b4565b5f60405180830381855af49150503d805f81146131c4576040519150601f19603f3d011682016040523d82523d5f602084013e6131c9565b606091505b50915091506131d9858383613201565b95945050505050565b34156116185760405163b398979f60e01b815260040160405180910390fd5b606082613216576132118261325d565b61115a565b815115801561322d57506001600160a01b0384163b155b1561325657604051639996b31560e01b81526001600160a01b03851660048201526024016111d9565b508061115a565b80511561326d5780518082602001fd5b60405163d6bda27560e01b815260040160405180910390fd5b5f60208284031215613296575f80fd5b81356001600160e01b03198116811461115a575f80fd5b5f805f606084860312156132bf575f80fd5b505081359360208301359350604090920135919050565b5f602082840312156132e6575f80fd5b5035919050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f191681016001600160401b0381118282101715613329576133296132ed565b604052919050565b5f60608284031215613341575f80fd5b604051606081016001600160401b0381118282101715613363576133636132ed565b60409081528335825260208085013590830152928301359281019290925250919050565b5f60608284031215613397575f80fd5b61115a8383613331565b6001600160a01b03811681146111eb575f80fd5b5f6001600160401b038211156133cd576133cd6132ed565b5060051b60200190565b5f82601f8301126133e6575f80fd5b81356133f96133f4826133b5565b613301565b8082825260208201915060208360051b86010192508583111561341a575f80fd5b602085015b83811015613440578035613432816133a1565b83526020928301920161341f565b5095945050505050565b5f805f805f805f60e0888a031215613460575f80fd5b873561346b816133a1565b965060208801359550604088013594506060880135935060808801356001600160401b0381111561349a575f80fd5b6134a68a828b016133d7565b93505060a0880135915060c08801356134be816133a1565b8091505092959891949750929550565b5f80604083850312156134df575f80fd5b8235915060208301356134f1816133a1565b809150509250929050565b5f806040838503121561350d575f80fd5b50508035926020909101359150565b5f6020828403121561352c575f80fd5b813561115a816133a1565b5f60208284031215613547575f80fd5b81356001600160401b0381111561355c575f80fd5b611d08848285016133d7565b5f8060408385031215613579575f80fd5b8235613584816133a1565b915060208301356001600160401b0381111561359e575f80fd5b8301601f810185136135ae575f80fd5b80356001600160401b038111156135c7576135c76132ed565b6135da601f8201601f1916602001613301565b8181528660208385010111156135ee575f80fd5b816020840160208301375f602083830101528093505050509250929050565b5f6020828403121561361d575f80fd5b81356001600160401b03811115613632575f80fd5b8201601f81018413613642575f80fd5b80356136506133f4826133b5565b80828252602082019150602060608402850101925086831115613671575f80fd5b6020840193505b8284101561369d5761368a8785613331565b8252602082019150606084019350613678565b9695505050505050565b5f805f606084860312156136b9575f80fd5b8335925060208401356136cb816133a1565b915060408401356136db816133a1565b809150509250925092565b5f8151808452602084019350602083015f5b8281101561371f5781516001600160a01b03168652602095860195909101906001016136f8565b5093949350505050565b602081525f61115a60208301846136e6565b602081525f82518060208401528060208501604085015e5f604082850101526040601f19601f83011684010191505092915050565b5f8060408385031215613781575f80fd5b823561378c816133a1565b915060208301356134f1816133a1565b5f602082840312156137ac575f80fd5b8135801515811461115a575f80fd5b634e487b7160e01b5f52601160045260245ffd5b80820180821115611122576111226137bb565b60208082526022908201527f554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d45604082015261139560f21b606082015260800190565b828152604060208201525f611d0860408301846136e6565b634e487b7160e01b5f52601260045260245ffd5b5f8261385e5761385e61383c565b500490565b5f60208284031215613873575f80fd5b5051919050565b81810381811115611122576111226137bb565b5f6020828403121561389d575f80fd5b81516001600160401b038111156138b2575f80fd5b8201601f810184136138c2575f80fd5b80516138d06133f4826133b5565b8082825260208201915060208360051b8501019250868311156138f1575f80fd5b6020840193505b8284101561369d57835161390b816133a1565b8252602093840193909101906138f8565b5f8261392a5761392a61383c565b500690565b634e487b7160e01b5f52603260045260245ffd5b8082028115828204841417611122576111226137bb565b60208082526022908201527f4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e6040820152614c5960f01b606082015260800190565b5f600182016139ad576139ad6137bb565b5060010190565b5f82518060208501845e5f92019182525091905056fedb2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc02dd7bc7dec4dceedda775e58dd541e08a116c6c53815c0bd028192f7b626800981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18a264697066735822122001bfe86d56e4a897606f8d5f368223ea57ef6cdc9d172f2374ca3da77409609d64736f6c634300081a0033","sourceMap":"545:34560:110:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3443:202:19;;;;;;;;;;-1:-1:-1;3443:202:19;;;;;:::i;:::-;;:::i;:::-;;;470:14:143;;463:22;445:41;;433:2;418:18;3443:202:19;;;;;;;;11507:242:110;;;;;;;;;;-1:-1:-1;11507:242:110;;;;;:::i;:::-;;:::i;:::-;;;;1210:13:143;;1192:32;;1280:4;1268:17;;;1262:24;1240:20;;;1233:54;1331:17;;;1325:24;1303:20;;;1296:54;1180:2;1165:18;11507:242:110;968:388:143;6474:129:110;;;;;;;;;;-1:-1:-1;6566:30:110;;6474:129;;;1507:25:143;;;1495:2;1480:18;6474:129:110;1361:177:143;1406:41:111;;;;;;;;;;;;;;;;3846:77;;;;;;;;;;-1:-1:-1;3846:77:111;;;;;:::i;:::-;;;;;;;;;;;;;;;;18935:308:110;;;;;;;;;;-1:-1:-1;18935:308:110;;;;;:::i;:::-;;:::i;:::-;;24959:683;;;;;;;;;;-1:-1:-1;24959:683:110;;;;;:::i;:::-;;:::i;33689:155::-;;;;;;;;;;-1:-1:-1;33689:155:110;;;;;:::i;:::-;;:::i;13996:337::-;;;;;;;;;;-1:-1:-1;13996:337:110;;;;;:::i;:::-;;:::i;2789:1624::-;;;;;;;;;;-1:-1:-1;2789:1624:110;;;;;:::i;:::-;;:::i;5413:111::-;;;;;;;;;;-1:-1:-1;5496:21:110;;5413:111;;33525:158;;;;;;;;;;;;;:::i;5318:107:111:-;;;;;;;;;;-1:-1:-1;5318:107:111;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;32361:287:110;;;;;;;;;;-1:-1:-1;32361:287:110;;;;;:::i;:::-;;:::i;7053:533::-;;;;;;;;;;-1:-1:-1;7053:533:110;;;;;:::i;:::-;;:::i;4759:191:19:-;;;;;;;;;;-1:-1:-1;4759:191:19;;;;;:::i;:::-;;:::i;17045:115:110:-;;;;;;;;;;;;;:::i;19249:200::-;;;;;;;;;;-1:-1:-1;19249:200:110;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;19402:31:110;;19368:66;;:33;:66;;;;;:74;;;;;;;;;;19361:81;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19249:200;5246:136:19;;;;;;;;;;-1:-1:-1;5246:136:19;;;;;:::i;:::-;;:::i;18335:405:110:-;;;;;;;;;;-1:-1:-1;18335:405:110;;;;;:::i;:::-;;:::i;9951:929::-;;;;;;;;;;;;;:::i;:::-;;;-1:-1:-1;;;;;6818:32:143;;;6800:51;;6788:2;6773:18;9951:929:110;6654:203:143;6348:245:19;;;;;;;;;;-1:-1:-1;6348:245:19;;;;;:::i;:::-;;:::i;8946:165:110:-;;;;;;;;;;;;;:::i;8574:133::-;;;;;;;;;;;;;:::i;4950:118:111:-;;;;;;;;;;-1:-1:-1;4950:118:111;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7415:25:143;;;7471:2;7456:18;;7449:34;;;;7499:18;;;7492:34;7403:2;7388:18;4950:118:111;7213:319:143;4837:570:110;;;;;;;;;;-1:-1:-1;4837:570:110;;;;;:::i;:::-;;:::i;32654:607::-;;;;;;;;;;-1:-1:-1;32654:607:110;;;;;:::i;:::-;;:::i;32108:176::-;;;;;;;;;;-1:-1:-1;32108:176:110;;;;;:::i;:::-;;:::i;1866:326::-;;;;;;;;;;-1:-1:-1;1866:326:110;;;;;:::i;:::-;;:::i;1978:36:111:-;;;;;;;;;;;;;;;;4161:214:21;;;;;;:::i;:::-;;:::i;3708:134::-;;;;;;;;;;;;;:::i;14774:209:110:-;;;;;;;;;;-1:-1:-1;14774:209:110;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;14947:19:110;;;;:11;:19;;;;;;;;-1:-1:-1;;;;;14947:29:110;;;;;;;;;;;;;14940:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14774:209;2261:45:111;;;;;;;;;;;;;;;;33850:165:110;;;;;;;;;;-1:-1:-1;33850:165:110;;;;;:::i;:::-;;:::i;405:31:111:-;;;;;;;;;;-1:-1:-1;405:31:111;;;;-1:-1:-1;;;;;405:31:111;;;16904:135:110;;;;;;;;;;-1:-1:-1;16999:33:110;;16904:135;;8131:129;;;;;;;;;;;;;:::i;764:72::-;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;764:72:110;;9197:414;;;;;;;;;;;;;:::i;5480:40:111:-;;;;;;;;;;;;;;;;14339:430:110;;;;;;;;;;-1:-1:-1;14339:430:110;;;;;:::i;:::-;;:::i;34093:157::-;;;;;;;;;;-1:-1:-1;34093:157:110;;;;;:::i;:::-;34180:7;34206:27;;;:20;:27;;;;;;;;-1:-1:-1;;;;;34206:37:110;;;;;;;;;;;;;34093:157;8745:131;;;;;;;;;;;;;:::i;5168:97:111:-;;;;;;;;;;-1:-1:-1;5168:97:111;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;30800:311:110;;;;;;;;;;-1:-1:-1;30800:311:110;;;;;:::i;:::-;;:::i;4005:94:111:-;;;;;;;;;;-1:-1:-1;4005:94:111;;;;;:::i;:::-;;;;;;;;;;;;;;4539:109;;;;;;;;;;-1:-1:-1;4539:109:111;;;;;:::i;:::-;;;;;;;;;;;;;;654:72:110;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;654:72:110;;528:89:113;;;;;;;;;;;;;:::i;2198:136:110:-;;;;;;;;;;-1:-1:-1;2198:136:110;;;;;:::i;:::-;;:::i;2880:87:111:-;;;;;;;;;;-1:-1:-1;2880:87:111;;;;;:::i;:::-;;;;;;;;;;;;;;8331:207:110;;;;;;;;;;;;;:::i;3625:76:111:-;;;;;;;;;;-1:-1:-1;3625:76:111;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3625:76:111;;;3732:207:19;;;;;;;;;;-1:-1:-1;3732:207:19;;;;;:::i;:::-;;:::i;4465:195:110:-;;;;;;;;;;;;;:::i;15037:159::-;;;;;;;;;;;;;:::i;1623:237::-;;;;;;;;;;-1:-1:-1;1623:237:110;;;;;:::i;:::-;;:::i;4336:100:111:-;;;;;;;;;;-1:-1:-1;4336:100:111;;;;;:::i;:::-;;;;;;;;;;;;;;2317:49:19;;;;;;;;;;-1:-1:-1;2317:49:19;2362:4;2317:49;;34600:177:110;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;7592:139::-;;;;;;;;;;-1:-1:-1;7689:35:110;;7592:139;;1819:58:21;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1819:58:21;;;;;;;;;;;;:::i;31543:484:110:-;;;;;;;;;;-1:-1:-1;31543:484:110;;;;;:::i;:::-;;:::i;31211:198::-;;;;;;;;;;-1:-1:-1;31211:198:110;;;;;:::i;:::-;;:::i;2106:50:111:-;;;;;;;;;;;;;;;;3248:105;;;;;;;;;;-1:-1:-1;3248:105:111;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;2340:226:110;;;;;;;;;;-1:-1:-1;2340:226:110;;;;;:::i;:::-;;:::i;11026:250::-;;;;;;;;;;-1:-1:-1;11026:250:110;;;;;:::i;:::-;;:::i;7737:132::-;;;;;;;;;;-1:-1:-1;7737:132:110;;;;;:::i;:::-;;:::i;15520:149::-;;;;;;;;;;-1:-1:-1;15520:149:110;;;;;:::i;:::-;15599:7;15625:37;;;:29;:37;;;;;;;15520:149;5580:45:111;;;;;;;;;;;;;;;;33339:180:110;;;;;;;;;;-1:-1:-1;33339:180:110;;;;;:::i;:::-;;:::i;5662:138:19:-;;;;;;;;;;-1:-1:-1;5662:138:19;;;;;:::i;:::-;;:::i;3436:114:111:-;;;;;;;;;;-1:-1:-1;3436:114:111;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;5787:464:110;;;;;;;;;;-1:-1:-1;5787:464:110;;;;;:::i;:::-;;:::i;15875:221::-;;;;;;;;;;-1:-1:-1;15875:221:110;;;;;:::i;:::-;16028:27;;15980:7;16006:50;;;:21;:50;;;;;;;;16057:31;;;;16006:83;;;;;;;;15875:221;34783:133;;;;;;;;;;-1:-1:-1;34783:133:110;;;;;:::i;:::-;34843:4;34866:19;;;:11;:19;;;;;;;;34886:10;34866:31;;;;;;;:38;:43;;;34783:133;3049:105:111;;;;;;;;;;-1:-1:-1;3049:105:111;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5074:46;;;;;;;;;;;;;;;;34922:180:110;;;;;;;;;;-1:-1:-1;34922:180:110;;;;;:::i;:::-;35043:31;;34986:4;35009:66;;;:33;:66;;;;;;;;:74;;;;;;;:81;:86;;;34922:180;34336:177;;;;;;;;;;-1:-1:-1;34336:177:110;;;;;:::i;:::-;34433:7;34459:32;;;:25;:32;;;;;;;;-1:-1:-1;;;;;34459:47:110;;;;;;;;;;;;;34336:177;4718:89:111;;;;;;;;;;-1:-1:-1;4718:89:111;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;261:39;;;;;;;;;;-1:-1:-1;261:39:111;;;;-1:-1:-1;;;;;261:39:111;;;4855:34;;;;;;;;;;-1:-1:-1;4855:34:111;;;;;;;;1598:48;;;;;;;;;;;;;;;;3443:202:19;3528:4;-1:-1:-1;;;;;;3551:47:19;;-1:-1:-1;;;3551:47:19;;:87;;-1:-1:-1;;;;;;;;;;1134:40:27;;;3602:36:19;3544:94;3443:202;-1:-1:-1;;3443:202:19:o;11507:242:110:-;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;11693:49:110;;;;;;;;;;;;;;;;;;;;;;11507:242;;;;;;:::o;18935:308::-;19054:37;-1:-1:-1;;;;;;;;;;;19080:10:110;19054:7;:37::i;:::-;19033:132;;;;-1:-1:-1;;;19033:132:110;;13236:2:143;19033:132:110;;;13218:21:143;13275:2;13255:18;;;13248:30;13314:34;13294:18;;;13287:62;-1:-1:-1;;;13365:18:143;;;13358:46;13421:19;;19033:132:110;;;;;;;;;19175:61;19215:20;19175:39;:61::i;:::-;18935:308;:::o;24959:683::-;16028:27;;25078:4;16006:50;;;:21;:50;;;;;;;;16057:31;;;;16006:83;;;;;;;;25148:1;25098:51;25094:94;;-1:-1:-1;25172:5:110;;24959:683;-1:-1:-1;24959:683:110:o;25094:94::-;25561:15;25510:35;6566:30;;;6474:129;25510:35;7689;;16028:27;;15980:7;16006:50;;;:21;:50;;;;;;;;16057:31;;;;16006:83;;;;;;;;25392:102;;;;:::i;:::-;:153;;;;:::i;:::-;:184;25388:227;;;-1:-1:-1;25599:5:110;;24959:683;-1:-1:-1;24959:683:110:o;25388:227::-;-1:-1:-1;25631:4:110;;24959:683;-1:-1:-1;24959:683:110:o;33689:155::-;-1:-1:-1;;;;;;;;;;;3191:16:19;3202:4;3191:10;:16::i;:::-;-1:-1:-1;33795:25:110::1;:42:::0;33689:155::o;13996:337::-;14122:22;;;;;:63;;;14148:37;-1:-1:-1;;;;;;;;;;;14174:10:110;14148:7;:37::i;:::-;14101:144;;;;-1:-1:-1;;;14101:144:110;;;;;;;:::i;:::-;14255:71;14293:10;14305:20;14255:37;:71::i;2789:1624::-;8870:21:20;4302:15;;-1:-1:-1;;;4302:15:20;;;;4301:16;;-1:-1:-1;;;;;4348:14:20;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:20;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:20;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:20;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:20;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:20;-1:-1:-1;;;5013:22:20;;;4979:67;3225:33:110::1;:31;:33::i;:::-;3268:15;:34:::0;;-1:-1:-1;;;;;;3268:34:110::1;-1:-1:-1::0;;;;;3268:34:110;::::1;::::0;;::::1;::::0;;;3312:26:::1;:56:::0;;;3378:33:::1;:70:::0;;;3458:59:::1;::::0;-1:-1:-1;;;3458:59:110;;:30:::1;::::0;:59:::1;::::0;3489:14;;3505:11;;3458:59:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;3527:32;3548:10;3527:20;:32::i;:::-;3569;3590:10;3569:20;:32::i;:::-;3611:21;:46:::0;;;3667:16:::1;:36:::0;;-1:-1:-1;;;;;;3667:36:110::1;-1:-1:-1::0;;;;;3667:36:110;::::1;;::::0;;4242:19:::1;4259:2;4242:14:::0;:19:::1;:::i;:::-;4204:35;:57:::0;4304:19:::1;4321:2;4304:14:::0;:19:::1;:::i;:::-;4271:30;:52:::0;4361:1:::1;4333:25;:29:::0;;;4372:30:::1;:34:::0;5066:101:20;;;;5100:23;;-1:-1:-1;;;;5100:23:20;;;5142:14;;-1:-1:-1;14863:50:143;;5142:14:20;;14851:2:143;14836:18;5142:14:20;;;;;;;5066:101;4092:1081;;;;;2789:1624:110;;;;;;;:::o;33525:158::-;33612:7;33642:34;33656:19;:17;:19::i;33642:34::-;33635:41;;33525:158;:::o;32361:287::-;32465:7;32503:15;;:138;;-1:-1:-1;;;32503:138:110;;32562:4;32503:138;;;15126:51:143;15193:18;;;15186:34;;;-1:-1:-1;;;;;15256:32:143;;;15236:18;;;15229:60;32503:15:110;;;;:33;;15099:18:143;;32503:138:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;7053:533::-;-1:-1:-1;;;;;;;;;;;3191:16:19;3202:4;3191:10;:16::i;:::-;6566:30:110;;7333:15:::1;::::0;:47:::1;::::0;-1:-1:-1;;;7333:47:110;;7374:4:::1;7333:47;::::0;::::1;6800:51:143::0;-1:-1:-1;;;;;7333:15:110;;::::1;::::0;:32:::1;::::0;6773:18:143;;7333:47:110::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:85;;;;:::i;:::-;7293:36;:125;7289:207;;7441:44;;-1:-1:-1::0;;;7441:44:110::1;;;;;;;;;;;7289:207;-1:-1:-1::0;7505:35:110::1;:74:::0;7053:533::o;4759:191:19:-;4824:7;4919:14;;;-1:-1:-1;;;;;;;;;;;4919:14:19;;;;;:24;;;;4759:191::o;17045:115:110:-;17107:46;17142:10;17107:34;:46::i;:::-;17045:115::o;5246:136:19:-;5320:18;5333:4;5320:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5350:25:::1;5361:4;5367:7;5350:10;:25::i;:::-;;5246:136:::0;;;:::o;18335:405:110:-;18472:37;-1:-1:-1;;;;;;;;;;;18498:10:110;18472:7;:37::i;:::-;18451:152;;;;-1:-1:-1;;;18451:152:110;;15824:2:143;18451:152:110;;;15806:21:143;15863:2;15843:18;;;15836:30;;;15902:34;15882:18;;;15875:62;15973:34;15953:18;;;15946:62;-1:-1:-1;;;16024:19:143;;;16017:35;16069:19;;18451:152:110;15622:472:143;18451:152:110;18647:31;;18613:66;;;;:33;:66;;;;;;;;18680:27;;18613:95;;;;;;;;:118;;;;;;;;;;;;;;;;;;;;18335:405::o;9951:929::-;10000:7;10392:17;10412:27;:25;:27::i;:::-;10392:47;;10449:17;10469:19;:17;:19::i;:::-;10498:26;10527:15;;:66;;-1:-1:-1;;;10527:66:110;;10587:4;10527:66;;;6800:51:143;10449:39:110;;-1:-1:-1;10498:26:110;;-1:-1:-1;;;;;10527:15:110;;;;:51;;6773:18:143;;10527:66:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10527:66:110;;;;;;;;;;;;:::i;:::-;10498:95;;10607:9;:16;10627:1;10607:21;10603:69;;10659:1;10644:17;;;;;9951:929;:::o;10603:69::-;10681:26;10771:9;:16;10745:9;10756;10728:38;;;;;;;;17230:19:143;;;17274:2;17265:12;;17258:28;17311:2;17302:12;;17073:247;10728:38:110;;;;;;;;;;;;;10718:49;;;;;;10710:58;;:77;;;;:::i;:::-;10681:106;;10844:9;10854:18;10844:29;;;;;;;;:::i;:::-;;;;;;;10837:36;;;;;;9951:929;:::o;6348:245:19:-;-1:-1:-1;;;;;6441:34:19;;966:10:24;6441:34:19;6437:102;;6498:30;;-1:-1:-1;;;6498:30:19;;;;;;;;;;;6437:102;6549:37;6561:4;6567:18;6549:11;:37::i;:::-;;6348:245;;:::o;8946:165:110:-;9013:7;9039:15;;:65;;-1:-1:-1;;;9039:65:110;;9098:4;9039:65;;;6800:51:143;-1:-1:-1;;;;;9039:15:110;;;;:50;;6773:18:143;;9039:65:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;8574:133::-;8622:7;8648:15;;:52;;-1:-1:-1;;;8648:52:110;;8694:4;8648:52;;;6800:51:143;-1:-1:-1;;;;;8648:15:110;;;;:37;;6773:18:143;;8648:52:110;6654:203:143;4837:570:110;-1:-1:-1;;;;;;;;;;;3191:16:19;3202:4;3191:10;:16::i;:::-;5033:21:110::1;5057:15:::0;;:47:::1;::::0;-1:-1:-1;;;5057:47:110;;5098:4:::1;5057:47;::::0;::::1;6800:51:143::0;-1:-1:-1;;;;;5057:15:110;;::::1;::::0;:32:::1;::::0;6773:18:143;;5057:47:110::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5033:71:::0;-1:-1:-1;5033:71:110;5229:26:::1;5233:22:::0;5229:1:::1;:26;:::i;:::-;:43;5225:120;;5296:38;;-1:-1:-1::0;;;5296:38:110::1;;;;;;;;;;;5225:120;-1:-1:-1::0;;5354:21:110::1;:46:::0;4837:570::o;32654:607::-;32727:7;32929:15;;:76;;-1:-1:-1;;;32929:76:110;;32990:4;32929:76;;;6800:51:143;32727:7:110;;-1:-1:-1;;;;;32929:15:110;;:39;;6773:18:143;;32929:76:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;32929:76:110;;;;;;;;;;;;:::i;:::-;32899:106;;33015:18;33052:9;33047:181;33071:10;:17;33067:1;:21;33047:181;;;33178:39;33196:5;33203:10;33214:1;33203:13;;;;;;;;:::i;:::-;;;;;;;33178:17;:39::i;:::-;33164:53;;;;:::i;:::-;;-1:-1:-1;33090:3:110;;33047:181;;;-1:-1:-1;33244:10:110;32654:607;-1:-1:-1;;;32654:607:110:o;32108:176::-;32204:7;32230:47;32247:19;:17;:19::i;:::-;32268:8;32230:16;:47::i;1866:326::-;1966:39;2362:4:19;1994:10:110;1966:7;:39::i;:::-;1945:120;;;;-1:-1:-1;;;1945:120:110;;;;;;;:::i;:::-;2080:9;2075:111;2099:8;:15;2095:1;:19;2075:111;;;2135:40;-1:-1:-1;;;;;;;;;;;2163:8:110;2172:1;2163:11;;;;;;;;:::i;:::-;;;;;;;2135:9;:40::i;:::-;2116:3;;2075:111;;;;1866:326;:::o;4161:214:21:-;2655:13;:11;:13::i;:::-;4276:36:::1;4294:17;4276;:36::i;:::-;4322:46;4344:17;4363:4;4322:21;:46::i;3708:134::-:0;3777:7;2926:20;:18;:20::i;:::-;-1:-1:-1;;;;;;;;;;;;3708:134:21;:::o;33850:165:110:-;-1:-1:-1;;;;;;;;;;;3191:16:19;3202:4;3191:10;:16::i;:::-;-1:-1:-1;33961:30:110::1;:47:::0;33850:165::o;8131:129::-;8180:7;8206:15;;:47;;-1:-1:-1;;;8206:47:110;;8247:4;8206:47;;;6800:51:143;-1:-1:-1;;;;;8206:15:110;;;;:32;;6773:18:143;;8206:47:110;6654:203:143;9197:414:110;9255:7;9471:15;;:47;;-1:-1:-1;;;9471:47:110;;9512:4;9471:47;;;6800:51:143;9296:15:110;;9255:7;;-1:-1:-1;;;;;9471:15:110;;;;:32;;6773:18:143;;9471:47:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9457:61;;:11;:61;:::i;:::-;9426:92;;9582:21;;9559:20;:44;;;;:::i;:::-;9535:69;;:20;:69;:::i;:::-;9528:76;;;;9197:414;:::o;14339:430::-;14471:22;;;;;:63;;;14497:37;-1:-1:-1;;;;;;;;;;;14523:10:110;14497:7;:37::i;:::-;14450:144;;;;-1:-1:-1;;;14450:144:110;;;;;;;:::i;:::-;14609:9;14604:159;14628:21;:28;14624:1;:32;14604:159;;;14677:75;14715:10;14727:21;14749:1;14727:24;;;;;;;;:::i;:::-;;;;;;;14677:37;:75::i;:::-;14658:3;;14604:159;;8745:131;8795:7;8821:15;;:48;;-1:-1:-1;;;8821:48:110;;8863:4;8821:48;;;6800:51:143;-1:-1:-1;;;;;8821:15:110;;;;:33;;6773:18:143;;8821:48:110;6654:203:143;30800:311:110;30921:7;30959:15;;:145;;-1:-1:-1;;;30959:145:110;;31009:4;30959:145;;;18381:51:143;18448:18;;;18441:34;;;-1:-1:-1;;;;;18511:32:143;;;18491:18;;;18484:60;18580:32;;;18560:18;;;18553:60;30959:15:110;;;;:24;;18353:19:143;;30959:145:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30940:164;30800:311;-1:-1:-1;;;;30800:311:110:o;528:89:113:-;8870:21:20;4302:15;;-1:-1:-1;;;4302:15:20;;;;4301:16;;-1:-1:-1;;;;;4348:14:20;4158:30;4726:16;;:34;;;;;4746:14;4726:34;4706:54;;4770:17;4790:11;-1:-1:-1;;;;;4790:16:20;4805:1;4790:16;:50;;;;-1:-1:-1;4818:4:20;4810:25;:30;4790:50;4770:70;;4856:12;4855:13;:30;;;;;4873:12;4872:13;4855:30;4851:91;;;4908:23;;-1:-1:-1;;;4908:23:20;;;;;;;;;;;4851:91;4951:18;;-1:-1:-1;;4951:18:20;4968:1;4951:18;;;4979:67;;;;5013:22;;-1:-1:-1;;;;5013:22:20;-1:-1:-1;;;5013:22:20;;;4979:67;587:23:113::1;:21;:23::i;:::-;5070:14:20::0;5066:101;;;5100:23;;-1:-1:-1;;;;5100:23:20;;;5142:14;;-1:-1:-1;14863:50:143;;5142:14:20;;14851:2:143;14836:18;5142:14:20;;;;;;;5066:101;4092:1081;;;;;528:89:113:o;2198:136:110:-;-1:-1:-1;;;;;;;;;;;3191:16:19;3202:4;3191:10;:16::i;:::-;2290:37:110::1;-1:-1:-1::0;;;;;;;;;;;2318:8:110::1;2290:9;:37::i;8331:207::-:0;8381:7;8483:15;;:47;;-1:-1:-1;;;8483:47:110;;8524:4;8483:47;;;6800:51:143;8422:15:110;;-1:-1:-1;;;;;8483:15:110;;:32;;6773:18:143;;8483:47:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8469:61;;:11;:61;:::i;:::-;8454:77;;:11;:77;:::i;:::-;8447:84;;;8331:207;:::o;3732::19:-;3809:4;3901:14;;;-1:-1:-1;;;;;;;;;;;3901:14:19;;;;;;;;-1:-1:-1;;;;;3901:31:19;;;;;;;;;;;;;;;3732:207::o;4465:195:110:-;4523:39;2362:4:19;4551:10:110;4523:7;:39::i;:::-;4515:89;;;;-1:-1:-1;;;4515:89:110;;18826:2:143;4515:89:110;;;18808:21:143;18865:2;18845:18;;;18838:30;18904:34;18884:18;;;18877:62;-1:-1:-1;;;18955:18:143;;;18948:35;19000:19;;4515:89:110;18624:401:143;4515:89:110;4614:15;;;:39;;;-1:-1:-1;;;4614:39:110;;;;-1:-1:-1;;;;;4614:15:110;;;;:37;;:39;;;;;;;;;;:15;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;15037:159;15101:7;15163:26;;15127:33;;:62;;;;:::i;1623:237::-;1708:39;2362:4:19;1736:10:110;1708:7;:39::i;:::-;1687:120;;;;-1:-1:-1;;;1687:120:110;;;;;;;:::i;:::-;1817:36;-1:-1:-1;;;;;;;;;;;1845:7:110;1817:9;:36::i;34600:177::-;34703:15;;:66;;-1:-1:-1;;;34703:66:110;;34763:4;34703:66;;;6800:51:143;34668:16:110;;-1:-1:-1;;;;;34703:15:110;;:51;;6773:18:143;;34703:66:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;34703:66:110;;;;;;;;;;;;:::i;31543:484::-;31645:7;31694:15;;:76;;-1:-1:-1;;;31694:76:110;;31755:4;31694:76;;;6800:51:143;31645:7:110;;-1:-1:-1;;;;;31694:15:110;;:39;;6773:18:143;;31694:76:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;31694:76:110;;;;;;;;;;;;:::i;:::-;31664:106;;31780:18;31817:9;31812:182;31836:10;:17;31832:1;:21;31812:182;;;31943:40;31952:5;31959:10;31970:1;31959:13;;;;;;;;:::i;:::-;;;;;;;31974:8;31943;:40::i;:::-;31929:54;;;;:::i;:::-;;-1:-1:-1;31855:3:110;;31812:182;;;-1:-1:-1;32010:10:110;31543:484;-1:-1:-1;;;;31543:484:110:o;31211:198::-;31326:7;31352:50;31361:19;:17;:19::i;:::-;31382:9;31393:8;31352;:50::i;2340:226::-;-1:-1:-1;;;;;;;;;;;3191:16:19;3202:4;3191:10;:16::i;:::-;2452:9:110::1;2447:113;2471:9;:16;2467:1;:20;2447:113;;;2508:41;-1:-1:-1::0;;;;;;;;;;;2536:9:110::1;2546:1;2536:12;;;;;;;;:::i;2508:41::-;2489:3;;2447:113;;11026:250:::0;-1:-1:-1;;;;;;;;;;;3191:16:19;3202:4;3191:10;:16::i;:::-;11211:15:110::1;::::0;:58:::1;::::0;-1:-1:-1;;;11211:58:110;;11253:4:::1;11211:58;::::0;::::1;19204:51:143::0;19271:18;;;19264:34;;;-1:-1:-1;;;;;11211:15:110;;::::1;::::0;:33:::1;::::0;19177:18:143;;11211:58:110::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;11026:250:::0;;:::o;7737:132::-;-1:-1:-1;;;;;;;;;;;3191:16:19;3202:4;3191:10;:16::i;:::-;-1:-1:-1;7830:22:110::1;:32:::0;;-1:-1:-1;;7830:32:110::1;::::0;::::1;;::::0;;;::::1;::::0;;7737:132::o;33339:180::-;33437:7;33463:49;33481:19;:17;:19::i;:::-;33502:9;33463:17;:49::i;5662:138:19:-;5737:18;5750:4;5737:12;:18::i;:::-;3191:16;3202:4;3191:10;:16::i;:::-;5767:26:::1;5779:4;5785:7;5767:11;:26::i;5787:464:110:-:0;-1:-1:-1;;;;;;;;;;;3191:16:19;3202:4;3191:10;:16::i;:::-;7689:35:110;;6008:15:::1;::::0;:47:::1;::::0;-1:-1:-1;;;6008:47:110;;6049:4:::1;6008:47;::::0;::::1;6800:51:143::0;-1:-1:-1;;;;;6008:15:110;;::::1;::::0;:32:::1;::::0;6773:18:143;;6008:47:110::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:90;;;;:::i;:::-;5973:31;:125;5969:202;;6121:39;;-1:-1:-1::0;;;6121:39:110::1;;;;;;;;;;;5969:202;-1:-1:-1::0;6180:30:110::1;:64:::0;5787:464::o;4148:103:19:-;4214:30;4225:4;966:10:24;4214::19;:30::i;11817:2174:110:-;12062:27;;12050:40;;;;:11;:40;;;;;;;;-1:-1:-1;;;;;12050:50:110;;;;;;;;;:57;:62;12046:113;;12133:26;;-1:-1:-1;;;12133:26:110;;;;;;;;;;;12046:113;12630:27;;12601:26;;12565:33;;:62;;12601:26;12565:62;:::i;:::-;:92;12561:156;;;12680:26;;-1:-1:-1;;;12680:26:110;;;;;;;;;;;12561:156;13081:27;;13051:58;;;;:29;:58;;;;;;:63;;13047:172;;13191:17;:15;:17::i;:::-;13160:27;;13130:58;;;;:29;:58;;;;;:78;13047:172;13287:27;;13275:40;;;;:11;:40;;;;;;;;-1:-1:-1;;;;;13275:50:110;;;;;;;;;;:73;;;;;;;;;;;;;;;;;;;;;;;;13425:106;;13515:15;13425:27;:106::i;:::-;13593:38;13634:43;13668:8;13634:33;:43::i;:::-;13703:27;;13687:44;;;;:15;:44;;;;;;;;13732:31;;;;13687:77;;;;;;;:111;;13593:84;;-1:-1:-1;13593:84:110;;13687:77;;:44;:111;;13593:84;;13687:111;:::i;:::-;;;;-1:-1:-1;;13857:28:110;;;;;13899:31;;;;;13814:170;;19483:25:143;;;19524:18;;;19517:34;;;13857:28:110;;13814:170;;19456:18:143;13814:170:110;;;;;;;11963:2028;11817:2174;;:::o;738:128:113:-;6931:20:20;:18;:20::i;:::-;817:42:113::1;2362:4:19;848:10:113;817;:42::i;17774:485:110:-:0;18173:67;18202:33;;18238:1;18202:37;;;;:::i;:::-;18173:28;:67::i;:::-;18166:87;;17774:485;:::o;7270:387:19:-;7347:4;-1:-1:-1;;;;;;;;;;;7437:22:19;7445:4;7451:7;7437;:22::i;:::-;7432:219;;7475:8;:14;;;;;;;;;;;-1:-1:-1;;;;;7475:31:19;;;;;;;;;:38;;-1:-1:-1;;7475:38:19;7509:4;7475:38;;;7559:12;966:10:24;;887:96;7559:12:19;-1:-1:-1;;;;;7532:40:19;7550:7;-1:-1:-1;;;;;7532:40:19;7544:4;7532:40;;;;;;;;;;7593:4;7586:11;;;;;7432:219;7635:5;7628:12;;;;;7892:388;7970:4;-1:-1:-1;;;;;;;;;;;8059:22:19;8067:4;8073:7;8059;:22::i;:::-;8055:219;;;8131:5;8097:14;;;;;;;;;;;-1:-1:-1;;;;;8097:31:19;;;;;;;;;;:39;;-1:-1:-1;;8097:39:19;;;8155:40;966:10:24;;8097:14:19;;8155:40;;8131:5;8155:40;8216:4;8209:11;;;;;4603:312:21;4683:4;-1:-1:-1;;;;;4692:6:21;4675:23;;;:120;;;4789:6;-1:-1:-1;;;;;4753:42:21;:32;-1:-1:-1;;;;;;;;;;;1519:53:40;-1:-1:-1;;;;;1519:53:40;;1441:138;4753:32:21;-1:-1:-1;;;;;4753:42:21;;;4675:120;4658:251;;;4869:29;;-1:-1:-1;;;4869:29:21;;;;;;;;;;;991:117:113;2362:4:19;3191:16;2362:4;3191:10;:16::i;6057:538:21:-;6174:17;-1:-1:-1;;;;;6156:50:21;;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6156:52:21;;;;;;;;-1:-1:-1;;6156:52:21;;;;;;;;;;;;:::i;:::-;;;6152:437;;6518:60;;-1:-1:-1;;;6518:60:21;;-1:-1:-1;;;;;6818:32:143;;6518:60:21;;;6800:51:143;6773:18;;6518:60:21;6654:203:143;6152:437:21;-1:-1:-1;;;;;;;;;;;6250:40:21;;6246:120;;6317:34;;-1:-1:-1;;;6317:34:21;;;;;1507:25:143;;;1480:18;;6317:34:21;1361:177:143;6246:120:21;6379:54;6409:17;6428:4;6379:29;:54::i;5032:213::-;5106:4;-1:-1:-1;;;;;5115:6:21;5098:23;;5094:145;;5199:29;;-1:-1:-1;;;5199:29:21;;;;;;;;;;;623:109:113;6931:20:20;:18;:20::i;:::-;692:33:113::1;:31;:33::i;4381:197:19:-:0;4469:22;4477:4;4483:7;4469;:22::i;:::-;4464:108;;4514:47;;-1:-1:-1;;;4514:47:19;;-1:-1:-1;;;;;19222:32:143;;4514:47:19;;;19204:51:143;19271:18;;;19264:34;;;19177:18;;4514:47:19;19030:274:143;16170:443:110;16285:29;;;;:21;:29;;;;;;;;:41;;;;;;;;;:46;16281:263;;16170:443;;;:::o;16281:263::-;16415:9;16428:1;16415:14;16411:133;;16170:443;;;:::o;16411:133::-;16553:29;;;;:21;:29;;;;;;;;:41;;;;;;;;:53;16170:443::o;7084:141:20:-;8870:21;8560:40;-1:-1:-1;;;8560:40:20;;;;7146:73;;7191:17;;-1:-1:-1;;;7191:17:20;;;;;;;;;;;25987:4503:110;26069:4;26111:47;;;:29;:47;;;;;;16999:33;;26168:1014;;;26426:31;26460:29;26426:31;26490:18;26507:1;26490:16;:18;:::i;:::-;26460:49;;;;;;;;;;;;26426:83;;26545:23;26527:15;:41;26523:649;;;26591:32;26626:37;:35;:37::i;:::-;26591:72;;26791:9;26786:313;26810:15;:22;26806:1;:26;26786:313;;;26865:11;:29;26877:16;26865:29;;;;;;;;;;;:49;26895:15;26911:1;26895:18;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;26865:49:110;-1:-1:-1;;;;;26865:49:110;;;;;;;;;;;;:56;;;26925:1;26865:61;26861:220;;26954:47;;;;:29;:47;;;;;:73;;;27053:5;;26861:220;26834:3;;26786:313;;;;27134:23;27116:41;;26573:599;26523:649;26307:875;26168:1014;27500:15;27478:19;:17;:19::i;:::-;:37;27471:249;;;27694:15;:13;:15::i;:::-;27471:249;;;27905:21;27968:1;27934:30;27948:15;27934:13;:30::i;:::-;27930:34;;:1;:34;:::i;:::-;27929:40;;;;:::i;:::-;:44;;27972:1;27929:44;:::i;:::-;27905:68;;27983:26;28012:37;:35;:37::i;:::-;27983:66;;28311:31;28365:9;28360:1688;28384:9;:16;28380:1;:20;28360:1688;;;28421:16;28440:9;28450:1;28440:12;;;;;;;;:::i;:::-;;;;;;;;;;;;28466:48;28517:29;;;:11;:29;;;;;;-1:-1:-1;;;;;28517:39:110;;;;;;;;;;28466:90;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28440:12;;-1:-1:-1;28466:90:110;28759:47;;28755:61;;28808:8;;;;28755:61;28935:27;;28886:30;28919:44;;;:15;:44;;;;;;;;28964:31;;;;28919:77;;;;;;;;29015:39;;;29011:1027;;16028:27;;29262:17;16006:50;;;:21;:50;;;;;;;;16057:31;;;;16006:83;;;;;;;;29443:35;;29431:47;;16006:83;29431:47;:::i;:::-;29413:15;:65;29409:76;;;29480:5;;;;;;29409:76;29504:66;29537:20;29559:10;29504:32;:66::i;:::-;-1:-1:-1;29617:4:110;;25987:4503;-1:-1:-1;;;;;;;;;;25987:4503:110:o;29011:1027::-;28407:1641;;;28360:1688;28402:3;;28360:1688;;;;30261:26;30260:27;:70;;;;;30311:19;:17;:19::i;:::-;30291:17;:15;:17::i;:::-;:39;30260:70;30256:206;;;30346:15;:13;:15::i;:::-;-1:-1:-1;30382:4:110;;25987:4503;-1:-1:-1;;;;;25987:4503:110:o;30256:206::-;-1:-1:-1;30478:5:110;;25987:4503;-1:-1:-1;;;;;25987:4503:110:o;2264:344:40:-;2355:37;2374:17;2355:18;:37::i;:::-;2407:36;;-1:-1:-1;;;;;2407:36:40;;;;;;;;2458:11;;:15;2454:148;;2489:53;2518:17;2537:4;2489:28;:53::i;2454:148::-;2573:18;:16;:18::i;22785:1897:110:-;22897:22;22922:19;:17;:19::i;:::-;22897:44;;22951:26;22980:37;:35;:37::i;:::-;22951:66;;23059:9;23054:1580;23078:9;:16;23074:1;:20;23054:1580;;;23172:1;23119:36;;;:20;:36;;;;;23156:12;;23172:1;;23156:9;;23166:1;;23156:12;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23119:50:110;-1:-1:-1;;;;;23119:50:110;;;;;;;;;;;;;:54;23115:697;;;23273:14;23371:47;23405:9;23415:1;23405:12;;;;;;;;:::i;:::-;;;;;;;23371:33;:47::i;:::-;23343:25;;23290:20;:36;23311:14;23290:36;;;;;;;;;;;:50;23327:9;23337:1;23327:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23290:50:110;-1:-1:-1;;;;;23290:50:110;;;;;;;;;;;;;:78;;;;:::i;:::-;:128;;;;:::i;:::-;23563:15;;23596:12;;23273:145;;-1:-1:-1;;;;;;23563:15:110;;:32;;23596:9;;23606:1;;23596:12;;;;;;:::i;:::-;;;;;;;;;;;23618:16;;23563:72;;-1:-1:-1;;;;;;23563:72:110;;;;;;;-1:-1:-1;;;;;15144:32:143;;;23563:72:110;;;15126:51:143;15193:18;;;15186:34;;;23618:16:110;;15236:18:143;;;15229:60;15099:18;;23563:72:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23175:637;23115:697;23932:1;23874:41;;;:25;:41;;;;;23916:12;;23932:1;;23916:9;;23926:1;;23916:12;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23874:55:110;-1:-1:-1;;;;;23874:55:110;;;;;;;;;;;;;:59;23870:754;;;23953:14;24061:47;24095:9;24105:1;24095:12;;;;;;;;:::i;24061:47::-;24028:30;;23970:25;:41;23996:14;23970:41;;;;;;;;;;;:55;24012:9;24022:1;24012:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;23970:55:110;-1:-1:-1;;;;;23970:55:110;;;;;;;;;;;;;:88;;;;:::i;:::-;:138;;;;:::i;:::-;24126:15;;24159:12;;23953:155;;-1:-1:-1;;;;;;24126:15:110;;:32;;24159:9;;24169:1;;24159:12;;;;;;:::i;:::-;;;;;;;;;;;24181:16;;24126:72;;-1:-1:-1;;;;;;24126:72:110;;;;;;;-1:-1:-1;;;;;15144:32:143;;;24126:72:110;;;15126:51:143;15193:18;;;15186:34;;;24181:16:110;;15236:18:143;;;15229:60;15099:18;;24126:72:110;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23935:689;23870:754;23096:3;;23054:1580;;;-1:-1:-1;24644:15:110;;;:31;;;-1:-1:-1;;;24644:31:110;;;;-1:-1:-1;;;;;24644:15:110;;;;:29;;:31;;;;;;;;;;:15;;:31;;;;;;;;;;19647:2891;19776:29;19808:19;:17;:19::i;:::-;20102:27;;20072:58;;;;:29;:58;;;;;;19776:51;;-1:-1:-1;20072:83:110;;20068:155;;20178:34;;-1:-1:-1;;;20178:34:110;;;;;;;;;;;20068:155;20372:27;;:31;;20402:1;;20372:31;:::i;:::-;20335:33;;:68;20331:140;;20426:34;;-1:-1:-1;;;20426:34:110;;;;;;;;;;;20331:140;20571:26;20600:37;:35;:37::i;:::-;20571:66;;20652:9;20647:269;20671:9;:16;20667:1;:20;20647:269;;;20781:20;:31;;;20712:11;:40;20724:20;:27;;;20712:40;;;;;;;;;;;:54;20753:9;20763:1;20753:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;20712:54:110;-1:-1:-1;;;;;20712:54:110;;;;;;;;;;;;:65;;;:100;20708:198;;20832:20;:43;20853:21;20832:43;;;;;;;;;;;:57;20876:9;20886:1;20876:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;20832:57:110;-1:-1:-1;;;;;20832:57:110;;;;;;;;;;;;;:59;;;;;;;;;:::i;:::-;;;;;;20708:198;20689:3;;20647:269;;;;20972:60;21011:20;20972:38;:60::i;:::-;20967:900;;21157:48;;;;:25;:48;;;;;;;;-1:-1:-1;;;;;21157:58:110;;;;;;;;;:63;;21219:1;;21157:48;:63;;21219:1;;21157:63;:::i;:::-;;;;-1:-1:-1;20967:900:110;;-1:-1:-1;20967:900:110;;21751:8;-1:-1:-1;;;;;21729:30:110;:18;:16;:18::i;:::-;-1:-1:-1;;;;;21729:30:110;;21725:132;;21779:48;;;;:25;:48;;;;;;;;-1:-1:-1;;;;;21779:58:110;;;;;;;;;:63;;21841:1;;21779:48;:63;;21841:1;;21779:63;:::i;:::-;;;;-1:-1:-1;;21725:132:110;21911:31;;21877:66;;;;:33;:66;;;;;;;;21944:27;;21877:95;;;;;;;:118;;;;;;;;;;;;;;;;;;;;;;;;;;;22005:33;:63;;;22078:44;;;:15;:44;;;;;:55;;-1:-1:-1;;;;;;22078:55:110;-1:-1:-1;;;;;22078:55:110;;;;;22172:27;;22143:57;;:28;:57;;;;;22203:12;22143:72;;22257:27;;22225:60;;:31;:60;;;;;;22288:15;22225:78;;22407:28;22449:31;;22494:27;;22370:161;;19483:25:143;;;19524:18;;;19517:34;;;;22370:161:110;;19456:18:143;22370:161:110;;;;;;;19766:2772;;19647:2891;;:::o;1671:281:40:-;1748:17;-1:-1:-1;;;;;1748:29:40;;1781:1;1748:34;1744:119;;1805:47;;-1:-1:-1;;;1805:47:40;;-1:-1:-1;;;;;6818:32:143;;1805:47:40;;;6800:51:143;6773:18;;1805:47:40;6654:203:143;1744:119:40;-1:-1:-1;;;;;;;;;;;1872:73:40;;-1:-1:-1;;;;;;1872:73:40;-1:-1:-1;;;;;1872:73:40;;;;;;;;;;1671:281::o;3916:253:53:-;3999:12;4024;4038:23;4065:6;-1:-1:-1;;;;;4065:19:53;4085:4;4065:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4023:67;;;;4107:55;4134:6;4142:7;4151:10;4107:26;:55::i;:::-;4100:62;3916:253;-1:-1:-1;;;;;3916:253:53:o;6113:122:40:-;6163:9;:13;6159:70;;6199:19;;-1:-1:-1;;;6199:19:40;;;;;;;;;;;4437:582:53;4581:12;4610:7;4605:408;;4633:19;4641:10;4633:7;:19::i;:::-;4605:408;;;4857:17;;:22;:49;;;;-1:-1:-1;;;;;;4883:18:53;;;:23;4857:49;4853:119;;;4933:24;;-1:-1:-1;;;4933:24:53;;-1:-1:-1;;;;;6818:32:143;;4933:24:53;;;6800:51:143;6773:18;;4933:24:53;6654:203:143;4853:119:53;-1:-1:-1;4992:10:53;4985:17;;5559:487;5690:17;;:21;5686:354;;5887:10;5881:17;5943:15;5930:10;5926:2;5922:19;5915:44;5686:354;6010:19;;-1:-1:-1;;;6010:19:53;;;;;;;;;;;14:286:143;72:6;125:2;113:9;104:7;100:23;96:32;93:52;;;141:1;138;131:12;93:52;167:23;;-1:-1:-1;;;;;;219:32:143;;209:43;;199:71;;266:1;263;256:12;497:466;574:6;582;590;643:2;631:9;622:7;618:23;614:32;611:52;;;659:1;656;649:12;611:52;-1:-1:-1;;704:23:143;;;824:2;809:18;;796:32;;-1:-1:-1;927:2:143;912:18;;;899:32;;497:466;-1:-1:-1;497:466:143:o;1543:226::-;1602:6;1655:2;1643:9;1634:7;1630:23;1626:32;1623:52;;;1671:1;1668;1661:12;1623:52;-1:-1:-1;1716:23:143;;1543:226;-1:-1:-1;1543:226:143:o;1774:127::-;1835:10;1830:3;1826:20;1823:1;1816:31;1866:4;1863:1;1856:15;1890:4;1887:1;1880:15;1906:275;1977:2;1971:9;2042:2;2023:13;;-1:-1:-1;;2019:27:143;2007:40;;-1:-1:-1;;;;;2062:34:143;;2098:22;;;2059:62;2056:88;;;2124:18;;:::i;:::-;2160:2;2153:22;1906:275;;-1:-1:-1;1906:275:143:o;2186:727::-;2253:5;2301:4;2289:9;2284:3;2280:19;2276:30;2273:50;;;2319:1;2316;2309:12;2273:50;2372:2;2366:9;2414:4;2402:17;;-1:-1:-1;;;;;2434:34:143;;2470:22;;;2431:62;2428:88;;;2496:18;;:::i;:::-;2532:2;2525:22;;;2616:23;;2648;;2744:2;2729:18;;;2716:32;2764:15;;;2757:32;2847:18;;;2834:32;2882:15;;;2875:32;;;;-1:-1:-1;2565:6:143;2186:727;-1:-1:-1;2186:727:143:o;2918:254::-;3016:6;3069:2;3057:9;3048:7;3044:23;3040:32;3037:52;;;3085:1;3082;3075:12;3037:52;3108:58;3158:7;3147:9;3108:58;:::i;3177:149::-;-1:-1:-1;;;;;3270:31:143;;3260:42;;3250:70;;3316:1;3313;3306:12;3331:183;3391:4;-1:-1:-1;;;;;3416:6:143;3413:30;3410:56;;;3446:18;;:::i;:::-;-1:-1:-1;3491:1:143;3487:14;3503:4;3483:25;;3331:183::o;3519:762::-;3573:5;3626:3;3619:4;3611:6;3607:17;3603:27;3593:55;;3644:1;3641;3634:12;3593:55;3684:6;3671:20;3711:64;3727:47;3767:6;3727:47;:::i;:::-;3711:64;:::i;:::-;3799:3;3823:6;3818:3;3811:19;3855:4;3850:3;3846:14;3839:21;;3916:4;3906:6;3903:1;3899:14;3891:6;3887:27;3883:38;3869:52;;3944:3;3936:6;3933:15;3930:35;;;3961:1;3958;3951:12;3930:35;3997:4;3989:6;3985:17;4011:239;4027:6;4022:3;4019:15;4011:239;;;4109:3;4096:17;4126:49;4169:5;4126:49;:::i;:::-;4188:18;;4235:4;4226:14;;;;4044;4011:239;;;-1:-1:-1;4268:7:143;3519:762;-1:-1:-1;;;;;3519:762:143:o;4286:1170::-;4450:6;4458;4466;4474;4482;4490;4498;4551:3;4539:9;4530:7;4526:23;4522:33;4519:53;;;4568:1;4565;4558:12;4519:53;4607:9;4594:23;4626:49;4669:5;4626:49;:::i;:::-;4694:5;-1:-1:-1;4772:2:143;4757:18;;4744:32;;-1:-1:-1;4875:2:143;4860:18;;4847:32;;-1:-1:-1;4978:2:143;4963:18;;4950:32;;-1:-1:-1;5059:3:143;5044:19;;5031:33;-1:-1:-1;;;;;5076:30:143;;5073:50;;;5119:1;5116;5109:12;5073:50;5142:61;5195:7;5186:6;5175:9;5171:22;5142:61;:::i;:::-;5132:71;-1:-1:-1;;5276:3:143;5261:19;;5248:33;;-1:-1:-1;5359:3:143;5344:19;;5331:33;5373:51;5331:33;5373:51;:::i;:::-;5443:7;5433:17;;;4286:1170;;;;;;;;;;:::o;5461:385::-;5529:6;5537;5590:2;5578:9;5569:7;5565:23;5561:32;5558:52;;;5606:1;5603;5596:12;5558:52;5651:23;;;-1:-1:-1;5750:2:143;5735:18;;5722:32;5763:51;5722:32;5763:51;:::i;:::-;5833:7;5823:17;;;5461:385;;;;;:::o;6862:346::-;6930:6;6938;6991:2;6979:9;6970:7;6966:23;6962:32;6959:52;;;7007:1;7004;6997:12;6959:52;-1:-1:-1;;7052:23:143;;;7172:2;7157:18;;;7144:32;;-1:-1:-1;6862:346:143:o;7537:265::-;7596:6;7649:2;7637:9;7628:7;7624:23;7620:32;7617:52;;;7665:1;7662;7655:12;7617:52;7704:9;7691:23;7723:49;7766:5;7723:49;:::i;7807:348::-;7891:6;7944:2;7932:9;7923:7;7919:23;7915:32;7912:52;;;7960:1;7957;7950:12;7912:52;8000:9;7987:23;-1:-1:-1;;;;;8025:6:143;8022:30;8019:50;;;8065:1;8062;8055:12;8019:50;8088:61;8141:7;8132:6;8121:9;8117:22;8088:61;:::i;8160:918::-;8237:6;8245;8298:2;8286:9;8277:7;8273:23;8269:32;8266:52;;;8314:1;8311;8304:12;8266:52;8353:9;8340:23;8372:49;8415:5;8372:49;:::i;:::-;8440:5;-1:-1:-1;8496:2:143;8481:18;;8468:32;-1:-1:-1;;;;;8512:30:143;;8509:50;;;8555:1;8552;8545:12;8509:50;8578:22;;8631:4;8623:13;;8619:27;-1:-1:-1;8609:55:143;;8660:1;8657;8650:12;8609:55;8700:2;8687:16;-1:-1:-1;;;;;8718:6:143;8715:30;8712:56;;;8748:18;;:::i;:::-;8790:57;8837:2;8814:17;;-1:-1:-1;;8810:31:143;8843:2;8806:40;8790:57;:::i;:::-;8870:6;8863:5;8856:21;8918:7;8913:2;8904:6;8900:2;8896:15;8892:24;8889:37;8886:57;;;8939:1;8936;8929:12;8886:57;8994:6;8989:2;8985;8981:11;8976:2;8969:5;8965:14;8952:49;9046:1;9041:2;9032:6;9025:5;9021:18;9017:27;9010:38;9067:5;9057:15;;;;;8160:918;;;;;:::o;9083:965::-;9206:6;9259:2;9247:9;9238:7;9234:23;9230:32;9227:52;;;9275:1;9272;9265:12;9227:52;9315:9;9302:23;-1:-1:-1;;;;;9340:6:143;9337:30;9334:50;;;9380:1;9377;9370:12;9334:50;9403:22;;9456:4;9448:13;;9444:27;-1:-1:-1;9434:55:143;;9485:1;9482;9475:12;9434:55;9525:2;9512:16;9548:64;9564:47;9604:6;9564:47;:::i;9548:64::-;9634:3;9658:6;9653:3;9646:19;9690:2;9685:3;9681:12;9674:19;;9748:2;9740:4;9732:6;9728:17;9724:2;9720:26;9716:35;9702:49;;9774:7;9766:6;9763:19;9760:39;;;9795:1;9792;9785:12;9760:39;9827:2;9823;9819:11;9808:22;;9839:179;9855:6;9850:3;9847:15;9839:179;;;9923:52;9967:7;9962:3;9923:52;:::i;:::-;9918:3;9911:65;10005:2;10000:3;9996:12;9989:19;;9881:4;9876:3;9872:14;9865:21;;9839:179;;;10037:5;9083:965;-1:-1:-1;;;;;;9083:965:143:o;10053:544::-;10130:6;10138;10146;10199:2;10187:9;10178:7;10174:23;10170:32;10167:52;;;10215:1;10212;10205:12;10167:52;10260:23;;;-1:-1:-1;10359:2:143;10344:18;;10331:32;10372:51;10331:32;10372:51;:::i;:::-;10442:7;-1:-1:-1;10501:2:143;10486:18;;10473:32;10514:51;10473:32;10514:51;:::i;:::-;10584:7;10574:17;;;10053:544;;;;;:::o;10602:446::-;10655:3;10693:5;10687:12;10720:6;10715:3;10708:19;10752:4;10747:3;10743:14;10736:21;;10791:4;10784:5;10780:16;10814:1;10824:199;10838:6;10835:1;10832:13;10824:199;;;10903:13;;-1:-1:-1;;;;;10899:39:143;10887:52;;10968:4;10959:14;;;;10996:17;;;;10935:1;10853:9;10824:199;;;-1:-1:-1;11039:3:143;;10602:446;-1:-1:-1;;;;10602:446:143:o;11053:261::-;11232:2;11221:9;11214:21;11195:4;11252:56;11304:2;11293:9;11289:18;11281:6;11252:56;:::i;11319:418::-;11468:2;11457:9;11450:21;11431:4;11500:6;11494:13;11543:6;11538:2;11527:9;11523:18;11516:34;11602:6;11597:2;11589:6;11585:15;11580:2;11569:9;11565:18;11559:50;11658:1;11653:2;11644:6;11633:9;11629:22;11625:31;11618:42;11728:2;11721;11717:7;11712:2;11704:6;11700:15;11696:29;11685:9;11681:45;11677:54;11669:62;;;11319:418;;;;:::o;11742:424::-;11810:6;11818;11871:2;11859:9;11850:7;11846:23;11842:32;11839:52;;;11887:1;11884;11877:12;11839:52;11926:9;11913:23;11945:49;11988:5;11945:49;:::i;:::-;12013:5;-1:-1:-1;12070:2:143;12055:18;;12042:32;12083:51;12042:32;12083:51;:::i;12522:273::-;12578:6;12631:2;12619:9;12610:7;12606:23;12602:32;12599:52;;;12647:1;12644;12637:12;12599:52;12686:9;12673:23;12739:5;12732:13;12725:21;12718:5;12715:32;12705:60;;12761:1;12758;12751:12;13451:127;13512:10;13507:3;13503:20;13500:1;13493:31;13543:4;13540:1;13533:15;13567:4;13564:1;13557:15;13583:125;13648:9;;;13669:10;;;13666:36;;;13682:18;;:::i;13713:398::-;13915:2;13897:21;;;13954:2;13934:18;;;13927:30;13993:34;13988:2;13973:18;;13966:62;-1:-1:-1;;;14059:2:143;14044:18;;14037:32;14101:3;14086:19;;13713:398::o;14116:332::-;14323:6;14312:9;14305:25;14366:2;14361;14350:9;14346:18;14339:30;14286:4;14386:56;14438:2;14427:9;14423:18;14415:6;14386:56;:::i;14453:127::-;14514:10;14509:3;14505:20;14502:1;14495:31;14545:4;14542:1;14535:15;14569:4;14566:1;14559:15;14585:120;14625:1;14651;14641:35;;14656:18;;:::i;:::-;-1:-1:-1;14690:9:143;;14585:120::o;15300:184::-;15370:6;15423:2;15411:9;15402:7;15398:23;15394:32;15391:52;;;15439:1;15436;15429:12;15391:52;-1:-1:-1;15462:16:143;;15300:184;-1:-1:-1;15300:184:143:o;15489:128::-;15556:9;;;15577:11;;;15574:37;;;15591:18;;:::i;16099:969::-;16194:6;16247:2;16235:9;16226:7;16222:23;16218:32;16215:52;;;16263:1;16260;16253:12;16215:52;16296:9;16290:16;-1:-1:-1;;;;;16321:6:143;16318:30;16315:50;;;16361:1;16358;16351:12;16315:50;16384:22;;16437:4;16429:13;;16425:27;-1:-1:-1;16415:55:143;;16466:1;16463;16456:12;16415:55;16499:2;16493:9;16522:64;16538:47;16578:6;16538:47;:::i;16522:64::-;16608:3;16632:6;16627:3;16620:19;16664:2;16659:3;16655:12;16648:19;;16719:2;16709:6;16706:1;16702:14;16698:2;16694:23;16690:32;16676:46;;16745:7;16737:6;16734:19;16731:39;;;16766:1;16763;16756:12;16731:39;16798:2;16794;16790:11;16779:22;;16810:228;16826:6;16821:3;16818:15;16810:228;;;16899:3;16893:10;16916:49;16959:5;16916:49;:::i;:::-;16978:18;;17025:2;16843:12;;;;17016;;;;16810:228;;17325:112;17357:1;17383;17373:35;;17388:18;;:::i;:::-;-1:-1:-1;17422:9:143;;17325:112::o;17442:127::-;17503:10;17498:3;17494:20;17491:1;17484:31;17534:4;17531:1;17524:15;17558:4;17555:1;17548:15;17574:168;17647:9;;;17678;;17695:15;;;17689:22;;17675:37;17665:71;;17716:18;;:::i;17747:398::-;17949:2;17931:21;;;17988:2;17968:18;;;17961:30;18027:34;18022:2;18007:18;;18000:62;-1:-1:-1;;;18093:2:143;18078:18;;18071:32;18135:3;18120:19;;17747:398::o;20030:135::-;20069:3;20090:17;;;20087:43;;20110:18;;:::i;:::-;-1:-1:-1;20157:1:143;20146:13;;20030:135::o;20170:301::-;20299:3;20337:6;20331:13;20383:6;20376:4;20368:6;20364:17;20359:3;20353:37;20445:1;20409:16;;20434:13;;;-1:-1:-1;20409:16:143;20170:301;-1:-1:-1;20170:301:143:o","linkReferences":{},"immutableReferences":{"39722":[{"start":9699,"length":32},{"start":9740,"length":32},{"start":10061,"length":32}]}},"methodIdentifiers":{"COMMITMENT_ADMIN()":"80e460f0","DEFAULT_ADMIN_ROLE()":"a217fddf","TRUSTED_ATTESTER()":"5db916ab","UPGRADE_INTERFACE_VERSION()":"ad3cb1cc","acceptGenesisCeremony()":"92a2ebf3","attesterRewardPoints(uint256,address)":"6f865294","batchGrantCommitmentAdmin(address[])":"4b47d955","batchGrantTrustedAttester(address[])":"cf6772ad","commitmentFirstSeenAt(uint256,bytes32)":"d7830688","commitmentStake(uint256,bytes32)":"c19b406c","commitments(uint256,address)":"e90d4c06","createSuperBlockCommitment(uint256,bytes32,bytes32)":"026583d7","forceLatestCommitment((uint256,bytes32,bytes32))":"08c7050f","getAcceptingEpoch()":"6c713af8","getAttesterRewardPoints(uint256,address)":"6978ab12","getAttesterStake(uint256,address)":"ba26513e","getAttesterStakeForAcceptingEpoch(address)":"491d0467","getCommitmentByAttester(uint256,address)":"f1949add","getCommitmentFirstSeenAt((uint256,bytes32,bytes32))":"e07472ef","getCustodianStake(uint256,address)":"1de38fe1","getCustodianStakeForAcceptingEpoch(address)":"d440116d","getEpochDuration()":"5d3ea8f1","getEpochStartTime()":"90879f64","getLastPostconfirmedSuperBlockHeight()":"59b99597","getMaxTolerableSuperBlockHeight()":"943b79e2","getMinCommitmentAgeForPostconfirmation()":"ab208ebd","getNextAcceptingEpochWithException()":"3752d675","getPostconfirmedCommitment(uint256)":"2bfd11d6","getPostconfirmer()":"35ea1c63","getPostconfirmerDuration()":"1241ebe3","getPostconfirmerPrivilegeDuration()":"028e490a","getPostconfirmerRewardPoints(uint256,address)":"ed8a1d59","getPostconfirmerStartTime()":"5f4d642e","getPresentEpoch()":"37d7f58f","getRoleAdmin(bytes32)":"248a9ca3","getStake(uint256,address,address)":"7aa81c2a","getStakeForAcceptingEpoch(address,address)":"bb04bd2f","getStakedAttestersForAcceptingEpoch()":"aa0d6fcd","getSuperBlockHeightAssignedEpoch(uint256)":"d283392e","getTotalStake(uint256)":"45367f23","getTotalStakeForAcceptingEpoch()":"14e38026","getValidatorCommitmentAtSuperBlockHeight(uint256,address)":"556d97c8","grantCommitmentAdmin(address)":"949d7c2a","grantRole(bytes32,address)":"2f2ff15d","grantTrustedAttester(address)":"81df1746","hasRole(bytes32,address)":"91d14854","initialize()":"8129fc1c","initialize(address,uint256,uint256,uint256,address[],uint256,address)":"107e21ca","isCommitted(uint256)":"e4a3fb74","isPostconfirmed(uint256)":"ec23ec2e","isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))":"0cf6b6bd","lastPostconfirmedSuperBlockHeight()":"fdafe9ca","leadingSuperBlockTolerance()":"03d3f7fd","minCommitmentAgeForPostconfirmation()":"bff92c8c","moveTokenAddress()":"58376877","openAttestationEnabled()":"ef9ae15c","postconfirmSuperBlocksAndRollover()":"26624e37","postconfirmedAtL1BlockHeight(uint256)":"7ac561c8","postconfirmedAtL1BlockHeightByPostconfirmer(uint256)":"7cfd8205","postconfirmedAtL1BlockTimestamp(uint256)":"a207fe2f","postconfirmedBy(uint256)":"91807e4f","postconfirmedByPostconfirmer(uint256)":"08750a32","postconfirmedSuperBlocks(uint256)":"eda67fc4","postconfirmedSuperBlocksVersion()":"ec18c186","postconfirmerDuration()":"4ceb2e66","postconfirmerPrivilegeDuration()":"55b8119d","postconfirmerRewardPoints(uint256,address)":"1db859c7","proxiableUUID()":"52d1902d","renounceRole(bytes32,address)":"36568abe","revokeRole(bytes32,address)":"d547741f","rewardPerAttestationPoint()":"5f83c7d5","rewardPerPostconfirmationPoint()":"d3eef4cc","setAcceptingEpoch(uint256)":"d03509ec","setMinCommitmentAgeForPostconfirmation(uint256)":"1f83e2a3","setOpenAttestationEnabled(bool)":"d2526fef","setPostconfirmedCommitmentAtBlockHeight((uint256,bytes32,bytes32))":"3119edd4","setPostconfirmerDuration(uint256)":"3d645927","setPostconfirmerPrivilegeDuration(uint256)":"da7d28b6","setRewardPerAttestationPoint(uint256)":"0d39f7f0","setRewardPerPostconfirmationPoint(uint256)":"57342282","stakingContract()":"ee99205c","submitBatchSuperBlockCommitment((uint256,bytes32,bytes32)[])":"622e3616","submitSuperBlockCommitment((uint256,bytes32,bytes32))":"0e74b609","superBlockHeightAssignedEpoch(uint256)":"85e6b8c2","supportsInterface(bytes4)":"01ffc9a7","upgradeToAndCall(address,bytes)":"4f1ef286","versionedPostconfirmedSuperBlocks(uint256,uint256)":"3ba18005"},"rawMetadata":"{\"compiler\":{\"version\":\"0.8.26+commit.8a97fa7a\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[],\"name\":\"AccessControlBadConfirmation\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"internalType\":\"bytes32\",\"name\":\"neededRole\",\"type\":\"bytes32\"}],\"name\":\"AccessControlUnauthorizedAccount\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"target\",\"type\":\"address\"}],\"name\":\"AddressEmptyCode\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"AttesterAlreadyCommitted\",\"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\":\"InvalidInitialization\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotInitializing\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PostconfirmerDurationTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PostconfirmerDurationTooLongForEpoch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UUPSUnauthorizedCallContext\",\"type\":\"error\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"slot\",\"type\":\"bytes32\"}],\"name\":\"UUPSUnsupportedProxiableUUID\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnacceptableSuperBlockCommitment\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"minCommitmentAgeForPostconfirmationTooLong\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"postconfirmerPrivilegeDurationTooLong\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"version\",\"type\":\"uint64\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"previousAdminRole\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"newAdminRole\",\"type\":\"bytes32\"}],\"name\":\"RoleAdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleGranted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"sender\",\"type\":\"address\"}],\"name\":\"RoleRevoked\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateCommitment\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"attesterStake\",\"type\":\"uint256\"}],\"name\":\"SuperBlockCommitmentSubmitted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"bytes32\",\"name\":\"blockHash\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"bytes32\",\"name\":\"stateCommitment\",\"type\":\"bytes32\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"SuperBlockPostconfirmed\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"inputs\":[],\"name\":\"COMMITMENT_ADMIN\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"DEFAULT_ADMIN_ROLE\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"TRUSTED_ATTESTER\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"UPGRADE_INTERFACE_VERSION\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"\",\"type\":\"string\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"acceptGenesisCeremony\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"attesterRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"points\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"accounts\",\"type\":\"address[]\"}],\"name\":\"batchGrantCommitmentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address[]\",\"name\":\"attesters\",\"type\":\"address[]\"}],\"name\":\"batchGrantTrustedAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"}],\"name\":\"commitmentFirstSeenAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"timestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitement\",\"type\":\"bytes32\"}],\"name\":\"commitmentStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"stake\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"commitments\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"name\":\"createSuperBlockCommitment\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"forceLatestCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getAttesterStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getCommitmentByAttester\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"getCommitmentFirstSeenAt\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"}],\"name\":\"getCustodianStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getEpochStartTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getLastPostconfirmedSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMaxTolerableSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getMinCommitmentAgeForPostconfirmation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getNextAcceptingEpochWithException\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"getPostconfirmedCommitment\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmer\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmerDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmerPrivilegeDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"postconfirmer\",\"type\":\"address\"}],\"name\":\"getPostconfirmerRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPostconfirmerStartTime\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getPresentEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"}],\"name\":\"getRoleAdmin\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"custodian\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getStakedAttestersForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"address[]\",\"name\":\"\",\"type\":\"address[]\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"getSuperBlockHeightAssignedEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"name\":\"getTotalStake\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getTotalStakeForAcceptingEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"getValidatorCommitmentAtSuperBlockHeight\",\"outputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"\",\"type\":\"tuple\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantCommitmentAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"grantRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"name\":\"grantTrustedAttester\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"hasRole\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract IMovementStaking\",\"name\":\"_stakingContract\",\"type\":\"address\"},{\"internalType\":\"uint256\",\"name\":\"_lastPostconfirmedSuperBlockHeight\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_leadingSuperBlockTolerance\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"_epochDuration\",\"type\":\"uint256\"},{\"internalType\":\"address[]\",\"name\":\"_custodians\",\"type\":\"address[]\"},{\"internalType\":\"uint256\",\"name\":\"_postconfirmerDuration\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"_moveTokenAddress\",\"type\":\"address\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"isCommitted\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"}],\"name\":\"isPostconfirmed\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"isWithinPostconfirmerPrivilegeDuration\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"lastPostconfirmedSuperBlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"leadingSuperBlockTolerance\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"minCommitmentAgeForPostconfirmation\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"moveTokenAddress\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"openAttestationEnabled\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmSuperBlocksAndRollover\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockHeight\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockHeight\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockHeightByPostconfirmer\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockHeight\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedAtL1BlockTimestamp\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"L1BlockTimestamp\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedBy\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"attester\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedByPostconfirmer\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"postconfirmedSuperBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmedSuperBlocksVersion\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmerDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"postconfirmerPrivilegeDuration\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"},{\"internalType\":\"address\",\"name\":\"postconfirmer\",\"type\":\"address\"}],\"name\":\"postconfirmerRewardPoints\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"points\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"callerConfirmation\",\"type\":\"address\"}],\"name\":\"renounceRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes32\",\"name\":\"role\",\"type\":\"bytes32\"},{\"internalType\":\"address\",\"name\":\"account\",\"type\":\"address\"}],\"name\":\"revokeRole\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPerAttestationPoint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"rewardPerPostconfirmationPoint\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"newEpoch\",\"type\":\"uint256\"}],\"name\":\"setAcceptingEpoch\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_minCommitmentAgeForPostconfirmation\",\"type\":\"uint256\"}],\"name\":\"setMinCommitmentAgeForPostconfirmation\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bool\",\"name\":\"enabled\",\"type\":\"bool\"}],\"name\":\"setOpenAttestationEnabled\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"setPostconfirmedCommitmentAtBlockHeight\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_postconfirmerDuration\",\"type\":\"uint256\"}],\"name\":\"setPostconfirmerDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"_postconfirmerPrivilegeDuration\",\"type\":\"uint256\"}],\"name\":\"setPostconfirmerPrivilegeDuration\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rewardPerPoint\",\"type\":\"uint256\"}],\"name\":\"setRewardPerAttestationPoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"rewardPerPoint\",\"type\":\"uint256\"}],\"name\":\"setRewardPerPostconfirmationPoint\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"stakingContract\",\"outputs\":[{\"internalType\":\"contract IMovementStaking\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment[]\",\"name\":\"superBlockCommitments\",\"type\":\"tuple[]\"}],\"name\":\"submitBatchSuperBlockCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"components\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"internalType\":\"struct PCPStorage.SuperBlockCommitment\",\"name\":\"superBlockCommitment\",\"type\":\"tuple\"}],\"name\":\"submitSuperBlockCommitment\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"superBlockHeightAssignedEpoch\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"epoch\",\"type\":\"uint256\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes4\",\"name\":\"interfaceId\",\"type\":\"bytes4\"}],\"name\":\"supportsInterface\",\"outputs\":[{\"internalType\":\"bool\",\"name\":\"\",\"type\":\"bool\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"\",\"type\":\"uint256\"},{\"internalType\":\"uint256\",\"name\":\"superBlockHeight\",\"type\":\"uint256\"}],\"name\":\"versionedPostconfirmedSuperBlocks\",\"outputs\":[{\"internalType\":\"uint256\",\"name\":\"height\",\"type\":\"uint256\"},{\"internalType\":\"bytes32\",\"name\":\"commitment\",\"type\":\"bytes32\"},{\"internalType\":\"bytes32\",\"name\":\"blockId\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"}],\"devdoc\":{\"errors\":{\"AccessControlBadConfirmation()\":[{\"details\":\"The caller of a function is not the expected one. NOTE: Don't confuse with {AccessControlUnauthorizedAccount}.\"}],\"AccessControlUnauthorizedAccount(address,bytes32)\":[{\"details\":\"The `account` is missing a role.\"}],\"AddressEmptyCode(address)\":[{\"details\":\"There's no code at `target` (it is not a contract).\"}],\"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.\"}],\"InvalidInitialization()\":[{\"details\":\"The contract is already initialized.\"}],\"NotInitializing()\":[{\"details\":\"The contract is not initializing.\"}],\"UUPSUnauthorizedCallContext()\":[{\"details\":\"The call is from an unauthorized context.\"}],\"UUPSUnsupportedProxiableUUID(bytes32)\":[{\"details\":\"The storage `slot` is unsupported as a UUID.\"}]},\"events\":{\"Initialized(uint64)\":{\"details\":\"Triggered when the contract has been initialized or reinitialized.\"},\"RoleAdminChanged(bytes32,bytes32,bytes32)\":{\"details\":\"Emitted when `newAdminRole` is set as ``role``'s admin role, replacing `previousAdminRole` `DEFAULT_ADMIN_ROLE` is the starting admin for all roles, despite {RoleAdminChanged} not being emitted signaling this.\"},\"RoleGranted(bytes32,address,address)\":{\"details\":\"Emitted when `account` is granted `role`. `sender` is the account that originated the contract call. This account bears the admin role (for the granted role). Expected in cases where the role was granted using the internal {AccessControl-_grantRole}.\"},\"RoleRevoked(bytes32,address,address)\":{\"details\":\"Emitted when `account` is revoked `role`. `sender` is the account that originated the contract call: - if using `revokeRole`, it is the admin role bearer - if using `renounceRole`, it is the role bearer (i.e. `account`)\"},\"Upgraded(address)\":{\"details\":\"Emitted when the implementation is upgraded.\"}},\"kind\":\"dev\",\"methods\":{\"getPostconfirmerPrivilegeDuration()\":{\"returns\":{\"_0\":\"The maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\"}},\"getRoleAdmin(bytes32)\":{\"details\":\"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}.\"},\"grantRole(bytes32,address)\":{\"details\":\"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event.\"},\"hasRole(bytes32,address)\":{\"details\":\"Returns `true` if `account` has been granted `role`.\"},\"initialize()\":{\"details\":\"Initialize the contract\"},\"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))\":{\"details\":\"The postconfirmer's privilege window is the time period when only the postconfirmer will get rewarded for postconfirmation\"},\"proxiableUUID()\":{\"details\":\"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\"},\"renounceRole(bytes32,address)\":{\"details\":\"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event.\"},\"revokeRole(bytes32,address)\":{\"details\":\"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event.\"},\"setAcceptingEpoch(uint256)\":{\"params\":{\"newEpoch\":\"The new accepting epoch value\"}},\"setMinCommitmentAgeForPostconfirmation(uint256)\":{\"params\":{\"_minCommitmentAgeForPostconfirmation\":\"New minimum commitment age \"}},\"setPostconfirmerDuration(uint256)\":{\"params\":{\"_postconfirmerDuration\":\"New postconfirmer term duration in time units\"}},\"setPostconfirmerPrivilegeDuration(uint256)\":{\"params\":{\"_postconfirmerPrivilegeDuration\":\"maximum time the postconfirmer is permitted to be non-reactive to an honest superBlock commitment\"}},\"supportsInterface(bytes4)\":{\"details\":\"See {IERC165-supportsInterface}.\"},\"upgradeToAndCall(address,bytes)\":{\"custom:oz-upgrades-unsafe-allow-reachable\":\"delegatecall\",\"details\":\"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event.\"}},\"version\":1},\"userdoc\":{\"errors\":{\"PostconfirmerDurationTooLong()\":[{\"notice\":\"Error thrown when postconfirmer term is greater than 256 blocks\"}],\"PostconfirmerDurationTooLongForEpoch()\":[{\"notice\":\"Error thrown when postconfirmer term is too large for epoch duration\"}],\"minCommitmentAgeForPostconfirmationTooLong()\":[{\"notice\":\"Error thrown when minimum commitment age is greater than epoch duration\"}],\"postconfirmerPrivilegeDurationTooLong()\":[{\"notice\":\"Error thrown when maximum postconfirmer non-reactivity time is greater than epoch duration\"}]},\"kind\":\"user\",\"methods\":{\"COMMITMENT_ADMIN()\":{\"notice\":\"The role that allows the commitment admin to set the accepting epoch\"},\"TRUSTED_ATTESTER()\":{\"notice\":\"The role that allows attesters to submit commitments\"},\"acceptGenesisCeremony()\":{\"notice\":\"Accepts the genesis ceremony.\"},\"getAcceptingEpoch()\":{\"notice\":\"get the accepting epoch\"},\"getAttesterRewardPoints(uint256,address)\":{\"notice\":\"Gets the reward points for an attester in a given epoch\"},\"getAttesterStake(uint256,address)\":{\"notice\":\"Gets the stake for a given attester at a given epoch\"},\"getAttesterStakeForAcceptingEpoch(address)\":{\"notice\":\"Gets the stake for a given attester at the accepting epoch\"},\"getCommitmentByAttester(uint256,address)\":{\"notice\":\"Gets the commitment submitted by an attester for a given height\"},\"getCommitmentFirstSeenAt((uint256,bytes32,bytes32))\":{\"notice\":\"get the timestamp when a commitment was first seen\"},\"getCustodianStake(uint256,address)\":{\"notice\":\"Gets the stake for a given custodian for a given epoch\"},\"getEpochDuration()\":{\"notice\":\"Gets the epoch duration\"},\"getEpochStartTime()\":{\"notice\":\"Gets the time at which the current epoch started\"},\"getLastPostconfirmedSuperBlockHeight()\":{\"notice\":\"Gets the height of the last postconfirmed superblock\"},\"getPostconfirmedCommitment(uint256)\":{\"notice\":\"get the postconfirmed commitment for a given height\"},\"getPostconfirmer()\":{\"notice\":\"Determines the postconfirmer in the accepting epoch using L1 block hash as a source of randomness\"},\"getPostconfirmerDuration()\":{\"notice\":\"Gets the postconfirmer duration\"},\"getPostconfirmerPrivilegeDuration()\":{\"notice\":\"Gets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\"},\"getPostconfirmerRewardPoints(uint256,address)\":{\"notice\":\"Gets the reward points for a postconfirmer in a given epoch\"},\"getPostconfirmerStartTime()\":{\"notice\":\"Gets the time at which the current postconfirmer's term started\"},\"getPresentEpoch()\":{\"notice\":\"get the present epoch\"},\"getStake(uint256,address,address)\":{\"notice\":\"Gets the stake for a given tuple (custodian, attester) at a given epoch\"},\"getStakeForAcceptingEpoch(address,address)\":{\"notice\":\"Gets the stake for a given tuple (custodian, attester) at the accepting epoch\"},\"getStakedAttestersForAcceptingEpoch()\":{\"notice\":\"Gets the attesters who have stake in the current accepting epoch\"},\"getSuperBlockHeightAssignedEpoch(uint256)\":{\"notice\":\"Gets the epoch assigned to a superblock height\"},\"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))\":{\"notice\":\"Checks, for a given superBlock commitment, if the current L1 block time is within the postconfirmer's privilege window\"},\"minCommitmentAgeForPostconfirmation()\":{\"notice\":\"Minimum time that must pass before a commitment can be postconfirmed\"},\"postconfirmSuperBlocksAndRollover()\":{\"notice\":\"postconfirm superblocks and rollover\"},\"postconfirmerDuration()\":{\"notice\":\"Postconfirmer term time in seconds. The postconfirmer remains the same for postconfirmerDuration period.\"},\"postconfirmerPrivilegeDuration()\":{\"notice\":\"Max time the postconfirmer can be non-reactive to an honest superBlock commitment\"},\"setAcceptingEpoch(uint256)\":{\"notice\":\"Sets the accepting epoch to a new value (must be higher than current)\"},\"setMinCommitmentAgeForPostconfirmation(uint256)\":{\"notice\":\"Sets the minimum time that must pass before a commitment can be postconfirmed\"},\"setPostconfirmerDuration(uint256)\":{\"notice\":\"Sets the postconfirmer term duration, must be less than epoch duration\"},\"setPostconfirmerPrivilegeDuration(uint256)\":{\"notice\":\"Sets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\"}},\"version\":1}},\"settings\":{\"compilationTarget\":{\"src/settlement/PCP.sol\":\"PCP\"},\"evmVersion\":\"cancun\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\"},\"optimizer\":{\"enabled\":true,\"runs\":200},\"remappings\":[\":@createx/=lib/createx/src/\",\":@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/\",\":@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/\",\":@safe-smart-account/=lib/safe-smart-account/\",\":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/\",\":murky/=lib/murky/\",\":openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/\",\":openzeppelin-contracts/=lib/openzeppelin-contracts/\",\":openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/\",\":openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/\",\":safe-smart-account/=lib/safe-smart-account/\",\":solady/=lib/createx/lib/solady/\",\":solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/\",\":solmate/=lib/solmate/src/\"]},\"sources\":{\"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol\":{\"keccak256\":\"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45\",\"dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN\"]},\"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/proxy/utils/UUPSUpgradeable.sol\":{\"keccak256\":\"0xd861907d1168dcaec2a7846edbaed12feb8bad2d6781dba987be01374f90b495\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://12ff809243040419e2fc2aa7ef0aaa60b3e6ebc901553ba1de970ceeef208c4c\",\"dweb:/ipfs/QmX2dwMVNrQAahqVzEx94gqcVB6Z8ovifPYdEfHZzj7aEb\"]},\"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol\":{\"keccak256\":\"0x5c54228bbb2f1f8616179c51bdb90b7960f4a3414c390ad5c6ead6763eb55a59\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://745fe72596bb8fde5f294d9d6b943db942202e4445536ee00da3ba011f876e86\",\"dweb:/ipfs/QmcjeESkk4rbhUVaSBfyq5f8rY56Jms1TwcJXaRD55K3UH\"]},\"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/introspection/ERC165Upgradeable.sol\":{\"keccak256\":\"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89\",\"dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr\"]},\"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol\":{\"keccak256\":\"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1\",\"dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol\":{\"keccak256\":\"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b\",\"dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol\":{\"keccak256\":\"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a\",\"dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol\":{\"keccak256\":\"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d\",\"dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7\"]},\"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol\":{\"keccak256\":\"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba\",\"dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol\":{\"keccak256\":\"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196\",\"dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA\"]},\"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC6093.sol\":{\"keccak256\":\"0x880da465c203cec76b10d72dbd87c80f387df4102274f23eea1f9c9b0918792b\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://399594cd8bb0143bc9e55e0f1d071d0d8c850a394fb7a319d50edd55d9ed822b\",\"dweb:/ipfs/QmbPZzgtT6LEm9CMqWfagQFwETbV1ztpECBB1DtQHrKiRz\"]},\"lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Utils.sol\":{\"keccak256\":\"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70\",\"dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2\"]},\"lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol\":{\"keccak256\":\"0xc59a78b07b44b2cf2e8ab4175fca91e8eca1eee2df7357b8d2a8833e5ea1f64c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://5aa4f07e65444784c29cd7bfcc2341b34381e4e5b5da9f0c5bd00d7f430e66fa\",\"dweb:/ipfs/QmWRMh4Q9DpaU9GvsiXmDdoNYMyyece9if7hnfLz7uqzWM\"]},\"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/utils/SafeERC20.sol\":{\"keccak256\":\"0x4ea01544758fd2c7045961904686bfe232d2220a04ecaa2d6b08dac17827febf\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://fabe6bef5167ae741dd8c22d7f81d3f9120bd61b290762a2e8f176712567d329\",\"dweb:/ipfs/QmSnEitJ6xmf1SSAUeZozD7Gx7h8bNnX3a1ZBzqeivsvVg\"]},\"lib/openzeppelin-contracts/contracts/utils/Address.sol\":{\"keccak256\":\"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e\",\"dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR\"]},\"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/ReentrancyGuard.sol\":{\"keccak256\":\"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a\",\"dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA\"]},\"lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol\":{\"keccak256\":\"0xcf74f855663ce2ae00ed8352666b7935f6cddea2932fdf2c3ecd30a9b1cd0e97\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://9f660b1f351b757dfe01438e59888f31f33ded3afcf5cb5b0d9bf9aa6f320a8b\",\"dweb:/ipfs/QmarDJ5hZEgBtCmmrVzEZWjub9769eD686jmzb2XpSU1cM\"]},\"lib/openzeppelin-contracts/contracts/utils/introspection/IERC165.sol\":{\"keccak256\":\"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621\",\"dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL\"]},\"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/structs/EnumerableSet.sol\":{\"keccak256\":\"0x9b161e97b8967d4bc0c08d25741889a30692cdda4b71910bf1b0e315f1962212\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://821500c39d095eaa25b06f46e65f1d0e97c4c96b39227f79077dee7d9e84051f\",\"dweb:/ipfs/QmSTeGorKzSWF6HAmxo32uCZiEuKNvreQdUiX1AaYtUMTz\"]},\"src/settlement/PCP.sol\":{\"keccak256\":\"0x719d69e9703c10631e01c0b6b56f2adb289153a5e162c7f5f2b2ec99170d6714\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://718c29e2962e0f79249a317767c960c9746c65eefe74bd27cb89454b4935030b\",\"dweb:/ipfs/QmdtbUuZyPsvLYGD9jQbkwN8q63NXLnjM2ZWrwzaGqaUbp\"]},\"src/settlement/PCPStorage.sol\":{\"keccak256\":\"0xf8531c966b1c84b009146a45614c016a1e4fe1d27d03d77ed97f5a6e728eb2a1\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://e6e97f51c06ee9d80c212c6f8c1b814ceec46df5836341249e4b6d31137f3cff\",\"dweb:/ipfs/QmVzSLbaveGiCFBLWWiPpR7Ta5xuF9rWhffDeTntwAfiss\"]},\"src/settlement/interfaces/IPCP.sol\":{\"keccak256\":\"0xf9247e3839660b3386697a2cd3882a4557ddc551929f01d8e877de6d2e4d0e89\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://54625a2912af7fa78ae3fb873f3a6db80fc6044d3f8994701d4845032032578f\",\"dweb:/ipfs/QmR5m72PohfHMeFFw2ASDQQgJhkeknbo9R2aGmEQU7a8zg\"]},\"src/settlement/settlement/BaseSettlement.sol\":{\"keccak256\":\"0xf3f6ea0ae8db122d1c6dade60057ea8fa03b8efc8108f03e48049bb9548d2c9a\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://e340fdd89c1872461ec0f98195ef56aaf583ebf2897890ee74c1eefad8e8c86e\",\"dweb:/ipfs/QmWCcRibYEJZEvY1ugrw7jkumrHNxr8z3dMeP457PkbJED\"]},\"src/staking/MovementStaking.sol\":{\"keccak256\":\"0xb61e04fbc6fce5f3d2e64269f2adccea1f27060f714259634ec20eab1cff468f\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://0bf80557c4c9156a247c44cc476c5747028fddd392f9d3e3c7cea1a7fac1f670\",\"dweb:/ipfs/QmQ6A6bPUsm2b7yy5eSsJ7MXgQGAF8zWEkJf7uL7sZNXi9\"]},\"src/staking/MovementStakingStorage.sol\":{\"keccak256\":\"0xcb909fbdd31da45891f983aca5387eff88693b31c60d304b6ab7c1128c814225\",\"license\":\"UNLICENSED\",\"urls\":[\"bzz-raw://fcfd3aadf8c9e714c6e0f5b8b7f6000b54a1a0eeb219d25cb23848411ae17edb\",\"dweb:/ipfs/QmTKyTFmGKHKWk1wKncaAvXBZH9MwJfkdhFbmTUAwTX7UP\"]},\"src/staking/base/BaseStaking.sol\":{\"keccak256\":\"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46\",\"dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx\"]},\"src/staking/interfaces/IMovementStaking.sol\":{\"keccak256\":\"0x250f5a72809b363ebefe5fbcdce50b62a9ff49672a863c8273e0fbe4d59f8933\",\"urls\":[\"bzz-raw://5a4385f838da317ce90fb84cdd83a724d132f7e6c287191673f4e2ce1a486bbe\",\"dweb:/ipfs/Qmbwq1kBumZDyREvc4ryHMNMQ4sgT39fNAK4bUNRoXqchj\"]},\"src/token/base/BaseToken.sol\":{\"keccak256\":\"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e\",\"dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd\"]},\"src/token/base/MintableToken.sol\":{\"keccak256\":\"0xba4c9b5e900564cb3abb081d11b95f23e5f39a5ee799cda54c9f1a49a7aa8a13\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://94ca441f7acc6b312fc3d1d6ce4dab9971fd1cdf176ae5251fe2f28c4c52a35a\",\"dweb:/ipfs/QmXAuDzaJqydZho7CFyKKKtyYATHedyAUHTKAS839oji3o\"]},\"src/token/base/WrappedToken.sol\":{\"keccak256\":\"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885\",\"dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4\"]},\"src/token/base/WrappedTokenStorage.sol\":{\"keccak256\":\"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08\",\"dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj\"]},\"src/token/custodian/CustodianToken.sol\":{\"keccak256\":\"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350\",\"license\":\"MIT\",\"urls\":[\"bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04\",\"dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv\"]}},\"version\":1}","metadata":{"compiler":{"version":"0.8.26+commit.8a97fa7a"},"language":"Solidity","output":{"abi":[{"inputs":[],"type":"error","name":"AccessControlBadConfirmation"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"neededRole","type":"bytes32"}],"type":"error","name":"AccessControlUnauthorizedAccount"},{"inputs":[{"internalType":"address","name":"target","type":"address"}],"type":"error","name":"AddressEmptyCode"},{"inputs":[],"type":"error","name":"AttesterAlreadyCommitted"},{"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":"InvalidInitialization"},{"inputs":[],"type":"error","name":"NotInitializing"},{"inputs":[],"type":"error","name":"PostconfirmerDurationTooLong"},{"inputs":[],"type":"error","name":"PostconfirmerDurationTooLongForEpoch"},{"inputs":[],"type":"error","name":"UUPSUnauthorizedCallContext"},{"inputs":[{"internalType":"bytes32","name":"slot","type":"bytes32"}],"type":"error","name":"UUPSUnsupportedProxiableUUID"},{"inputs":[],"type":"error","name":"UnacceptableSuperBlockCommitment"},{"inputs":[],"type":"error","name":"minCommitmentAgeForPostconfirmationTooLong"},{"inputs":[],"type":"error","name":"postconfirmerPrivilegeDurationTooLong"},{"inputs":[{"internalType":"uint64","name":"version","type":"uint64","indexed":false}],"type":"event","name":"Initialized","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"previousAdminRole","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"newAdminRole","type":"bytes32","indexed":true}],"type":"event","name":"RoleAdminChanged","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleGranted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32","indexed":true},{"internalType":"address","name":"account","type":"address","indexed":true},{"internalType":"address","name":"sender","type":"address","indexed":true}],"type":"event","name":"RoleRevoked","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"stateCommitment","type":"bytes32","indexed":false},{"internalType":"uint256","name":"attesterStake","type":"uint256","indexed":false}],"type":"event","name":"SuperBlockCommitmentSubmitted","anonymous":false},{"inputs":[{"internalType":"bytes32","name":"blockHash","type":"bytes32","indexed":true},{"internalType":"bytes32","name":"stateCommitment","type":"bytes32","indexed":false},{"internalType":"uint256","name":"height","type":"uint256","indexed":false}],"type":"event","name":"SuperBlockPostconfirmed","anonymous":false},{"inputs":[{"internalType":"address","name":"implementation","type":"address","indexed":true}],"type":"event","name":"Upgraded","anonymous":false},{"inputs":[],"stateMutability":"view","type":"function","name":"COMMITMENT_ADMIN","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"DEFAULT_ADMIN_ROLE","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"TRUSTED_ATTESTER","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"UPGRADE_INTERFACE_VERSION","outputs":[{"internalType":"string","name":"","type":"string"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"acceptGenesisCeremony"},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"attesterRewardPoints","outputs":[{"internalType":"uint256","name":"points","type":"uint256"}]},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"batchGrantCommitmentAdmin"},{"inputs":[{"internalType":"address[]","name":"attesters","type":"address[]"}],"stateMutability":"nonpayable","type":"function","name":"batchGrantTrustedAttester"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"}],"stateMutability":"view","type":"function","name":"commitmentFirstSeenAt","outputs":[{"internalType":"uint256","name":"timestamp","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"bytes32","name":"commitement","type":"bytes32"}],"stateMutability":"view","type":"function","name":"commitmentStake","outputs":[{"internalType":"uint256","name":"stake","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"commitments","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}],"stateMutability":"pure","type":"function","name":"createSuperBlockCommitment","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"forceLatestCommitment"},{"inputs":[],"stateMutability":"view","type":"function","name":"getAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterRewardPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getAttesterStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getCommitmentByAttester","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"view","type":"function","name":"getCommitmentFirstSeenAt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"custodian","type":"address"}],"stateMutability":"view","type":"function","name":"getCustodianStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getEpochDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getEpochStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getLastPostconfirmedSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getMaxTolerableSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getMinCommitmentAgeForPostconfirmation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getNextAcceptingEpochWithException","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"getPostconfirmedCommitment","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmer","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmerDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmerPrivilegeDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"postconfirmer","type":"address"}],"stateMutability":"view","type":"function","name":"getPostconfirmerRewardPoints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPostconfirmerStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getPresentEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"}],"stateMutability":"view","type":"function","name":"getRoleAdmin","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"address","name":"custodian","type":"address"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getStakedAttestersForAcceptingEpoch","outputs":[{"internalType":"address[]","name":"","type":"address[]"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"getSuperBlockHeightAssignedEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}],"stateMutability":"view","type":"function","name":"getTotalStake","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"getTotalStakeForAcceptingEpoch","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"view","type":"function","name":"getValidatorCommitmentAtSuperBlockHeight","outputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}]},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantCommitmentAdmin"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantRole"},{"inputs":[{"internalType":"address","name":"attester","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"grantTrustedAttester"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"view","type":"function","name":"hasRole","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"contract IMovementStaking","name":"_stakingContract","type":"address"},{"internalType":"uint256","name":"_lastPostconfirmedSuperBlockHeight","type":"uint256"},{"internalType":"uint256","name":"_leadingSuperBlockTolerance","type":"uint256"},{"internalType":"uint256","name":"_epochDuration","type":"uint256"},{"internalType":"address[]","name":"_custodians","type":"address[]"},{"internalType":"uint256","name":"_postconfirmerDuration","type":"uint256"},{"internalType":"address","name":"_moveTokenAddress","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"initialize"},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"isCommitted","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"height","type":"uint256"}],"stateMutability":"view","type":"function","name":"isPostconfirmed","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"view","type":"function","name":"isWithinPostconfirmerPrivilegeDuration","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"lastPostconfirmedSuperBlockHeight","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"leadingSuperBlockTolerance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"minCommitmentAgeForPostconfirmation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"moveTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"openAttestationEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[],"stateMutability":"nonpayable","type":"function","name":"postconfirmSuperBlocksAndRollover"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockHeight","outputs":[{"internalType":"uint256","name":"L1BlockHeight","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockHeightByPostconfirmer","outputs":[{"internalType":"uint256","name":"L1BlockHeight","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedAtL1BlockTimestamp","outputs":[{"internalType":"uint256","name":"L1BlockTimestamp","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedBy","outputs":[{"internalType":"address","name":"attester","type":"address"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedByPostconfirmer","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"postconfirmedSuperBlocks","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"postconfirmedSuperBlocksVersion","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"postconfirmerDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"postconfirmerPrivilegeDuration","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"epoch","type":"uint256"},{"internalType":"address","name":"postconfirmer","type":"address"}],"stateMutability":"view","type":"function","name":"postconfirmerRewardPoints","outputs":[{"internalType":"uint256","name":"points","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"proxiableUUID","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}]},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"callerConfirmation","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"renounceRole"},{"inputs":[{"internalType":"bytes32","name":"role","type":"bytes32"},{"internalType":"address","name":"account","type":"address"}],"stateMutability":"nonpayable","type":"function","name":"revokeRole"},{"inputs":[],"stateMutability":"view","type":"function","name":"rewardPerAttestationPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[],"stateMutability":"view","type":"function","name":"rewardPerPostconfirmationPoint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}]},{"inputs":[{"internalType":"uint256","name":"newEpoch","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setAcceptingEpoch"},{"inputs":[{"internalType":"uint256","name":"_minCommitmentAgeForPostconfirmation","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setMinCommitmentAgeForPostconfirmation"},{"inputs":[{"internalType":"bool","name":"enabled","type":"bool"}],"stateMutability":"nonpayable","type":"function","name":"setOpenAttestationEnabled"},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"setPostconfirmedCommitmentAtBlockHeight"},{"inputs":[{"internalType":"uint256","name":"_postconfirmerDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setPostconfirmerDuration"},{"inputs":[{"internalType":"uint256","name":"_postconfirmerPrivilegeDuration","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setPostconfirmerPrivilegeDuration"},{"inputs":[{"internalType":"uint256","name":"rewardPerPoint","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setRewardPerAttestationPoint"},{"inputs":[{"internalType":"uint256","name":"rewardPerPoint","type":"uint256"}],"stateMutability":"nonpayable","type":"function","name":"setRewardPerPostconfirmationPoint"},{"inputs":[],"stateMutability":"view","type":"function","name":"stakingContract","outputs":[{"internalType":"contract IMovementStaking","name":"","type":"address"}]},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment[]","name":"superBlockCommitments","type":"tuple[]","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"submitBatchSuperBlockCommitment"},{"inputs":[{"internalType":"struct PCPStorage.SuperBlockCommitment","name":"superBlockCommitment","type":"tuple","components":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"stateMutability":"nonpayable","type":"function","name":"submitSuperBlockCommitment"},{"inputs":[{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"superBlockHeightAssignedEpoch","outputs":[{"internalType":"uint256","name":"epoch","type":"uint256"}]},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"stateMutability":"view","type":"function","name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}]},{"inputs":[{"internalType":"address","name":"newImplementation","type":"address"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"payable","type":"function","name":"upgradeToAndCall"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"superBlockHeight","type":"uint256"}],"stateMutability":"view","type":"function","name":"versionedPostconfirmedSuperBlocks","outputs":[{"internalType":"uint256","name":"height","type":"uint256"},{"internalType":"bytes32","name":"commitment","type":"bytes32"},{"internalType":"bytes32","name":"blockId","type":"bytes32"}]}],"devdoc":{"kind":"dev","methods":{"getPostconfirmerPrivilegeDuration()":{"returns":{"_0":"The maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"}},"getRoleAdmin(bytes32)":{"details":"Returns the admin role that controls `role`. See {grantRole} and {revokeRole}. To change a role's admin, use {_setRoleAdmin}."},"grantRole(bytes32,address)":{"details":"Grants `role` to `account`. If `account` had not been already granted `role`, emits a {RoleGranted} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleGranted} event."},"hasRole(bytes32,address)":{"details":"Returns `true` if `account` has been granted `role`."},"initialize()":{"details":"Initialize the contract"},"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))":{"details":"The postconfirmer's privilege window is the time period when only the postconfirmer will get rewarded for postconfirmation"},"proxiableUUID()":{"details":"Implementation of the ERC-1822 {proxiableUUID} function. This returns the storage slot used by the implementation. It is used to validate the implementation's compatibility when performing an upgrade. IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier."},"renounceRole(bytes32,address)":{"details":"Revokes `role` from the calling account. Roles are often managed via {grantRole} and {revokeRole}: this function's purpose is to provide a mechanism for accounts to lose their privileges if they are compromised (such as when a trusted device is misplaced). If the calling account had been revoked `role`, emits a {RoleRevoked} event. Requirements: - the caller must be `callerConfirmation`. May emit a {RoleRevoked} event."},"revokeRole(bytes32,address)":{"details":"Revokes `role` from `account`. If `account` had been granted `role`, emits a {RoleRevoked} event. Requirements: - the caller must have ``role``'s admin role. May emit a {RoleRevoked} event."},"setAcceptingEpoch(uint256)":{"params":{"newEpoch":"The new accepting epoch value"}},"setMinCommitmentAgeForPostconfirmation(uint256)":{"params":{"_minCommitmentAgeForPostconfirmation":"New minimum commitment age "}},"setPostconfirmerDuration(uint256)":{"params":{"_postconfirmerDuration":"New postconfirmer term duration in time units"}},"setPostconfirmerPrivilegeDuration(uint256)":{"params":{"_postconfirmerPrivilegeDuration":"maximum time the postconfirmer is permitted to be non-reactive to an honest superBlock commitment"}},"supportsInterface(bytes4)":{"details":"See {IERC165-supportsInterface}."},"upgradeToAndCall(address,bytes)":{"custom:oz-upgrades-unsafe-allow-reachable":"delegatecall","details":"Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call encoded in `data`. Calls {_authorizeUpgrade}. Emits an {Upgraded} event."}},"version":1},"userdoc":{"kind":"user","methods":{"COMMITMENT_ADMIN()":{"notice":"The role that allows the commitment admin to set the accepting epoch"},"TRUSTED_ATTESTER()":{"notice":"The role that allows attesters to submit commitments"},"acceptGenesisCeremony()":{"notice":"Accepts the genesis ceremony."},"getAcceptingEpoch()":{"notice":"get the accepting epoch"},"getAttesterRewardPoints(uint256,address)":{"notice":"Gets the reward points for an attester in a given epoch"},"getAttesterStake(uint256,address)":{"notice":"Gets the stake for a given attester at a given epoch"},"getAttesterStakeForAcceptingEpoch(address)":{"notice":"Gets the stake for a given attester at the accepting epoch"},"getCommitmentByAttester(uint256,address)":{"notice":"Gets the commitment submitted by an attester for a given height"},"getCommitmentFirstSeenAt((uint256,bytes32,bytes32))":{"notice":"get the timestamp when a commitment was first seen"},"getCustodianStake(uint256,address)":{"notice":"Gets the stake for a given custodian for a given epoch"},"getEpochDuration()":{"notice":"Gets the epoch duration"},"getEpochStartTime()":{"notice":"Gets the time at which the current epoch started"},"getLastPostconfirmedSuperBlockHeight()":{"notice":"Gets the height of the last postconfirmed superblock"},"getPostconfirmedCommitment(uint256)":{"notice":"get the postconfirmed commitment for a given height"},"getPostconfirmer()":{"notice":"Determines the postconfirmer in the accepting epoch using L1 block hash as a source of randomness"},"getPostconfirmerDuration()":{"notice":"Gets the postconfirmer duration"},"getPostconfirmerPrivilegeDuration()":{"notice":"Gets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"},"getPostconfirmerRewardPoints(uint256,address)":{"notice":"Gets the reward points for a postconfirmer in a given epoch"},"getPostconfirmerStartTime()":{"notice":"Gets the time at which the current postconfirmer's term started"},"getPresentEpoch()":{"notice":"get the present epoch"},"getStake(uint256,address,address)":{"notice":"Gets the stake for a given tuple (custodian, attester) at a given epoch"},"getStakeForAcceptingEpoch(address,address)":{"notice":"Gets the stake for a given tuple (custodian, attester) at the accepting epoch"},"getStakedAttestersForAcceptingEpoch()":{"notice":"Gets the attesters who have stake in the current accepting epoch"},"getSuperBlockHeightAssignedEpoch(uint256)":{"notice":"Gets the epoch assigned to a superblock height"},"isWithinPostconfirmerPrivilegeDuration((uint256,bytes32,bytes32))":{"notice":"Checks, for a given superBlock commitment, if the current L1 block time is within the postconfirmer's privilege window"},"minCommitmentAgeForPostconfirmation()":{"notice":"Minimum time that must pass before a commitment can be postconfirmed"},"postconfirmSuperBlocksAndRollover()":{"notice":"postconfirm superblocks and rollover"},"postconfirmerDuration()":{"notice":"Postconfirmer term time in seconds. The postconfirmer remains the same for postconfirmerDuration period."},"postconfirmerPrivilegeDuration()":{"notice":"Max time the postconfirmer can be non-reactive to an honest superBlock commitment"},"setAcceptingEpoch(uint256)":{"notice":"Sets the accepting epoch to a new value (must be higher than current)"},"setMinCommitmentAgeForPostconfirmation(uint256)":{"notice":"Sets the minimum time that must pass before a commitment can be postconfirmed"},"setPostconfirmerDuration(uint256)":{"notice":"Sets the postconfirmer term duration, must be less than epoch duration"},"setPostconfirmerPrivilegeDuration(uint256)":{"notice":"Sets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"}},"version":1}},"settings":{"remappings":["@createx/=lib/createx/src/","@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/","@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/","@safe-smart-account/=lib/safe-smart-account/","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/","murky/=lib/murky/","openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/","openzeppelin-contracts/=lib/openzeppelin-contracts/","openzeppelin-foundry-upgrades/=lib/openzeppelin-foundry-upgrades/src/","openzeppelin/=lib/createx/lib/openzeppelin-contracts/contracts/","safe-smart-account/=lib/safe-smart-account/","solady/=lib/createx/lib/solady/","solidity-stringutils/=lib/openzeppelin-foundry-upgrades/lib/solidity-stringutils/","solmate/=lib/solmate/src/"],"optimizer":{"enabled":true,"runs":200},"metadata":{"bytecodeHash":"ipfs"},"compilationTarget":{"src/settlement/PCP.sol":"PCP"},"evmVersion":"cancun","libraries":{}},"sources":{"lib/openzeppelin-contracts-upgradeable/contracts/access/AccessControlUpgradeable.sol":{"keccak256":"0x6662ec4e5cefca03eeadd073e9469df8d2944bb2ee8ec8f7622c2c46aab5f225","urls":["bzz-raw://4d8544c6f8daa4d1bc215c6a72fe0acdb748664a105b0e5efc19295667521d45","dweb:/ipfs/QmdGWqdnXT8S3RgCR6aV8XHZrsybieMQLLnug1NtpSjEXN"],"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/proxy/utils/UUPSUpgradeable.sol":{"keccak256":"0xd861907d1168dcaec2a7846edbaed12feb8bad2d6781dba987be01374f90b495","urls":["bzz-raw://12ff809243040419e2fc2aa7ef0aaa60b3e6ebc901553ba1de970ceeef208c4c","dweb:/ipfs/QmX2dwMVNrQAahqVzEx94gqcVB6Z8ovifPYdEfHZzj7aEb"],"license":"MIT"},"lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol":{"keccak256":"0x5c54228bbb2f1f8616179c51bdb90b7960f4a3414c390ad5c6ead6763eb55a59","urls":["bzz-raw://745fe72596bb8fde5f294d9d6b943db942202e4445536ee00da3ba011f876e86","dweb:/ipfs/QmcjeESkk4rbhUVaSBfyq5f8rY56Jms1TwcJXaRD55K3UH"],"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/introspection/ERC165Upgradeable.sol":{"keccak256":"0xc8ed8d2056934b7675b695dec032f2920c2f5c6cf33a17ca85650940675323ab","urls":["bzz-raw://3c8ccc75d1cd792d192aa09e54dd49ea35fe85baa9fcd17486f29227d9f29b89","dweb:/ipfs/QmbboSbFUEiM9tdEgBwuTRb7bykFoJXZ7dsSr1PSREJXMr"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/access/IAccessControl.sol":{"keccak256":"0xc1c2a7f1563b77050dc6d507db9f4ada5d042c1f6a9ddbffdc49c77cdc0a1606","urls":["bzz-raw://fd54abb96a6156d9a761f6fdad1d3004bc48d2d4fce47f40a3f91a7ae83fc3a1","dweb:/ipfs/QmUrFSGkTDJ7WaZ6qPVVe3Gn5uN2viPb7x7QQ35UX4DofX"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1363.sol":{"keccak256":"0x9b6b3e7803bc5f2f8cd7ad57db8ac1def61a9930a5a3107df4882e028a9605d7","urls":["bzz-raw://da62d6be1f5c6edf577f0cb45666a8aa9c2086a4bac87d95d65f02e2f4c36a4b","dweb:/ipfs/QmNkpvBpoCMvX8JwAFNSc5XxJ2q5BXJpL5L1txb4QkqVFF"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC165.sol":{"keccak256":"0xde7e9fd9aee8d4f40772f96bb3b58836cbc6dfc0227014a061947f8821ea9724","urls":["bzz-raw://11fea9f8bc98949ac6709f0c1699db7430d2948137aa94d5a9e95a91f61a710a","dweb:/ipfs/QmQdfRXxQjwP6yn3DVo1GHPpriKNcFghSPi94Z1oKEFUNS"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC1967.sol":{"keccak256":"0xb25a4f11fa80c702bf5cd85adec90e6f6f507f32f4a8e6f5dbc31e8c10029486","urls":["bzz-raw://6917f8a323e7811f041aecd4d9fd6e92455a6fba38a797ac6f6e208c7912b79d","dweb:/ipfs/QmShuYv55wYHGi4EFkDB8QfF7ZCHoKk2efyz3AWY1ExSq7"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/IERC20.sol":{"keccak256":"0xce41876e78d1badc0512229b4d14e4daf83bc1003d7f83978d18e0e56f965b9c","urls":["bzz-raw://a2608291cb038b388d80b79a06b6118a42f7894ff67b7da10ec0dbbf5b2973ba","dweb:/ipfs/QmWohqcBLbcxmA4eGPhZDXe5RYMMEEpFq22nfkaUMvTfw1"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol":{"keccak256":"0xc42facb5094f2f35f066a7155bda23545e39a3156faef3ddc00185544443ba7d","urls":["bzz-raw://d3b36282ab029b46bd082619a308a2ea11c309967b9425b7b7a6eb0b0c1c3196","dweb:/ipfs/QmP2YVfDB2FoREax3vJu7QhDnyYRMw52WPrCD4vdT2kuDA"],"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/proxy/ERC1967/ERC1967Utils.sol":{"keccak256":"0x8decfa54cec979c824b044b8128cd91d713f72c71fd7dfa54974624d8c949898","urls":["bzz-raw://271f914261a19d87117a777e0924ada545c16191ef9b00cc40b0134fc14ebc70","dweb:/ipfs/QmdvVNWHGHQrGGPonZJs5NuzTevTjZRM2zayKrDJf7WBA2"],"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/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/utils/SafeERC20.sol":{"keccak256":"0x4ea01544758fd2c7045961904686bfe232d2220a04ecaa2d6b08dac17827febf","urls":["bzz-raw://fabe6bef5167ae741dd8c22d7f81d3f9120bd61b290762a2e8f176712567d329","dweb:/ipfs/QmSnEitJ6xmf1SSAUeZozD7Gx7h8bNnX3a1ZBzqeivsvVg"],"license":"MIT"},"lib/openzeppelin-contracts/contracts/utils/Address.sol":{"keccak256":"0xaaa1d17c1129b127a4a401db2fbd72960e2671474be3d08cae71ccdc42f7624c","urls":["bzz-raw://cb2f27cd3952aa667e198fba0d9b7bcec52fbb12c16f013c25fe6fb52b29cc0e","dweb:/ipfs/QmeuohBFoeyDPZA9JNCTEDz3VBfBD4EABWuWXVhHAuEpKR"],"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/ReentrancyGuard.sol":{"keccak256":"0x11a5a79827df29e915a12740caf62fe21ebe27c08c9ae3e09abe9ee3ba3866d3","urls":["bzz-raw://3cf0c69ab827e3251db9ee6a50647d62c90ba580a4d7bbff21f2bea39e7b2f4a","dweb:/ipfs/QmZiKwtKU1SBX4RGfQtY7PZfiapbbu6SZ9vizGQD9UHjRA"],"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/introspection/IERC165.sol":{"keccak256":"0x79796192ec90263f21b464d5bc90b777a525971d3de8232be80d9c4f9fb353b8","urls":["bzz-raw://f6fda447a62815e8064f47eff0dd1cf58d9207ad69b5d32280f8d7ed1d1e4621","dweb:/ipfs/QmfDRc7pxfaXB2Dh9np5Uf29Na3pQ7tafRS684wd3GLjVL"],"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/structs/EnumerableSet.sol":{"keccak256":"0x9b161e97b8967d4bc0c08d25741889a30692cdda4b71910bf1b0e315f1962212","urls":["bzz-raw://821500c39d095eaa25b06f46e65f1d0e97c4c96b39227f79077dee7d9e84051f","dweb:/ipfs/QmSTeGorKzSWF6HAmxo32uCZiEuKNvreQdUiX1AaYtUMTz"],"license":"MIT"},"src/settlement/PCP.sol":{"keccak256":"0x719d69e9703c10631e01c0b6b56f2adb289153a5e162c7f5f2b2ec99170d6714","urls":["bzz-raw://718c29e2962e0f79249a317767c960c9746c65eefe74bd27cb89454b4935030b","dweb:/ipfs/QmdtbUuZyPsvLYGD9jQbkwN8q63NXLnjM2ZWrwzaGqaUbp"],"license":"UNLICENSED"},"src/settlement/PCPStorage.sol":{"keccak256":"0xf8531c966b1c84b009146a45614c016a1e4fe1d27d03d77ed97f5a6e728eb2a1","urls":["bzz-raw://e6e97f51c06ee9d80c212c6f8c1b814ceec46df5836341249e4b6d31137f3cff","dweb:/ipfs/QmVzSLbaveGiCFBLWWiPpR7Ta5xuF9rWhffDeTntwAfiss"],"license":"UNLICENSED"},"src/settlement/interfaces/IPCP.sol":{"keccak256":"0xf9247e3839660b3386697a2cd3882a4557ddc551929f01d8e877de6d2e4d0e89","urls":["bzz-raw://54625a2912af7fa78ae3fb873f3a6db80fc6044d3f8994701d4845032032578f","dweb:/ipfs/QmR5m72PohfHMeFFw2ASDQQgJhkeknbo9R2aGmEQU7a8zg"],"license":"UNLICENSED"},"src/settlement/settlement/BaseSettlement.sol":{"keccak256":"0xf3f6ea0ae8db122d1c6dade60057ea8fa03b8efc8108f03e48049bb9548d2c9a","urls":["bzz-raw://e340fdd89c1872461ec0f98195ef56aaf583ebf2897890ee74c1eefad8e8c86e","dweb:/ipfs/QmWCcRibYEJZEvY1ugrw7jkumrHNxr8z3dMeP457PkbJED"],"license":"MIT"},"src/staking/MovementStaking.sol":{"keccak256":"0xb61e04fbc6fce5f3d2e64269f2adccea1f27060f714259634ec20eab1cff468f","urls":["bzz-raw://0bf80557c4c9156a247c44cc476c5747028fddd392f9d3e3c7cea1a7fac1f670","dweb:/ipfs/QmQ6A6bPUsm2b7yy5eSsJ7MXgQGAF8zWEkJf7uL7sZNXi9"],"license":"UNLICENSED"},"src/staking/MovementStakingStorage.sol":{"keccak256":"0xcb909fbdd31da45891f983aca5387eff88693b31c60d304b6ab7c1128c814225","urls":["bzz-raw://fcfd3aadf8c9e714c6e0f5b8b7f6000b54a1a0eeb219d25cb23848411ae17edb","dweb:/ipfs/QmTKyTFmGKHKWk1wKncaAvXBZH9MwJfkdhFbmTUAwTX7UP"],"license":"UNLICENSED"},"src/staking/base/BaseStaking.sol":{"keccak256":"0xcc7c1baccebcaba33330c5db4a3aa5d54b32868f164673a086177b5470e10393","urls":["bzz-raw://1c47c580b7201a4d2f35f008eb8f9c8097b7abc1c0b74839199772ded16fae46","dweb:/ipfs/QmX6sMDNE7cKmTHx5RWK5TP8HdD8s2TNq1aRNwPzRC2jkx"],"license":"MIT"},"src/staking/interfaces/IMovementStaking.sol":{"keccak256":"0x250f5a72809b363ebefe5fbcdce50b62a9ff49672a863c8273e0fbe4d59f8933","urls":["bzz-raw://5a4385f838da317ce90fb84cdd83a724d132f7e6c287191673f4e2ce1a486bbe","dweb:/ipfs/Qmbwq1kBumZDyREvc4ryHMNMQ4sgT39fNAK4bUNRoXqchj"],"license":null},"src/token/base/BaseToken.sol":{"keccak256":"0xf47bfe91857c06043635af03e8eef52d36c2ff970bcc420c8fa0572f718664d2","urls":["bzz-raw://ceb98dc7f78b559ae04b9cc7c65a426e55a64bd2db941b13d2b814719ac65d3e","dweb:/ipfs/QmY4DVSwG9rGTNLxSfQavCEV9cLpmnkpBPgubRgKBxHejd"],"license":"MIT"},"src/token/base/MintableToken.sol":{"keccak256":"0xba4c9b5e900564cb3abb081d11b95f23e5f39a5ee799cda54c9f1a49a7aa8a13","urls":["bzz-raw://94ca441f7acc6b312fc3d1d6ce4dab9971fd1cdf176ae5251fe2f28c4c52a35a","dweb:/ipfs/QmXAuDzaJqydZho7CFyKKKtyYATHedyAUHTKAS839oji3o"],"license":"MIT"},"src/token/base/WrappedToken.sol":{"keccak256":"0xe32d7f47c165b1c21da0319e7d632e9a478709f07f5cb7293f2aef0420f38b45","urls":["bzz-raw://91f4a0290180838ac34fab4ae4c789f508b354f5cb4adf1931908a31eb614885","dweb:/ipfs/QmYy9GGtLjmBx8NUqntJr2tAj7LUMFzSRDsW6EmSJAndF4"],"license":"MIT"},"src/token/base/WrappedTokenStorage.sol":{"keccak256":"0xeaa1a9441688bc87ece3e191d01b8aa13a0044d4b11a5d37a4dd5f12d7c8716e","urls":["bzz-raw://88c66bbf501b9e09bbd2a30c6aa19224b5832abda864fdf8fefdc66b6c09ae08","dweb:/ipfs/QmZN7vHW2oFKx7cjWMqBeRBdEyTfr5dScgaTwswBW1PRjj"],"license":"MIT"},"src/token/custodian/CustodianToken.sol":{"keccak256":"0xc116fca556833072dcec2ad7f88859dd82de4333f76718d4c2b4323f3229a350","urls":["bzz-raw://61f1b983460735b20d06d076609b5a01a45a937c04a0c02a84bbfb4d0b31bc04","dweb:/ipfs/QmVm5WawyxcN7Zj4nEViNtcSEgAbPCH8wdb1zgGbiZjwTv"],"license":"MIT"}},"version":1},"storageLayout":{"storage":[{"astId":60268,"contract":"src/settlement/PCP.sol:PCP","label":"stakingContract","offset":0,"slot":"0","type":"t_contract(IMovementStaking)62796"},{"astId":60270,"contract":"src/settlement/PCP.sol:PCP","label":"moveTokenAddress","offset":0,"slot":"1","type":"t_address"},{"astId":60272,"contract":"src/settlement/PCP.sol:PCP","label":"leadingSuperBlockTolerance","offset":0,"slot":"2","type":"t_uint256"},{"astId":60274,"contract":"src/settlement/PCP.sol:PCP","label":"lastPostconfirmedSuperBlockHeight","offset":0,"slot":"3","type":"t_uint256"},{"astId":60277,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmerDuration","offset":0,"slot":"4","type":"t_uint256"},{"astId":60280,"contract":"src/settlement/PCP.sol:PCP","label":"minCommitmentAgeForPostconfirmation","offset":0,"slot":"5","type":"t_uint256"},{"astId":60283,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmerPrivilegeDuration","offset":0,"slot":"6","type":"t_uint256"},{"astId":60295,"contract":"src/settlement/PCP.sol:PCP","label":"superBlockHeightAssignedEpoch","offset":0,"slot":"7","type":"t_mapping(t_uint256,t_uint256)"},{"astId":60302,"contract":"src/settlement/PCP.sol:PCP","label":"commitments","offset":0,"slot":"8","type":"t_mapping(t_uint256,t_mapping(t_address,t_struct(SuperBlockCommitment)60291_storage))"},{"astId":60308,"contract":"src/settlement/PCP.sol:PCP","label":"commitmentStake","offset":0,"slot":"9","type":"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))"},{"astId":60314,"contract":"src/settlement/PCP.sol:PCP","label":"commitmentFirstSeenAt","offset":0,"slot":"10","type":"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))"},{"astId":60318,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedBy","offset":0,"slot":"11","type":"t_mapping(t_uint256,t_address)"},{"astId":60322,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedByPostconfirmer","offset":0,"slot":"12","type":"t_mapping(t_uint256,t_bool)"},{"astId":60326,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedAtL1BlockHeight","offset":0,"slot":"13","type":"t_mapping(t_uint256,t_uint256)"},{"astId":60330,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedAtL1BlockTimestamp","offset":0,"slot":"14","type":"t_mapping(t_uint256,t_uint256)"},{"astId":60334,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedAtL1BlockHeightByPostconfirmer","offset":0,"slot":"15","type":"t_mapping(t_uint256,t_uint256)"},{"astId":60339,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedSuperBlocks","offset":0,"slot":"16","type":"t_mapping(t_uint256,t_struct(SuperBlockCommitment)60291_storage)"},{"astId":60341,"contract":"src/settlement/PCP.sol:PCP","label":"openAttestationEnabled","offset":0,"slot":"17","type":"t_bool"},{"astId":60348,"contract":"src/settlement/PCP.sol:PCP","label":"versionedPostconfirmedSuperBlocks","offset":0,"slot":"18","type":"t_mapping(t_uint256,t_mapping(t_uint256,t_struct(SuperBlockCommitment)60291_storage))"},{"astId":60350,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmedSuperBlocksVersion","offset":0,"slot":"19","type":"t_uint256"},{"astId":60356,"contract":"src/settlement/PCP.sol:PCP","label":"attesterRewardPoints","offset":0,"slot":"20","type":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},{"astId":60362,"contract":"src/settlement/PCP.sol:PCP","label":"postconfirmerRewardPoints","offset":0,"slot":"21","type":"t_mapping(t_uint256,t_mapping(t_address,t_uint256))"},{"astId":60364,"contract":"src/settlement/PCP.sol:PCP","label":"rewardPerAttestationPoint","offset":0,"slot":"22","type":"t_uint256"},{"astId":60366,"contract":"src/settlement/PCP.sol:PCP","label":"rewardPerPostconfirmationPoint","offset":0,"slot":"23","type":"t_uint256"},{"astId":60370,"contract":"src/settlement/PCP.sol:PCP","label":"__gap","offset":0,"slot":"24","type":"t_array(t_uint256)45_storage"}],"types":{"t_address":{"encoding":"inplace","label":"address","numberOfBytes":"20"},"t_array(t_uint256)45_storage":{"encoding":"inplace","label":"uint256[45]","numberOfBytes":"1440","base":"t_uint256"},"t_bool":{"encoding":"inplace","label":"bool","numberOfBytes":"1"},"t_bytes32":{"encoding":"inplace","label":"bytes32","numberOfBytes":"32"},"t_contract(IMovementStaking)62796":{"encoding":"inplace","label":"contract IMovementStaking","numberOfBytes":"20"},"t_mapping(t_address,t_struct(SuperBlockCommitment)60291_storage)":{"encoding":"mapping","key":"t_address","label":"mapping(address => struct PCPStorage.SuperBlockCommitment)","numberOfBytes":"32","value":"t_struct(SuperBlockCommitment)60291_storage"},"t_mapping(t_address,t_uint256)":{"encoding":"mapping","key":"t_address","label":"mapping(address => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_bytes32,t_uint256)":{"encoding":"mapping","key":"t_bytes32","label":"mapping(bytes32 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_mapping(t_uint256,t_address)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => address)","numberOfBytes":"32","value":"t_address"},"t_mapping(t_uint256,t_bool)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => bool)","numberOfBytes":"32","value":"t_bool"},"t_mapping(t_uint256,t_mapping(t_address,t_struct(SuperBlockCommitment)60291_storage))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment))","numberOfBytes":"32","value":"t_mapping(t_address,t_struct(SuperBlockCommitment)60291_storage)"},"t_mapping(t_uint256,t_mapping(t_address,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(address => uint256))","numberOfBytes":"32","value":"t_mapping(t_address,t_uint256)"},"t_mapping(t_uint256,t_mapping(t_bytes32,t_uint256))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(bytes32 => uint256))","numberOfBytes":"32","value":"t_mapping(t_bytes32,t_uint256)"},"t_mapping(t_uint256,t_mapping(t_uint256,t_struct(SuperBlockCommitment)60291_storage))":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment))","numberOfBytes":"32","value":"t_mapping(t_uint256,t_struct(SuperBlockCommitment)60291_storage)"},"t_mapping(t_uint256,t_struct(SuperBlockCommitment)60291_storage)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment)","numberOfBytes":"32","value":"t_struct(SuperBlockCommitment)60291_storage"},"t_mapping(t_uint256,t_uint256)":{"encoding":"mapping","key":"t_uint256","label":"mapping(uint256 => uint256)","numberOfBytes":"32","value":"t_uint256"},"t_struct(SuperBlockCommitment)60291_storage":{"encoding":"inplace","label":"struct PCPStorage.SuperBlockCommitment","numberOfBytes":"96","members":[{"astId":60286,"contract":"src/settlement/PCP.sol:PCP","label":"height","offset":0,"slot":"0","type":"t_uint256"},{"astId":60288,"contract":"src/settlement/PCP.sol:PCP","label":"commitment","offset":0,"slot":"1","type":"t_bytes32"},{"astId":60290,"contract":"src/settlement/PCP.sol:PCP","label":"blockId","offset":0,"slot":"2","type":"t_bytes32"}]},"t_uint256":{"encoding":"inplace","label":"uint256","numberOfBytes":"32"}}},"ast":{"absolutePath":"src/settlement/PCP.sol","id":60259,"exportedSymbols":{"BaseSettlement":[60525],"EnumerableSet":[50663],"IMovementStaking":[62796],"IPCP":[60470],"Initializable":[39702],"MovementStaking":[62379],"PCP":[60258],"PCPStorage":[60371],"ReentrancyGuard":[44753]},"nodeType":"SourceUnit","src":"39:35067:110","nodes":[{"id":58478,"nodeType":"PragmaDirective","src":"39:24:110","nodes":[],"literals":["solidity","^","0.8",".13"]},{"id":58480,"nodeType":"ImportDirective","src":"65:86:110","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol","file":"@openzeppelin/contracts/utils/structs/EnumerableSet.sol","nameLocation":"-1:-1:-1","scope":60259,"sourceUnit":50664,"symbolAliases":[{"foreign":{"id":58479,"name":"EnumerableSet","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":50663,"src":"73:13:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":58482,"nodeType":"ImportDirective","src":"152:96:110","nodes":[],"absolutePath":"lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol","file":"@openzeppelin/contracts-upgradeable/proxy/utils/Initializable.sol","nameLocation":"-1:-1:-1","scope":60259,"sourceUnit":39703,"symbolAliases":[{"foreign":{"id":58481,"name":"Initializable","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39702,"src":"160:13:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":58485,"nodeType":"ImportDirective","src":"249:81:110","nodes":[],"absolutePath":"src/staking/MovementStaking.sol","file":"../staking/MovementStaking.sol","nameLocation":"-1:-1:-1","scope":60259,"sourceUnit":62380,"symbolAliases":[{"foreign":{"id":58483,"name":"MovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62379,"src":"257:15:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"},{"foreign":{"id":58484,"name":"IMovementStaking","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":62796,"src":"274:16:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":58487,"nodeType":"ImportDirective","src":"331:44:110","nodes":[],"absolutePath":"src/settlement/PCPStorage.sol","file":"./PCPStorage.sol","nameLocation":"-1:-1:-1","scope":60259,"sourceUnit":60372,"symbolAliases":[{"foreign":{"id":58486,"name":"PCPStorage","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60371,"src":"339:10:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":58489,"nodeType":"ImportDirective","src":"376:63:110","nodes":[],"absolutePath":"src/settlement/settlement/BaseSettlement.sol","file":"./settlement/BaseSettlement.sol","nameLocation":"-1:-1:-1","scope":60259,"sourceUnit":60526,"symbolAliases":[{"foreign":{"id":58488,"name":"BaseSettlement","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60525,"src":"384:14:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":58491,"nodeType":"ImportDirective","src":"440:43:110","nodes":[],"absolutePath":"src/settlement/interfaces/IPCP.sol","file":"./interfaces/IPCP.sol","nameLocation":"-1:-1:-1","scope":60259,"sourceUnit":60471,"symbolAliases":[{"foreign":{"id":58490,"name":"IPCP","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60470,"src":"448:4:110","typeDescriptions":{}},"nameLocation":"-1:-1:-1"}],"unitAlias":""},{"id":58492,"nodeType":"ImportDirective","src":"484:59:110","nodes":[],"absolutePath":"lib/openzeppelin-contracts/contracts/utils/ReentrancyGuard.sol","file":"@openzeppelin/contracts/utils/ReentrancyGuard.sol","nameLocation":"-1:-1:-1","scope":60259,"sourceUnit":44754,"symbolAliases":[],"unitAlias":""},{"id":60258,"nodeType":"ContractDefinition","src":"545:34560:110","nodes":[{"id":58505,"nodeType":"VariableDeclaration","src":"654:72:110","nodes":[],"baseFunctions":[60469],"constant":true,"functionSelector":"80e460f0","mutability":"constant","name":"COMMITMENT_ADMIN","nameLocation":"678:16:110","scope":60258,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":58501,"name":"bytes32","nodeType":"ElementaryTypeName","src":"654:7:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"434f4d4d49544d454e545f41444d494e","id":58503,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"707:18:110","typeDescriptions":{"typeIdentifier":"t_stringliteral_db2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c","typeString":"literal_string \"COMMITMENT_ADMIN\""},"value":"COMMITMENT_ADMIN"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_db2bf73e90d393604e56f0a2a54fed3fbd75332bf39c5ea0704b3b6973a3463c","typeString":"literal_string \"COMMITMENT_ADMIN\""}],"id":58502,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"697:9:110","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":58504,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"697:29:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":58510,"nodeType":"VariableDeclaration","src":"764:72:110","nodes":[],"baseFunctions":[60463],"constant":true,"functionSelector":"5db916ab","mutability":"constant","name":"TRUSTED_ATTESTER","nameLocation":"788:16:110","scope":60258,"stateVariable":true,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":58506,"name":"bytes32","nodeType":"ElementaryTypeName","src":"764:7:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"value":{"arguments":[{"hexValue":"545255535445445f4154544553544552","id":58508,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"817:18:110","typeDescriptions":{"typeIdentifier":"t_stringliteral_981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18","typeString":"literal_string \"TRUSTED_ATTESTER\""},"value":"TRUSTED_ATTESTER"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_stringliteral_981fe5f60e354ed88ff0544e367c13a4d3342da7c82eb6627f804b747e046e18","typeString":"literal_string \"TRUSTED_ATTESTER\""}],"id":58507,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"807:9:110","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":58509,"isConstant":false,"isLValue":false,"isPure":true,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"807:29:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"public"},{"id":58513,"nodeType":"ErrorDefinition","src":"923:37:110","nodes":[],"documentation":{"id":58511,"nodeType":"StructuredDocumentation","src":"843:75:110","text":"@notice Error thrown when postconfirmer term is greater than 256 blocks"},"errorSelector":"38d443c8","name":"PostconfirmerDurationTooLong","nameLocation":"929:28:110","parameters":{"id":58512,"nodeType":"ParameterList","parameters":[],"src":"957:2:110"}},{"id":58516,"nodeType":"ErrorDefinition","src":"1051:45:110","nodes":[],"documentation":{"id":58514,"nodeType":"StructuredDocumentation","src":"966:80:110","text":"@notice Error thrown when postconfirmer term is too large for epoch duration"},"errorSelector":"60bc402f","name":"PostconfirmerDurationTooLongForEpoch","nameLocation":"1057:36:110","parameters":{"id":58515,"nodeType":"ParameterList","parameters":[],"src":"1093:2:110"}},{"id":58519,"nodeType":"ErrorDefinition","src":"1190:51:110","nodes":[],"documentation":{"id":58517,"nodeType":"StructuredDocumentation","src":"1102:83:110","text":"@notice Error thrown when minimum commitment age is greater than epoch duration"},"errorSelector":"a7075e5f","name":"minCommitmentAgeForPostconfirmationTooLong","nameLocation":"1196:42:110","parameters":{"id":58518,"nodeType":"ParameterList","parameters":[],"src":"1238:2:110"}},{"id":58522,"nodeType":"ErrorDefinition","src":"1354:46:110","nodes":[],"documentation":{"id":58520,"nodeType":"StructuredDocumentation","src":"1247:102:110","text":"@notice Error thrown when maximum postconfirmer non-reactivity time is greater than epoch duration"},"errorSelector":"3c9f1a53","name":"postconfirmerPrivilegeDurationTooLong","nameLocation":"1360:37:110","parameters":{"id":58521,"nodeType":"ParameterList","parameters":[],"src":"1397:2:110"}},{"id":58542,"nodeType":"FunctionDefinition","src":"1623:237:110","nodes":[],"body":{"id":58541,"nodeType":"Block","src":"1677:183:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":58529,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39114,"src":"1716:18:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":58530,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1736:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":58531,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1740:6:110","memberName":"sender","nodeType":"MemberAccess","src":"1736:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":58528,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39202,"src":"1708:7:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":58532,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1708:39:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e4c59","id":58533,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"1761:36:110","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""},"value":"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""}],"id":58527,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1687:7:110","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":58534,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1687:120:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":58535,"nodeType":"ExpressionStatement","src":"1687:120:110"},{"expression":{"arguments":[{"id":58537,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58505,"src":"1827:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":58538,"name":"account","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58524,"src":"1845:7:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":58536,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39276,"src":"1817:9:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":58539,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1817:36:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":58540,"nodeType":"ExpressionStatement","src":"1817:36:110"}]},"functionSelector":"949d7c2a","implemented":true,"kind":"function","modifiers":[],"name":"grantCommitmentAdmin","nameLocation":"1632:20:110","parameters":{"id":58525,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58524,"mutability":"mutable","name":"account","nameLocation":"1661:7:110","nodeType":"VariableDeclaration","scope":58542,"src":"1653:15:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":58523,"name":"address","nodeType":"ElementaryTypeName","src":"1653:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"1652:17:110"},"returnParameters":{"id":58526,"nodeType":"ParameterList","parameters":[],"src":"1677:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":58578,"nodeType":"FunctionDefinition","src":"1866:326:110","nodes":[],"body":{"id":58577,"nodeType":"Block","src":"1935:257:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":58550,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39114,"src":"1974:18:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":58551,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"1994:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":58552,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"1998:6:110","memberName":"sender","nodeType":"MemberAccess","src":"1994:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":58549,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39202,"src":"1966:7:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":58553,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1966:39:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4144445f434f4d4d49544d454e545f41444d494e5f49535f41444d494e5f4f4e4c59","id":58554,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"2019:36:110","typeDescriptions":{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""},"value":"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_1f7b9adf09d2de8e9f277a155b3d23da5323d167b45a06ca50e252fefeb24539","typeString":"literal_string \"ADD_COMMITMENT_ADMIN_IS_ADMIN_ONLY\""}],"id":58548,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"1945:7:110","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":58555,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"1945:120:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":58556,"nodeType":"ExpressionStatement","src":"1945:120:110"},{"body":{"id":58575,"nodeType":"Block","src":"2121:65:110","statements":[{"expression":{"arguments":[{"id":58569,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58505,"src":"2145:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":58570,"name":"accounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58545,"src":"2163:8:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":58572,"indexExpression":{"id":58571,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58558,"src":"2172:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2163:11:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":58568,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39276,"src":"2135:9:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":58573,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2135:40:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":58574,"nodeType":"ExpressionStatement","src":"2135:40:110"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":58564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":58561,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58558,"src":"2095:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":58562,"name":"accounts","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58545,"src":"2099:8:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":58563,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2108:6:110","memberName":"length","nodeType":"MemberAccess","src":"2099:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2095:19:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":58576,"initializationExpression":{"assignments":[58558],"declarations":[{"constant":false,"id":58558,"mutability":"mutable","name":"i","nameLocation":"2088:1:110","nodeType":"VariableDeclaration","scope":58576,"src":"2080:9:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58557,"name":"uint256","nodeType":"ElementaryTypeName","src":"2080:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":58560,"initialValue":{"hexValue":"30","id":58559,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2092:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2080:13:110"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":58566,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2116:3:110","subExpression":{"id":58565,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58558,"src":"2116:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":58567,"nodeType":"ExpressionStatement","src":"2116:3:110"},"nodeType":"ForStatement","src":"2075:111:110"}]},"functionSelector":"4b47d955","implemented":true,"kind":"function","modifiers":[],"name":"batchGrantCommitmentAdmin","nameLocation":"1875:25:110","parameters":{"id":58546,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58545,"mutability":"mutable","name":"accounts","nameLocation":"1918:8:110","nodeType":"VariableDeclaration","scope":58578,"src":"1901:25:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":58543,"name":"address","nodeType":"ElementaryTypeName","src":"1901:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":58544,"nodeType":"ArrayTypeName","src":"1901:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"1900:27:110"},"returnParameters":{"id":58547,"nodeType":"ParameterList","parameters":[],"src":"1935:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":58592,"nodeType":"FunctionDefinition","src":"2198:136:110","nodes":[],"body":{"id":58591,"nodeType":"Block","src":"2280:54:110","nodes":[],"statements":[{"expression":{"arguments":[{"id":58587,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58510,"src":"2300:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":58588,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58580,"src":"2318:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":58586,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39276,"src":"2290:9:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":58589,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2290:37:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":58590,"nodeType":"ExpressionStatement","src":"2290:37:110"}]},"functionSelector":"81df1746","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":58583,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58505,"src":"2262:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":58584,"kind":"modifierInvocation","modifierName":{"id":58582,"name":"onlyRole","nameLocations":["2253:8:110"],"nodeType":"IdentifierPath","referencedDeclaration":39143,"src":"2253:8:110"},"nodeType":"ModifierInvocation","src":"2253:26:110"}],"name":"grantTrustedAttester","nameLocation":"2207:20:110","parameters":{"id":58581,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58580,"mutability":"mutable","name":"attester","nameLocation":"2236:8:110","nodeType":"VariableDeclaration","scope":58592,"src":"2228:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":58579,"name":"address","nodeType":"ElementaryTypeName","src":"2228:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2227:18:110"},"returnParameters":{"id":58585,"nodeType":"ParameterList","parameters":[],"src":"2280:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":58622,"nodeType":"FunctionDefinition","src":"2340:226:110","nodes":[],"body":{"id":58621,"nodeType":"Block","src":"2437:129:110","nodes":[],"statements":[{"body":{"id":58619,"nodeType":"Block","src":"2494:66:110","statements":[{"expression":{"arguments":[{"id":58613,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58510,"src":"2518:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"baseExpression":{"id":58614,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58595,"src":"2536:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":58616,"indexExpression":{"id":58615,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58602,"src":"2546:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"2536:12:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":58612,"name":"grantRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39276,"src":"2508:9:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_bytes32_$_t_address_$returns$__$","typeString":"function (bytes32,address)"}},"id":58617,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"2508:41:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":58618,"nodeType":"ExpressionStatement","src":"2508:41:110"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":58608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":58605,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58602,"src":"2467:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":58606,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58595,"src":"2471:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":58607,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"2481:6:110","memberName":"length","nodeType":"MemberAccess","src":"2471:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"2467:20:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":58620,"initializationExpression":{"assignments":[58602],"declarations":[{"constant":false,"id":58602,"mutability":"mutable","name":"i","nameLocation":"2460:1:110","nodeType":"VariableDeclaration","scope":58620,"src":"2452:9:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58601,"name":"uint256","nodeType":"ElementaryTypeName","src":"2452:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":58604,"initialValue":{"hexValue":"30","id":58603,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"2464:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"2452:13:110"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":58610,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"2489:3:110","subExpression":{"id":58609,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58602,"src":"2489:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":58611,"nodeType":"ExpressionStatement","src":"2489:3:110"},"nodeType":"ForStatement","src":"2447:113:110"}]},"functionSelector":"cf6772ad","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":58598,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58505,"src":"2419:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":58599,"kind":"modifierInvocation","modifierName":{"id":58597,"name":"onlyRole","nameLocations":["2410:8:110"],"nodeType":"IdentifierPath","referencedDeclaration":39143,"src":"2410:8:110"},"nodeType":"ModifierInvocation","src":"2410:26:110"}],"name":"batchGrantTrustedAttester","nameLocation":"2349:25:110","parameters":{"id":58596,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58595,"mutability":"mutable","name":"attesters","nameLocation":"2392:9:110","nodeType":"VariableDeclaration","scope":58622,"src":"2375:26:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":58593,"name":"address","nodeType":"ElementaryTypeName","src":"2375:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":58594,"nodeType":"ArrayTypeName","src":"2375:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"2374:28:110"},"returnParameters":{"id":58600,"nodeType":"ParameterList","parameters":[],"src":"2437:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":58704,"nodeType":"FunctionDefinition","src":"2789:1624:110","nodes":[],"body":{"id":58703,"nodeType":"Block","src":"3215:1198:110","nodes":[],"statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":58643,"name":"__BaseSettlement_init_unchained","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60513,"src":"3225:31:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":58644,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3225:33:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":58645,"nodeType":"ExpressionStatement","src":"3225:33:110"},{"expression":{"id":58648,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":58646,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"3268:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":58647,"name":"_stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58625,"src":"3286:16:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"src":"3268:34:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":58649,"nodeType":"ExpressionStatement","src":"3268:34:110"},{"expression":{"id":58652,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":58650,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60272,"src":"3312:26:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":58651,"name":"_leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58629,"src":"3341:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3312:56:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":58653,"nodeType":"ExpressionStatement","src":"3312:56:110"},{"expression":{"id":58656,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":58654,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60274,"src":"3378:33:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":58655,"name":"_lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58627,"src":"3414:34:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3378:70:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":58657,"nodeType":"ExpressionStatement","src":"3378:70:110"},{"expression":{"arguments":[{"id":58661,"name":"_epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58631,"src":"3489:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":58662,"name":"_custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58634,"src":"3505:11:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}],"expression":{"id":58658,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"3458:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":58660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3474:14:110","memberName":"registerDomain","nodeType":"MemberAccess","referencedDeclaration":62526,"src":"3458:30:110","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_uint256_$_t_array$_t_address_$dyn_memory_ptr_$returns$__$","typeString":"function (uint256,address[] memory) external"}},"id":58663,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3458:59:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":58664,"nodeType":"ExpressionStatement","src":"3458:59:110"},{"expression":{"arguments":[{"expression":{"id":58666,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3548:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":58667,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3552:6:110","memberName":"sender","nodeType":"MemberAccess","src":"3548:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":58665,"name":"grantCommitmentAdmin","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58542,"src":"3527:20:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":58668,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3527:32:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":58669,"nodeType":"ExpressionStatement","src":"3527:32:110"},{"expression":{"arguments":[{"expression":{"id":58671,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"3590:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":58672,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"3594:6:110","memberName":"sender","nodeType":"MemberAccess","src":"3590:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":58670,"name":"grantTrustedAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58592,"src":"3569:20:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":58673,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"3569:32:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":58674,"nodeType":"ExpressionStatement","src":"3569:32:110"},{"expression":{"id":58677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":58675,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60277,"src":"3611:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":58676,"name":"_postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58636,"src":"3635:22:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"3611:46:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":58678,"nodeType":"ExpressionStatement","src":"3611:46:110"},{"expression":{"id":58681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":58679,"name":"moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60270,"src":"3667:16:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":58680,"name":"_moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58638,"src":"3686:17:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"3667:36:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":58682,"nodeType":"ExpressionStatement","src":"3667:36:110"},{"expression":{"id":58687,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":58683,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60280,"src":"4204:35:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":58686,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":58684,"name":"_epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58631,"src":"4242:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":58685,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4259:2:110","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"4242:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4204:57:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":58688,"nodeType":"ExpressionStatement","src":"4204:57:110"},{"expression":{"id":58693,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":58689,"name":"postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60283,"src":"4271:30:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":58692,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":58690,"name":"_epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58631,"src":"4304:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"3130","id":58691,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4321:2:110","typeDescriptions":{"typeIdentifier":"t_rational_10_by_1","typeString":"int_const 10"},"value":"10"},"src":"4304:19:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"4271:52:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":58694,"nodeType":"ExpressionStatement","src":"4271:52:110"},{"expression":{"id":58697,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":58695,"name":"rewardPerAttestationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60364,"src":"4333:25:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":58696,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4361:1:110","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4333:29:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":58698,"nodeType":"ExpressionStatement","src":"4333:29:110"},{"expression":{"id":58701,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":58699,"name":"rewardPerPostconfirmationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60366,"src":"4372:30:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"31","id":58700,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"4405:1:110","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"4372:34:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":58702,"nodeType":"ExpressionStatement","src":"4372:34:110"}]},"functionSelector":"107e21ca","implemented":true,"kind":"function","modifiers":[{"id":58641,"kind":"modifierInvocation","modifierName":{"id":58640,"name":"initializer","nameLocations":["3203:11:110"],"nodeType":"IdentifierPath","referencedDeclaration":39556,"src":"3203:11:110"},"nodeType":"ModifierInvocation","src":"3203:11:110"}],"name":"initialize","nameLocation":"2798:10:110","parameters":{"id":58639,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58625,"mutability":"mutable","name":"_stakingContract","nameLocation":"2835:16:110","nodeType":"VariableDeclaration","scope":58704,"src":"2818:33:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"},"typeName":{"id":58624,"nodeType":"UserDefinedTypeName","pathNode":{"id":58623,"name":"IMovementStaking","nameLocations":["2818:16:110"],"nodeType":"IdentifierPath","referencedDeclaration":62796,"src":"2818:16:110"},"referencedDeclaration":62796,"src":"2818:16:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"visibility":"internal"},{"constant":false,"id":58627,"mutability":"mutable","name":"_lastPostconfirmedSuperBlockHeight","nameLocation":"2869:34:110","nodeType":"VariableDeclaration","scope":58704,"src":"2861:42:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58626,"name":"uint256","nodeType":"ElementaryTypeName","src":"2861:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":58629,"mutability":"mutable","name":"_leadingSuperBlockTolerance","nameLocation":"2921:27:110","nodeType":"VariableDeclaration","scope":58704,"src":"2913:35:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58628,"name":"uint256","nodeType":"ElementaryTypeName","src":"2913:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":58631,"mutability":"mutable","name":"_epochDuration","nameLocation":"2966:14:110","nodeType":"VariableDeclaration","scope":58704,"src":"2958:22:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58630,"name":"uint256","nodeType":"ElementaryTypeName","src":"2958:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":58634,"mutability":"mutable","name":"_custodians","nameLocation":"3024:11:110","nodeType":"VariableDeclaration","scope":58704,"src":"3007:28:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":58632,"name":"address","nodeType":"ElementaryTypeName","src":"3007:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":58633,"nodeType":"ArrayTypeName","src":"3007:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"},{"constant":false,"id":58636,"mutability":"mutable","name":"_postconfirmerDuration","nameLocation":"3053:22:110","nodeType":"VariableDeclaration","scope":58704,"src":"3045:30:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58635,"name":"uint256","nodeType":"ElementaryTypeName","src":"3045:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":58638,"mutability":"mutable","name":"_moveTokenAddress","nameLocation":"3110:17:110","nodeType":"VariableDeclaration","scope":58704,"src":"3102:25:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":58637,"name":"address","nodeType":"ElementaryTypeName","src":"3102:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"2808:387:110"},"returnParameters":{"id":58642,"nodeType":"ParameterList","parameters":[],"src":"3215:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":58723,"nodeType":"FunctionDefinition","src":"4465:195:110","nodes":[],"body":{"id":58722,"nodeType":"Block","src":"4505:155:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":58710,"name":"DEFAULT_ADMIN_ROLE","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39114,"src":"4531:18:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":58711,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"4551:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":58712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4555:6:110","memberName":"sender","nodeType":"MemberAccess","src":"4551:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":58709,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39202,"src":"4523:7:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":58713,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4523:39:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"4143434550545f47454e455349535f434552454d4f4e595f49535f41444d494e5f4f4e4c59","id":58714,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"4564:39:110","typeDescriptions":{"typeIdentifier":"t_stringliteral_b077b31285a16307062fcb4fde0e57e8246ea6dc3cdd1c5dd5880d32a26fbf54","typeString":"literal_string \"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY\""},"value":"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_b077b31285a16307062fcb4fde0e57e8246ea6dc3cdd1c5dd5880d32a26fbf54","typeString":"literal_string \"ACCEPT_GENESIS_CEREMONY_IS_ADMIN_ONLY\""}],"id":58708,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"4515:7:110","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":58715,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4515:89:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":58716,"nodeType":"ExpressionStatement","src":"4515:89:110"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":58717,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"4614:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":58719,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"4630:21:110","memberName":"acceptGenesisCeremony","nodeType":"MemberAccess","referencedDeclaration":62529,"src":"4614:37:110","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":58720,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"4614:39:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":58721,"nodeType":"ExpressionStatement","src":"4614:39:110"}]},"documentation":{"id":58705,"nodeType":"StructuredDocumentation","src":"4419:41:110","text":"@notice Accepts the genesis ceremony."},"functionSelector":"92a2ebf3","implemented":true,"kind":"function","modifiers":[],"name":"acceptGenesisCeremony","nameLocation":"4474:21:110","parameters":{"id":58706,"nodeType":"ParameterList","parameters":[],"src":"4495:2:110"},"returnParameters":{"id":58707,"nodeType":"ParameterList","parameters":[],"src":"4505:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":58757,"nodeType":"FunctionDefinition","src":"4837:570:110","nodes":[],"body":{"id":58756,"nodeType":"Block","src":"4937:470:110","nodes":[],"statements":[{"assignments":[58733],"declarations":[{"constant":false,"id":58733,"mutability":"mutable","name":"epochDuration","nameLocation":"5041:13:110","nodeType":"VariableDeclaration","scope":58756,"src":"5033:21:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58732,"name":"uint256","nodeType":"ElementaryTypeName","src":"5033:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":58741,"initialValue":{"arguments":[{"arguments":[{"id":58738,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"5098:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":58737,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"5090:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":58736,"name":"address","nodeType":"ElementaryTypeName","src":"5090:7:110","typeDescriptions":{}}},"id":58739,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5090:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":58734,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"5057:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":58735,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"5073:16:110","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":62788,"src":"5057:32:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":58740,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5057:47:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"5033:71:110"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":58746,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":58744,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":58742,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"5229:1:110","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":58743,"name":"_postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58726,"src":"5233:22:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5229:26:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":58745,"name":"epochDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58733,"src":"5259:13:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5229:43:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":58751,"nodeType":"IfStatement","src":"5225:120:110","trueBody":{"id":58750,"nodeType":"Block","src":"5275:70:110","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":58747,"name":"PostconfirmerDurationTooLongForEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58516,"src":"5296:36:110","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":58748,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"5296:38:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":58749,"nodeType":"RevertStatement","src":"5289:45:110"}]}},{"expression":{"id":58754,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":58752,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60277,"src":"5354:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":58753,"name":"_postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58726,"src":"5378:22:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5354:46:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":58755,"nodeType":"ExpressionStatement","src":"5354:46:110"}]},"documentation":{"id":58724,"nodeType":"StructuredDocumentation","src":"4666:166:110","text":"@notice Sets the postconfirmer term duration, must be less than epoch duration\n @param _postconfirmerDuration New postconfirmer term duration in time units"},"functionSelector":"3d645927","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":58729,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58505,"src":"4919:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":58730,"kind":"modifierInvocation","modifierName":{"id":58728,"name":"onlyRole","nameLocations":["4910:8:110"],"nodeType":"IdentifierPath","referencedDeclaration":39143,"src":"4910:8:110"},"nodeType":"ModifierInvocation","src":"4910:26:110"}],"name":"setPostconfirmerDuration","nameLocation":"4846:24:110","parameters":{"id":58727,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58726,"mutability":"mutable","name":"_postconfirmerDuration","nameLocation":"4879:22:110","nodeType":"VariableDeclaration","scope":58757,"src":"4871:30:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58725,"name":"uint256","nodeType":"ElementaryTypeName","src":"4871:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"4870:32:110"},"returnParameters":{"id":58731,"nodeType":"ParameterList","parameters":[],"src":"4937:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":58765,"nodeType":"FunctionDefinition","src":"5413:111:110","nodes":[],"body":{"id":58764,"nodeType":"Block","src":"5479:45:110","nodes":[],"statements":[{"expression":{"id":58762,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60277,"src":"5496:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":58761,"id":58763,"nodeType":"Return","src":"5489:28:110"}]},"baseFunctions":[60407],"functionSelector":"1241ebe3","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerDuration","nameLocation":"5422:24:110","parameters":{"id":58758,"nodeType":"ParameterList","parameters":[],"src":"5446:2:110"},"returnParameters":{"id":58761,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58760,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":58765,"src":"5470:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58759,"name":"uint256","nodeType":"ElementaryTypeName","src":"5470:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5469:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":58796,"nodeType":"FunctionDefinition","src":"5787:464:110","nodes":[],"body":{"id":58795,"nodeType":"Block","src":"5905:346:110","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":58785,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":58774,"name":"_postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58768,"src":"5973:31:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":58784,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":58779,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"6049:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":58778,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"6041:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":58777,"name":"address","nodeType":"ElementaryTypeName","src":"6041:7:110","typeDescriptions":{}}},"id":58780,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6041:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":58775,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"6008:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":58776,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"6024:16:110","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":62788,"src":"6008:32:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":58781,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6008:47:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":58782,"name":"getMinCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58844,"src":"6058:38:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":58783,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6058:40:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6008:90:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"5973:125:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":58790,"nodeType":"IfStatement","src":"5969:202:110","trueBody":{"id":58789,"nodeType":"Block","src":"6100:71:110","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":58786,"name":"postconfirmerPrivilegeDurationTooLong","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58522,"src":"6121:37:110","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":58787,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"6121:39:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":58788,"nodeType":"RevertStatement","src":"6114:46:110"}]}},{"expression":{"id":58793,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":58791,"name":"postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60283,"src":"6180:30:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":58792,"name":"_postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58768,"src":"6213:31:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"6180:64:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":58794,"nodeType":"ExpressionStatement","src":"6180:64:110"}]},"documentation":{"id":58766,"nodeType":"StructuredDocumentation","src":"5530:252:110","text":"@notice Sets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\n @param _postconfirmerPrivilegeDuration maximum time the postconfirmer is permitted to be non-reactive to an honest superBlock commitment"},"functionSelector":"da7d28b6","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":58771,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58505,"src":"5887:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":58772,"kind":"modifierInvocation","modifierName":{"id":58770,"name":"onlyRole","nameLocations":["5878:8:110"],"nodeType":"IdentifierPath","referencedDeclaration":39143,"src":"5878:8:110"},"nodeType":"ModifierInvocation","src":"5878:26:110"}],"name":"setPostconfirmerPrivilegeDuration","nameLocation":"5796:33:110","parameters":{"id":58769,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58768,"mutability":"mutable","name":"_postconfirmerPrivilegeDuration","nameLocation":"5838:31:110","nodeType":"VariableDeclaration","scope":58796,"src":"5830:39:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58767,"name":"uint256","nodeType":"ElementaryTypeName","src":"5830:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"5829:41:110"},"returnParameters":{"id":58773,"nodeType":"ParameterList","parameters":[],"src":"5905:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":58805,"nodeType":"FunctionDefinition","src":"6474:129:110","nodes":[],"body":{"id":58804,"nodeType":"Block","src":"6549:54:110","nodes":[],"statements":[{"expression":{"id":58802,"name":"postconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60283,"src":"6566:30:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":58801,"id":58803,"nodeType":"Return","src":"6559:37:110"}]},"documentation":{"id":58797,"nodeType":"StructuredDocumentation","src":"6257:212:110","text":"@notice Gets the maximum time the postconfirmer can be non-reactive to an honest superBlock commitment\n @return The maximum time the postconfirmer can be non-reactive to an honest superBlock commitment"},"functionSelector":"028e490a","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerPrivilegeDuration","nameLocation":"6483:33:110","parameters":{"id":58798,"nodeType":"ParameterList","parameters":[],"src":"6516:2:110"},"returnParameters":{"id":58801,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58800,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":58805,"src":"6540:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58799,"name":"uint256","nodeType":"ElementaryTypeName","src":"6540:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"6539:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":58836,"nodeType":"FunctionDefinition","src":"7053:533:110","nodes":[],"body":{"id":58835,"nodeType":"Block","src":"7181:405:110","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":58825,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":58814,"name":"_minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58808,"src":"7293:36:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":58824,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"id":58819,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"7374:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":58818,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"7366:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":58817,"name":"address","nodeType":"ElementaryTypeName","src":"7366:7:110","typeDescriptions":{}}},"id":58820,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7366:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":58815,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"7333:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":58816,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"7349:16:110","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":62788,"src":"7333:32:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":58821,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7333:47:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":58822,"name":"getPostconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58805,"src":"7383:33:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":58823,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7383:35:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7333:85:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7293:125:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":58830,"nodeType":"IfStatement","src":"7289:207:110","trueBody":{"id":58829,"nodeType":"Block","src":"7420:76:110","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":58826,"name":"minCommitmentAgeForPostconfirmationTooLong","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58519,"src":"7441:42:110","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":58827,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"7441:44:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":58828,"nodeType":"RevertStatement","src":"7434:51:110"}]}},{"expression":{"id":58833,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":58831,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60280,"src":"7505:35:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":58832,"name":"_minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58808,"src":"7543:36:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"7505:74:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":58834,"nodeType":"ExpressionStatement","src":"7505:74:110"}]},"documentation":{"id":58806,"nodeType":"StructuredDocumentation","src":"6609:169:110","text":"@notice Sets the minimum time that must pass before a commitment can be postconfirmed\n @param _minCommitmentAgeForPostconfirmation New minimum commitment age "},"functionSelector":"1f83e2a3","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":58811,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58505,"src":"7163:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":58812,"kind":"modifierInvocation","modifierName":{"id":58810,"name":"onlyRole","nameLocations":["7154:8:110"],"nodeType":"IdentifierPath","referencedDeclaration":39143,"src":"7154:8:110"},"nodeType":"ModifierInvocation","src":"7154:26:110"}],"name":"setMinCommitmentAgeForPostconfirmation","nameLocation":"7062:38:110","parameters":{"id":58809,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58808,"mutability":"mutable","name":"_minCommitmentAgeForPostconfirmation","nameLocation":"7109:36:110","nodeType":"VariableDeclaration","scope":58836,"src":"7101:44:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58807,"name":"uint256","nodeType":"ElementaryTypeName","src":"7101:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7100:46:110"},"returnParameters":{"id":58813,"nodeType":"ParameterList","parameters":[],"src":"7181:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":58844,"nodeType":"FunctionDefinition","src":"7592:139:110","nodes":[],"body":{"id":58843,"nodeType":"Block","src":"7672:59:110","nodes":[],"statements":[{"expression":{"id":58841,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60280,"src":"7689:35:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":58840,"id":58842,"nodeType":"Return","src":"7682:42:110"}]},"functionSelector":"ab208ebd","implemented":true,"kind":"function","modifiers":[],"name":"getMinCommitmentAgeForPostconfirmation","nameLocation":"7601:38:110","parameters":{"id":58837,"nodeType":"ParameterList","parameters":[],"src":"7639:2:110"},"returnParameters":{"id":58840,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58839,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":58844,"src":"7663:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58838,"name":"uint256","nodeType":"ElementaryTypeName","src":"7663:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"7662:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":58857,"nodeType":"FunctionDefinition","src":"7737:132:110","nodes":[],"body":{"id":58856,"nodeType":"Block","src":"7820:49:110","nodes":[],"statements":[{"expression":{"id":58854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":58852,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60341,"src":"7830:22:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":58853,"name":"enabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58846,"src":"7855:7:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"7830:32:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":58855,"nodeType":"ExpressionStatement","src":"7830:32:110"}]},"functionSelector":"d2526fef","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":58849,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58505,"src":"7802:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":58850,"kind":"modifierInvocation","modifierName":{"id":58848,"name":"onlyRole","nameLocations":["7793:8:110"],"nodeType":"IdentifierPath","referencedDeclaration":39143,"src":"7793:8:110"},"nodeType":"ModifierInvocation","src":"7793:26:110"}],"name":"setOpenAttestationEnabled","nameLocation":"7746:25:110","parameters":{"id":58847,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58846,"mutability":"mutable","name":"enabled","nameLocation":"7777:7:110","nodeType":"VariableDeclaration","scope":58857,"src":"7772:12:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":58845,"name":"bool","nodeType":"ElementaryTypeName","src":"7772:4:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"7771:14:110"},"returnParameters":{"id":58851,"nodeType":"ParameterList","parameters":[],"src":"7820:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":58872,"nodeType":"FunctionDefinition","src":"8131:129:110","nodes":[],"body":{"id":58871,"nodeType":"Block","src":"8189:71:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":58867,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8247:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":58866,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8239:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":58865,"name":"address","nodeType":"ElementaryTypeName","src":"8239:7:110","typeDescriptions":{}}},"id":58868,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8239:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":58863,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"8206:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":58864,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8222:16:110","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":62788,"src":"8206:32:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":58869,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8206:47:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":58862,"id":58870,"nodeType":"Return","src":"8199:54:110"}]},"baseFunctions":[60401],"documentation":{"id":58858,"nodeType":"StructuredDocumentation","src":"8091:35:110","text":"@notice Gets the epoch duration"},"functionSelector":"5d3ea8f1","implemented":true,"kind":"function","modifiers":[],"name":"getEpochDuration","nameLocation":"8140:16:110","parameters":{"id":58859,"nodeType":"ParameterList","parameters":[],"src":"8156:2:110"},"returnParameters":{"id":58862,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58861,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":58872,"src":"8180:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58860,"name":"uint256","nodeType":"ElementaryTypeName","src":"8180:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8179:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":58897,"nodeType":"FunctionDefinition","src":"8331:207:110","nodes":[],"body":{"id":58896,"nodeType":"Block","src":"8390:148:110","nodes":[],"statements":[{"assignments":[58879],"declarations":[{"constant":false,"id":58879,"mutability":"mutable","name":"currentTime","nameLocation":"8408:11:110","nodeType":"VariableDeclaration","scope":58896,"src":"8400:19:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58878,"name":"uint256","nodeType":"ElementaryTypeName","src":"8400:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":58882,"initialValue":{"expression":{"id":58880,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"8422:5:110","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":58881,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8428:9:110","memberName":"timestamp","nodeType":"MemberAccess","src":"8422:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"8400:37:110"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":58894,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":58883,"name":"currentTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58879,"src":"8454:11:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":58892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":58884,"name":"currentTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58879,"src":"8469:11:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"arguments":[{"arguments":[{"id":58889,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8524:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":58888,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8516:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":58887,"name":"address","nodeType":"ElementaryTypeName","src":"8516:7:110","typeDescriptions":{}}},"id":58890,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8516:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":58885,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"8483:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":58886,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8499:16:110","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":62788,"src":"8483:32:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":58891,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8483:47:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8469:61:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":58893,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"8468:63:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"8454:77:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":58877,"id":58895,"nodeType":"Return","src":"8447:84:110"}]},"documentation":{"id":58873,"nodeType":"StructuredDocumentation","src":"8266:60:110","text":"@notice Gets the time at which the current epoch started"},"functionSelector":"90879f64","implemented":true,"kind":"function","modifiers":[],"name":"getEpochStartTime","nameLocation":"8340:17:110","parameters":{"id":58874,"nodeType":"ParameterList","parameters":[],"src":"8357:2:110"},"returnParameters":{"id":58877,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58876,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":58897,"src":"8381:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58875,"name":"uint256","nodeType":"ElementaryTypeName","src":"8381:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8380:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":58911,"nodeType":"FunctionDefinition","src":"8574:133:110","nodes":[],"body":{"id":58910,"nodeType":"Block","src":"8631:76:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":58906,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8694:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":58905,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8686:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":58904,"name":"address","nodeType":"ElementaryTypeName","src":"8686:7:110","typeDescriptions":{}}},"id":58907,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8686:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":58902,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"8648:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":58903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8664:21:110","memberName":"getEpochByL1BlockTime","nodeType":"MemberAccess","referencedDeclaration":62536,"src":"8648:37:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":58908,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8648:52:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":58901,"id":58909,"nodeType":"Return","src":"8641:59:110"}]},"baseFunctions":[60438],"functionSelector":"37d7f58f","implemented":true,"kind":"function","modifiers":[],"name":"getPresentEpoch","nameLocation":"8583:15:110","parameters":{"id":58898,"nodeType":"ParameterList","parameters":[],"src":"8598:2:110"},"returnParameters":{"id":58901,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58900,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":58911,"src":"8622:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58899,"name":"uint256","nodeType":"ElementaryTypeName","src":"8622:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8621:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":58925,"nodeType":"FunctionDefinition","src":"8745:131:110","nodes":[],"body":{"id":58924,"nodeType":"Block","src":"8804:72:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":58920,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"8863:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":58919,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"8855:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":58918,"name":"address","nodeType":"ElementaryTypeName","src":"8855:7:110","typeDescriptions":{}}},"id":58921,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8855:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":58916,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"8821:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":58917,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"8837:17:110","memberName":"getAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":62543,"src":"8821:33:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":58922,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"8821:48:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":58915,"id":58923,"nodeType":"Return","src":"8814:55:110"}]},"baseFunctions":[60432],"functionSelector":"6c713af8","implemented":true,"kind":"function","modifiers":[],"name":"getAcceptingEpoch","nameLocation":"8754:17:110","parameters":{"id":58912,"nodeType":"ParameterList","parameters":[],"src":"8771:2:110"},"returnParameters":{"id":58915,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58914,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":58925,"src":"8795:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58913,"name":"uint256","nodeType":"ElementaryTypeName","src":"8795:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"8794:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":58939,"nodeType":"FunctionDefinition","src":"8946:165:110","nodes":[],"body":{"id":58938,"nodeType":"Block","src":"9022:89:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":58934,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9098:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":58933,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9090:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":58932,"name":"address","nodeType":"ElementaryTypeName","src":"9090:7:110","typeDescriptions":{}}},"id":58935,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9090:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":58930,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"9039:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":58931,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9055:34:110","memberName":"getNextAcceptingEpochWithException","nodeType":"MemberAccess","referencedDeclaration":62550,"src":"9039:50:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":58936,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9039:65:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":58929,"id":58937,"nodeType":"Return","src":"9032:72:110"}]},"functionSelector":"3752d675","implemented":true,"kind":"function","modifiers":[],"name":"getNextAcceptingEpochWithException","nameLocation":"8955:34:110","parameters":{"id":58926,"nodeType":"ParameterList","parameters":[],"src":"8989:2:110"},"returnParameters":{"id":58929,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58928,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":58939,"src":"9013:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58927,"name":"uint256","nodeType":"ElementaryTypeName","src":"9013:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9012:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":58970,"nodeType":"FunctionDefinition","src":"9197:414:110","nodes":[],"body":{"id":58969,"nodeType":"Block","src":"9264:347:110","nodes":[],"statements":[{"assignments":[58946],"declarations":[{"constant":false,"id":58946,"mutability":"mutable","name":"currentTime","nameLocation":"9282:11:110","nodeType":"VariableDeclaration","scope":58969,"src":"9274:19:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58945,"name":"uint256","nodeType":"ElementaryTypeName","src":"9274:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":58949,"initialValue":{"expression":{"id":58947,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"9296:5:110","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":58948,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9302:9:110","memberName":"timestamp","nodeType":"MemberAccess","src":"9296:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9274:37:110"},{"assignments":[58951],"declarations":[{"constant":false,"id":58951,"mutability":"mutable","name":"currentTimeCorrected","nameLocation":"9434:20:110","nodeType":"VariableDeclaration","scope":58969,"src":"9426:28:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58950,"name":"uint256","nodeType":"ElementaryTypeName","src":"9426:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":58961,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":58960,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":58952,"name":"currentTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58946,"src":"9457:11:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"arguments":[{"arguments":[{"id":58957,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"9512:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":58956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"9504:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":58955,"name":"address","nodeType":"ElementaryTypeName","src":"9504:7:110","typeDescriptions":{}}},"id":58958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9504:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":58953,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"9471:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":58954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"9487:16:110","memberName":"getEpochDuration","nodeType":"MemberAccess","referencedDeclaration":62788,"src":"9471:32:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view external returns (uint256)"}},"id":58959,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"9471:47:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9457:61:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"9426:92:110"},{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":58967,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":58962,"name":"currentTimeCorrected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58951,"src":"9535:20:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":58965,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":58963,"name":"currentTimeCorrected","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58951,"src":"9559:20:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"id":58964,"name":"postconfirmerDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60277,"src":"9582:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9559:44:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":58966,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"9558:46:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"9535:69:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":58944,"id":58968,"nodeType":"Return","src":"9528:76:110"}]},"documentation":{"id":58940,"nodeType":"StructuredDocumentation","src":"9117:75:110","text":"@notice Gets the time at which the current postconfirmer's term started"},"functionSelector":"5f4d642e","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerStartTime","nameLocation":"9206:25:110","parameters":{"id":58941,"nodeType":"ParameterList","parameters":[],"src":"9231:2:110"},"returnParameters":{"id":58944,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58943,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":58970,"src":"9255:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58942,"name":"uint256","nodeType":"ElementaryTypeName","src":"9255:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"9254:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":59031,"nodeType":"FunctionDefinition","src":"9951:929:110","nodes":[],"body":{"id":59030,"nodeType":"Block","src":"10009:871:110","nodes":[],"statements":[{"assignments":[58977],"declarations":[{"constant":false,"id":58977,"mutability":"mutable","name":"randSeed1","nameLocation":"10400:9:110","nodeType":"VariableDeclaration","scope":59030,"src":"10392:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58976,"name":"uint256","nodeType":"ElementaryTypeName","src":"10392:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":58980,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":58978,"name":"getPostconfirmerStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58970,"src":"10412:25:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":58979,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10412:27:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10392:47:110"},{"assignments":[58982],"declarations":[{"constant":false,"id":58982,"mutability":"mutable","name":"randSeed2","nameLocation":"10457:9:110","nodeType":"VariableDeclaration","scope":59030,"src":"10449:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":58981,"name":"uint256","nodeType":"ElementaryTypeName","src":"10449:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":58985,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":58983,"name":"getEpochStartTime","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58897,"src":"10469:17:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":58984,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10469:19:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10449:39:110"},{"assignments":[58990],"declarations":[{"constant":false,"id":58990,"mutability":"mutable","name":"attesters","nameLocation":"10515:9:110","nodeType":"VariableDeclaration","scope":59030,"src":"10498:26:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":58988,"name":"address","nodeType":"ElementaryTypeName","src":"10498:7:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":58989,"nodeType":"ArrayTypeName","src":"10498:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":58998,"initialValue":{"arguments":[{"arguments":[{"id":58995,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"10587:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":58994,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10579:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":58993,"name":"address","nodeType":"ElementaryTypeName","src":"10579:7:110","typeDescriptions":{}}},"id":58996,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10579:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":58991,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"10527:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":58992,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10543:35:110","memberName":"getStakedAttestersForAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":62744,"src":"10527:51:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":58997,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10527:66:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"10498:95:110"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59002,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":58999,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58990,"src":"10607:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59000,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10617:6:110","memberName":"length","nodeType":"MemberAccess","src":"10607:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":59001,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10627:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"10607:21:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59009,"nodeType":"IfStatement","src":"10603:69:110","trueBody":{"id":59008,"nodeType":"Block","src":"10630:42:110","statements":[{"expression":{"arguments":[{"hexValue":"30","id":59005,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"10659:1:110","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":59004,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10651:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":59003,"name":"address","nodeType":"ElementaryTypeName","src":"10651:7:110","typeDescriptions":{}}},"id":59006,"isConstant":false,"isLValue":false,"isPure":true,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10651:10:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":58975,"id":59007,"nodeType":"Return","src":"10644:17:110"}]}},{"assignments":[59011],"declarations":[{"constant":false,"id":59011,"mutability":"mutable","name":"postconfirmerIndex","nameLocation":"10689:18:110","nodeType":"VariableDeclaration","scope":59030,"src":"10681:26:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59010,"name":"uint256","nodeType":"ElementaryTypeName","src":"10681:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59025,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59024,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"arguments":[{"arguments":[{"id":59017,"name":"randSeed1","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58977,"src":"10745:9:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":59018,"name":"randSeed2","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58982,"src":"10756:9:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":59015,"name":"abi","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-1,"src":"10728:3:110","typeDescriptions":{"typeIdentifier":"t_magic_abi","typeString":"abi"}},"id":59016,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"memberLocation":"10732:12:110","memberName":"encodePacked","nodeType":"MemberAccess","src":"10728:16:110","typeDescriptions":{"typeIdentifier":"t_function_abiencodepacked_pure$__$returns$_t_bytes_memory_ptr_$","typeString":"function () pure returns (bytes memory)"}},"id":59019,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10728:38:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes_memory_ptr","typeString":"bytes memory"}],"id":59014,"name":"keccak256","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-8,"src":"10718:9:110","typeDescriptions":{"typeIdentifier":"t_function_keccak256_pure$_t_bytes_memory_ptr_$returns$_t_bytes32_$","typeString":"function (bytes memory) pure returns (bytes32)"}},"id":59020,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10718:49:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":59013,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"10710:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_uint256_$","typeString":"type(uint256)"},"typeName":{"id":59012,"name":"uint256","nodeType":"ElementaryTypeName","src":"10710:7:110","typeDescriptions":{}}},"id":59021,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"10710:58:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"%","rightExpression":{"expression":{"id":59022,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58990,"src":"10771:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59023,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"10781:6:110","memberName":"length","nodeType":"MemberAccess","src":"10771:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"10710:77:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"10681:106:110"},{"expression":{"baseExpression":{"id":59026,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58990,"src":"10844:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59028,"indexExpression":{"id":59027,"name":"postconfirmerIndex","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59011,"src":"10854:18:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"10844:29:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"functionReturnParameters":58975,"id":59029,"nodeType":"Return","src":"10837:36:110"}]},"baseFunctions":[60413],"documentation":{"id":58971,"nodeType":"StructuredDocumentation","src":"9617:109:110","text":"@notice Determines the postconfirmer in the accepting epoch using L1 block hash as a source of randomness"},"functionSelector":"35ea1c63","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmer","nameLocation":"9960:16:110","parameters":{"id":58972,"nodeType":"ParameterList","parameters":[],"src":"9976:2:110"},"returnParameters":{"id":58975,"nodeType":"ParameterList","parameters":[{"constant":false,"id":58974,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":59031,"src":"10000:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":58973,"name":"address","nodeType":"ElementaryTypeName","src":"10000:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"9999:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":59051,"nodeType":"FunctionDefinition","src":"11026:250:110","nodes":[],"body":{"id":59050,"nodeType":"Block","src":"11107:169:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":59045,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"11253:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":59044,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"11245:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":59043,"name":"address","nodeType":"ElementaryTypeName","src":"11245:7:110","typeDescriptions":{}}},"id":59046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11245:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59047,"name":"newEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59034,"src":"11260:8:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"expression":{"id":59040,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"11211:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":59042,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"11227:17:110","memberName":"setAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":62795,"src":"11211:33:110","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$returns$__$","typeString":"function (address,uint256) external"}},"id":59048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11211:58:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59049,"nodeType":"ExpressionStatement","src":"11211:58:110"}]},"baseFunctions":[60457],"documentation":{"id":59032,"nodeType":"StructuredDocumentation","src":"10886:135:110","text":"@notice Sets the accepting epoch to a new value (must be higher than current)\n @param newEpoch The new accepting epoch value"},"functionSelector":"d03509ec","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":59037,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58505,"src":"11089:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":59038,"kind":"modifierInvocation","modifierName":{"id":59036,"name":"onlyRole","nameLocations":["11080:8:110"],"nodeType":"IdentifierPath","referencedDeclaration":39143,"src":"11080:8:110"},"nodeType":"ModifierInvocation","src":"11080:26:110"}],"name":"setAcceptingEpoch","nameLocation":"11035:17:110","parameters":{"id":59035,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59034,"mutability":"mutable","name":"newEpoch","nameLocation":"11061:8:110","nodeType":"VariableDeclaration","scope":59051,"src":"11053:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59033,"name":"uint256","nodeType":"ElementaryTypeName","src":"11053:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"11052:18:110"},"returnParameters":{"id":59039,"nodeType":"ParameterList","parameters":[],"src":"11107:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":59070,"nodeType":"FunctionDefinition","src":"11507:242:110","nodes":[],"body":{"id":59069,"nodeType":"Block","src":"11676:73:110","nodes":[],"statements":[{"expression":{"arguments":[{"id":59064,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59053,"src":"11714:6:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":59065,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59055,"src":"11722:10:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":59066,"name":"blockId","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59057,"src":"11734:7:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"}],"id":59063,"name":"SuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60291,"src":"11693:20:110","typeDescriptions":{"typeIdentifier":"t_type$_t_struct$_SuperBlockCommitment_$60291_storage_ptr_$","typeString":"type(struct PCPStorage.SuperBlockCommitment storage pointer)"}},"id":59067,"isConstant":false,"isLValue":false,"isPure":false,"kind":"structConstructorCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"11693:49:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"functionReturnParameters":59062,"id":59068,"nodeType":"Return","src":"11686:56:110"}]},"functionSelector":"026583d7","implemented":true,"kind":"function","modifiers":[],"name":"createSuperBlockCommitment","nameLocation":"11516:26:110","parameters":{"id":59058,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59053,"mutability":"mutable","name":"height","nameLocation":"11560:6:110","nodeType":"VariableDeclaration","scope":59070,"src":"11552:14:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59052,"name":"uint256","nodeType":"ElementaryTypeName","src":"11552:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":59055,"mutability":"mutable","name":"commitment","nameLocation":"11584:10:110","nodeType":"VariableDeclaration","scope":59070,"src":"11576:18:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":59054,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11576:7:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":59057,"mutability":"mutable","name":"blockId","nameLocation":"11612:7:110","nodeType":"VariableDeclaration","scope":59070,"src":"11604:15:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":59056,"name":"bytes32","nodeType":"ElementaryTypeName","src":"11604:7:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"}],"src":"11542:83:110"},"returnParameters":{"id":59062,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59061,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":59070,"src":"11647:27:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":59060,"nodeType":"UserDefinedTypeName","pathNode":{"id":59059,"name":"SuperBlockCommitment","nameLocations":["11647:20:110"],"nodeType":"IdentifierPath","referencedDeclaration":60291,"src":"11647:20:110"},"referencedDeclaration":60291,"src":"11647:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"11646:29:110"},"scope":60258,"stateMutability":"pure","virtual":false,"visibility":"public"},{"id":59162,"nodeType":"FunctionDefinition","src":"11817:2174:110","nodes":[],"body":{"id":59161,"nodeType":"Block","src":"11963:2028:110","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59087,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":59079,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60302,"src":"12050:11:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":59082,"indexExpression":{"expression":{"id":59080,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59076,"src":"12062:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59081,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12083:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"12062:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12050:40:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":59084,"indexExpression":{"id":59083,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59073,"src":"12091:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"12050:50:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":59085,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12101:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"12050:57:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":59086,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"12111:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"12050:62:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59091,"nodeType":"IfStatement","src":"12046:113:110","trueBody":{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":59088,"name":"AttesterAlreadyCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60395,"src":"12133:24:110","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":59089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12133:26:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":59090,"nodeType":"RevertStatement","src":"12126:33:110"}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59097,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59094,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59092,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60274,"src":"12565:33:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":59093,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60272,"src":"12601:26:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12565:62:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":59095,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59076,"src":"12630:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59096,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"12651:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"12630:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"12565:92:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59102,"nodeType":"IfStatement","src":"12561:156:110","trueBody":{"id":59101,"nodeType":"Block","src":"12659:58:110","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":59098,"name":"AttesterAlreadyCommitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60395,"src":"12680:24:110","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":59099,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"12680:26:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":59100,"nodeType":"RevertStatement","src":"12673:33:110"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59108,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":59103,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60295,"src":"13051:29:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":59106,"indexExpression":{"expression":{"id":59104,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59076,"src":"13081:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59105,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13102:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"13081:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13051:58:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":59107,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"13113:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"13051:63:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59118,"nodeType":"IfStatement","src":"13047:172:110","trueBody":{"id":59117,"nodeType":"Block","src":"13116:103:110","statements":[{"expression":{"id":59115,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":59109,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60295,"src":"13130:29:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":59112,"indexExpression":{"expression":{"id":59110,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59076,"src":"13160:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59111,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13181:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"13160:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13130:58:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"arguments":[],"expression":{"argumentTypes":[],"id":59113,"name":"getPresentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58911,"src":"13191:15:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":59114,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13191:17:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13130:78:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59116,"nodeType":"ExpressionStatement","src":"13130:78:110"}]}},{"expression":{"id":59126,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":59119,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60302,"src":"13275:11:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":59123,"indexExpression":{"expression":{"id":59120,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59076,"src":"13287:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59121,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13308:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"13287:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13275:40:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":59124,"indexExpression":{"id":59122,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59073,"src":"13316:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13275:50:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":59125,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59076,"src":"13328:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"src":"13275:73:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":59127,"nodeType":"ExpressionStatement","src":"13275:73:110"},{"expression":{"arguments":[{"expression":{"id":59129,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59076,"src":"13453:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59130,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13474:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"13453:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"expression":{"id":59131,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59076,"src":"13482:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59132,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13503:10:110","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":60288,"src":"13482:31:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":59133,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"13515:5:110","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":59134,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"13521:9:110","memberName":"timestamp","nodeType":"MemberAccess","src":"13515:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":59128,"name":"TrySetCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59337,"src":"13425:27:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (uint256,bytes32,uint256)"}},"id":59135,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13425:106:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59136,"nodeType":"ExpressionStatement","src":"13425:106:110"},{"assignments":[59138],"declarations":[{"constant":false,"id":59138,"mutability":"mutable","name":"attesterStakeForAcceptingEpoch","nameLocation":"13601:30:110","nodeType":"VariableDeclaration","scope":59161,"src":"13593:38:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59137,"name":"uint256","nodeType":"ElementaryTypeName","src":"13593:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59142,"initialValue":{"arguments":[{"id":59140,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59073,"src":"13668:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":59139,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60051,"src":"13634:33:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":59141,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13634:43:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"13593:84:110"},{"expression":{"id":59151,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":59143,"name":"commitmentStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60308,"src":"13687:15:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":59148,"indexExpression":{"expression":{"id":59144,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59076,"src":"13703:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59145,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13724:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"13703:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"13687:44:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":59149,"indexExpression":{"expression":{"id":59146,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59076,"src":"13732:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59147,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13753:10:110","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":60288,"src":"13732:31:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"13687:77:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"id":59150,"name":"attesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59138,"src":"13768:30:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"13687:111:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59152,"nodeType":"ExpressionStatement","src":"13687:111:110"},{"eventCall":{"arguments":[{"expression":{"id":59154,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59076,"src":"13857:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59155,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13878:7:110","memberName":"blockId","nodeType":"MemberAccess","referencedDeclaration":60290,"src":"13857:28:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":59156,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59076,"src":"13899:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59157,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"13920:10:110","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":60288,"src":"13899:31:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"id":59158,"name":"attesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59138,"src":"13944:30:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":59153,"name":"SuperBlockCommitmentSubmitted","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60391,"src":"13814:29:110","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,uint256)"}},"id":59159,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"13814:170:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59160,"nodeType":"EmitStatement","src":"13809:175:110"}]},"documentation":{"id":59071,"nodeType":"StructuredDocumentation","src":"11755:57:110","text":"@dev submits a superBlock commitment for an attester."},"implemented":true,"kind":"function","modifiers":[],"name":"submitSuperBlockCommitmentForAttester","nameLocation":"11826:37:110","parameters":{"id":59077,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59073,"mutability":"mutable","name":"attester","nameLocation":"11881:8:110","nodeType":"VariableDeclaration","scope":59162,"src":"11873:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59072,"name":"address","nodeType":"ElementaryTypeName","src":"11873:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59076,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"11927:20:110","nodeType":"VariableDeclaration","scope":59162,"src":"11899:48:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":59075,"nodeType":"UserDefinedTypeName","pathNode":{"id":59074,"name":"SuperBlockCommitment","nameLocations":["11899:20:110"],"nodeType":"IdentifierPath","referencedDeclaration":60291,"src":"11899:20:110"},"referencedDeclaration":60291,"src":"11899:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"11863:90:110"},"returnParameters":{"id":59078,"nodeType":"ParameterList","parameters":[],"src":"11963:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":59186,"nodeType":"FunctionDefinition","src":"13996:337:110","nodes":[],"body":{"id":59185,"nodeType":"Block","src":"14091:242:110","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":59175,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59169,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60341,"src":"14122:22:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":59171,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58510,"src":"14156:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":59172,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14174:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":59173,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14178:6:110","memberName":"sender","nodeType":"MemberAccess","src":"14174:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":59170,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39202,"src":"14148:7:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":59174,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14148:37:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14122:63:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d454e54","id":59176,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14199:36:110","typeDescriptions":{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""},"value":"UNAUTHORIZED_SUPERBLOCK_COMMITMENT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""}],"id":59168,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14101:7:110","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":59177,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14101:144:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59178,"nodeType":"ExpressionStatement","src":"14101:144:110"},{"expression":{"arguments":[{"expression":{"id":59180,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14293:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":59181,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14297:6:110","memberName":"sender","nodeType":"MemberAccess","src":"14293:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59182,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59165,"src":"14305:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":59179,"name":"submitSuperBlockCommitmentForAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59162,"src":"14255:37:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_SuperBlockCommitment_$60291_memory_ptr_$returns$__$","typeString":"function (address,struct PCPStorage.SuperBlockCommitment memory)"}},"id":59183,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14255:71:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59184,"nodeType":"ExpressionStatement","src":"14255:71:110"}]},"baseFunctions":[60420],"functionSelector":"0e74b609","implemented":true,"kind":"function","modifiers":[],"name":"submitSuperBlockCommitment","nameLocation":"14005:26:110","parameters":{"id":59166,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59165,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"14060:20:110","nodeType":"VariableDeclaration","scope":59186,"src":"14032:48:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":59164,"nodeType":"UserDefinedTypeName","pathNode":{"id":59163,"name":"SuperBlockCommitment","nameLocations":["14032:20:110"],"nodeType":"IdentifierPath","referencedDeclaration":60291,"src":"14032:20:110"},"referencedDeclaration":60291,"src":"14032:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"14031:50:110"},"returnParameters":{"id":59167,"nodeType":"ParameterList","parameters":[],"src":"14091:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"external"},{"id":59226,"nodeType":"FunctionDefinition","src":"14339:430:110","nodes":[],"body":{"id":59225,"nodeType":"Block","src":"14440:329:110","nodes":[],"statements":[{"expression":{"arguments":[{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":59200,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59194,"name":"openAttestationEnabled","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60341,"src":"14471:22:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"||","rightExpression":{"arguments":[{"id":59196,"name":"TRUSTED_ATTESTER","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58510,"src":"14505:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":59197,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14523:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":59198,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14527:6:110","memberName":"sender","nodeType":"MemberAccess","src":"14523:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":59195,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39202,"src":"14497:7:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":59199,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14497:37:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"14471:63:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"554e415554484f52495a45445f5355504552424c4f434b5f434f4d4d49544d454e54","id":59201,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"14548:36:110","typeDescriptions":{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""},"value":"UNAUTHORIZED_SUPERBLOCK_COMMITMENT"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_42d34b2cfd79805238f0887e48c2989007b7b6d661caea2465d06a0303a66126","typeString":"literal_string \"UNAUTHORIZED_SUPERBLOCK_COMMITMENT\""}],"id":59193,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"14450:7:110","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":59202,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14450:144:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59203,"nodeType":"ExpressionStatement","src":"14450:144:110"},{"body":{"id":59223,"nodeType":"Block","src":"14663:100:110","statements":[{"expression":{"arguments":[{"expression":{"id":59216,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"14715:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":59217,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14719:6:110","memberName":"sender","nodeType":"MemberAccess","src":"14715:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"baseExpression":{"id":59218,"name":"superBlockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59190,"src":"14727:21:110","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$60291_memory_ptr_$dyn_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory[] memory"}},"id":59220,"indexExpression":{"id":59219,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59205,"src":"14749:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14727:24:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":59215,"name":"submitSuperBlockCommitmentForAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59162,"src":"14677:37:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$_t_struct$_SuperBlockCommitment_$60291_memory_ptr_$returns$__$","typeString":"function (address,struct PCPStorage.SuperBlockCommitment memory)"}},"id":59221,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"14677:75:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59222,"nodeType":"ExpressionStatement","src":"14677:75:110"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59211,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59208,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59205,"src":"14624:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":59209,"name":"superBlockCommitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59190,"src":"14628:21:110","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$60291_memory_ptr_$dyn_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory[] memory"}},"id":59210,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"14650:6:110","memberName":"length","nodeType":"MemberAccess","src":"14628:28:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"14624:32:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59224,"initializationExpression":{"assignments":[59205],"declarations":[{"constant":false,"id":59205,"mutability":"mutable","name":"i","nameLocation":"14617:1:110","nodeType":"VariableDeclaration","scope":59224,"src":"14609:9:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59204,"name":"uint256","nodeType":"ElementaryTypeName","src":"14609:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59207,"initialValue":{"hexValue":"30","id":59206,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"14621:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"14609:13:110"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":59213,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"14658:3:110","subExpression":{"id":59212,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59205,"src":"14658:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59214,"nodeType":"ExpressionStatement","src":"14658:3:110"},"nodeType":"ForStatement","src":"14604:159:110"}]},"functionSelector":"622e3616","implemented":true,"kind":"function","modifiers":[],"name":"submitBatchSuperBlockCommitment","nameLocation":"14348:31:110","parameters":{"id":59191,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59190,"mutability":"mutable","name":"superBlockCommitments","nameLocation":"14410:21:110","nodeType":"VariableDeclaration","scope":59226,"src":"14380:51:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$60291_memory_ptr_$dyn_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment[]"},"typeName":{"baseType":{"id":59188,"nodeType":"UserDefinedTypeName","pathNode":{"id":59187,"name":"SuperBlockCommitment","nameLocations":["14380:20:110"],"nodeType":"IdentifierPath","referencedDeclaration":60291,"src":"14380:20:110"},"referencedDeclaration":60291,"src":"14380:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"id":59189,"nodeType":"ArrayTypeName","src":"14380:22:110","typeDescriptions":{"typeIdentifier":"t_array$_t_struct$_SuperBlockCommitment_$60291_storage_$dyn_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment[]"}},"visibility":"internal"}],"src":"14379:53:110"},"returnParameters":{"id":59192,"nodeType":"ParameterList","parameters":[],"src":"14440:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":59243,"nodeType":"FunctionDefinition","src":"14774:209:110","nodes":[],"body":{"id":59242,"nodeType":"Block","src":"14930:53:110","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":59236,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60302,"src":"14947:11:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":59238,"indexExpression":{"id":59237,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59228,"src":"14959:6:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14947:19:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":59240,"indexExpression":{"id":59239,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59230,"src":"14967:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"14947:29:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":59235,"id":59241,"nodeType":"Return","src":"14940:36:110"}]},"functionSelector":"556d97c8","implemented":true,"kind":"function","modifiers":[],"name":"getValidatorCommitmentAtSuperBlockHeight","nameLocation":"14783:40:110","parameters":{"id":59231,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59228,"mutability":"mutable","name":"height","nameLocation":"14841:6:110","nodeType":"VariableDeclaration","scope":59243,"src":"14833:14:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59227,"name":"uint256","nodeType":"ElementaryTypeName","src":"14833:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":59230,"mutability":"mutable","name":"attester","nameLocation":"14865:8:110","nodeType":"VariableDeclaration","scope":59243,"src":"14857:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59229,"name":"address","nodeType":"ElementaryTypeName","src":"14857:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"14823:56:110"},"returnParameters":{"id":59235,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59234,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":59243,"src":"14901:27:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":59233,"nodeType":"UserDefinedTypeName","pathNode":{"id":59232,"name":"SuperBlockCommitment","nameLocations":["14901:20:110"],"nodeType":"IdentifierPath","referencedDeclaration":60291,"src":"14901:20:110"},"referencedDeclaration":60291,"src":"14901:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"14900:29:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":59253,"nodeType":"FunctionDefinition","src":"15037:159:110","nodes":[],"body":{"id":59252,"nodeType":"Block","src":"15110:86:110","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59250,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59248,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60274,"src":"15127:33:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":59249,"name":"leadingSuperBlockTolerance","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60272,"src":"15163:26:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"15127:62:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":59247,"id":59251,"nodeType":"Return","src":"15120:69:110"}]},"functionSelector":"943b79e2","implemented":true,"kind":"function","modifiers":[],"name":"getMaxTolerableSuperBlockHeight","nameLocation":"15046:31:110","parameters":{"id":59244,"nodeType":"ParameterList","parameters":[],"src":"15077:2:110"},"returnParameters":{"id":59247,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59246,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":59253,"src":"15101:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59245,"name":"uint256","nodeType":"ElementaryTypeName","src":"15101:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15100:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":59271,"nodeType":"FunctionDefinition","src":"15281:170:110","nodes":[],"body":{"id":59270,"nodeType":"Block","src":"15398:53:110","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":59264,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60302,"src":"15415:11:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":59266,"indexExpression":{"id":59265,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59256,"src":"15427:6:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15415:19:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":59268,"indexExpression":{"id":59267,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59258,"src":"15435:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15415:29:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":59263,"id":59269,"nodeType":"Return","src":"15408:36:110"}]},"documentation":{"id":59254,"nodeType":"StructuredDocumentation","src":"15201:75:110","text":"@notice Gets the commitment submitted by an attester for a given height"},"functionSelector":"f1949add","implemented":true,"kind":"function","modifiers":[],"name":"getCommitmentByAttester","nameLocation":"15290:23:110","parameters":{"id":59259,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59256,"mutability":"mutable","name":"height","nameLocation":"15322:6:110","nodeType":"VariableDeclaration","scope":59271,"src":"15314:14:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59255,"name":"uint256","nodeType":"ElementaryTypeName","src":"15314:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":59258,"mutability":"mutable","name":"attester","nameLocation":"15338:8:110","nodeType":"VariableDeclaration","scope":59271,"src":"15330:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59257,"name":"address","nodeType":"ElementaryTypeName","src":"15330:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"15313:34:110"},"returnParameters":{"id":59263,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59262,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":59271,"src":"15369:27:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":59261,"nodeType":"UserDefinedTypeName","pathNode":{"id":59260,"name":"SuperBlockCommitment","nameLocations":["15369:20:110"],"nodeType":"IdentifierPath","referencedDeclaration":60291,"src":"15369:20:110"},"referencedDeclaration":60291,"src":"15369:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"15368:29:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":59284,"nodeType":"FunctionDefinition","src":"15520:149:110","nodes":[],"body":{"id":59283,"nodeType":"Block","src":"15608:61:110","nodes":[],"statements":[{"expression":{"baseExpression":{"id":59279,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60295,"src":"15625:29:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":59281,"indexExpression":{"id":59280,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59274,"src":"15655:6:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"15625:37:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":59278,"id":59282,"nodeType":"Return","src":"15618:44:110"}]},"documentation":{"id":59272,"nodeType":"StructuredDocumentation","src":"15457:58:110","text":"@notice Gets the epoch assigned to a superblock height"},"functionSelector":"d283392e","implemented":true,"kind":"function","modifiers":[],"name":"getSuperBlockHeightAssignedEpoch","nameLocation":"15529:32:110","parameters":{"id":59275,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59274,"mutability":"mutable","name":"height","nameLocation":"15570:6:110","nodeType":"VariableDeclaration","scope":59284,"src":"15562:14:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59273,"name":"uint256","nodeType":"ElementaryTypeName","src":"15562:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15561:16:110"},"returnParameters":{"id":59278,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59277,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":59284,"src":"15599:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59276,"name":"uint256","nodeType":"ElementaryTypeName","src":"15599:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15598:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":59302,"nodeType":"FunctionDefinition","src":"15875:221:110","nodes":[],"body":{"id":59301,"nodeType":"Block","src":"15989:107:110","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":59293,"name":"commitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60314,"src":"16006:21:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":59296,"indexExpression":{"expression":{"id":59294,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59288,"src":"16028:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59295,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16049:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"16028:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16006:50:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":59299,"indexExpression":{"expression":{"id":59297,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59288,"src":"16057:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59298,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"16078:10:110","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":60288,"src":"16057:31:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16006:83:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":59292,"id":59300,"nodeType":"Return","src":"15999:90:110"}]},"documentation":{"id":59285,"nodeType":"StructuredDocumentation","src":"15808:62:110","text":"@notice get the timestamp when a commitment was first seen"},"functionSelector":"e07472ef","implemented":true,"kind":"function","modifiers":[],"name":"getCommitmentFirstSeenAt","nameLocation":"15884:24:110","parameters":{"id":59289,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59288,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"15937:20:110","nodeType":"VariableDeclaration","scope":59302,"src":"15909:48:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":59287,"nodeType":"UserDefinedTypeName","pathNode":{"id":59286,"name":"SuperBlockCommitment","nameLocations":["15909:20:110"],"nodeType":"IdentifierPath","referencedDeclaration":60291,"src":"15909:20:110"},"referencedDeclaration":60291,"src":"15909:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"15908:50:110"},"returnParameters":{"id":59292,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59291,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":59302,"src":"15980:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59290,"name":"uint256","nodeType":"ElementaryTypeName","src":"15980:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"15979:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":59337,"nodeType":"FunctionDefinition","src":"16170:443:110","nodes":[],"body":{"id":59336,"nodeType":"Block","src":"16271:342:110","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59318,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":59312,"name":"commitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60314,"src":"16285:21:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":59314,"indexExpression":{"id":59313,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59305,"src":"16307:6:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16285:29:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":59316,"indexExpression":{"id":59315,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59307,"src":"16315:10:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16285:41:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":59317,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16330:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16285:46:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59323,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59321,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59309,"src":"16415:9:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":59322,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"16428:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"16415:14:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59326,"nodeType":"IfStatement","src":"16411:133:110","trueBody":{"id":59325,"nodeType":"Block","src":"16431:113:110","statements":[{"functionReturnParameters":59311,"id":59324,"nodeType":"Return","src":"16527:7:110"}]}},"id":59327,"nodeType":"IfStatement","src":"16281:263:110","trueBody":{"id":59320,"nodeType":"Block","src":"16333:72:110","statements":[{"functionReturnParameters":59311,"id":59319,"nodeType":"Return","src":"16388:7:110"}]}},{"expression":{"id":59334,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":59328,"name":"commitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60314,"src":"16553:21:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":59331,"indexExpression":{"id":59329,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59305,"src":"16575:6:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"16553:29:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":59332,"indexExpression":{"id":59330,"name":"commitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59307,"src":"16583:10:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"16553:41:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":59333,"name":"timestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59309,"src":"16597:9:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"16553:53:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59335,"nodeType":"ExpressionStatement","src":"16553:53:110"}]},"documentation":{"id":59303,"nodeType":"StructuredDocumentation","src":"16102:63:110","text":"@notice Sets the timestamp when a commitment was first seen"},"implemented":true,"kind":"function","modifiers":[],"name":"TrySetCommitmentFirstSeenAt","nameLocation":"16179:27:110","parameters":{"id":59310,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59305,"mutability":"mutable","name":"height","nameLocation":"16215:6:110","nodeType":"VariableDeclaration","scope":59337,"src":"16207:14:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59304,"name":"uint256","nodeType":"ElementaryTypeName","src":"16207:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":59307,"mutability":"mutable","name":"commitment","nameLocation":"16231:10:110","nodeType":"VariableDeclaration","scope":59337,"src":"16223:18:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"typeName":{"id":59306,"name":"bytes32","nodeType":"ElementaryTypeName","src":"16223:7:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"visibility":"internal"},{"constant":false,"id":59309,"mutability":"mutable","name":"timestamp","nameLocation":"16251:9:110","nodeType":"VariableDeclaration","scope":59337,"src":"16243:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59308,"name":"uint256","nodeType":"ElementaryTypeName","src":"16243:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16206:55:110"},"returnParameters":{"id":59311,"nodeType":"ParameterList","parameters":[],"src":"16271:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":59346,"nodeType":"FunctionDefinition","src":"16904:135:110","nodes":[],"body":{"id":59345,"nodeType":"Block","src":"16982:57:110","nodes":[],"statements":[{"expression":{"id":59343,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60274,"src":"16999:33:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":59342,"id":59344,"nodeType":"Return","src":"16992:40:110"}]},"baseFunctions":[60426],"documentation":{"id":59338,"nodeType":"StructuredDocumentation","src":"16835:64:110","text":"@notice Gets the height of the last postconfirmed superblock"},"functionSelector":"59b99597","implemented":true,"kind":"function","modifiers":[],"name":"getLastPostconfirmedSuperBlockHeight","nameLocation":"16913:36:110","parameters":{"id":59339,"nodeType":"ParameterList","parameters":[],"src":"16949:2:110"},"returnParameters":{"id":59342,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59341,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":59346,"src":"16973:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59340,"name":"uint256","nodeType":"ElementaryTypeName","src":"16973:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"16972:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":59355,"nodeType":"FunctionDefinition","src":"17045:115:110","nodes":[],"body":{"id":59354,"nodeType":"Block","src":"17097:63:110","nodes":[],"statements":[{"expression":{"arguments":[{"expression":{"id":59350,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"17142:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":59351,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"17146:6:110","memberName":"sender","nodeType":"MemberAccess","src":"17142:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":59349,"name":"postconfirmAndRolloverWithAttester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59369,"src":"17107:34:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_address_$returns$__$","typeString":"function (address)"}},"id":59352,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"17107:46:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59353,"nodeType":"ExpressionStatement","src":"17107:46:110"}]},"baseFunctions":[60451],"functionSelector":"26624e37","implemented":true,"kind":"function","modifiers":[],"name":"postconfirmSuperBlocksAndRollover","nameLocation":"17054:33:110","parameters":{"id":59347,"nodeType":"ParameterList","parameters":[],"src":"17087:2:110"},"returnParameters":{"id":59348,"nodeType":"ParameterList","parameters":[],"src":"17097:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":59369,"nodeType":"FunctionDefinition","src":"17774:485:110","nodes":[],"body":{"id":59368,"nodeType":"Block","src":"17851:408:110","nodes":[],"statements":[{"body":{"id":59366,"nodeType":"Block","src":"18242:11:110","statements":[]},"condition":{"arguments":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59364,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59362,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60274,"src":"18202:33:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":59363,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"18238:1:110","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"18202:37:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":59361,"name":"attemptPostconfirmOrRollover","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59941,"src":"18173:28:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_uint256_$returns$_t_bool_$","typeString":"function (uint256) returns (bool)"}},"id":59365,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18173:67:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59367,"nodeType":"WhileStatement","src":"18166:87:110"}]},"documentation":{"id":59356,"nodeType":"StructuredDocumentation","src":"17563:106:110","text":"@notice If the current postconfirmer is not live, we should accept postconfirmations from any attester"},"implemented":true,"kind":"function","modifiers":[],"name":"postconfirmAndRolloverWithAttester","nameLocation":"17783:34:110","parameters":{"id":59359,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59358,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":59369,"src":"17818:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59357,"name":"address","nodeType":"ElementaryTypeName","src":"17818:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"17817:24:110"},"returnParameters":{"id":59360,"nodeType":"ParameterList","parameters":[],"src":"17851:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":59394,"nodeType":"FunctionDefinition","src":"18335:405:110","nodes":[],"body":{"id":59393,"nodeType":"Block","src":"18441:299:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":59377,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58505,"src":"18480:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":59378,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"18498:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":59379,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"18502:6:110","memberName":"sender","nodeType":"MemberAccess","src":"18498:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":59376,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39202,"src":"18472:7:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":59380,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18472:37:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"5345545f4c4153545f504f5354434f4e4649524d45445f434f4d4d49544d454e545f41545f4845494748545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":59381,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"18523:70:110","typeDescriptions":{"typeIdentifier":"t_stringliteral_0977ec2248431def5ae1a15f4d76a33486566739fca9c42d9176f889e347a11f","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_0977ec2248431def5ae1a15f4d76a33486566739fca9c42d9176f889e347a11f","typeString":"literal_string \"SET_LAST_POSTCONFIRMED_COMMITMENT_AT_HEIGHT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":59375,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"18451:7:110","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":59382,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"18451:152:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59383,"nodeType":"ExpressionStatement","src":"18451:152:110"},{"expression":{"id":59391,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":59384,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60348,"src":"18613:33:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$60291_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":59388,"indexExpression":{"id":59385,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60350,"src":"18647:31:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"18613:66:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$60291_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":59389,"indexExpression":{"expression":{"id":59386,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59372,"src":"18680:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59387,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"18701:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"18680:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"18613:95:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":59390,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59372,"src":"18711:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"src":"18613:118:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":59392,"nodeType":"ExpressionStatement","src":"18613:118:110"}]},"functionSelector":"3119edd4","implemented":true,"kind":"function","modifiers":[],"name":"setPostconfirmedCommitmentAtBlockHeight","nameLocation":"18344:39:110","parameters":{"id":59373,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59372,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"18412:20:110","nodeType":"VariableDeclaration","scope":59394,"src":"18384:48:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":59371,"nodeType":"UserDefinedTypeName","pathNode":{"id":59370,"name":"SuperBlockCommitment","nameLocations":["18384:20:110"],"nodeType":"IdentifierPath","referencedDeclaration":60291,"src":"18384:20:110"},"referencedDeclaration":60291,"src":"18384:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"18383:50:110"},"returnParameters":{"id":59374,"nodeType":"ParameterList","parameters":[],"src":"18441:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":59414,"nodeType":"FunctionDefinition","src":"18935:308:110","nodes":[],"body":{"id":59413,"nodeType":"Block","src":"19023:220:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":59402,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58505,"src":"19062:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":59403,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"19080:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":59404,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"19084:6:110","memberName":"sender","nodeType":"MemberAccess","src":"19080:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_address","typeString":"address"}],"id":59401,"name":"hasRole","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":39202,"src":"19054:7:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_bytes32_$_t_address_$returns$_t_bool_$","typeString":"function (bytes32,address) view returns (bool)"}},"id":59405,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19054:37:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},{"hexValue":"464f5243455f4c41544553545f434f4d4d49544d454e545f49535f434f4d4d49544d454e545f41444d494e5f4f4e4c59","id":59406,"isConstant":false,"isLValue":false,"isPure":true,"kind":"string","lValueRequested":false,"nodeType":"Literal","src":"19105:50:110","typeDescriptions":{"typeIdentifier":"t_stringliteral_769db6d293c786b13b107ddcfdc491f9fdfa9dc0a09944362f64328186fea1df","typeString":"literal_string \"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY\""},"value":"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY"}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bool","typeString":"bool"},{"typeIdentifier":"t_stringliteral_769db6d293c786b13b107ddcfdc491f9fdfa9dc0a09944362f64328186fea1df","typeString":"literal_string \"FORCE_LATEST_COMMITMENT_IS_COMMITMENT_ADMIN_ONLY\""}],"id":59400,"name":"require","nodeType":"Identifier","overloadedDeclarations":[-18,-18,-18],"referencedDeclaration":-18,"src":"19033:7:110","typeDescriptions":{"typeIdentifier":"t_function_require_pure$_t_bool_$_t_string_memory_ptr_$returns$__$","typeString":"function (bool,string memory) pure"}},"id":59407,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19033:132:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59408,"nodeType":"ExpressionStatement","src":"19033:132:110"},{"expression":{"arguments":[{"id":59410,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59397,"src":"19215:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":59409,"name":"setPostconfirmedCommitmentAtBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59394,"src":"19175:39:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SuperBlockCommitment_$60291_memory_ptr_$returns$__$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory)"}},"id":59411,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19175:61:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59412,"nodeType":"ExpressionStatement","src":"19175:61:110"}]},"functionSelector":"08c7050f","implemented":true,"kind":"function","modifiers":[],"name":"forceLatestCommitment","nameLocation":"18944:21:110","parameters":{"id":59398,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59397,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"18994:20:110","nodeType":"VariableDeclaration","scope":59414,"src":"18966:48:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":59396,"nodeType":"UserDefinedTypeName","pathNode":{"id":59395,"name":"SuperBlockCommitment","nameLocations":["18966:20:110"],"nodeType":"IdentifierPath","referencedDeclaration":60291,"src":"18966:20:110"},"referencedDeclaration":60291,"src":"18966:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"18965:50:110"},"returnParameters":{"id":59399,"nodeType":"ParameterList","parameters":[],"src":"19023:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":59429,"nodeType":"FunctionDefinition","src":"19249:200:110","nodes":[],"body":{"id":59428,"nodeType":"Block","src":"19351:98:110","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":59422,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60348,"src":"19368:33:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$60291_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":59424,"indexExpression":{"id":59423,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60350,"src":"19402:31:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19368:66:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$60291_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":59426,"indexExpression":{"id":59425,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59416,"src":"19435:6:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"19368:74:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"functionReturnParameters":59421,"id":59427,"nodeType":"Return","src":"19361:81:110"}]},"baseFunctions":[60447],"functionSelector":"2bfd11d6","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmedCommitment","nameLocation":"19258:26:110","parameters":{"id":59417,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59416,"mutability":"mutable","name":"height","nameLocation":"19293:6:110","nodeType":"VariableDeclaration","scope":59429,"src":"19285:14:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59415,"name":"uint256","nodeType":"ElementaryTypeName","src":"19285:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"19284:16:110"},"returnParameters":{"id":59421,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59420,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":59429,"src":"19322:27:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":59419,"nodeType":"UserDefinedTypeName","pathNode":{"id":59418,"name":"SuperBlockCommitment","nameLocations":["19322:20:110"],"nodeType":"IdentifierPath","referencedDeclaration":60291,"src":"19322:20:110"},"referencedDeclaration":60291,"src":"19322:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"19321:29:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":59585,"nodeType":"FunctionDefinition","src":"19647:2891:110","nodes":[],"body":{"id":59584,"nodeType":"Block","src":"19766:2772:110","nodes":[],"statements":[{"assignments":[59439],"declarations":[{"constant":false,"id":59439,"mutability":"mutable","name":"currentAcceptingEpoch","nameLocation":"19784:21:110","nodeType":"VariableDeclaration","scope":59584,"src":"19776:29:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59438,"name":"uint256","nodeType":"ElementaryTypeName","src":"19776:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59442,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":59440,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58925,"src":"19808:17:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":59441,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"19808:19:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"19776:51:110"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59448,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"id":59443,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60295,"src":"20072:29:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":59446,"indexExpression":{"expression":{"id":59444,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59433,"src":"20102:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59445,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20123:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"20102:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20072:58:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":59447,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59439,"src":"20134:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20072:83:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59453,"nodeType":"IfStatement","src":"20068:155:110","trueBody":{"id":59452,"nodeType":"Block","src":"20157:66:110","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":59449,"name":"UnacceptableSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60393,"src":"20178:32:110","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":59450,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20178:34:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":59451,"nodeType":"RevertStatement","src":"20171:41:110"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59459,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59454,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60274,"src":"20335:33:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59458,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":59455,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59433,"src":"20372:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59456,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20393:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"20372:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":59457,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20402:1:110","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"20372:31:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20335:68:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59464,"nodeType":"IfStatement","src":"20331:140:110","trueBody":{"id":59463,"nodeType":"Block","src":"20405:66:110","statements":[{"errorCall":{"arguments":[],"expression":{"argumentTypes":[],"id":59460,"name":"UnacceptableSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60393,"src":"20426:32:110","typeDescriptions":{"typeIdentifier":"t_function_error_pure$__$returns$_t_error_$","typeString":"function () pure returns (error)"}},"id":59461,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20426:34:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_error","typeString":"error"}},"id":59462,"nodeType":"RevertStatement","src":"20419:41:110"}]}},{"assignments":[59469],"declarations":[{"constant":false,"id":59469,"mutability":"mutable","name":"attesters","nameLocation":"20588:9:110","nodeType":"VariableDeclaration","scope":59584,"src":"20571:26:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":59467,"name":"address","nodeType":"ElementaryTypeName","src":"20571:7:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":59468,"nodeType":"ArrayTypeName","src":"20571:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":59472,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":59470,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60222,"src":"20600:35:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":59471,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20600:37:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"20571:66:110"},{"body":{"id":59507,"nodeType":"Block","src":"20694:222:110","statements":[{"condition":{"commonType":{"typeIdentifier":"t_bytes32","typeString":"bytes32"},"id":59495,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":59484,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60302,"src":"20712:11:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":59487,"indexExpression":{"expression":{"id":59485,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59433,"src":"20724:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59486,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20745:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"20724:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20712:40:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":59491,"indexExpression":{"baseExpression":{"id":59488,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59469,"src":"20753:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59490,"indexExpression":{"id":59489,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59474,"src":"20763:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20753:12:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20712:54:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":59492,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20767:10:110","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":60288,"src":"20712:65:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"expression":{"id":59493,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59433,"src":"20781:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59494,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"20802:10:110","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":60288,"src":"20781:31:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"src":"20712:100:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59506,"nodeType":"IfStatement","src":"20708:198:110","trueBody":{"id":59505,"nodeType":"Block","src":"20814:92:110","statements":[{"expression":{"id":59503,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"20832:59:110","subExpression":{"baseExpression":{"baseExpression":{"id":59496,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60356,"src":"20832:20:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":59501,"indexExpression":{"id":59497,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59439,"src":"20853:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20832:43:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":59502,"indexExpression":{"baseExpression":{"id":59498,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59469,"src":"20876:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59500,"indexExpression":{"id":59499,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59474,"src":"20886:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"20876:12:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"20832:57:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59504,"nodeType":"ExpressionStatement","src":"20832:59:110"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59480,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59477,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59474,"src":"20667:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":59478,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59469,"src":"20671:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59479,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"20681:6:110","memberName":"length","nodeType":"MemberAccess","src":"20671:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"20667:20:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59508,"initializationExpression":{"assignments":[59474],"declarations":[{"constant":false,"id":59474,"mutability":"mutable","name":"i","nameLocation":"20660:1:110","nodeType":"VariableDeclaration","scope":59508,"src":"20652:9:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59473,"name":"uint256","nodeType":"ElementaryTypeName","src":"20652:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59476,"initialValue":{"hexValue":"30","id":59475,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"20664:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"20652:13:110"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":59482,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"20689:3:110","subExpression":{"id":59481,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59474,"src":"20689:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59483,"nodeType":"ExpressionStatement","src":"20689:3:110"},"nodeType":"ForStatement","src":"20647:269:110"},{"condition":{"id":59512,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"20971:61:110","subExpression":{"arguments":[{"id":59510,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59433,"src":"21011:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":59509,"name":"isWithinPostconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59736,"src":"20972:38:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$60291_memory_ptr_$returns$_t_bool_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (bool)"}},"id":59511,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"20972:60:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":59536,"nodeType":"Block","src":"21237:630:110","statements":[{"condition":{"commonType":{"typeIdentifier":"t_address","typeString":"address"},"id":59525,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":59522,"name":"getPostconfirmer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59031,"src":"21729:16:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_address_$","typeString":"function () view returns (address)"}},"id":59523,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"21729:18:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"id":59524,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59435,"src":"21751:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"21729:30:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59535,"nodeType":"IfStatement","src":"21725:132:110","trueBody":{"id":59534,"nodeType":"Block","src":"21761:96:110","statements":[{"expression":{"id":59532,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":59526,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60362,"src":"21779:25:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":59529,"indexExpression":{"id":59527,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59439,"src":"21805:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21779:48:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":59530,"indexExpression":{"id":59528,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59435,"src":"21828:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21779:58:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":59531,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21841:1:110","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"21779:63:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59533,"nodeType":"ExpressionStatement","src":"21779:63:110"}]}}]},"id":59537,"nodeType":"IfStatement","src":"20967:900:110","trueBody":{"id":59521,"nodeType":"Block","src":"21034:197:110","statements":[{"expression":{"id":59519,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":59513,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60362,"src":"21157:25:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":59516,"indexExpression":{"id":59514,"name":"currentAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59439,"src":"21183:21:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21157:48:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":59517,"indexExpression":{"id":59515,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59435,"src":"21206:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21157:58:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"hexValue":"31","id":59518,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"21219:1:110","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"21157:63:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59520,"nodeType":"ExpressionStatement","src":"21157:63:110"}]}},{"expression":{"id":59545,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"baseExpression":{"id":59538,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60348,"src":"21877:33:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$60291_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":59542,"indexExpression":{"id":59539,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60350,"src":"21911:31:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"21877:66:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$60291_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":59543,"indexExpression":{"expression":{"id":59540,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59433,"src":"21944:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59541,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"21965:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"21944:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"21877:95:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":59544,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59433,"src":"21975:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"src":"21877:118:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":59546,"nodeType":"ExpressionStatement","src":"21877:118:110"},{"expression":{"id":59550,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":59547,"name":"lastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60274,"src":"22005:33:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":59548,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59433,"src":"22041:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59549,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22062:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"22041:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22005:63:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59551,"nodeType":"ExpressionStatement","src":"22005:63:110"},{"expression":{"id":59557,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":59552,"name":"postconfirmedBy","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60318,"src":"22078:15:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_address_$","typeString":"mapping(uint256 => address)"}},"id":59555,"indexExpression":{"expression":{"id":59553,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59433,"src":"22094:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59554,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22115:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"22094:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22078:44:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":59556,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59435,"src":"22125:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"src":"22078:55:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":59558,"nodeType":"ExpressionStatement","src":"22078:55:110"},{"expression":{"id":59565,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":59559,"name":"postconfirmedAtL1BlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60326,"src":"22143:28:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":59562,"indexExpression":{"expression":{"id":59560,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59433,"src":"22172:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59561,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22193:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"22172:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22143:57:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":59563,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"22203:5:110","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":59564,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22209:6:110","memberName":"number","nodeType":"MemberAccess","src":"22203:12:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22143:72:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59566,"nodeType":"ExpressionStatement","src":"22143:72:110"},{"expression":{"id":59573,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":59567,"name":"postconfirmedAtL1BlockTimestamp","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60330,"src":"22225:31:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":59570,"indexExpression":{"expression":{"id":59568,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59433,"src":"22257:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59569,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22278:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"22257:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"22225:60:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"expression":{"id":59571,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"22288:5:110","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":59572,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"22294:9:110","memberName":"timestamp","nodeType":"MemberAccess","src":"22288:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"22225:78:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59574,"nodeType":"ExpressionStatement","src":"22225:78:110"},{"eventCall":{"arguments":[{"expression":{"id":59576,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59433,"src":"22407:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59577,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22428:7:110","memberName":"blockId","nodeType":"MemberAccess","referencedDeclaration":60290,"src":"22407:28:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":59578,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59433,"src":"22449:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59579,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22470:10:110","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":60288,"src":"22449:31:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},{"expression":{"id":59580,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59433,"src":"22494:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59581,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"22515:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"22494:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_bytes32","typeString":"bytes32"},{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":59575,"name":"SuperBlockPostconfirmed","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60383,"src":"22370:23:110","typeDescriptions":{"typeIdentifier":"t_function_event_nonpayable$_t_bytes32_$_t_bytes32_$_t_uint256_$returns$__$","typeString":"function (bytes32,bytes32,uint256)"}},"id":59582,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22370:161:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59583,"nodeType":"EmitStatement","src":"22365:166:110"}]},"documentation":{"id":59430,"nodeType":"StructuredDocumentation","src":"19454:188:110","text":"@dev Postconfirms a superBlock commitment.\n @dev This function and attemptPostconfirmOrRollover() could call each other recursively, so we must ensure it's safe from re-entrancy"},"implemented":true,"kind":"function","modifiers":[],"name":"_postconfirmSuperBlockCommitment","nameLocation":"19656:32:110","parameters":{"id":59436,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59433,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"19717:20:110","nodeType":"VariableDeclaration","scope":59585,"src":"19689:48:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":59432,"nodeType":"UserDefinedTypeName","pathNode":{"id":59431,"name":"SuperBlockCommitment","nameLocations":["19689:20:110"],"nodeType":"IdentifierPath","referencedDeclaration":60291,"src":"19689:20:110"},"referencedDeclaration":60291,"src":"19689:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"},{"constant":false,"id":59435,"mutability":"mutable","name":"attester","nameLocation":"19747:8:110","nodeType":"VariableDeclaration","scope":59585,"src":"19739:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59434,"name":"address","nodeType":"ElementaryTypeName","src":"19739:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"19688:68:110"},"returnParameters":{"id":59437,"nodeType":"ParameterList","parameters":[],"src":"19766:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":59699,"nodeType":"FunctionDefinition","src":"22785:1897:110","nodes":[],"body":{"id":59698,"nodeType":"Block","src":"22819:1863:110","nodes":[],"statements":[{"assignments":[59590],"declarations":[{"constant":false,"id":59590,"mutability":"mutable","name":"acceptingEpoch","nameLocation":"22905:14:110","nodeType":"VariableDeclaration","scope":59698,"src":"22897:22:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59589,"name":"uint256","nodeType":"ElementaryTypeName","src":"22897:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59593,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":59591,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58925,"src":"22922:17:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":59592,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22922:19:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"22897:44:110"},{"assignments":[59598],"declarations":[{"constant":false,"id":59598,"mutability":"mutable","name":"attesters","nameLocation":"22968:9:110","nodeType":"VariableDeclaration","scope":59698,"src":"22951:26:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":59596,"name":"address","nodeType":"ElementaryTypeName","src":"22951:7:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":59597,"nodeType":"ArrayTypeName","src":"22951:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":59601,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":59599,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60222,"src":"22980:35:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":59600,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"22980:37:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"22951:66:110"},{"body":{"id":59691,"nodeType":"Block","src":"23101:1533:110","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59621,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":59613,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60356,"src":"23119:20:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":59615,"indexExpression":{"id":59614,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59590,"src":"23140:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23119:36:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":59619,"indexExpression":{"baseExpression":{"id":59616,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59598,"src":"23156:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59618,"indexExpression":{"id":59617,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59603,"src":"23166:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23156:12:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23119:50:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":59620,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23172:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23119:54:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59651,"nodeType":"IfStatement","src":"23115:697:110","trueBody":{"id":59650,"nodeType":"Block","src":"23175:637:110","statements":[{"assignments":[59623],"declarations":[{"constant":false,"id":59623,"mutability":"mutable","name":"reward","nameLocation":"23281:6:110","nodeType":"VariableDeclaration","scope":59650,"src":"23273:14:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59622,"name":"uint256","nodeType":"ElementaryTypeName","src":"23273:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59639,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59638,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59632,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":59624,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60356,"src":"23290:20:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":59626,"indexExpression":{"id":59625,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59590,"src":"23311:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23290:36:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":59630,"indexExpression":{"baseExpression":{"id":59627,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59598,"src":"23327:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59629,"indexExpression":{"id":59628,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59603,"src":"23337:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23327:12:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23290:50:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":59631,"name":"rewardPerAttestationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60364,"src":"23343:25:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23290:78:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"baseExpression":{"id":59634,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59598,"src":"23405:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59636,"indexExpression":{"id":59635,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59603,"src":"23415:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23405:12:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":59633,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60051,"src":"23371:33:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":59637,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23371:47:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23290:128:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23273:145:110"},{"expression":{"arguments":[{"baseExpression":{"id":59643,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59598,"src":"23596:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59645,"indexExpression":{"id":59644,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59603,"src":"23606:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23596:12:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59646,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59623,"src":"23610:6:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":59647,"name":"moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60270,"src":"23618:16:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":59640,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"23563:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":59642,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23579:16:110","memberName":"rewardFromDomain","nodeType":"MemberAccess","referencedDeclaration":62769,"src":"23563:32:110","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,uint256,address) external"}},"id":59648,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"23563:72:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59649,"nodeType":"ExpressionStatement","src":"23563:72:110"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59660,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":59652,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60362,"src":"23874:25:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":59654,"indexExpression":{"id":59653,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59590,"src":"23900:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23874:41:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":59658,"indexExpression":{"baseExpression":{"id":59655,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59598,"src":"23916:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59657,"indexExpression":{"id":59656,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59603,"src":"23926:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23916:12:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23874:55:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"hexValue":"30","id":59659,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23932:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"23874:59:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59690,"nodeType":"IfStatement","src":"23870:754:110","trueBody":{"id":59689,"nodeType":"Block","src":"23935:689:110","statements":[{"assignments":[59662],"declarations":[{"constant":false,"id":59662,"mutability":"mutable","name":"reward","nameLocation":"23961:6:110","nodeType":"VariableDeclaration","scope":59689,"src":"23953:14:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59661,"name":"uint256","nodeType":"ElementaryTypeName","src":"23953:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59678,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59677,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59671,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"baseExpression":{"baseExpression":{"id":59663,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60362,"src":"23970:25:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":59665,"indexExpression":{"id":59664,"name":"acceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59590,"src":"23996:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23970:41:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":59669,"indexExpression":{"baseExpression":{"id":59666,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59598,"src":"24012:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59668,"indexExpression":{"id":59667,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59603,"src":"24022:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24012:12:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"23970:55:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"id":59670,"name":"rewardPerPostconfirmationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60366,"src":"24028:30:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23970:88:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"baseExpression":{"id":59673,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59598,"src":"24095:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59675,"indexExpression":{"id":59674,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59603,"src":"24105:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24095:12:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"id":59672,"name":"getAttesterStakeForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60051,"src":"24061:33:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_address_$returns$_t_uint256_$","typeString":"function (address) view returns (uint256)"}},"id":59676,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24061:47:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23970:138:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"23953:155:110"},{"expression":{"arguments":[{"baseExpression":{"id":59682,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59598,"src":"24159:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59684,"indexExpression":{"id":59683,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59603,"src":"24169:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"24159:12:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59685,"name":"reward","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59662,"src":"24173:6:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":59686,"name":"moveTokenAddress","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60270,"src":"24181:16:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":59679,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"24126:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":59681,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24142:16:110","memberName":"rewardFromDomain","nodeType":"MemberAccess","referencedDeclaration":62769,"src":"24126:32:110","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$_t_address_$_t_uint256_$_t_address_$returns$__$","typeString":"function (address,uint256,address) external"}},"id":59687,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24126:72:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59688,"nodeType":"ExpressionStatement","src":"24126:72:110"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59609,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59606,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59603,"src":"23074:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":59607,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59598,"src":"23078:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59608,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"23088:6:110","memberName":"length","nodeType":"MemberAccess","src":"23078:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"23074:20:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59692,"initializationExpression":{"assignments":[59603],"declarations":[{"constant":false,"id":59603,"mutability":"mutable","name":"i","nameLocation":"23067:1:110","nodeType":"VariableDeclaration","scope":59692,"src":"23059:9:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59602,"name":"uint256","nodeType":"ElementaryTypeName","src":"23059:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59605,"initialValue":{"hexValue":"30","id":59604,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"23071:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"23059:13:110"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":59611,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"23096:3:110","subExpression":{"id":59610,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59603,"src":"23096:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59612,"nodeType":"ExpressionStatement","src":"23096:3:110"},"nodeType":"ForStatement","src":"23054:1580:110"},{"expression":{"arguments":[],"expression":{"argumentTypes":[],"expression":{"id":59693,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"24644:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":59695,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"24660:13:110","memberName":"rollOverEpoch","nodeType":"MemberAccess","referencedDeclaration":62663,"src":"24644:29:110","typeDescriptions":{"typeIdentifier":"t_function_external_nonpayable$__$returns$__$","typeString":"function () external"}},"id":59696,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"24644:31:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59697,"nodeType":"ExpressionStatement","src":"24644:31:110"}]},"documentation":{"id":59586,"nodeType":"StructuredDocumentation","src":"22544:236:110","text":"@dev nonReentrant because there is no need to reenter this function. It should be called iteratively. \n @dev Marked on the internal method to simplify risks from complex calling patterns. This also calls an external contract."},"implemented":true,"kind":"function","modifiers":[],"name":"rollOverEpoch","nameLocation":"22794:13:110","parameters":{"id":59587,"nodeType":"ParameterList","parameters":[],"src":"22807:2:110"},"returnParameters":{"id":59588,"nodeType":"ParameterList","parameters":[],"src":"22819:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":59736,"nodeType":"FunctionDefinition","src":"24959:683:110","nodes":[],"body":{"id":59735,"nodeType":"Block","src":"25084:558:110","nodes":[],"statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59712,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":59709,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59703,"src":"25123:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":59708,"name":"getCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59302,"src":"25098:24:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$60291_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (uint256)"}},"id":59710,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25098:46:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":59711,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"25148:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"25098:51:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59716,"nodeType":"IfStatement","src":"25094:94:110","trueBody":{"id":59715,"nodeType":"Block","src":"25151:37:110","statements":[{"expression":{"hexValue":"66616c7365","id":59713,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25172:5:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":59707,"id":59714,"nodeType":"Return","src":"25165:12:110"}]}},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59728,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59725,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59722,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[{"id":59718,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59703,"src":"25417:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":59717,"name":"getCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59302,"src":"25392:24:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$60291_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (uint256)"}},"id":59719,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25392:46:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":59720,"name":"getMinCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58844,"src":"25454:38:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":59721,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25454:40:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25392:102:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":59723,"name":"getPostconfirmerPrivilegeDuration","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58805,"src":"25510:33:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":59724,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"25510:35:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25392:153:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":59726,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"25561:5:110","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":59727,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"25567:9:110","memberName":"timestamp","nodeType":"MemberAccess","src":"25561:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"25392:184:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59732,"nodeType":"IfStatement","src":"25388:227:110","trueBody":{"id":59731,"nodeType":"Block","src":"25578:37:110","statements":[{"expression":{"hexValue":"66616c7365","id":59729,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25599:5:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":59707,"id":59730,"nodeType":"Return","src":"25592:12:110"}]}},{"expression":{"hexValue":"74727565","id":59733,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"25631:4:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":59707,"id":59734,"nodeType":"Return","src":"25624:11:110"}]},"documentation":{"id":59700,"nodeType":"StructuredDocumentation","src":"24688:266:110","text":"@notice Checks, for a given superBlock commitment, if the current L1 block time is within the postconfirmer's privilege window\n @dev The postconfirmer's privilege window is the time period when only the postconfirmer will get rewarded for postconfirmation"},"functionSelector":"0cf6b6bd","implemented":true,"kind":"function","modifiers":[],"name":"isWithinPostconfirmerPrivilegeDuration","nameLocation":"24968:38:110","parameters":{"id":59704,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59703,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"25035:20:110","nodeType":"VariableDeclaration","scope":59736,"src":"25007:48:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":59702,"nodeType":"UserDefinedTypeName","pathNode":{"id":59701,"name":"SuperBlockCommitment","nameLocations":["25007:20:110"],"nodeType":"IdentifierPath","referencedDeclaration":60291,"src":"25007:20:110"},"referencedDeclaration":60291,"src":"25007:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"src":"25006:50:110"},"returnParameters":{"id":59707,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59706,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":59736,"src":"25078:4:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":59705,"name":"bool","nodeType":"ElementaryTypeName","src":"25078:4:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"25077:6:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":59941,"nodeType":"FunctionDefinition","src":"25987:4503:110","nodes":[],"body":{"id":59940,"nodeType":"Block","src":"26075:4415:110","nodes":[],"statements":[{"assignments":[59745],"declarations":[{"constant":false,"id":59745,"mutability":"mutable","name":"superBlockEpoch","nameLocation":"26093:15:110","nodeType":"VariableDeclaration","scope":59940,"src":"26085:23:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59744,"name":"uint256","nodeType":"ElementaryTypeName","src":"26085:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59749,"initialValue":{"baseExpression":{"id":59746,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60295,"src":"26111:29:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":59748,"indexExpression":{"id":59747,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59739,"src":"26141:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26111:47:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26085:73:110"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59753,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":59750,"name":"getLastPostconfirmedSuperBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59346,"src":"26172:36:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":59751,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26172:38:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"==","rightExpression":{"hexValue":"30","id":59752,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26214:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"26172:43:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"falseBody":{"id":59812,"nodeType":"Block","src":"26307:875:110","statements":[{"assignments":[59756],"declarations":[{"constant":false,"id":59756,"mutability":"mutable","name":"previousSuperBlockEpoch","nameLocation":"26434:23:110","nodeType":"VariableDeclaration","scope":59812,"src":"26426:31:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59755,"name":"uint256","nodeType":"ElementaryTypeName","src":"26426:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59762,"initialValue":{"baseExpression":{"id":59757,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60295,"src":"26460:29:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":59761,"indexExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59760,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59758,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59739,"src":"26490:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"-","rightExpression":{"hexValue":"31","id":59759,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26507:1:110","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"26490:18:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26460:49:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"26426:83:110"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59765,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59763,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59745,"src":"26527:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":59764,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59756,"src":"26545:23:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26527:41:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59811,"nodeType":"IfStatement","src":"26523:649:110","trueBody":{"id":59810,"nodeType":"Block","src":"26573:599:110","statements":[{"assignments":[59770],"declarations":[{"constant":false,"id":59770,"mutability":"mutable","name":"stakedAttesters","nameLocation":"26608:15:110","nodeType":"VariableDeclaration","scope":59810,"src":"26591:32:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":59768,"name":"address","nodeType":"ElementaryTypeName","src":"26591:7:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":59769,"nodeType":"ArrayTypeName","src":"26591:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":59773,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":59771,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60222,"src":"26626:35:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":59772,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"26626:37:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"26591:72:110"},{"body":{"id":59804,"nodeType":"Block","src":"26839:260:110","statements":[{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59794,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":59785,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60302,"src":"26865:11:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":59787,"indexExpression":{"id":59786,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59739,"src":"26877:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26865:29:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":59791,"indexExpression":{"baseExpression":{"id":59788,"name":"stakedAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59770,"src":"26895:15:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59790,"indexExpression":{"id":59789,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59775,"src":"26911:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26895:18:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"26865:49:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":59792,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"26915:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"26865:56:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":59793,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26925:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"26865:61:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59803,"nodeType":"IfStatement","src":"26861:220:110","trueBody":{"id":59802,"nodeType":"Block","src":"26928:153:110","statements":[{"expression":{"id":59799,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"baseExpression":{"id":59795,"name":"superBlockHeightAssignedEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60295,"src":"26954:29:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_uint256_$","typeString":"mapping(uint256 => uint256)"}},"id":59797,"indexExpression":{"id":59796,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59739,"src":"26984:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":true,"nodeType":"IndexAccess","src":"26954:47:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":59798,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59756,"src":"27004:23:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26954:73:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59800,"nodeType":"ExpressionStatement","src":"26954:73:110"},{"id":59801,"nodeType":"Break","src":"27053:5:110"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59781,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59778,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59775,"src":"26806:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":59779,"name":"stakedAttesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59770,"src":"26810:15:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59780,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"26826:6:110","memberName":"length","nodeType":"MemberAccess","src":"26810:22:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"26806:26:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59805,"initializationExpression":{"assignments":[59775],"declarations":[{"constant":false,"id":59775,"mutability":"mutable","name":"i","nameLocation":"26799:1:110","nodeType":"VariableDeclaration","scope":59805,"src":"26791:9:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59774,"name":"uint256","nodeType":"ElementaryTypeName","src":"26791:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59777,"initialValue":{"hexValue":"30","id":59776,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"26803:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"26791:13:110"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":59783,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"26834:3:110","subExpression":{"id":59782,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59775,"src":"26834:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59784,"nodeType":"ExpressionStatement","src":"26834:3:110"},"nodeType":"ForStatement","src":"26786:313:110"},{"expression":{"id":59808,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":59806,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59745,"src":"27116:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":59807,"name":"previousSuperBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59756,"src":"27134:23:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27116:41:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59809,"nodeType":"ExpressionStatement","src":"27116:41:110"}]}}]},"id":59813,"nodeType":"IfStatement","src":"26168:1014:110","trueBody":{"id":59754,"nodeType":"Block","src":"26217:84:110","statements":[]}},{"body":{"id":59821,"nodeType":"Block","src":"27517:203:110","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":59818,"name":"rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59699,"src":"27694:13:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":59819,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27694:15:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59820,"nodeType":"ExpressionStatement","src":"27694:15:110"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59817,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":59814,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58925,"src":"27478:17:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":59815,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27478:19:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"id":59816,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59745,"src":"27500:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27478:37:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59822,"nodeType":"WhileStatement","src":"27471:249:110"},{"assignments":[59824],"declarations":[{"constant":false,"id":59824,"mutability":"mutable","name":"supermajority","nameLocation":"27913:13:110","nodeType":"VariableDeclaration","scope":59940,"src":"27905:21:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59823,"name":"uint256","nodeType":"ElementaryTypeName","src":"27905:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59835,"initialValue":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59834,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59832,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"components":[{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59829,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"hexValue":"32","id":59825,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27930:1:110","typeDescriptions":{"typeIdentifier":"t_rational_2_by_1","typeString":"int_const 2"},"value":"2"},"nodeType":"BinaryOperation","operator":"*","rightExpression":{"arguments":[{"id":59827,"name":"superBlockEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59745,"src":"27948:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":59826,"name":"getTotalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60121,"src":"27934:13:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":59828,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"27934:30:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"27930:34:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"id":59830,"isConstant":false,"isInlineArray":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"TupleExpression","src":"27929:36:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"/","rightExpression":{"hexValue":"33","id":59831,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27968:1:110","typeDescriptions":{"typeIdentifier":"t_rational_3_by_1","typeString":"int_const 3"},"value":"3"},"src":"27929:40:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"hexValue":"31","id":59833,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"27972:1:110","typeDescriptions":{"typeIdentifier":"t_rational_1_by_1","typeString":"int_const 1"},"value":"1"},"src":"27929:44:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"27905:68:110"},{"assignments":[59840],"declarations":[{"constant":false,"id":59840,"mutability":"mutable","name":"attesters","nameLocation":"28000:9:110","nodeType":"VariableDeclaration","scope":59940,"src":"27983:26:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":59838,"name":"address","nodeType":"ElementaryTypeName","src":"27983:7:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":59839,"nodeType":"ArrayTypeName","src":"27983:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":59843,"initialValue":{"arguments":[],"expression":{"argumentTypes":[],"id":59841,"name":"getStakedAttestersForAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60222,"src":"28012:35:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function () view returns (address[] memory)"}},"id":59842,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"28012:37:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"27983:66:110"},{"assignments":[59845],"declarations":[{"constant":false,"id":59845,"mutability":"mutable","name":"successfulPostconfirmation","nameLocation":"28316:26:110","nodeType":"VariableDeclaration","scope":59940,"src":"28311:31:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":59844,"name":"bool","nodeType":"ElementaryTypeName","src":"28311:4:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"id":59847,"initialValue":{"hexValue":"66616c7365","id":59846,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"28345:5:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"nodeType":"VariableDeclarationStatement","src":"28311:39:110"},{"body":{"id":59921,"nodeType":"Block","src":"28407:1641:110","statements":[{"assignments":[59860],"declarations":[{"constant":false,"id":59860,"mutability":"mutable","name":"attester","nameLocation":"28429:8:110","nodeType":"VariableDeclaration","scope":59921,"src":"28421:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59859,"name":"address","nodeType":"ElementaryTypeName","src":"28421:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"id":59864,"initialValue":{"baseExpression":{"id":59861,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59840,"src":"28440:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59863,"indexExpression":{"id":59862,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59849,"src":"28450:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28440:12:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"nodeType":"VariableDeclarationStatement","src":"28421:31:110"},{"assignments":[59867],"declarations":[{"constant":false,"id":59867,"mutability":"mutable","name":"superBlockCommitment","nameLocation":"28494:20:110","nodeType":"VariableDeclaration","scope":59921,"src":"28466:48:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"},"typeName":{"id":59866,"nodeType":"UserDefinedTypeName","pathNode":{"id":59865,"name":"SuperBlockCommitment","nameLocations":["28466:20:110"],"nodeType":"IdentifierPath","referencedDeclaration":60291,"src":"28466:20:110"},"referencedDeclaration":60291,"src":"28466:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage_ptr","typeString":"struct PCPStorage.SuperBlockCommitment"}},"visibility":"internal"}],"id":59873,"initialValue":{"baseExpression":{"baseExpression":{"id":59868,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60302,"src":"28517:11:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":59870,"indexExpression":{"id":59869,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59739,"src":"28529:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28517:29:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":59872,"indexExpression":{"id":59871,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59860,"src":"28547:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28517:39:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"nodeType":"VariableDeclarationStatement","src":"28466:90:110"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59877,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":59874,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59867,"src":"28759:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59875,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28780:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"28759:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"id":59876,"name":"superBlockHeight","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59739,"src":"28790:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28759:47:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59879,"nodeType":"IfStatement","src":"28755:61:110","trueBody":{"id":59878,"nodeType":"Continue","src":"28808:8:110"}},{"assignments":[59881],"declarations":[{"constant":false,"id":59881,"mutability":"mutable","name":"totalStakeOnCommitment","nameLocation":"28894:22:110","nodeType":"VariableDeclaration","scope":59921,"src":"28886:30:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59880,"name":"uint256","nodeType":"ElementaryTypeName","src":"28886:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59889,"initialValue":{"baseExpression":{"baseExpression":{"id":59882,"name":"commitmentStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60308,"src":"28919:15:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_bytes32_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(bytes32 => uint256))"}},"id":59885,"indexExpression":{"expression":{"id":59883,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59867,"src":"28935:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59884,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28956:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"28935:27:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28919:44:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_bytes32_$_t_uint256_$","typeString":"mapping(bytes32 => uint256)"}},"id":59888,"indexExpression":{"expression":{"id":59886,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59867,"src":"28964:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},"id":59887,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"28985:10:110","memberName":"commitment","nodeType":"MemberAccess","referencedDeclaration":60288,"src":"28964:31:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"28919:77:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"28886:110:110"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59892,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59890,"name":"totalStakeOnCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59881,"src":"29015:22:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">=","rightExpression":{"id":59891,"name":"supermajority","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59824,"src":"29041:13:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29015:39:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59920,"nodeType":"IfStatement","src":"29011:1027:110","trueBody":{"id":59919,"nodeType":"Block","src":"29056:982:110","statements":[{"assignments":[59894],"declarations":[{"constant":false,"id":59894,"mutability":"mutable","name":"firstSeen","nameLocation":"29270:9:110","nodeType":"VariableDeclaration","scope":59919,"src":"29262:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59893,"name":"uint256","nodeType":"ElementaryTypeName","src":"29262:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59898,"initialValue":{"arguments":[{"id":59896,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59867,"src":"29307:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}],"id":59895,"name":"getCommitmentFirstSeenAt","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59302,"src":"29282:24:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_struct$_SuperBlockCommitment_$60291_memory_ptr_$returns$_t_uint256_$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory) view returns (uint256)"}},"id":59897,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29282:46:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"VariableDeclarationStatement","src":"29262:66:110"},{"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59904,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"id":59899,"name":"block","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-4,"src":"29413:5:110","typeDescriptions":{"typeIdentifier":"t_magic_block","typeString":"block"}},"id":59900,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29419:9:110","memberName":"timestamp","nodeType":"MemberAccess","src":"29413:15:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59903,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59901,"name":"firstSeen","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59894,"src":"29431:9:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"+","rightExpression":{"id":59902,"name":"minCommitmentAgeForPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60280,"src":"29443:35:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29431:47:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"29413:65:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59906,"nodeType":"IfStatement","src":"29409:76:110","trueBody":{"id":59905,"nodeType":"Break","src":"29480:5:110"}},{"expression":{"arguments":[{"id":59908,"name":"superBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59867,"src":"29537:20:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"}},{"expression":{"id":59909,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"29559:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":59910,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"29563:6:110","memberName":"sender","nodeType":"MemberAccess","src":"29559:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_memory_ptr","typeString":"struct PCPStorage.SuperBlockCommitment memory"},{"typeIdentifier":"t_address","typeString":"address"}],"id":59907,"name":"_postconfirmSuperBlockCommitment","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59585,"src":"29504:32:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$_t_struct$_SuperBlockCommitment_$60291_memory_ptr_$_t_address_$returns$__$","typeString":"function (struct PCPStorage.SuperBlockCommitment memory,address)"}},"id":59911,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"29504:66:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59912,"nodeType":"ExpressionStatement","src":"29504:66:110"},{"expression":{"id":59915,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":59913,"name":"successfulPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59845,"src":"29588:26:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"hexValue":"74727565","id":59914,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"29617:4:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"src":"29588:33:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59916,"nodeType":"ExpressionStatement","src":"29588:33:110"},{"expression":{"hexValue":"74727565","id":59917,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"30019:4:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":59743,"id":59918,"nodeType":"Return","src":"30012:11:110"}]}}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59855,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59852,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59849,"src":"28380:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":59853,"name":"attesters","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59840,"src":"28384:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":59854,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"28394:6:110","memberName":"length","nodeType":"MemberAccess","src":"28384:16:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"28380:20:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59922,"initializationExpression":{"assignments":[59849],"declarations":[{"constant":false,"id":59849,"mutability":"mutable","name":"i","nameLocation":"28373:1:110","nodeType":"VariableDeclaration","scope":59922,"src":"28365:9:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59848,"name":"uint256","nodeType":"ElementaryTypeName","src":"28365:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":59851,"initialValue":{"hexValue":"30","id":59850,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"28377:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"28365:13:110"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":59857,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"28402:3:110","subExpression":{"id":59856,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59849,"src":"28402:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":59858,"nodeType":"ExpressionStatement","src":"28402:3:110"},"nodeType":"ForStatement","src":"28360:1688:110"},{"condition":{"commonType":{"typeIdentifier":"t_bool","typeString":"bool"},"id":59930,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":59924,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"!","prefix":true,"src":"30260:27:110","subExpression":{"id":59923,"name":"successfulPostconfirmation","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59845,"src":"30261:26:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"nodeType":"BinaryOperation","operator":"&&","rightExpression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":59929,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":59925,"name":"getPresentEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58911,"src":"30291:15:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":59926,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30291:17:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":">","rightExpression":{"arguments":[],"expression":{"argumentTypes":[],"id":59927,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58925,"src":"30311:17:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":59928,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30311:19:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"30291:39:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"src":"30260:70:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":59937,"nodeType":"IfStatement","src":"30256:206:110","trueBody":{"id":59936,"nodeType":"Block","src":"30332:130:110","statements":[{"expression":{"arguments":[],"expression":{"argumentTypes":[],"id":59931,"name":"rollOverEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59699,"src":"30346:13:110","typeDescriptions":{"typeIdentifier":"t_function_internal_nonpayable$__$returns$__$","typeString":"function ()"}},"id":59932,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30346:15:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_tuple$__$","typeString":"tuple()"}},"id":59933,"nodeType":"ExpressionStatement","src":"30346:15:110"},{"expression":{"hexValue":"74727565","id":59934,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"30382:4:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"true"},"functionReturnParameters":59743,"id":59935,"nodeType":"Return","src":"30375:11:110"}]}},{"expression":{"hexValue":"66616c7365","id":59938,"isConstant":false,"isLValue":false,"isPure":true,"kind":"bool","lValueRequested":false,"nodeType":"Literal","src":"30478:5:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"value":"false"},"functionReturnParameters":59743,"id":59939,"nodeType":"Return","src":"30471:12:110"}]},"documentation":{"id":59737,"nodeType":"StructuredDocumentation","src":"25648:334:110","text":"@dev it is possible if the accepting epoch is behind the presentEpoch that heights dont obtain enough votes in the assigned epoch. \n @dev Moreover, due to the leadingBlockTolerance, the assigned epoch for a height could be ahead of the actual epoch. \n @dev solution is to move to the next epoch and count votes there"},"implemented":true,"kind":"function","modifiers":[],"name":"attemptPostconfirmOrRollover","nameLocation":"25996:28:110","parameters":{"id":59740,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59739,"mutability":"mutable","name":"superBlockHeight","nameLocation":"26033:16:110","nodeType":"VariableDeclaration","scope":59941,"src":"26025:24:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59738,"name":"uint256","nodeType":"ElementaryTypeName","src":"26025:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"26024:26:110"},"returnParameters":{"id":59743,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59742,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":59941,"src":"26069:4:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":59741,"name":"bool","nodeType":"ElementaryTypeName","src":"26069:4:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"26068:6:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"internal"},{"id":59965,"nodeType":"FunctionDefinition","src":"30800:311:110","nodes":[],"body":{"id":59964,"nodeType":"Block","src":"30930:181:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":59957,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"31009:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":59956,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31001:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":59955,"name":"address","nodeType":"ElementaryTypeName","src":"31001:7:110","typeDescriptions":{}}},"id":59958,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31001:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59959,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59944,"src":"31032:5:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":59960,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59946,"src":"31055:9:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59961,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59948,"src":"31082:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":59953,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"30959:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":59954,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"30975:8:110","memberName":"getStake","nodeType":"MemberAccess","referencedDeclaration":62570,"src":"30959:24:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address,address) view external returns (uint256)"}},"id":59962,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"30959:145:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":59952,"id":59963,"nodeType":"Return","src":"30940:164:110"}]},"documentation":{"id":59942,"nodeType":"StructuredDocumentation","src":"30712:83:110","text":"@notice Gets the stake for a given tuple (custodian, attester) at a given epoch"},"functionSelector":"7aa81c2a","implemented":true,"kind":"function","modifiers":[],"name":"getStake","nameLocation":"30809:8:110","parameters":{"id":59949,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59944,"mutability":"mutable","name":"epoch","nameLocation":"30835:5:110","nodeType":"VariableDeclaration","scope":59965,"src":"30827:13:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59943,"name":"uint256","nodeType":"ElementaryTypeName","src":"30827:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":59946,"mutability":"mutable","name":"custodian","nameLocation":"30858:9:110","nodeType":"VariableDeclaration","scope":59965,"src":"30850:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59945,"name":"address","nodeType":"ElementaryTypeName","src":"30850:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59948,"mutability":"mutable","name":"attester","nameLocation":"30885:8:110","nodeType":"VariableDeclaration","scope":59965,"src":"30877:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59947,"name":"address","nodeType":"ElementaryTypeName","src":"30877:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"30817:82:110"},"returnParameters":{"id":59952,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59951,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":59965,"src":"30921:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59950,"name":"uint256","nodeType":"ElementaryTypeName","src":"30921:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"30920:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":59983,"nodeType":"FunctionDefinition","src":"31211:198:110","nodes":[],"body":{"id":59982,"nodeType":"Block","src":"31335:74:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":59976,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58925,"src":"31361:17:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":59977,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31361:19:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":59978,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59968,"src":"31382:9:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":59979,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59970,"src":"31393:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":59975,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59965,"src":"31352:8:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) view returns (uint256)"}},"id":59980,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31352:50:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":59974,"id":59981,"nodeType":"Return","src":"31345:57:110"}]},"documentation":{"id":59966,"nodeType":"StructuredDocumentation","src":"31117:89:110","text":"@notice Gets the stake for a given tuple (custodian, attester) at the accepting epoch"},"functionSelector":"bb04bd2f","implemented":true,"kind":"function","modifiers":[],"name":"getStakeForAcceptingEpoch","nameLocation":"31220:25:110","parameters":{"id":59971,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59968,"mutability":"mutable","name":"custodian","nameLocation":"31263:9:110","nodeType":"VariableDeclaration","scope":59983,"src":"31255:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59967,"name":"address","nodeType":"ElementaryTypeName","src":"31255:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"},{"constant":false,"id":59970,"mutability":"mutable","name":"attester","nameLocation":"31290:8:110","nodeType":"VariableDeclaration","scope":59983,"src":"31282:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59969,"name":"address","nodeType":"ElementaryTypeName","src":"31282:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"31245:59:110"},"returnParameters":{"id":59974,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59973,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":59983,"src":"31326:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59972,"name":"uint256","nodeType":"ElementaryTypeName","src":"31326:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31325:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60036,"nodeType":"FunctionDefinition","src":"31543:484:110","nodes":[],"body":{"id":60035,"nodeType":"Block","src":"31654:373:110","nodes":[],"statements":[{"assignments":[59997],"declarations":[{"constant":false,"id":59997,"mutability":"mutable","name":"custodians","nameLocation":"31681:10:110","nodeType":"VariableDeclaration","scope":60035,"src":"31664:27:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":59995,"name":"address","nodeType":"ElementaryTypeName","src":"31664:7:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":59996,"nodeType":"ArrayTypeName","src":"31664:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":60005,"initialValue":{"arguments":[{"arguments":[{"id":60002,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"31755:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":60001,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"31747:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60000,"name":"address","nodeType":"ElementaryTypeName","src":"31747:7:110","typeDescriptions":{}}},"id":60003,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31747:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":59998,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"31694:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":59999,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31710:23:110","memberName":"getRegisteredCustodians","nodeType":"MemberAccess","referencedDeclaration":62652,"src":"31694:39:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":60004,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31694:76:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"31664:106:110"},{"assignments":[60007],"declarations":[{"constant":false,"id":60007,"mutability":"mutable","name":"totalStake","nameLocation":"31788:10:110","nodeType":"VariableDeclaration","scope":60035,"src":"31780:18:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60006,"name":"uint256","nodeType":"ElementaryTypeName","src":"31780:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60009,"initialValue":{"hexValue":"30","id":60008,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31801:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"31780:22:110"},{"body":{"id":60031,"nodeType":"Block","src":"31860:134:110","statements":[{"expression":{"id":60029,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60021,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60007,"src":"31929:10:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":60023,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59986,"src":"31952:5:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":60024,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59997,"src":"31959:10:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60026,"indexExpression":{"id":60025,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60011,"src":"31970:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"31959:13:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":60027,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59988,"src":"31974:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60022,"name":"getStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59965,"src":"31943:8:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address,address) view returns (uint256)"}},"id":60028,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"31943:40:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31929:54:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60030,"nodeType":"ExpressionStatement","src":"31929:54:110"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60017,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60014,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60011,"src":"31832:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":60015,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":59997,"src":"31836:10:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60016,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"31847:6:110","memberName":"length","nodeType":"MemberAccess","src":"31836:17:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"31832:21:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60032,"initializationExpression":{"assignments":[60011],"declarations":[{"constant":false,"id":60011,"mutability":"mutable","name":"i","nameLocation":"31825:1:110","nodeType":"VariableDeclaration","scope":60032,"src":"31817:9:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60010,"name":"uint256","nodeType":"ElementaryTypeName","src":"31817:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60013,"initialValue":{"hexValue":"30","id":60012,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"31829:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"31817:13:110"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60019,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"31855:3:110","subExpression":{"id":60018,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60011,"src":"31855:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60020,"nodeType":"ExpressionStatement","src":"31855:3:110"},"nodeType":"ForStatement","src":"31812:182:110"},{"expression":{"id":60033,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60007,"src":"32010:10:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":59992,"id":60034,"nodeType":"Return","src":"32003:17:110"}]},"documentation":{"id":59984,"nodeType":"StructuredDocumentation","src":"31415:64:110","text":"@notice Gets the stake for a given attester at a given epoch"},"functionSelector":"ba26513e","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStake","nameLocation":"31552:16:110","parameters":{"id":59989,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59986,"mutability":"mutable","name":"epoch","nameLocation":"31586:5:110","nodeType":"VariableDeclaration","scope":60036,"src":"31578:13:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59985,"name":"uint256","nodeType":"ElementaryTypeName","src":"31578:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":59988,"mutability":"mutable","name":"attester","nameLocation":"31609:8:110","nodeType":"VariableDeclaration","scope":60036,"src":"31601:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":59987,"name":"address","nodeType":"ElementaryTypeName","src":"31601:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"31568:55:110"},"returnParameters":{"id":59992,"nodeType":"ParameterList","parameters":[{"constant":false,"id":59991,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60036,"src":"31645:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":59990,"name":"uint256","nodeType":"ElementaryTypeName","src":"31645:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"31644:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60051,"nodeType":"FunctionDefinition","src":"32108:176:110","nodes":[],"body":{"id":60050,"nodeType":"Block","src":"32213:71:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":60045,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58925,"src":"32247:17:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60046,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32247:19:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":60047,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60039,"src":"32268:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60044,"name":"getAttesterStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60036,"src":"32230:16:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":60048,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32230:47:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60043,"id":60049,"nodeType":"Return","src":"32223:54:110"}]},"documentation":{"id":60037,"nodeType":"StructuredDocumentation","src":"32033:70:110","text":"@notice Gets the stake for a given attester at the accepting epoch"},"functionSelector":"491d0467","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterStakeForAcceptingEpoch","nameLocation":"32117:33:110","parameters":{"id":60040,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60039,"mutability":"mutable","name":"attester","nameLocation":"32168:8:110","nodeType":"VariableDeclaration","scope":60051,"src":"32160:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60038,"name":"address","nodeType":"ElementaryTypeName","src":"32160:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32150:32:110"},"returnParameters":{"id":60043,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60042,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60051,"src":"32204:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60041,"name":"uint256","nodeType":"ElementaryTypeName","src":"32204:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32203:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60072,"nodeType":"FunctionDefinition","src":"32361:287:110","nodes":[],"body":{"id":60071,"nodeType":"Block","src":"32474:174:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60065,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"32562:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":60064,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32554:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60063,"name":"address","nodeType":"ElementaryTypeName","src":"32554:7:110","typeDescriptions":{}}},"id":60066,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32554:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},{"id":60067,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60054,"src":"32595:5:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":60068,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60056,"src":"32618:9:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"},{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60061,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"32503:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":60062,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32519:17:110","memberName":"getCustodianStake","nodeType":"MemberAccess","referencedDeclaration":62616,"src":"32503:33:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (address,uint256,address) view external returns (uint256)"}},"id":60069,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32503:138:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60060,"id":60070,"nodeType":"Return","src":"32484:157:110"}]},"documentation":{"id":60052,"nodeType":"StructuredDocumentation","src":"32290:66:110","text":"@notice Gets the stake for a given custodian for a given epoch"},"functionSelector":"1de38fe1","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStake","nameLocation":"32370:17:110","parameters":{"id":60057,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60054,"mutability":"mutable","name":"epoch","nameLocation":"32405:5:110","nodeType":"VariableDeclaration","scope":60072,"src":"32397:13:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60053,"name":"uint256","nodeType":"ElementaryTypeName","src":"32397:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60056,"mutability":"mutable","name":"custodian","nameLocation":"32428:9:110","nodeType":"VariableDeclaration","scope":60072,"src":"32420:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60055,"name":"address","nodeType":"ElementaryTypeName","src":"32420:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"32387:56:110"},"returnParameters":{"id":60060,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60059,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60072,"src":"32465:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60058,"name":"uint256","nodeType":"ElementaryTypeName","src":"32465:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32464:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60121,"nodeType":"FunctionDefinition","src":"32654:607:110","nodes":[],"body":{"id":60120,"nodeType":"Block","src":"32736:525:110","nodes":[],"statements":[{"assignments":[60083],"declarations":[{"constant":false,"id":60083,"mutability":"mutable","name":"custodians","nameLocation":"32916:10:110","nodeType":"VariableDeclaration","scope":60120,"src":"32899:27:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60081,"name":"address","nodeType":"ElementaryTypeName","src":"32899:7:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60082,"nodeType":"ArrayTypeName","src":"32899:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"id":60091,"initialValue":{"arguments":[{"arguments":[{"id":60088,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"32990:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":60087,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"32982:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60086,"name":"address","nodeType":"ElementaryTypeName","src":"32982:7:110","typeDescriptions":{}}},"id":60089,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32982:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60084,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"32929:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":60085,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"32945:23:110","memberName":"getRegisteredCustodians","nodeType":"MemberAccess","referencedDeclaration":62652,"src":"32929:39:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":60090,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"32929:76:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"nodeType":"VariableDeclarationStatement","src":"32899:106:110"},{"assignments":[60093],"declarations":[{"constant":false,"id":60093,"mutability":"mutable","name":"totalStake","nameLocation":"33023:10:110","nodeType":"VariableDeclaration","scope":60120,"src":"33015:18:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60092,"name":"uint256","nodeType":"ElementaryTypeName","src":"33015:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60095,"initialValue":{"hexValue":"30","id":60094,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33036:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"33015:22:110"},{"body":{"id":60116,"nodeType":"Block","src":"33095:133:110","statements":[{"expression":{"id":60114,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60107,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60093,"src":"33164:10:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"+=","rightHandSide":{"arguments":[{"id":60109,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60074,"src":"33196:5:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"baseExpression":{"id":60110,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60083,"src":"33203:10:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60112,"indexExpression":{"id":60111,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60097,"src":"33214:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"33203:13:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60108,"name":"getCustodianStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60072,"src":"33178:17:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":60113,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33178:39:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33164:53:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60115,"nodeType":"ExpressionStatement","src":"33164:53:110"}]},"condition":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60103,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"id":60100,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60097,"src":"33067:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"<","rightExpression":{"expression":{"id":60101,"name":"custodians","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60083,"src":"33071:10:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"id":60102,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"33082:6:110","memberName":"length","nodeType":"MemberAccess","src":"33071:17:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33067:21:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"id":60117,"initializationExpression":{"assignments":[60097],"declarations":[{"constant":false,"id":60097,"mutability":"mutable","name":"i","nameLocation":"33060:1:110","nodeType":"VariableDeclaration","scope":60117,"src":"33052:9:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60096,"name":"uint256","nodeType":"ElementaryTypeName","src":"33052:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"id":60099,"initialValue":{"hexValue":"30","id":60098,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"33064:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"nodeType":"VariableDeclarationStatement","src":"33052:13:110"},"isSimpleCounterLoop":true,"loopExpression":{"expression":{"id":60105,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"nodeType":"UnaryOperation","operator":"++","prefix":false,"src":"33090:3:110","subExpression":{"id":60104,"name":"i","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60097,"src":"33090:1:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60106,"nodeType":"ExpressionStatement","src":"33090:3:110"},"nodeType":"ForStatement","src":"33047:181:110"},{"expression":{"id":60118,"name":"totalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60093,"src":"33244:10:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60078,"id":60119,"nodeType":"Return","src":"33237:17:110"}]},"functionSelector":"45367f23","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStake","nameLocation":"32663:13:110","parameters":{"id":60075,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60074,"mutability":"mutable","name":"epoch","nameLocation":"32694:5:110","nodeType":"VariableDeclaration","scope":60121,"src":"32686:13:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60073,"name":"uint256","nodeType":"ElementaryTypeName","src":"32686:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32676:29:110"},"returnParameters":{"id":60078,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60077,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60121,"src":"32727:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60076,"name":"uint256","nodeType":"ElementaryTypeName","src":"32727:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"32726:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60135,"nodeType":"FunctionDefinition","src":"33339:180:110","nodes":[],"body":{"id":60134,"nodeType":"Block","src":"33446:73:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":60129,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58925,"src":"33481:17:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60130,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33481:19:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},{"id":60131,"name":"custodian","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60123,"src":"33502:9:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"},{"typeIdentifier":"t_address","typeString":"address"}],"id":60128,"name":"getCustodianStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60072,"src":"33463:17:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$_t_address_$returns$_t_uint256_$","typeString":"function (uint256,address) view returns (uint256)"}},"id":60132,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33463:49:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60127,"id":60133,"nodeType":"Return","src":"33456:56:110"}]},"functionSelector":"d440116d","implemented":true,"kind":"function","modifiers":[],"name":"getCustodianStakeForAcceptingEpoch","nameLocation":"33348:34:110","parameters":{"id":60124,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60123,"mutability":"mutable","name":"custodian","nameLocation":"33400:9:110","nodeType":"VariableDeclaration","scope":60135,"src":"33392:17:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60122,"name":"address","nodeType":"ElementaryTypeName","src":"33392:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"33382:33:110"},"returnParameters":{"id":60127,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60126,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60135,"src":"33437:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60125,"name":"uint256","nodeType":"ElementaryTypeName","src":"33437:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33436:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60146,"nodeType":"FunctionDefinition","src":"33525:158:110","nodes":[],"body":{"id":60145,"nodeType":"Block","src":"33625:58:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[],"expression":{"argumentTypes":[],"id":60141,"name":"getAcceptingEpoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58925,"src":"33656:17:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$__$returns$_t_uint256_$","typeString":"function () view returns (uint256)"}},"id":60142,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33656:19:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_uint256","typeString":"uint256"}],"id":60140,"name":"getTotalStake","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60121,"src":"33642:13:110","typeDescriptions":{"typeIdentifier":"t_function_internal_view$_t_uint256_$returns$_t_uint256_$","typeString":"function (uint256) view returns (uint256)"}},"id":60143,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"33642:34:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60139,"id":60144,"nodeType":"Return","src":"33635:41:110"}]},"functionSelector":"14e38026","implemented":true,"kind":"function","modifiers":[],"name":"getTotalStakeForAcceptingEpoch","nameLocation":"33534:30:110","parameters":{"id":60136,"nodeType":"ParameterList","parameters":[],"src":"33564:2:110"},"returnParameters":{"id":60139,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60138,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60146,"src":"33612:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60137,"name":"uint256","nodeType":"ElementaryTypeName","src":"33612:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33611:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60159,"nodeType":"FunctionDefinition","src":"33689:155:110","nodes":[],"body":{"id":60158,"nodeType":"Block","src":"33785:59:110","nodes":[],"statements":[{"expression":{"id":60156,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60154,"name":"rewardPerAttestationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60364,"src":"33795:25:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60155,"name":"rewardPerPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60148,"src":"33823:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33795:42:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60157,"nodeType":"ExpressionStatement","src":"33795:42:110"}]},"functionSelector":"0d39f7f0","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60151,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58505,"src":"33767:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60152,"kind":"modifierInvocation","modifierName":{"id":60150,"name":"onlyRole","nameLocations":["33758:8:110"],"nodeType":"IdentifierPath","referencedDeclaration":39143,"src":"33758:8:110"},"nodeType":"ModifierInvocation","src":"33758:26:110"}],"name":"setRewardPerAttestationPoint","nameLocation":"33698:28:110","parameters":{"id":60149,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60148,"mutability":"mutable","name":"rewardPerPoint","nameLocation":"33735:14:110","nodeType":"VariableDeclaration","scope":60159,"src":"33727:22:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60147,"name":"uint256","nodeType":"ElementaryTypeName","src":"33727:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33726:24:110"},"returnParameters":{"id":60153,"nodeType":"ParameterList","parameters":[],"src":"33785:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60172,"nodeType":"FunctionDefinition","src":"33850:165:110","nodes":[],"body":{"id":60171,"nodeType":"Block","src":"33951:64:110","nodes":[],"statements":[{"expression":{"id":60169,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftHandSide":{"id":60167,"name":"rewardPerPostconfirmationPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60366,"src":"33961:30:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"Assignment","operator":"=","rightHandSide":{"id":60168,"name":"rewardPerPoint","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60161,"src":"33994:14:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"src":"33961:47:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"id":60170,"nodeType":"ExpressionStatement","src":"33961:47:110"}]},"functionSelector":"57342282","implemented":true,"kind":"function","modifiers":[{"arguments":[{"id":60164,"name":"COMMITMENT_ADMIN","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":58505,"src":"33933:16:110","typeDescriptions":{"typeIdentifier":"t_bytes32","typeString":"bytes32"}}],"id":60165,"kind":"modifierInvocation","modifierName":{"id":60163,"name":"onlyRole","nameLocations":["33924:8:110"],"nodeType":"IdentifierPath","referencedDeclaration":39143,"src":"33924:8:110"},"nodeType":"ModifierInvocation","src":"33924:26:110"}],"name":"setRewardPerPostconfirmationPoint","nameLocation":"33859:33:110","parameters":{"id":60162,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60161,"mutability":"mutable","name":"rewardPerPoint","nameLocation":"33901:14:110","nodeType":"VariableDeclaration","scope":60172,"src":"33893:22:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60160,"name":"uint256","nodeType":"ElementaryTypeName","src":"33893:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"33892:24:110"},"returnParameters":{"id":60166,"nodeType":"ParameterList","parameters":[],"src":"33951:0:110"},"scope":60258,"stateMutability":"nonpayable","virtual":false,"visibility":"public"},{"id":60189,"nodeType":"FunctionDefinition","src":"34093:157:110","nodes":[],"body":{"id":60188,"nodeType":"Block","src":"34189:61:110","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":60182,"name":"attesterRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60356,"src":"34206:20:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":60184,"indexExpression":{"id":60183,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60175,"src":"34227:5:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34206:27:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":60186,"indexExpression":{"id":60185,"name":"attester","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60177,"src":"34234:8:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34206:37:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60181,"id":60187,"nodeType":"Return","src":"34199:44:110"}]},"documentation":{"id":60173,"nodeType":"StructuredDocumentation","src":"34021:67:110","text":"@notice Gets the reward points for an attester in a given epoch"},"functionSelector":"6978ab12","implemented":true,"kind":"function","modifiers":[],"name":"getAttesterRewardPoints","nameLocation":"34102:23:110","parameters":{"id":60178,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60175,"mutability":"mutable","name":"epoch","nameLocation":"34134:5:110","nodeType":"VariableDeclaration","scope":60189,"src":"34126:13:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60174,"name":"uint256","nodeType":"ElementaryTypeName","src":"34126:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60177,"mutability":"mutable","name":"attester","nameLocation":"34149:8:110","nodeType":"VariableDeclaration","scope":60189,"src":"34141:16:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60176,"name":"address","nodeType":"ElementaryTypeName","src":"34141:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"34125:33:110"},"returnParameters":{"id":60181,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60180,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60189,"src":"34180:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60179,"name":"uint256","nodeType":"ElementaryTypeName","src":"34180:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34179:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60206,"nodeType":"FunctionDefinition","src":"34336:177:110","nodes":[],"body":{"id":60205,"nodeType":"Block","src":"34442:71:110","nodes":[],"statements":[{"expression":{"baseExpression":{"baseExpression":{"id":60199,"name":"postconfirmerRewardPoints","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60362,"src":"34459:25:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_uint256_$_$","typeString":"mapping(uint256 => mapping(address => uint256))"}},"id":60201,"indexExpression":{"id":60200,"name":"epoch","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60192,"src":"34485:5:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34459:32:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_uint256_$","typeString":"mapping(address => uint256)"}},"id":60203,"indexExpression":{"id":60202,"name":"postconfirmer","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60194,"src":"34492:13:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34459:47:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"functionReturnParameters":60198,"id":60204,"nodeType":"Return","src":"34452:54:110"}]},"documentation":{"id":60190,"nodeType":"StructuredDocumentation","src":"34260:71:110","text":"@notice Gets the reward points for a postconfirmer in a given epoch"},"functionSelector":"ed8a1d59","implemented":true,"kind":"function","modifiers":[],"name":"getPostconfirmerRewardPoints","nameLocation":"34345:28:110","parameters":{"id":60195,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60192,"mutability":"mutable","name":"epoch","nameLocation":"34382:5:110","nodeType":"VariableDeclaration","scope":60206,"src":"34374:13:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60191,"name":"uint256","nodeType":"ElementaryTypeName","src":"34374:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"},{"constant":false,"id":60194,"mutability":"mutable","name":"postconfirmer","nameLocation":"34397:13:110","nodeType":"VariableDeclaration","scope":60206,"src":"34389:21:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"},"typeName":{"id":60193,"name":"address","nodeType":"ElementaryTypeName","src":"34389:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"visibility":"internal"}],"src":"34373:38:110"},"returnParameters":{"id":60198,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60197,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60206,"src":"34433:7:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60196,"name":"uint256","nodeType":"ElementaryTypeName","src":"34433:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34432:9:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60222,"nodeType":"FunctionDefinition","src":"34600:177:110","nodes":[],"body":{"id":60221,"nodeType":"Block","src":"34686:91:110","nodes":[],"statements":[{"expression":{"arguments":[{"arguments":[{"id":60217,"name":"this","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-28,"src":"34763:4:110","typeDescriptions":{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_contract$_PCP_$60258","typeString":"contract PCP"}],"id":60216,"isConstant":false,"isLValue":false,"isPure":true,"lValueRequested":false,"nodeType":"ElementaryTypeNameExpression","src":"34755:7:110","typeDescriptions":{"typeIdentifier":"t_type$_t_address_$","typeString":"type(address)"},"typeName":{"id":60215,"name":"address","nodeType":"ElementaryTypeName","src":"34755:7:110","typeDescriptions":{}}},"id":60218,"isConstant":false,"isLValue":false,"isPure":false,"kind":"typeConversion","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34755:13:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}}],"expression":{"argumentTypes":[{"typeIdentifier":"t_address","typeString":"address"}],"expression":{"id":60213,"name":"stakingContract","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60268,"src":"34703:15:110","typeDescriptions":{"typeIdentifier":"t_contract$_IMovementStaking_$62796","typeString":"contract IMovementStaking"}},"id":60214,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34719:35:110","memberName":"getStakedAttestersForAcceptingEpoch","nodeType":"MemberAccess","referencedDeclaration":62744,"src":"34703:51:110","typeDescriptions":{"typeIdentifier":"t_function_external_view$_t_address_$returns$_t_array$_t_address_$dyn_memory_ptr_$","typeString":"function (address) view external returns (address[] memory)"}},"id":60219,"isConstant":false,"isLValue":false,"isPure":false,"kind":"functionCall","lValueRequested":false,"nameLocations":[],"names":[],"nodeType":"FunctionCall","src":"34703:66:110","tryCall":false,"typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[] memory"}},"functionReturnParameters":60212,"id":60220,"nodeType":"Return","src":"34696:73:110"}]},"documentation":{"id":60207,"nodeType":"StructuredDocumentation","src":"34519:76:110","text":"@notice Gets the attesters who have stake in the current accepting epoch"},"functionSelector":"aa0d6fcd","implemented":true,"kind":"function","modifiers":[],"name":"getStakedAttestersForAcceptingEpoch","nameLocation":"34609:35:110","parameters":{"id":60208,"nodeType":"ParameterList","parameters":[],"src":"34644:2:110"},"returnParameters":{"id":60212,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60211,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60222,"src":"34668:16:110","stateVariable":false,"storageLocation":"memory","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_memory_ptr","typeString":"address[]"},"typeName":{"baseType":{"id":60209,"name":"address","nodeType":"ElementaryTypeName","src":"34668:7:110","stateMutability":"nonpayable","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"id":60210,"nodeType":"ArrayTypeName","src":"34668:9:110","typeDescriptions":{"typeIdentifier":"t_array$_t_address_$dyn_storage_ptr","typeString":"address[]"}},"visibility":"internal"}],"src":"34667:18:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"public"},{"id":60240,"nodeType":"FunctionDefinition","src":"34783:133:110","nodes":[],"body":{"id":60239,"nodeType":"Block","src":"34849:67:110","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60237,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":60229,"name":"commitments","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60302,"src":"34866:11:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$_$","typeString":"mapping(uint256 => mapping(address => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60231,"indexExpression":{"id":60230,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60224,"src":"34878:6:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34866:19:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_address_$_t_struct$_SuperBlockCommitment_$60291_storage_$","typeString":"mapping(address => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60234,"indexExpression":{"expression":{"id":60232,"name":"msg","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":-15,"src":"34886:3:110","typeDescriptions":{"typeIdentifier":"t_magic_message","typeString":"msg"}},"id":60233,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"memberLocation":"34890:6:110","memberName":"sender","nodeType":"MemberAccess","src":"34886:10:110","typeDescriptions":{"typeIdentifier":"t_address","typeString":"address"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"34866:31:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":60235,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"34898:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"34866:38:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":60236,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"34908:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"34866:43:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":60228,"id":60238,"nodeType":"Return","src":"34859:50:110"}]},"functionSelector":"e4a3fb74","implemented":true,"kind":"function","modifiers":[],"name":"isCommitted","nameLocation":"34792:11:110","parameters":{"id":60225,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60224,"mutability":"mutable","name":"height","nameLocation":"34812:6:110","nodeType":"VariableDeclaration","scope":60240,"src":"34804:14:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60223,"name":"uint256","nodeType":"ElementaryTypeName","src":"34804:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34803:16:110"},"returnParameters":{"id":60228,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60227,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60240,"src":"34843:4:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":60226,"name":"bool","nodeType":"ElementaryTypeName","src":"34843:4:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34842:6:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"external"},{"id":60257,"nodeType":"FunctionDefinition","src":"34922:180:110","nodes":[],"body":{"id":60256,"nodeType":"Block","src":"34992:110:110","nodes":[],"statements":[{"expression":{"commonType":{"typeIdentifier":"t_uint256","typeString":"uint256"},"id":60254,"isConstant":false,"isLValue":false,"isPure":false,"lValueRequested":false,"leftExpression":{"expression":{"baseExpression":{"baseExpression":{"id":60247,"name":"versionedPostconfirmedSuperBlocks","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60348,"src":"35009:33:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$60291_storage_$_$","typeString":"mapping(uint256 => mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref))"}},"id":60249,"indexExpression":{"id":60248,"name":"postconfirmedSuperBlocksVersion","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60350,"src":"35043:31:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35009:66:110","typeDescriptions":{"typeIdentifier":"t_mapping$_t_uint256_$_t_struct$_SuperBlockCommitment_$60291_storage_$","typeString":"mapping(uint256 => struct PCPStorage.SuperBlockCommitment storage ref)"}},"id":60251,"indexExpression":{"id":60250,"name":"height","nodeType":"Identifier","overloadedDeclarations":[],"referencedDeclaration":60242,"src":"35076:6:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"nodeType":"IndexAccess","src":"35009:74:110","typeDescriptions":{"typeIdentifier":"t_struct$_SuperBlockCommitment_$60291_storage","typeString":"struct PCPStorage.SuperBlockCommitment storage ref"}},"id":60252,"isConstant":false,"isLValue":true,"isPure":false,"lValueRequested":false,"memberLocation":"35084:6:110","memberName":"height","nodeType":"MemberAccess","referencedDeclaration":60286,"src":"35009:81:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"nodeType":"BinaryOperation","operator":"!=","rightExpression":{"hexValue":"30","id":60253,"isConstant":false,"isLValue":false,"isPure":true,"kind":"number","lValueRequested":false,"nodeType":"Literal","src":"35094:1:110","typeDescriptions":{"typeIdentifier":"t_rational_0_by_1","typeString":"int_const 0"},"value":"0"},"src":"35009:86:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"functionReturnParameters":60246,"id":60255,"nodeType":"Return","src":"35002:93:110"}]},"functionSelector":"ec23ec2e","implemented":true,"kind":"function","modifiers":[],"name":"isPostconfirmed","nameLocation":"34931:15:110","parameters":{"id":60243,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60242,"mutability":"mutable","name":"height","nameLocation":"34955:6:110","nodeType":"VariableDeclaration","scope":60257,"src":"34947:14:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"},"typeName":{"id":60241,"name":"uint256","nodeType":"ElementaryTypeName","src":"34947:7:110","typeDescriptions":{"typeIdentifier":"t_uint256","typeString":"uint256"}},"visibility":"internal"}],"src":"34946:16:110"},"returnParameters":{"id":60246,"nodeType":"ParameterList","parameters":[{"constant":false,"id":60245,"mutability":"mutable","name":"","nameLocation":"-1:-1:-1","nodeType":"VariableDeclaration","scope":60257,"src":"34986:4:110","stateVariable":false,"storageLocation":"default","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"},"typeName":{"id":60244,"name":"bool","nodeType":"ElementaryTypeName","src":"34986:4:110","typeDescriptions":{"typeIdentifier":"t_bool","typeString":"bool"}},"visibility":"internal"}],"src":"34985:6:110"},"scope":60258,"stateMutability":"view","virtual":false,"visibility":"external"}],"abstract":false,"baseContracts":[{"baseName":{"id":58493,"name":"Initializable","nameLocations":["561:13:110"],"nodeType":"IdentifierPath","referencedDeclaration":39702,"src":"561:13:110"},"id":58494,"nodeType":"InheritanceSpecifier","src":"561:13:110"},{"baseName":{"id":58495,"name":"BaseSettlement","nameLocations":["576:14:110"],"nodeType":"IdentifierPath","referencedDeclaration":60525,"src":"576:14:110"},"id":58496,"nodeType":"InheritanceSpecifier","src":"576:14:110"},{"baseName":{"id":58497,"name":"PCPStorage","nameLocations":["592:10:110"],"nodeType":"IdentifierPath","referencedDeclaration":60371,"src":"592:10:110"},"id":58498,"nodeType":"InheritanceSpecifier","src":"592:10:110"},{"baseName":{"id":58499,"name":"IPCP","nameLocations":["604:4:110"],"nodeType":"IdentifierPath","referencedDeclaration":60470,"src":"604:4:110"},"id":58500,"nodeType":"InheritanceSpecifier","src":"604:4:110"}],"canonicalName":"PCP","contractDependencies":[],"contractKind":"contract","fullyImplemented":true,"linearizedBaseContracts":[60258,60470,60371,60525,39884,42904,39448,41211,46535,41590,40716,39702],"name":"PCP","nameLocation":"554:3:110","scope":60259,"usedErrors":[39465,39468,39729,39734,41517,41520,43099,43112,44330,44623,58513,58516,58519,58522,60393,60395],"usedEvents":[39473,41529,41538,41547,42852,60383,60391]}],"license":"UNLICENSED"},"id":110} \ No newline at end of file From 11e844e3d40b8c2d636e8e6838977b277ba94915 Mon Sep 17 00:00:00 2001 From: apenzk Date: Fri, 21 Mar 2025 12:42:41 +0100 Subject: [PATCH 23/25] edits --- .vscode/spellright.dict | 1 + sdk/cli/ffs-client/README.md | 6 ++---- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/.vscode/spellright.dict b/.vscode/spellright.dict index d210eacf..919ff8d5 100644 --- a/.vscode/spellright.dict +++ b/.vscode/spellright.dict @@ -1,4 +1,5 @@ abis Fastconfirmation +preimage testnet unstaking \ No newline at end of file diff --git a/sdk/cli/ffs-client/README.md b/sdk/cli/ffs-client/README.md index 607c2cf0..386ac067 100644 --- a/sdk/cli/ffs-client/README.md +++ b/sdk/cli/ffs-client/README.md @@ -11,16 +11,14 @@ The `ffs-client` relies on the implementation of the following components in eac ### Some test commands -Post a commitment to an MCR implementation: - -Post using a hex-encoded commitment +Post a commitment using a hex-encoded commitment ```bash cargo run --bin ffs-client -- protocol mcr post-commitment --commitment-hex cargo run --bin ffs-client -- protocol pcp post-commitment --commitment-hex ``` -Post using a preimage string +Post a commitment using a preimage string ```bash cargo run --bin ffs-client -- protocol mcr post-commitment --preimage-string From 5e56553dd78145545920d5c7c76966eec9bf080c Mon Sep 17 00:00:00 2001 From: apenzk Date: Fri, 21 Mar 2025 12:57:56 +0100 Subject: [PATCH 24/25] cargo --- Cargo.lock | 110 ++++++++++++++--------------------------------------- Cargo.toml | 4 +- 2 files changed, 30 insertions(+), 84 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 5333e235..d19e36e3 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -136,9 +136,9 @@ dependencies = [ [[package]] name = "alloy-core" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ca1380cc3c81b83d5234865779494970c83b5893b423c59cdd68c3cd1ed0b671" +checksum = "d23ccdb29eedfa1d83f32efbc958d0944e6928e252295dd5eafc516ed57f3a0a" dependencies = [ "alloy-dyn-abi", "alloy-json-abi", @@ -149,9 +149,9 @@ dependencies = [ [[package]] name = "alloy-dyn-abi" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7078bef2bc353c1d1a97b44981d0186198be320038fbfbb0b37d1dd822a555d3" +checksum = "ada55b5ab26624766bb8c65f72516dee93eaf28d5d87fc18ff4324cd8c2a948d" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -247,9 +247,9 @@ dependencies = [ [[package]] name = "alloy-json-abi" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec80745c33797e8baf547a8cfeb850e60d837fe9b9e67b3f579c1fcd26f527e9" +checksum = "df4054f177d1600f17e2bc152f6a927592641b19861e6005cc51bdf7d4fa27a6" dependencies = [ "alloy-primitives", "alloy-sol-type-parser", @@ -329,9 +329,9 @@ dependencies = [ [[package]] name = "alloy-primitives" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eacedba97e65cdc7ab592f2b22ef5d3ab8d60b2056bc3a6e6363577e8270ec6f" +checksum = "7283185baefbe66136649dc316c9dcc6f0e9f1d635ae19783615919f83bc298a" dependencies = [ "alloy-rlp", "bytes", @@ -587,9 +587,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3637022e781bc73a9e300689cd91105a0e6be00391dd4e2110a71cc7e9f20a94" +checksum = "f99b007e002f1082b28827cc47d9c72562d412a98c06f29aa438118ff3036c43" dependencies = [ "alloy-sol-macro-expander", "alloy-sol-macro-input", @@ -601,9 +601,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-expander" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3b9bd22d0bba90e40f40c625c33d39afb7d62b22192476a2ce1dcf8409dce880" +checksum = "6c0a9cb9b1afbcd3325e0fff9fdf98e6d095643fae9e5584e80597f0b79b6d6e" dependencies = [ "alloy-json-abi", "alloy-sol-macro-input", @@ -620,9 +620,9 @@ dependencies = [ [[package]] name = "alloy-sol-macro-input" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "05ae4646e8123ec2fd10f9c22e361ffe4365c42811431829c2eabae528546bcc" +checksum = "530c4863e707b95f99b37792cdfa94d30004ec552aed41e200a1d9264d44e669" dependencies = [ "alloy-json-abi", "const-hex", @@ -638,9 +638,9 @@ dependencies = [ [[package]] name = "alloy-sol-type-parser" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488a747fdcefeec5c1ed5aa9e08becd775106777fdeae2a35730729fc8a95910" +checksum = "74b210dd863afa9da93c488601a1f23bee1e3ce47e15519582320c205645a7a0" dependencies = [ "serde", "winnow", @@ -648,9 +648,9 @@ dependencies = [ [[package]] name = "alloy-sol-types" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "767957235807b021126dca1598ac3ef477007eace07961607dc5f490550909c7" +checksum = "4f5ff802859e2797d022dc812b5b4ee40d829e0fb446c269a87826c7f0021976" dependencies = [ "alloy-json-abi", "alloy-primitives", @@ -1601,9 +1601,9 @@ dependencies = [ [[package]] name = "cc" -version = "1.2.16" +version = "1.2.17" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "be714c154be609ec7f5dad223a33bf1482fff90472de28f7362806e6d4832b8c" +checksum = "1fcb57c740ae1daf453ae85f16e37396f672b039e00d9d866e07ddb24e328e3a" dependencies = [ "jobserver", "libc", @@ -4296,7 +4296,7 @@ dependencies = [ "alloy", "alloy-contract", "alloy-network", - "alloy-primitives 0.7.7", + "alloy-primitives", "alloy-provider", "alloy-rpc-types", "alloy-signer", @@ -4307,7 +4307,6 @@ dependencies = [ "async-stream", "async-trait", "clap", - "dotenv", "ffs-environment", "futures", "hex", @@ -4328,57 +4327,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "pcp-protocol-client-core-eth" -version = "0.0.1" -dependencies = [ - "alloy", - "alloy-contract", - "alloy-network", - "alloy-primitives 0.7.7", - "alloy-provider", - "alloy-rpc-types", - "alloy-signer", - "alloy-sol-types", - "alloy-transport", - "alloy-transport-ws", - "anyhow", - "async-stream", - "async-trait", - "clap", - "futures", - "pcp-protocol-client-core-util", - "pcp-types", - "secure-signer", - "secure-signer-eth", - "secure-signer-loader", - "serde", - "serde_json", - "thiserror 1.0.69", - "tokio", - "tokio-stream", - "tracing", - "tracing-subscriber", -] - -[[package]] -name = "pcp-protocol-client-core-util" -version = "0.0.1" -dependencies = [ - "pcp-types", - "serde", - "thiserror 1.0.69", - "tokio", - "tokio-stream", -] - -[[package]] -name = "pcp-types" -version = "0.0.1" -dependencies = [ - "serde", -] - [[package]] name = "pcp-protocol-client-core-eth" version = "0.0.1" @@ -5774,9 +5722,9 @@ dependencies = [ [[package]] name = "syn-solidity" -version = "0.8.23" +version = "0.8.24" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d975606bae72d8aad5b07d9342465e123a2cccf53a5a735aedf81ca92a709ecb" +checksum = "36dbbf0d465ab9fdfea3093e755ae8839bdc1263dbe18d35064d02d6060f949e" dependencies = [ "paste", "proc-macro2", @@ -5824,9 +5772,9 @@ checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369" [[package]] name = "tempfile" -version = "3.19.0" +version = "3.19.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "488960f40a3fd53d72c2a29a58722561dee8afdd175bd88e3db4677d7b2ba600" +checksum = "7437ac7763b9b123ccf33c338a5cc1bac6f69b45a136c19bdd8a65e3916435bf" dependencies = [ "fastrand", "getrandom 0.3.2", @@ -7017,18 +6965,18 @@ dependencies = [ [[package]] name = "zstd-safe" -version = "7.2.3" +version = "7.2.4" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f3051792fbdc2e1e143244dc28c60f73d8470e93f3f9cbd0ead44da5ed802722" +checksum = "8f49c4d5f0abb602a93fb8736af2a4f4dd9512e36f7f570d66e65ff867ed3b9d" dependencies = [ "zstd-sys", ] [[package]] name = "zstd-sys" -version = "2.0.14+zstd.1.5.7" +version = "2.0.15+zstd.1.5.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8fb060d4926e4ac3a3ad15d864e99ceb5f343c6b34f5bd6d81ae6ed417311be5" +checksum = "eb81183ddd97d0c74cedf1d50d85c8d08c1b8b68ee863bdee9e706eedba1a237" dependencies = [ "cc", "pkg-config", diff --git a/Cargo.toml b/Cargo.toml index af2975a3..a67744e1 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -108,6 +108,7 @@ hex = { version = "0.4.3", default-features = false, features = [ "alloc", "serde", ] } +sha3 = "0.10" zip = { version = "2.4.2", features = ["flate2"] } walkdir = "2.3.2" tempfile = "3.5.0" @@ -176,9 +177,6 @@ commander = { path = "util/commander" } dot-movement = { git = "https://github.com/movementlabsxyz/movement.git", branch = "main" } movement-types = { git = "https://github.com/movementlabsxyz/movement.git", branch = "main" } -hex = "0.4" -sha3 = "0.10" - [workspace.lints.clippy] debug_assert_with_mut_call = "deny" inefficient_to_string = "deny" From c63ac3d27e7120c87d4df156d81575bb2ddc4cf4 Mon Sep 17 00:00:00 2001 From: apenzk Date: Fri, 21 Mar 2025 15:16:48 +0100 Subject: [PATCH 25/25] align with main --- protocol/pcp/cli/client/src/cli/mod.rs | 88 +------------------------- 1 file changed, 3 insertions(+), 85 deletions(-) diff --git a/protocol/pcp/cli/client/src/cli/mod.rs b/protocol/pcp/cli/client/src/cli/mod.rs index a99ae6c1..79a9dd0a 100644 --- a/protocol/pcp/cli/client/src/cli/mod.rs +++ b/protocol/pcp/cli/client/src/cli/mod.rs @@ -1,12 +1,6 @@ pub mod eth; pub mod post_commitment; use clap::{Parser, Subcommand}; -use pcp_protocol_client_core_eth::config::Config; -use pcp_protocol_client_core_util::PcpClientOperations; -use pcp_types::block_commitment::{SuperBlockCommitment, Commitment, Id}; -use sha3::{Digest, Keccak256}; -use secure_signer_loader::identifiers::SignerIdentifier; -use secure_signer_loader::identifiers::local::Local; /// The `pcp-protocol-client` CLI. #[derive(Parser)] @@ -23,21 +17,8 @@ pub enum PcpProtocolClientSubcommand { Run, #[clap(subcommand)] Eth(eth::Eth), - /// Post a commitment to a PCP implementation - PostCommitment(PostCommitmentArgs), -} - -#[derive(clap::Args)] -pub struct PostCommitmentArgs { - /// Hex-encoded commitment - #[clap(long, conflicts_with = "preimage_string", required_unless_present = "preimage_string")] - commitment_hex: Option, - - /// String to be hashed into a commitment - #[clap(long, conflicts_with = "commitment_hex", required_unless_present = "commitment_hex")] - preimage_string: Option, /// Post a commitment to an PCP implementation - // PostCommitment(post_commitment::PostCommitment), + PostCommitment(post_commitment::PostCommitment), } /// Implement the `From` trait for `PcpProtocolClient` to convert it into a `PcpProtocolClientSubcommand`. @@ -64,73 +45,10 @@ impl PcpProtocolClientSubcommand { println!("pcp-protocol-client is under development. Please check back later."); } PcpProtocolClientSubcommand::Eth(eth) => eth.execute().await?, - PcpProtocolClientSubcommand::PostCommitment(args) => { - self.handle_post_commitment(args).await?; + PcpProtocolClientSubcommand::PostCommitment(post_commitment) => { + post_commitment.execute().await? } } Ok(()) } - - /// Handle the post commitment command. - async fn handle_post_commitment(&self, args: &PostCommitmentArgs) -> Result<(), anyhow::Error> { - let commitment = self.create_commitment(args)?; - - // Get config and post commitment - let config = get_config()?; - println!("Config: {:?}", config); - let client = config.build().await?; - println!("Starting post commitment process..."); - client.post_block_commitment(commitment).await?; - println!("Successfully posted commitment"); - - Ok(()) - } - - /// Create a commitment from the given arguments. - fn create_commitment(&self, args: &PostCommitmentArgs) -> Result { - if let Some(hex) = &args.commitment_hex { - // Parse hex commitment - let bytes = hex::decode(hex)?; - let bytes_len = bytes.len(); - Ok(SuperBlockCommitment::new( - 0, // height - Id::new([0; 32]), // block id - Commitment::new(bytes.try_into() - .map_err(|_| anyhow::anyhow!( - "Invalid commitment length. Expected 32 bytes (64 hex characters), got {} bytes ({} hex characters)", - bytes_len, - bytes_len * 2 - ))?) - )) - } else if let Some(preimage) = &args.preimage_string { - // Hash preimage to get commitment - let mut hasher = Keccak256::new(); - hasher.update(preimage.as_bytes()); - let result = hasher.finalize(); - Ok(SuperBlockCommitment::new( - 0, // height - Id::new([0; 32]), // block id - Commitment::new(result.into()), - )) - } else { - unreachable!("clap ensures one option is present") - } - } -} - -/// Get the config for the PCP client. -fn get_config() -> Result { - let config = Config::new( - "0x1234567890123456789012345678901234567890".to_string(), // PCP contract address - "http://localhost:8545".to_string(), // RPC URL - "ws://localhost:8546".to_string(), // WS URL - 1, // Chain ID - SignerIdentifier::Local(Local { - private_key_hex_bytes: "0123456789abcdef0123456789abcdef0123456789abcdef0123456789abcdef".to_string(), - }), - false, // Run commitment admin mode - 100000, // Gas limit - 3, // Transaction send retries - ); - Ok(config) }